R. S. Fabry @ UC-Berkeley
Communications of the ACM, July 1974, pages 403-412
![]() |
Capability:
absolute address of and access permission for an object
|
||||||||
![]() |
Capability as a protection mechanism has been discussed before, e.g., HYDRA | ||||||||
![]() |
In
this paper capability as an addressing scheme is discussed
|
||||||||
![]() |
Segmenting is a good mechanism to address and share objects among processes | ||||||||
![]() |
Segments,
however, are referenced by a virtual address, which is process-specific:
|
||||||||
![]() |
The Problem of Shared Segment References
|
![]() |
We need a scheme in which objects are addressed in a process-independent way and still relocatable |
![]() |
Make shared segments referenced by the same way (such as the same seg #) by all processes sharing them | ||
![]() |
Segment
numbers of shared segments should be assigned centrally
|
||
![]() |
Burrough
System takes this approach
|
![]() |
Introduce
one more level of indirection: See Fig 4
|
||||||||
![]() |
Linkage segment is dynamically created when the process executes the shared function first time | ||||||||
![]() |
Cons
|
![]() |
Segment table per the pair of (process, function) | ||||
![]() |
Segment numbers appearing in a function index into the segment table of (the process, the function) | ||||
![]() |
Cons
|
![]() |
Use capabilities (= absolute address) to address anything | ||||
![]() |
Process
dependent object (data objects in Fig 6) can be correctly addressed by
loading the absolute address into the predefined register--actually
hard-coded in the program: register 0 in Fig 6
|
||||
![]() |
Process independent object (= shared object) can be addressed by simply hard code the address |
![]() |
Multics's full path name is a kind of absolute address, but cumbersome because it is variable size |
![]() |
Lack of absolute address is one source of inefficiency in terms of linking cost and programming efforts |
![]() |
Integrated
solution is required
|
![]() |
Because
capabilities contains access control, they should be protected from user program creation and modification
|
||||||||||||||
![]() |
Two approaches: Tagged & Partition | ||||||||||||||
![]() |
Tagged
Approach
|
||||||||||||||
![]() |
Partition
Approach
|
![]() |
To
users, capability is just an address
|
||||||||||||||||||||||||||
![]() |
The capability, however, given by user program should be translated into physical address! | ||||||||||||||||||||||||||
![]() |
Hardware
suggested
|
![]() |
When
segments are allocated in terms of "natural" units for the
problem, segments become fine-grained enough and mostly smaller than page size
|
![]() |
Instruction set should be extended so that capability manipulation may be allowed as that of ordinary addresses does | ||||
![]() |
enter
instruction suggested
|
||||
![]() |
enter
access permission also suggested
|
![]() |
Because
the capability is embedded into each subroutine, using a single stack for
a process is not adequate
|
![]() |
Pros: Recognize the limits of the segment system--sharing segments in relocation system, which is still true | ||||||
![]() |
Cons:
|