-- Space.mesa (last edited by: Levin on: August 25, 1982 9:55 am)
DIRECTORY
Environment USING [PageCount, PageNumber, PageOffset, wordsPerPage],
File USING [Capability, nullCapability, PageNumber],
Transaction USING [Handle, nullHandle];
Space: DEFINITIONS IMPORTS Transaction =
BEGIN
-- Spaces and space handles
wordsPerPage: CARDINAL = Environment.wordsPerPage;
PageCount: TYPE = Environment.PageCount;
PageNumber: TYPE = Environment.PageNumber;
PageOffset: TYPE = Environment.PageOffset;
Handle: TYPE [2];
nullHandle: READONLY Handle;
mds: READONLY Handle;
virtualMemory: READONLY Handle;
-- Creating and deleting spaces
defaultBase: PageOffset = LAST[PageOffset];
Create: PROC [size: PageCount, parent: Handle, base: PageOffset ← defaultBase]
RETURNS [newSpace: Handle];
CreateUniformSwapUnits: PROC [size: PageCount ← 1, parent: Handle];
Delete: PROC [space: Handle];
DeleteSwapUnits: PROC [space: Handle];
-- Mapping spaces
WindowOrigin: TYPE = RECORD [file: File.Capability, base: File.PageNumber];
defaultWindow: WindowOrigin = [File.nullCapability, 0];
CopyIn: PROC [
space: Handle, window: WindowOrigin, transaction: Transaction.Handle ← Transaction.nullHandle];
CopyOut: PROC [
space: Handle, window: WindowOrigin, transaction: Transaction.Handle ← Transaction.nullHandle];
MakeReadOnly: PROC [
space: Handle, transaction: Transaction.Handle ← Transaction.nullHandle];
MakeWritable: PROC [
space: Handle, file: File.Capability, transaction: Transaction.Handle ← Transaction.nullHandle];
Map: PROC [space: Handle, window: WindowOrigin ← defaultWindow, transaction: Transaction.Handle ← Transaction.nullHandle];
Remap: PROC [space: Handle, window: WindowOrigin ← defaultWindow, transaction: Transaction.Handle ← Transaction.nullHandle];
Unmap: PROC [space: Handle];
-- Swapping commands
Activate: SAFE PROC [space: Handle];
Deactivate: SAFE PROC [space: Handle];
ForceOut: PROC [space: Handle];
Kill: PROC [space: Handle];
-- Miscellaneous operations
GetAttributes: SAFE PROC [space: Handle] RETURNS [
parent, lowestChild, nextSibling: Handle, base: PageOffset, size: PageCount, mapped: BOOLEAN];
GetHandle: SAFE PROC [page: PageNumber] RETURNS [Handle];
GetWindow: SAFE PROC [space: Handle] RETURNS [WindowOrigin];
LongPointer: SAFE PROC [space: Handle] RETURNS [LONG POINTER];
LongPointerFromPage: SAFE PROC [page: PageNumber] RETURNS [LONG POINTER];
MDS: SAFE PROC RETURNS [Handle] = CHECKED INLINE {RETURN[mds]};
PageFromLongPointer: SAFE PROC [lp: LONG POINTER] RETURNS [page: PageNumber];
Pointer: SAFE PROC [space: Handle] RETURNS [POINTER];
VMPageNumber: SAFE PROC [space: Handle] RETURNS [PageNumber];
-- Signals and errors
Error: ERROR [type: ErrorType];
ErrorType: TYPE = {
invalidHandle, invalidMappingOperation, invalidParameters, invalidWindow, noWindow, notApplicableToSwapUnit, spaceNotUnitary, spaceTreeTooDeep, writeProtected};
InsufficientSpace: ERROR [available: PageCount];
END.
LOG
Time: March 15, 1978 10:06 AM By: McJones Action: Created file
Time: September 14, 1978 10:46 AM By: Lauer Action: Added LongPointerFromPage, PageFromLongPointer
Time: March 7, 1979 10:16 AM By: McJones Action: Eliminated dependence on SpaceInternal; added MakeReadOnly, defaults
Time: July 19, 1979 11:03 AM By: McJones Action: Added uniform swap units; deleted AddressFault, InsufficientPermissions
Time: January 25, 1980 1:27 PM By: Knutsen Action: Added ErrorType[spaceNotUnitary, writeProtected]
Time: March 31, 1980 4:25 PM By: Gobbel Action: Added transaction machinery
Time: August 5, 1980 11:41 AM By: McJones Action: Modified transaction machinery
Time: August 25, 1982 9:55 am By: Levin Action: Make things SAFE.