B. N Bershad @ Washington Univ
Proceedings of the Fifteenth ACM Symposium on Operating System Principles, 1996
![]() |
How to make OS extensible to the needs of applications |
![]() |
How to deal with the three-way tension between extensibility, safety, and performance |
![]() |
IPC
|
||||||||||||||||
![]() |
Micro-kernel approach
|
||||||||||||||||
![]() |
Dynamic binding (like DLL) or Upcall (like scheduler activation)
|
||||||||||||||||
![]() |
SPIN solution - event driven
|
![]() |
Modula-3
|
![]() |
The ways extension can be used
|
||||||||||||||||||||||
![]() |
Extension Model
|
||||||||||||||||||||||
![]() |
Event
|
||||||||||||||||||||||
![]() |
Handler
|
||||||||||||||||||||||
![]() |
Guard to extension
|
||||||||||||||||||||||
![]() |
Default handler's control on handlers
|
||||||||||||||||||||||
![]() |
Example: Syscall
|
![]() |
Capabilities
|
![]() |
Protection Domains
|
||||||||||||||||||||||||||||||||||||||||||
![]() |
Interaction between exporter, name-server, and importer is done using procedure calls |
![]() |
Questions:
|
||||||
![]() |
Authorizer
|
||||||
![]() |
Who can raise an event? = Who can call the procedure? = Protection domain issue
|
||||||
![]() |
Who can handle an event or an instance of it? = Who can implement the procedure and overrides or augment the original one? = Protection domain issue, and
|
![]() |
A handler which does not respond promptly can block the event raiser or other handlers |
![]() |
Expensive solution: asynchronous invocation of handler |
![]() |
Cheap solution: timeout mechanism |
![]() |
Three objects are provided so that extension can define its own virtual memory system using those objects
|
||||||||||||||||||||||
![]() |
Note pink procedures are events raised by these object, i.e, extensible |
||||||||||||||||||||||
![]() |
Physical address -- physical memory object
|
||||||||||||||||||||||
![]() |
Virtual address
|
||||||||||||||||||||||
![]() |
Translation
|
||||||||||||||||||||||
![]() |
An extension which implements Unix address semantics
|
![]() |
Previous approaches
|
||||||||||||
![]() |
SPIN provides strand object and user scheduler or thread package can schedule these objects |
||||||||||||
![]() |
Actual binding of strands to processors and synchronization of strands are done by kernel for safety reason. Reasonable! Then user scheduler or thread package gives hints to the kernel. Right? |
||||||||||||
![]() |
Strand object
|
![]() |
Great idea! Safety is, however, questionalble |