throbber
IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.5, MAY 1986
`
`635
`
`Privilege Transfer and Revocation
`in a Port-Based System
`
`KRITHIVASAN RAMAMRITHAM, DAVID STEMPLE, MEMBER,
`STEPHEN VINTER
`
`IEEE, DAVID A. BRIGGS, AND
`
`Abstract-Gutenberg is a port-based operating system being de(cid:173)
`signed to study protection issues in distributed systems. In the Guten(cid:173)
`berg system, all shared resources are viewed as protected objects and
`hence can be accessed only via specific operations defined on them.
`Processes communicate and access objects through the use of ports.
`Each port is associated with an abstract data type operation and can
`be created by a process only if the process has the capability to execute
`the operation on the type. Thus, a port represents the privilege of the
`port's client process to request a service (an abstract data type opera(cid:173)
`tion) provided by the port's server process (the type's manager). Ca(cid:173)
`pabilities to create ports for requesting operations are contained in a
`capability directory, which is navigated by processes to gain these ca(cid:173)
`pabilities.
`Privilege transfer is a means of providing servers access to the re(cid:173)
`sources they need to perform their services. In Gutenberg, privilege
`transfer is accomplished by allowing access to subdirectories of the ca(cid:173)
`pability directory and by passing capabilities, including port access ca(cid:173)
`pabilities, to processes via ports. It should be possible to revoke trans(cid:173)
`ferred privileges when breaches of trust are detected or suspected, when
`a period of time has passed beyond which the distributor of a privilege
`does not want the privilege shared, or when an error has been detected.
`Transfer and revocation of privileges in Gutenberg is the subject of
`this paper. In particular, we describe the types of privileges in Guten(cid:173)
`berg, discuss the mechanisms provided for the transfer and revocation
`of different types of privileges, and sketch the means for handling ex(cid:173)
`ceptions during privilege transfer.
`
`Index Terms-Interprocess communication, operating systems,
`privilege transfer, protection, revocation.
`
`I.
`
`INTRODUCTION
`
`L ARGE software systems are best organized by break(cid:173)
`
`ing them down into modules which communicate in
`limited ways and whose privileges are restricted to those
`needed to perform the modules' designated services. One
`way of restricting the privileges of an executing module
`is for the initiator of the module to explicitly supply the
`privileges at the time of module initiation. Another way
`is for the module to receive privileges during execution
`along communication channels connecting it to its com(cid:173)
`munication partners. Other methods include the granting
`of privileges, to the module, based on the user (an entity
`
`Manuscript received October 31, 1983; revised September 28, 1984.
`This work was supported in part by the National Science Foundation under
`Grants MCS 82-02586, DCR-8403097, and DCR-8500332.
`K. Ramamritham and D. Stemple are with the Department of Computer
`and Information Science, University of Massachusetts, Amherst, MA
`01003.
`D. A. Briggs is with the Department of Mathematics and Computer Sci(cid:173)
`ence, University of Southern Maine, Portland, ME 04104.
`S. Vinter is with BBN Laboratories, Cambridge, MA 02238.
`IEEE Log Number 8607939.
`
`external to the system) on whose behalf the module is
`being initiated. In this paper, we are concerned mainly
`with the first two methods of explicit privilege transfer,
`i.e., during module initiation and as a part of interprocess
`communication.
`In object-oriented systems, resources are structured as
`objects which can be accessed only via the operations de(cid:173)
`fined on them. In such systems, the privileges of a process
`specify the objects that it can access and the operations
`that it is allowed to perform on them. A protection scheme
`permits a module to perform operations on a specified ob(cid:173)
`ject only if the module has the appropriate privilege. Ob(cid:173)
`ject-oriented privilege transfer refers to mechanisms in
`which privileges transferred are expressed in terms of op(cid:173)
`erations on specific objects. Such mechanisms are pro(cid:173)
`vided in several systems [1], [5], [16].
`In this paper, we deal with the transfer of privileges in
`the Gutenberg operating system [8], [9], [11], which uses
`an object-oriented protection scheme to control the inter(cid:173)
`action of modules represented by processes. Gutenberg is
`also a port-based system in that all communication be(cid:173)
`tween processes, including process initiation, is accom(cid:173)
`plished using ports.
`Although not always provided by programming lan(cid:173)
`guages or operating systems, the ability to revoke trans(cid:173)
`ferred privileges is often useful. Revocation is appropri(cid:173)
`ate, for instance, when a breach of trust has been detected
`or is suspected, where a period of time has elapsed be(cid:173)
`yond which it is not desired to share the transferred priv(cid:173)
`ilege, and where recovery from an error requires the re(cid:173)
`vocation of a transferred privilege. Hence, Gutenberg
`provides for the revocation of transferred privileges. One
`of the assumptions we have made in designing the revo(cid:173)
`cation mechanism is that the occasions for revocation are
`exceptional and infrequent as opposed to the frequent need
`for transferring privileges; thus, mechanisms designed for
`revocation should not unduly complicate nor slow down
`the transfer mechanism in situations where it is known
`that the transferred privileges will not be revoked.
`Gligor has designed a revocation scheme in which revo(cid:173)
`cation mechanisms form a subsystem above the (verified)
`protection kernel [4]. The premise underlying such a de(cid:173)
`sign is that unauthorized retention of access privileges re(cid:173)
`sulting from incorrect behavior of the revocation subsys(cid:173)
`tem will not violate protection requirements; hence, unlike
`the protection kernel which needs to be verified, the re-
`
`0098-5589/86/0500-0635$01.00 © 1986 IEEE
`
`

`

`IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.5, MAY 1986
`
`635
`
`Privilege Transfer and Revocation
`in a Port-Based System
`
`KRITHIVASAN RAMAMRITHAM, DAVID STEMPLE, MEMBER,
`STEPHEN VINTER
`
`IEEE, DAVID A. BRIGGS, AND
`
`Abstract-Gutenberg is a port-based operating system being de(cid:173)
`signed to study protection issues in distributed systems. In the Guten(cid:173)
`berg system, all shared resources are viewed as protected objects and
`hence can be accessed only via specific operations defined on them.
`Processes communicate and access objects through the use of ports.
`Each port is associated with an abstract data type operation and can
`be created by a process only if the process has the capability to execute
`the operation on the type. Thus, a port represents the privilege of the
`port's client process to request a service (an abstract data type opera(cid:173)
`tion) provided by the port's server process (the type's manager). Ca(cid:173)
`pabilities to create ports for requesting operations are contained in a
`capability directory, which is navigated by processes to gain these ca(cid:173)
`pabilities.
`Privilege transfer is a means of providing servers access to the re(cid:173)
`sources they need to perform their services. In Gutenberg, privilege
`transfer is accomplished by allowing access to subdirectories of the ca(cid:173)
`pability directory and by passing capabilities, including port access ca(cid:173)
`pabilities, to processes via ports. It should be possible to revoke trans(cid:173)
`ferred privileges when breaches of trust are detected or suspected, when
`a period of time has passed beyond which the distributor of a privilege
`does not want the privilege shared, or when an error has been detected.
`Transfer and revocation of privileges in Gutenberg is the subject of
`this paper. In particular, we describe the types of privileges in Guten(cid:173)
`berg, discuss the mechanisms provided for the transfer and revocation
`of different types of privileges, and sketch the means for handling ex(cid:173)
`ceptions during privilege transfer.
`
`Index Terms-Interprocess communication, operating systems,
`privilege transfer, protection, revocation.
`
`I.
`
`INTRODUCTION
`
`L ARGE software systems are best organized by break(cid:173)
`
`ing them down into modules which communicate in
`limited ways and whose privileges are restricted to those
`needed to perform the modules' designated services. One
`way of restricting the privileges of an executing module
`is for the initiator of the module to explicitly supply the
`privileges at the time of module initiation. Another way
`is for the module to receive privileges during execution
`along communication channels connecting it to its com(cid:173)
`munication partners. Other methods include the granting
`of privileges, to the module, based on the user (an entity
`
`Manuscript received October 31, 1983; revised September 28, 1984.
`This work was supported in part by the National Science Foundation under
`Grants MCS 82-02586, DCR-8403097, and DCR-8500332.
`K. Ramamritham and D. Stemple are with the Department of Computer
`and Information Science, University of Massachusetts, Amherst, MA
`01003.
`D. A. Briggs is with the Department of Mathematics and Computer Sci(cid:173)
`ence, University of Southern Maine, Portland, ME 04104.
`S. Vinter is with BBN Laboratories, Cambridge, MA 02238.
`IEEE Log Number 8607939.
`
`external to the system) on whose behalf the module is
`being initiated. In this paper, we are concerned mainly
`with the first two methods of explicit privilege transfer,
`i.e., during module initiation and as a part of interprocess
`communication.
`In object-oriented systems, resources are structured as
`objects which can be accessed only via the operations de(cid:173)
`fined on them. In such systems, the privileges of a process
`specify the objects that it can access and the operations
`that it is allowed to perform on them. A protection scheme
`permits a module to perform operations on a specified ob(cid:173)
`ject only if the module has the appropriate privilege. Ob(cid:173)
`ject-oriented privilege transfer refers to mechanisms in
`which privileges transferred are expressed in terms of op(cid:173)
`erations on specific objects. Such mechanisms are pro(cid:173)
`vided in several systems [1], [5], [16].
`In this paper, we deal with the transfer of privileges in
`the Gutenberg operating system [8], [9], [11], which uses
`an object-oriented protection scheme to control the inter(cid:173)
`action of modules represented by processes. Gutenberg is
`also a port-based system in that all communication be(cid:173)
`tween processes, including process initiation, is accom(cid:173)
`plished using ports.
`Although not always provided by programming lan(cid:173)
`guages or operating systems, the ability to revoke trans(cid:173)
`ferred privileges is often useful. Revocation is appropri(cid:173)
`ate, for instance, when a breach of trust has been detected
`or is suspected, where a period of time has elapsed be(cid:173)
`yond which it is not desired to share the transferred priv(cid:173)
`ilege, and where recovery from an error requires the re(cid:173)
`vocation of a transferred privilege. Hence, Gutenberg
`provides for the revocation of transferred privileges. One
`of the assumptions we have made in designing the revo(cid:173)
`cation mechanism is that the occasions for revocation are
`exceptional and infrequent as opposed to the frequent need
`for transferring privileges; thus, mechanisms designed for
`revocation should not unduly complicate nor slow down
`the transfer mechanism in situations where it is known
`that the transferred privileges will not be revoked.
`Gligor has designed a revocation scheme in which revo(cid:173)
`cation mechanisms form a subsystem above the (verified)
`protection kernel [4]. The premise underlying such a de(cid:173)
`sign is that unauthorized retention of access privileges re(cid:173)
`sulting from incorrect behavior of the revocation subsys(cid:173)
`tem will not violate protection requirements; hence, unlike
`the protection kernel which needs to be verified, the re-
`
`0098-5589/86/0500-0635$01.00 © 1986 IEEE
`
`

`

`636
`
`IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.5, MAY 1986
`
`vocation subsystem need not be verified. We believe that
`retention of revoked privileges is equivalent to the pos(cid:173)
`session of unauthorized privileges and is tantamount to a
`protection violation. Retention of revoked privilege is not
`to be allowed or relegated to any mechanism outside the
`protection kernel. Thus, the Gutenberg kernel includes the
`revocation mechanisms, and they will be verified along
`with the privilege transfer mechanisms.
`Systems designed with the goal of protecting resources
`incur the overheads of checking the privileges of pro(cid:173)
`cesses when they attempt to access resources. In a dy(cid:173)
`namic system, i.e., one which allows transfer of privi(cid:173)
`leges during the execution of a process and not just at its
`initiation (e.g., see [12]), the privileges of a process vary
`depending on what privileges are transferred to it. Hence
`the system has to keep track of transferred privileges and
`update the privileges of the processes involved in trans(cid:173)
`fers. If, in addition, a system allows privileges to be re(cid:173)
`voked, further overheads will be incurred, since in this
`case the system must keep track of how a receiving pro(cid:173)
`cess uses the transferred privileges in order to prevent their
`use after revocation.
`Since there are considerable overheads involved in
`privilege transfer and revocation, it is imperative that pro(cid:173)
`tection systems be designed so that these overheads are
`minimal. One way of achieving this goal is to keep the
`kernel as simple as possible while providing sufficient
`flexibility in the protection facilities. Thus, compromises
`must be made. The set of kernel primitives, the privilege
`transfer and revocation mechanisms, and the classifica(cid:173)
`tion of privileges in Gutenberg are the results of the compro(cid:173)
`mises made in meeting the conflicting requirements of
`simplicity, flexibility, and usefulness. In subsequent sec(cid:173)
`tions, as we describe the kernel primitives and the protec(cid:173)
`tion scheme, we present the design choices and the mo(cid:173)
`tivation for our decisions.
`Although Gutenberg has been designed to study issues
`in distributed systems, transfer and revocation of privi(cid:173)
`leges are discussed in this paper only in the context of a
`centralized system. Research dealing with the issues of
`distribution is currently in progress and will be reported
`in a future paper.
`The remainder of the paper is organized as follows. The
`next section presents the main features of the Gutenberg
`system. It is followed by the details of privilege transfer
`using the Gutenberg primitives. Revocation of privileges
`is then discussed and its aspects classified. We then pre(cid:173)
`sent the Gutenberg means of revoking privileges. Follow(cid:173)
`ing this we discuss the disruptions possible during privi(cid:173)
`lege transfer and the mechanisms involved in assuring
`reliable behavior in the presence of disruptions. We end
`with a summary section.
`
`II. THE GUTENBERG SYSTEM
`Gutenberg is a port-based, object-oriented kernel being
`designed to study protection issues in distributed systems.
`In the Gutenberg system, all shared resources are viewed
`as protected objects and hence have specific operations
`
`defined on them. Processes communicate and access shar(cid:173)
`able objects through the use of ports. The basic principle
`of protection in Gutenberg is: a port connecting a process
`to the manager of an object exists only if the process has
`the privilege to access the object with a specific opera(cid:173)
`tion.
`Capability-based operating systems, e.g., Plessey 250
`[3], CAL [6], Hydra [2], and iMAX [5], provide for the
`protection of objects through the use of transferable, un(cid:173)
`forgeable capabilities for accessing objects. Capabilities
`are means for providing the control implicit in the abstract
`data type paradigm, i.e., the limiting of object access to
`a set of operations defined by the type. To date, however,
`capabilities have been expensive to implement either in
`software or hardware, and need further development be(cid:173)
`fore they can demonstrate their cost-effectiveness. The
`main problem seems to be their use for controlling ac(cid:173)
`cesses both to entities external to a module and to local
`data and procedures. The Gutenberg system represents an
`attempt to avoid this problem by using a capability scheme
`for controlling process interactions, but not for local pro(cid:173)
`cedure calls and other access within a process. This ap(cid:173)
`proach we have called a nonuniform object model ofpro(cid:173)
`tection: data local to a process are not protected by the
`kernel; resources shared by multiple processes are struc(cid:173)
`tured as objects and are protected by the kernel. This ap(cid:173)
`proach, along with the use of ports for all access to user(cid:173)
`defined,
`shared objects, distinguishes Gutenberg from
`other capability-based systems.
`Another difference between Gutenberg and other pro(cid:173)
`posed protection systems [16], [6], [7] arises from the way
`privileges persist in the system. In other systems, the pos(cid:173)
`sessor of a privilege is allowed to store the privilege in
`long-lived user-managed objects, such as files or direc(cid:173)
`tories. In Gutenberg, all privileges which persist indepen(cid:173)
`dently of the existence of processes are maintained in a
`system capability directory managed solely by the kernel.
`Other salient features of Gutenberg are use of the client(cid:173)
`server model
`in port communication and a strict adher(cid:173)
`ence to functional addressing in the establishment of ports
`[14]. The latter feature is characterized by the creation of
`ports for the purpose of requesting specified functions
`rather than to connect to specified processes: a port cre(cid:173)
`ated by one process is connected to a second process based
`on a specified function (a service or abstract data type op(cid:173)
`eration) and a cooperation class with which the service is
`to be associated. The concept and implementation of co(cid:173)
`operation class in Gutenberg is itself a unique feature and
`is treated in a separate paper [13].
`
`A. Kernel Objects and Primitives
`Gutenberg's nonuniform object model of protection is
`based on a few basic kernel objects and the use of these
`system objects for expressing the protection requirements
`of user-defined objects. To help distinguish between ker(cid:173)
`nel and user-defined objects we say that processes execute
`kernel primitives to manipulate kernel objects and request
`operations to manipulate remote user-defined objects, i.e.,
`
`

`

`RAMAMRITHAM et al.: PRIVILEGE TRANSFER IN A PORT-BASED SYSTEM
`
`637
`
`objects managed by other processes. The objects recog(cid:173)
`nized by the kernel are:
`• processes: the subjects which share access to objects;
`• ports: used to request access to shared objects;
`• the capability directory: a unified structure, orga(cid:173)
`nized similar to a Unix file directory [10], containing ca(cid:173)
`pabilities. It is a stable structure in that its existence does
`not depend on the existence of any process. It contains
`four kinds of stable capabilities:
`-soperation capability:
`represents the privilege to
`create a port for use in requesting a named operation on
`~ given user-defined object type; it is linked to a manager
`definition capability corresponding to the object type.
`-manager definition capability: represents the priv(cid:173)
`ilege to create new operation capabilities linked to this
`capability, and' to redefine operations'
`implementations;
`it points to the executable image of the process that man(cid:173)
`ages the object on which the operation is defined; corre(cid:173)
`sponds to a type capability in Hydra.
`-cooperation class capability: represents the privi(cid:173)
`lege to participate in a cooperative activity identified by
`a unique identifier, the cooperation class identifier. An
`example of a cooperative activity is communicating with
`the process that manages a shared instance of an object
`type.
`-subdirectory capability: represents the privilege to
`in a re(cid:173)
`obtain a group of capabilities, a subdirectory,
`stricted way. The capabilities contained in a subdirectory
`are said to be registered in that subdirectory.
`• transient capabilities: these capabilities are port ca(cid:173)
`pabilities and copies of stable capabilities from the capa(cid:173)
`bility directory; a process's transient capabilities are
`stored in its capability list (c-list), and only exist for the
`duration of the process's existence.
`A capability in other systems consists of: an object
`identifier, the object's type, and the subset of the opera(cid:173)
`tions defined by the type that are permitted by the capa(cid:173)
`bility. Since object types can be user-defined, the defini(cid:173)
`tion of operations in some capabilities are determined by
`the user.
`Capabilities in Gutenberg are somewhat different, con(cid:173)
`sisting of: a specific kernel primitive, a list of kernel-ob(cid:173)
`ject identifiers constituting legal parameters for the prim(cid:173)
`itive, and a list of primitives that can be used to manipulate
`the capability itself (called capcaps , for capabilities on a
`capability). Capcaps include the privilege to transfer, reg(cid:173)
`ister (make stable), hold (make transient), and modify the
`capability. A capability permits a process with that ca(cid:173)
`pability to exercise the kernel primitive in the capability.
`For example, with an operation capability a process can
`perform the kernel primitive CREATEPORT with the
`name
`of
`the
`operation
`being
`a
`parameter
`to
`CREATEPORT.
`The purpose of the capability directory is to restrict the
`acquisition of capabilities by processes in a consistent and
`orderly way. At any time a process has a single subdirec(cid:173)
`tory of the capability directory designated as its active
`directory. A process can change its active directory to any
`
`subdirectory capabilities, circles denote operation capabilities,
`Rectangles denote
`parallelograms denote manager definition capabilities and diamonds denote cooperation
`class identifier capabilities.
`
`Bib.Manager manages an instance of a bibliography abstract data type. Create,
`Update, Print, Pwoa (Print without Annotations) and Erase are operations on the
`bibliography object. To request these operations, a process creates a port using one
`of the operation capabilities and then executes a SELECfRECEIVE, denoted by the
`SR, on the port. BIB! is a cooperation class capability and identifies a particular
`bibliography.
`
`Fig. 1. The bibliography subdirectory.
`
`subdirectory registered in its current active directory.
`(Fig. 1 presents the structure of the subdirectory used for
`a bibliography application [16].) A process may only use
`stable capabilities that are registered in its active direc(cid:173)
`tory. Each active directory has rights associated with it
`(independent of the capabilities registered in the subdi(cid:173)
`rectory) that further restrict the primitives a process may
`use to manipulate and exercise the capabilities registered
`in the directory. These rights are determined by the par(cid:173)
`ticular subdirectory capability a process uses to make the
`subdirectory its active directory.
`In addition to the capabilities in a process's active di(cid:173)
`rectory, a process may exercise the capabilities in its ca(cid:173)
`pability list (c-list). Capabilities is a process' c-list, un(cid:173)
`like those registered in the capability directory, are owned
`by the process. Such capabilities are called transient be(cid:173)
`cause they exist only for the lifetime of the owning pro(cid:173)
`cess. A transient capability comes into existence when a
`process holds a capability in its active directory (i.e., cop(cid:173)
`ies it into its c-list), receives the capability from another
`process via a port, or creates a port. In the last instance,
`the capability to access the created port is placed on the
`c-list. A process holds a capability in its active directory
`in order not ot lose the capability when it changes its ac(cid:173)
`tive directory to another subdirectory. Transient capabil(cid:173)
`ities contribute to the flexible use of capabilities in Gu(cid:173)
`tenberg without compromising the security of the system
`because the c-list may only be manipulated through kernel
`primitives.
`The kernel maintains a list of port capabilities as part
`of a process' c-list, called the process's p-list. The p-list
`is part of the capability list because a port capability is a
`transient capability that gives a process the ability to ex(cid:173)
`ecute a particular kernel primitive on the port. The pos(cid:173)
`sible kernel primitives on ports include SEND, RE(cid:173)
`CEIVE, and SELECTRECEIVE (SELECTRECEIVE is
`intended for bidirectional communication).
`Note that capabilities, ports, and the capability direc(cid:173)
`tory are kernel objects and hence can themselves be ma(cid:173)
`nipulated only through the kernel primitives defined on
`them. For instance, the capability directory is traversed
`
`

`

`638
`
`IEEE TRANSACTIONS ON SOFTWARE ENGINEERING, VOL. SE-12, NO.5, MAY 1986
`
`and its contents modified by processes through kernel
`primitives, e.g., CHANGE-DIRECTORY, REGISTER,
`and DELETE-MANAGER. When a process requests the
`execution of a kernel primitive the kernel uses the c-list
`and the active directory of the process to check whether
`it has a legitimate privilege for executing the primitive.
`
`B. User-Defined Objects
`We now move from kernel objects to user-defined ob(cid:173)
`jects and examine how user-defined objects are shared and
`protected. By user-defined objects we mean those objects
`managed by one process but accessible by other processes
`via operations requested using ports . We are not con(cid:173)
`cerned here with objects purely local to a process since
`the Gutenberg kernel is not involved in their protection
`beyond the ordinary aspects of memory management.
`Each user-defined object is managed by a manager pro(cid:173)
`cess. The set of possible operations that may be per(cid:173)
`formed on an object are determined by the operation ca(cid:173)
`pabilities
`linked to the object's manager definition
`capability. In order for a process to request an operation
`on a shared object the process must create a port using
`one of the operation capabilities that is linked to the ob(cid:173)
`ject's manager and then US€? the port to request the partic(cid:173)
`ular operation on the object. The operation capability must
`reside in the process' active directory or c-list when the
`port is created. In this way, operation capabilities are ca(cid:173)
`pabilities to create ports to access sharable objects. For
`in Fig. 1 the only operations that can be per(cid:173)
`example,
`formed on a bibliography are those for which operation
`capabilities (such as Create) are linked to the Bib.Manager
`manager definition capability. A process may request a
`bibliography operation only if it obtains one of the oper(cid:173)
`ation capabilities in Biblio.Dir (e.g., by making Bib(cid:173)
`lio. Dir its active directory), creates a port using the op(cid:173)
`eration capability, and then uses the port to request the
`operation.
`In Gutenberg, the only way a process can request an
`operation on a user-defined object is to execute a kernel
`primitive on a port, either SEND, RECEIVE, or SELECT(cid:173)
`RECEIVE. Ports are very restrictive in how they allow
`access.to objects. First, the kernel associates the name of
`the operation in an operation capability with a port that is
`created using the capability. This association is not
`changeable and the operation is not included as a param(cid:173)
`eter to port primitives after port creation. Thus, a process
`may only use the port to request the operation for which
`the port was created . Second, each port capability entitles
`the owning process to execute only a single type of port
`primitive for sending and receiving, namely, SEND, RE(cid:173)
`CEIVE, or SELECTRECEIVE. The (single) sending or
`receiving primitive that can be executed by a client on a
`port is a parameter contained in the operation capability
`used by the client to create the port. For example, the SR
`labels (for SELECTRECEIVE) on the links between the
`operation names and Bib. Manager in Fig. 1 mean that the
`SELECTRECEIVE primitive must be used to request each
`of the bibliography operations.
`
`c. Port Primitives
`Ports are instances of an abstract data type whose man(cid:173)
`ager is the system kernel and constitute the communica(cid:173)
`tion links between processes. At any time in a port's ex(cid:173)
`istence it is linked to exactly two processes, its client and
`its server. The one-to-one nature of Gutenberg ports was
`chosen to reduce the complexity of the kernel and because
`more complex interconnections can be simulated using
`such ports [14]. Both the client and the server processes
`are limited to a small set of primitives they can execute
`on the port. Operation capabilities are used at port crea(cid:173)
`tion time to determine the limitations on the port, includ(cid:173)
`ing whether (and what kinds ot) privileges (capabilities)
`can be transferred on the port.
`re(cid:173)
`Client primitives and the corresponding server
`sponses are listed in the following table. When a port is
`created, the creator, the initial client, gets the privilege,
`termed the client privilege, to execute one of the sets of
`client primitives in the table, e.g., SEND and REVOKE.
`When a process is chosen as the server of the port, it gets
`the privilege, the server privilege, to execute the corre(cid:173)
`sponding server primitives, e.g., RECEIVE and RE(cid:173)
`FUSE.
`
`Client Primitives
`
`Server Primitives
`
`SEND
`REVOKE
`
`RECEIVE
`
`SELECTRECEIVE
`REVOKE
`
`RECEIVE
`REFUSE
`
`SEND
`REFUSE
`
`GETDETAILS
`SEND
`REFUSE
`
`Note that exactly one of the two processes has the privi(cid:173)
`lege to execute the SEND primitive on a port.
`We now give a short summary of the purposes of these
`primitives.
`(Details concerning the primitives may be
`found in [8].)
`• RECEIVE requests the next message from the port.
`The caller elects via a parameter to the call,
`to either
`block, if there is no message on the port, or execute con(cid:173)
`currently with the servicing of the request.
`• SEND puts a message on a port. The system has two
`kinds of SEND primitives: acknowledge-SEND and no(cid:173)
`acknowledge-SEND. If the SEND is an acknowledge(cid:173)
`SEND, the sending process is informed when its corre(cid:173)
`spondent over the port receives the message, and can
`choose to block until the receipt of the acknowledgment.
`• SELECTRECEIVE (only a client primitive) puts in(cid:173)
`formation, termed request details, on a port for the server
`to use in satisfying the request, and when the server re(cid:173)
`sponds to the request by executing a SEND, the server's
`reply is returned to the client as in RECEIVE. The caller
`may block until the server replies, or execute concurrently
`with the servicing of the request.
`• GETDETAILS gets request details from a port. The
`caller (the port's server) may block if there is no pending
`
`

`

`RAMAMRITHAM et al.: PRIVILEGE TRANSFER IN A PORT-BASED SYSTEM
`
`639
`
`SELECTRECEIVE, and thus no request details, on the
`port, or it may execute concurrently with the satisfaction
`of its request.
`• REFUSE rejects a client's request for service as un(cid:173)
`satisfiable and notifies the requester by setting a status.
`• REVOKE revokes privileges sent as part of request
`details by a SELECTRECEIVE (or in a SEND message
`up to receipt of the message). The details of this primitive
`are dealt with in Sections IV, V, and VI.
`The choice of these primitives in the system design was
`based on the desire to keep their number and complexity
`to a minimum while affording users a set of primitives for
`building systems of communicating processes with rea(cid:173)
`sonable ease. Thus, we have added to the basic SEND
`and RECEIVE primitives the bidirectional SELECTRE(cid:173)
`CEIVE and its receiving reciprocal GETDETAILS in or(cid:173)
`der to allow such functions as reading a record with a
`given key (the key being sent as request details) or a re(cid:173)
`mote procedure call (the procedure's parameters being
`sent as request details) to be implemented by a single
`primitive.
`In addition to its client and its server, a port has asso(cid:173)
`ciated with it the process which created it, its owner. Ini(cid:173)
`tially, the owner and the client of the port are the same
`process, but, as detailed below, the owner may transfer
`its privilege as the port's client to another

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket