DIRECTORY Disk USING[ Channel, PageCount, PageNumber ], File USING[ RC, Volume, VolumeID ], Rope USING[ ROPE ]; PhysicalVolume: CEDAR DEFINITIONS = BEGIN Physical: TYPE = REF PhysicalObject; PhysicalObject: TYPE; NextPhysical: PROC[prev: Physical, wait: BOOL _ FALSE] RETURNS[Physical]; GetPhysical: PROC[volume: File.Volume, page: LogicalPage _ [0]] RETURNS[ Physical ]; PhysicalRC: TYPE = File.RC[ok..hardware]; PhysicalInfo: PROC[Physical] RETURNS[ channel: Disk.Channel, rootStatus: PhysicalRC, id: File.VolumeID, -- unique id of this physical volume -- name: Rope.ROPE, size: Disk.PageCount, free: Disk.PageCount, timeValid: BOOL, time: TimeParameters]; TimeParameters: TYPE[2]; LogicalPage: TYPE = RECORD[INT]; -- Page number relative to a logical volume -- LogicalPageCount: TYPE = INT; SubVolumeDetails: TYPE = REF READONLY SubVolumeDetailsObject; SubVolumeDetailsObject: TYPE = RECORD[ -- immutable information about the sub-volume -- id: File.VolumeID, -- logical volume of which this is a fragment -- start: LogicalPage, -- logical page number of this fragment of logical volume -- size: LogicalPageCount, physical: Physical, channel: Disk.Channel, address: Disk.PageNumber -- physical page number of this subvolume -- ]; WriteTimeParameters: PROC[physical: Physical, timeValid: BOOL, time: TimeParameters] RETURNS[ PhysicalRC ]; Credentials: TYPE = --VM-page-aligned-- LONG POINTER TO CredentialsObject; CredentialsObject: TYPE; ReadCredentials: UNSAFE PROC[physical: Physical, credentials: Credentials] RETURNS[ PhysicalRC ]; WriteCredentials: PROC[physical: Physical, credentials: Credentials] RETURNS[ PhysicalRC ]; END. úCedar Nucleus (Files): management of physical volumes PhysicalVolume.mesa Andrew Birrell August 8, 1983 10:16 am The world consists of online packs, each mounted on a drive. Each interesting pack contains precisely one physical volume. Each physical volume contains some number of sub-volumes. Each sub-volume is a part of some logical volume. A logical volume consists of its constituent sub-volumes. Sub-volumes may be added to a physical volume, but once added their layout may not be changed without erasing the entire physical volume. Returns the physical volume containing the specified page of the logical volume. If rootStatus # ok then the later results are undefined. Opaque at this level. Concrete type is only interesting to Time software. Assumes "credentials" is VM-page-aligned and occupies File.wordsPerPage words; the memory belongs to the caller. No errors. Assumes "credentials" is VM-page-aligned and occupies File.wordsPerPage words; the memory belongs to the caller. No errors. Êo˜Jšœ6™6Jšœ™Jšœ'™'J˜šÏk ˜ Jšœœ#˜-Jšœœœ˜#Jšœœœ˜—J˜Jšœœ œ˜#J˜Jš˜J˜Jšœ¯™¯J˜Jšœ œœ˜$Jšœœ˜J˜Jš Ïn œœœœœ ˜IJ˜šž œœ/œ ˜TJšœP™P—J˜J˜Jšœ œœ˜)J˜šž œœ œ˜%J˜Jšœ˜JšœÏc'˜:Jšœ œ˜J˜J˜Jšœ œ˜J˜Jšœ8™8—J˜šœœ˜JšœJ™J—J˜šœ œœœ˜ JšŸ.˜.—J˜Jšœœœ˜J˜Jšœœœœ˜=J˜šœœœŸ0˜WJšœŸ0˜CJšœŸ<˜PJ˜J˜J˜JšœŸ,˜EJ˜—J˜Jšžœœ œœ˜kJ˜Jš œ œŸœœœœ˜JJ˜Jšœœ˜J˜šžœœœ/œ˜aJšœ}™}—J˜šžœœ/œ˜[Jšœ}™}—J˜Jšœ˜J˜J˜—…—| å