MULTICS ======= Goal: - multiuser, hence sharing and protection And some details here: Remzi: everything is solved by indirection I should draw a picture, and scan it here # Inter-segment linking and Addressing - Necessary properties of a satisfactory intersegment addressing arrangement include the following: 1. Procedure segments must be pure; that is, their execution must not cause a single word of their content to be modified 2. It must be possible for a process to call a routine by its symbolic name without having made prior arrangements for its use. 3. Segments of procedure must be invariant to the recompilation of other segments. # Making the segment knowns - Definition: Meeting condition (1) requires that a segment be callable by a process even if no position in the descriptor segment of the process has been reserved for the segment. Hence a mechanism is provided in the system for assigning a position in the descriptor segment (a segment number) when the process first makes reference to the segment by means of its symbolic name. We call this operation making the segment known to the process. Once a segment is known, the process may reference it by its segment number. - Before a segment becomes known to a process the segment may only be referenced Since the segment number used to reference a particular segment is process dependent, segment numbers may not appear internally in pure procedure code. For this reason, a segment is identified within a procedure segment by a symbolic segment reference name. - Segment P makes a reference to a word at location x within data segment D OPR | [x] The link data of a process: private to that process The collection of link data for all external references originating in segment P is called the *linkage section* of procedure P. Draw a picture here ... # Data Reference # Procedure Calls Problem (we assume): lpQ is not easy to get. One thing we not clear is why there is a pointer from LpP to lpQ? Why don't the OS just set that, and do the Jump