DOMAIN ENGINEERING HANDBOOK
Order No. 002398 Revision 04 Software Release 9.5
THIS DOCUMENT CONTAINS
CONFIDENTIAL AND
PROPRIETARY INFORMATION WHICH IS \THE SOLE PROPERTY OF APOLLO COMPUTER INC.
ITS USE IS RESTRICTED TO EMPLOYEES
COMPUTER INC.
OF APOLLO
APOLLO COMPUTER INC.
330 Billerica Road Chelmsford, MA 01824
First printing: September, 1981 Last printing: January, 1987
This document was formatted using the FMT tool distributed with the Apollo Computer system.
THE SOFTWARE PROGRAMS DESCRIBED IN THIS DOCUMENT ARE CONFIDENTIAL INFORMATION AND PROPRIETARY PRODUCTS OF APOLLO COMPUTER INC. OR ITS LICENSORS.
The Apollo DOMAIN Engineering HandboQk contains system information for the Apollo DOMAIN nodes and related peripherals. References are made throughout the Handbook to reverse-mapped machines and forward-mapped machines. The reverse-mapped machines include the DN300/320/300, DN400/420/600, DN550/560/570/580, and the DSP80/80A/90. The forward-mapped machines include the DNx60, DN3000, DSP3000, and the DN5xx-T.
This handbook is for Apollo employees only.
This manual contains 12 chapters, two appendices, and an index.
Chapter 1 describes principal control blocks associated with AEGIS internal data structures.
Chapter 2 describes formats of file system data structures.
Chapter 3 describes miscellaneous information useful to those programming in the DOMAIN envirorunent.
Chapter 4 describes system error (status) codes and messages.
Chapter 5 describes system debugging tools, including the mnemonic debugger, extensions to the HLL debugger and system dumps.
Chapter 6 describes characteristics of peripheral I/O devices, including the format of control registers and I/O commands.
Chapter 7 describes the hardware architecture of the DN300/320/330 nodes, including the basic processor, Memory Management Unit
(MMU), display hardware, FPU, ring, and serial I/O.
Chapter 8 describes the hardware architecture of the DN400/420/600 nodes, including the basic processor, Memory Management Unit
(MMU), display hardware, PEB, ring/disk, and serial I/O.
Chapter 9 describes the hardware architecture of the DN460/660 and DSP160 nodes, including the basic processor, Memory Management Unit (MMU), display hardware, ring/disk, and serial I/O.
Chapter 10 describes the hardware architecture of the DN550/560/570/580 nodes, including the basic processor, Memory Management Unit (MMU), display hardware, FPU, ring, serial I/O, MULTIBUS, and VME.
APOLLO CONFIDENTIAL INTERNAL USE ONLY. i i i
Chapter 11 describes the hardware architecture of the DSE'80/80A/90 nodes, including the basic processor, Memory Management Unit
(MMU), ring, serial I/O, and M(JLTI8US.
Chapter 12 describes the hardware architecture of the DN3000 nodes, including the basic processor, Memory Management Unit
(MMU), display hardware, ring/disk, and serial I/O.
Appendix A describes the ASCII character set.
Appendix B is a powers of :2 table.
R€:;lated pgcuments
For hardware architecture information on the DN5xx-T nodes, refer to the DN570-T/DN580-T Workstations and DSPSOO-T Server Hardware Architecture Handbook (009490).
For hardware architecture information on the PN3000 and 06E'3000 nodes, refer to the DOMAIN Series 3000 Hardware Architeoture
_ (007861).
For information about system calls and the program environment, the Prograrmning With General System Calls (005506) and prggarrmd ng With System Calls for Interprocess Corml\llnicatiop
(005696) .
For information about peripheral driver routines, see ~ peyice Drivers with GPID, (000959).
For Shell and PM commands see, DOMAIN System Command Reference, (002547) .
i v APOLLO CONFIDENTIAL INTERNAL USE ONLY.
Conventions
+00
.. 1taIpe N - 1
->
N •• N
Offset, in hexadecimal Unused bit
Range of unused bits Continuation Name for this field I f bit N is set, then All bits labeled N Equal to
->
Implies ,--> Pointer to-> Pointer to Pointer to set of 0 .. 31 32 bits 1 .. 32 32 values; 5 bits
<a> Variable
[pa I va] Physical address I Virtual address
UPPERCASE Uppercase words
->
literal conunands or keywords lowercase Lowercase words -> command values that you mustsupply
<
>
Square brackets enclose optional items in format sand commands
Braces enclose a list from which you must choose an item in formats and command descriptions.
A vertical bar separates items in a list of choices Angle brackets enclose the name of a key on the
keyboard
~POUO CONFIDENTIAL INTERNAL USE ONLY.
TABLE OF CONTENTS
CHAPTER 1 AEGIS . • • • AEGIS SYSTEM RELATIONSHIPS
ACTIVE OBJECT TABLE (AOT) AND ACTIVE SEGMENT TABLE (AST).
ACTIVE OBJECT TABLE (AOT) • ACTIVE SEGMENT TABLE (AST). • ACTIVE OBJECT TABLE HEADER AST PAGE MAPS (REVERSE MAPPED) • AST PAGE MAPS (FORWARD MAPPED) • CLOCK . . • . • • . • • . • DISK CONTROLLER TABLE ENTRY DISK VOLUME TABLE ENTRY EVENT COUNT • . • • • • • . FAULT DIAGNOSTIC RECORD • . MAPPED SEGMENT TABLE (MST).
MAPPED SEGMENT TABLE ENTRY (MSTE) MEMORY MAP (MMAP) • • • • MEMORY MAP ENTRY (MMAPE) OS MAPPING
PAGING SYSTEM . . . • PROCESS CONTROL BLOCK (PCB) PROCESSES . • • . . RING PACKET FORMAT
Message Header Type Field
Early Acknowledge Field Message Data
RESOURCE LOCK • . . SYSTEM BOOT FILES • SYSTEM DIRECTORIES TRAP CODES
CHAPTER 2 FILE SYSTEM ACLs STRUCTURE
ACL Header Record ACL Record ACL Entry . . . . BLOCK AVAILABILITY TABLE (BAT) BLOCK AVAILABILITY TABLE HEADER DIRECTORY STRUCTURE . . . • .
Directory Overview Directory Information Block Directory Entry . • • Directory Entry Block Dir'-'ctory Header Notes on directories DISK BLOCK HEADER . DISK _$ERROR_INFO DISK/VOLUME FORMAT FILE MAP
APOLLO CONFIDENTIAL. INTERNAL USE ONLY. vii
1-1 1-1 1-2 1-2 1-3 1-4 1-5 1-5 1-6 1-7 1-8 1-8 1-9 1-10 1-11 1-12 1-12 1-14 1-15 1-16 1-17 1-18 1-18 1-18 1-19 1-20 1-20 1-21 1-22 1-23 2-1 2-1 2-1 2-1 2-2 2-2 2-3 2-4 2-4 2-4 2-5 2-5 2-6 2-6 2-8 2-8 2-9 2-10
REGISTRY FORMAT 2-11
Header Record 2-11
PPO Record • 2-11
Account Header 2-12
Account Record 2-12
Registry Record 2-13
STREAM FILE HEADER 2-14
UNIQUE IDENTIFIER (UID) 2-15
UID Hash Algorithm • 2-15
UIDs -- System • • • 2-16
VOLUME LABEL - - LOGICAL 2-18
VOLUME LABEL - - PHYSICAL 2-20
VTOC BLOCK 2-21
VTOC ENTRY 2-22
VTOC HEADER 2-23
VTOC MAP ENTRY 2-23
VTOC INDEX • • 2-24
CHAPTER 3 PROGRAMMING INFORMATION 3-1
ADDRESSING MODES 3-1
ADDRESS SPACE • • • • • • 3-2
Physical Address Space 3-2
Virtual memory 3-3
CALLING SEQUENCE 3-4
CONDITION CODES • 3-5
CONDITIONAL TESTS 3-6
FILENAME SUFFIXES 3-7
PATHNAME SYNTAX 3-8
STACK FRAME 3-9
STATUS WORD • • 3-10
CHAPTER 4 ERROR CODES AND MESSAGES 4-1
AEGIS ERROR CODES • • • • • • • • 4-1
BOOT ERRORS (PROM) • • • • • • • 4-17
BOOT PROM DIAGNOSTIC ERROR CODES (EXCEPT 020 MACHINES) • 4-18
BOOT PROM DIAGNOSTIC ERROR CODES (DN330) 4-20
BOOT PROM DIAGNOSTIC ERROR CODES (DSP90) 4-21
BOOT PROM DIAGNOSTIC ERROR CODES (DN5xx-T) 4-21 BOOT PROM DIAGNOSTIC ERROR CODES (DN560/570/580) 4-22
BOOT PROM DIAGNOSTIC ERROR CODES (DN3000) 4-23
MNEMONIC DEBUGGER ERROR CODES (PROM) 4-24
SYSBOOT ERROR CODES • • • 4-25
CHAPTER 5 SYSTEM DEBUGGING 5-1
BOOT SHELL COMMANDS • • • 5-1
DEBUG COMMAND EXTENSIONS 5-2
Apollc DEBUG Commands 5-2
Options to DEBUG Conunands 5-2
Miscellaneous • • • • • • • • • • • • • • • • • • • • • .5-2 DB (MACHINE LEVEL DEBUGGER)
Lights Program • • • • • • MNEMONIC DEBUGGER (PROM) CRASH ANALYSIS
Notes on DNx60 Crash Status SYSTEM DUMPS
/SYSTEST/SSR_UTIL • • • • • •
v i i i
5-3 5-5 5-6 5-15 5-15 5-16 5-17
APOUD CONFIDENTIAL. INTERNAL USE ONLY.
CHAPTER 6 PERIPHERAL I/O • . . • . . . AT BUS DEVICES (SERIES 300 MACHINES) DEVICE ADDRESSES (PIO)
DISK PARAMETERS , . I/O MAP ALLOCATION I/O MAP • • • • • • KEYBOARD
880 Keyboard - Map
880 Keyboard Chart - Physical
880 Keyboard Chart - Translated (,~ser mode) Low-Profile I Keyboard - Map
Low-Profile I Keyboard Chart - Physical . . Low-Profile I Keyboard Chart - Translated (user mode) Low-Profile I I Keyboard - Map ," • . • . . • . Low-Profile I I Keyboard Chart - ASCII Mode Low-Profile I I Keyboard Chart - Keystate Mode MAGTAPE CONTROLLER . . . • . . • . . . . .
System Configuration Pointer (at xxxFF6) System Configuration Block
Channel Control Block Parameter Block MULTI BUS DEVICES REGISTER SET TIMERS TOUCHPAD
XYLOGICS CONTROLLER
CHAPTER 7 DN300,DN320,DN330 ADDRESS SPACE (DN300/320) ADDRESS SPACE (DN330) . , CACHE CONTROL REGISTER (GACR) CACHE ADDRESS REGISTER (CAAR) CONFIGURATION . , . , . , , . DISK (FLOPPY/WINCHESTER) CONTROLLER DISPLAY CONTROL AND STATUS REGISTER (DCSR) DMA CONTROLLER
FAULT FRAME , FAULT TYPES . . FAULT VECTORS . FLOATING-POINT FORMAT
Single-Precision Floating-Point Format Double-Precision floating-point Format FLOATING-POINT REGISTERS
FPU • . . • • . • • . . . MEMORY CONTROL/STATUS REGISTERS (MCSR) MEMORY MANAGEMENT UNIT (MMU) (DN300/320) MEMORY MANAGEMENT UNIT (MMU) (DN330) PAGE FRAME TABLE ENTRY (PFTE) • . . PAGE TRANSLATION TABLE ENTRY (PTTE) PEB . . • . . . .
PROM ENTRY POINTS . . RING REGISTERS SERIAL I/O INTERFACE
APOLLD CONFIDENTIAL INTERNAL USE ONLY. ix
6-1 6-1 6-1 6-1 6-4 6-5 6-6 6-6 6-7 6-8 6-9 6-10 6-11 6-12 6-13 6-14 6-15 6-15 6-15 6-15 6-16 6-18 6-19 6-20 6-20 6-20 7-1 7-1 7-1 7-2 7-2 7-3 7-4 7-8 7-10 7-14 7-17 7-18 7-19 7-19 7-19 7-20 7-21 7-22 7-23 7-24 7-27 7-27 7-27 7-28 7-28 7-32
CHAPTER 8 DN400,DN420,DN600 ADDRESS SPACE . • • . CONFIGURATION . . . . DISPLAY BOARD JUMPERS
DN4xx • • . DN6xx . . • BLT REGISTERS
DISPLAY CONTROL AND STATUS REGISTER (DCSR) DN4xx • •
DN6xx • • FAULT FRAME FAULT TYPES FAULT VECTORS FLOATING-POINT FORMAT FLOPPY CONTROLLER . . I/O MAP . • • . • • .
MEMORY CONTROL/STATUS REGISTERS (MCSR) MCSR Control (Write-Only) . . MCS~ Status Register (Read-Only) MEMORY BOARD JUMPERS
MEMORY BOARD • . • • • • • • MEMORY MANAGEMENT UNIT (HMO)
PID/PRIV Register . . . CPU A Control Register MMU Status Register . Clear MMU Stat us Bus Status Register . Enable CPU B Register MONITOR TIMING (DN600) PAGE FRAME TABLE ENTRY (PFTE) PAGE TRANSLATION TABLE ENTRY (PTTE) PEB • . . • .
Definitions . . • . . • . PEB Control Register Bits Useful Combinations • • • PEB Status Register Bits FPP Commands . . . . RING/DISK . . . .
DMA Control/Status Registers SERIAL I/O INTERFACE
SIO Write Control/Status Registers SIO Read Control/Status Registers .
8-1 8-1 8-2 8-3 8-3 8-4 8-6 8-8 8-8 8-9 8-11 8-11 8-12 8-13 8-l3 8-15 8-15 8-15 8-16 8-17 8-18 8-19 8-20 8-20 8-20 8-20 8-21 8-2l 8-22 8-23 8-23 8-24 8-24 8-27 8-27 8-29 8-29 8-32 8-44 8-47 8-48 8-50
APOLW CONADOOIAL INTERNAL USE ONLY.
CHAPTER 9 DN460,DN660,DSP160 ADDRESS SPACE
BLT REGISTERS . . . . CACHE • • • . • • . • CPU CONTROL REGISTERS CONFIGURATION • • • • CONTROL PANEL (CPIO) REGISTERS
CPIO Control Registers CPIO Status Registers LED Register
Micro Machine Control Registers DISPLAY BOARD JUMPERS •
DISPLAY CONTROL AND STATUS REGISTER (DCSR) FAULT FRAME .
FAULT TYPES • . • • FAULT VECTORS • • • FLOATING-POINT FORMAT
Single-Precision Floating-point Format Double-Precision Floating-Point Format FLOATING-POINT REGISTERS
FLOPPY CONTROLLER . .
MEMORY CONTROL/STATUS REGISTERS (MCSR) MEMORY BOARD JUMPERS
MEMORY BOARD
MEMORY MANAGEMENT UNIT (~)
Region Register Array Segment Map • • . . • MONITOR TIMING (DN660) RING/DISK . . • • • . SERIAL I/O INTERFACE CHAPTER 10 DN5xx
ADDRESS SPACE (DN550) ADDRESS SPACE (DN560/570/580) CONFIGURATION . . . . CPU BOARD JUMP ERS • .
DISPLAY BOARD JUMPERS (DN550/560) DISPLAY BOARD JUMpERS (DN570) DISPLAY BOARD JUMPERS (DN580) DISPLAY REGISTERS . . DISK/TAPE/CALENDAR CONTROLLER FAULT FRAME •
FAULT TYPES • . . • • FAULT VECTORS • . . . FLOATING-POINT FORMAT FLOATING-POINT REGiSTERS FPU • . • . . • . . . . •
MEMORY CONTROL/STATUS REGISTERS (MCSR) MEMORY BOARD JUMPERS (DN550) MEMORY MANAGEMENT UNIT (MM:U) MONITOR TIMING (DN550/560) MONITOR TIMING (DN570) . . . . MONITOR TIMING (DN580) • . • • DISPLAY BOARD JUMPERS (DN550/560) MULTIBUS REGISTERS
APOLLO CONFIDENTIAL. INTERNAL USE ONLY. xi
9-1 9-1 9-2 9-2 9-2 9-3 9-4 9-4 9-4 9-4 9-5 9-6 9-6 9-6 9-7 9-8 9-9 9-9 9-9 9-9 9-10 9-10 9-11 9-12 9-13 9-13 9-13 9-14 9-14 9-14 10-1 10-1 10-2 10-2 10-3 10-4 10-5 10-6 10-7 10-9 10-14 10-14 10-15 10-16 10-16 10-16 10-16 10-17 10-17 10-18 10-19 10-20 10-21 10-15
PAGE FRAME TABLE ENTRY (PFTE) • • • PAGE TRANSLATION TABLE ENTRY (PTTE) PROM ENTRY POINTS • •
RING REGISTERS SERIAL I/O INTERFACE VME REGISTERS •
CHAPTER 11 DSP80, DSP80A, Dsp90 ADDRESS SPACE •
CONFIGURATION • CPU BOARD JUMPERS DMA CONTROLLER FAULT FRAME • FAULT TYPES • • FAULT VECTORS • FLOATING-POINT REGISTERS
MEMORY CONTROL/ STATUS REGISTERS (MCSR) MEMORY MANAGEMENT UNIT (MMU) MULTIBUS REGISTERS
PAGE FRAME TABLE ENTRY (PFTE) • PAGE TRANSLATION TABLE ENTRY (PTTE) PROM ENTRY POINTS • .
RING REGISTERS SERIAL I/O INTERFACE
CHAPTER 12 DN3000
ADDRESS SPACE BY PHYSICAL ADDRESS BEEPER
CALENDAR • . • CARTRIDGE TAPE
Data Register Coromand Register Control Register Status Register . DMA Go Register . DMA Reset Register CONFIGURATION . . . . CPU CONTROL/STATUS REGISTER DISK (FLOPPY/WINCHESTER) CONTROLLER DISPLAY (COLOR) • • • . • • • DISPLAY (MONOCHROME) FAULT FRAMES AND FAULT TYPES FAULT VECTORS • . . . • • FLOATING-POINT REGISTERS PARITY ERROR REGISTER • • PROGRAMMABLE INTERRUPT CONTROLLER RING . •
SIO • • TIMERS
APPENDIX A ASCII CHARACTER SET
APPENDIX B POWERS OF TWO
INDEX • . •
xii
10-23 10-23 10-23 10-24 10-26 10-26 11-1 11-1 11-2 11-3 11-4 11-4 11-4 11-5 11-6 11-6 11-6 11-7 11-9 11-9 11-9 11-9 11-9
12-1 12-2 12-3 12-4 12-5 12-6 12-6 12-6 12-6 12-6 12-7 12-8 12-9 12-16 12-21 12-25 12-26 12-26 12-27 12-27 12-29 12-35 12-35 A-1
B-1
1-1
APOLLO CONFIDENTIAL INTERNAL USE ONLY.
CHAPTER 1
AEGIS
AEGIS SYSTEM RELATIONSHIPS
NAME SERVER ,
• COMMANDS
--t--
~~~~~HERAL~HNAME I
UIDc~ USER
g g ~
PHYSICAL / DISKS
APOLLO CONFIDENTIAL INTERNAL USE ONLY.
,...-~=::::--,
1-1 AEGIS
ACTIVE OBJECT TABLE (ACT) AND ACTIVE SEGMENT TABLE lAST)
The AOT/AST is a wired system-wide table that describes the current state of active objects and their associated active segments. Each ASTE has enough information to identify the file segment and, through the associated AST_PMAPS, the location of each page of the segment. All virtual segments mapped to the same file segment will use the same ASTE entry. The AOTE acts as a cache of the VTOC entry. The table is dynamically allocated at startup based on physical memory size.
ACTIVE OB,IECT TABLE
AEGIS
(type naote_tn in vm.ins.pas)
+---+
+00
CACHED VTOCE HEADER . vtoce _ hdr +---+
+40 I VTOCE POINTER .vtoce_addr
+---+---+
+44 FRONT LINK BACK LINK
+---+---+
+48 I LINK TO FIRST AST I NUM SEGS. ACTIVE I
+---+---+---+
+4C I AOTE EVENT NUMBER j VIUGXXXX I DEEEEEEE I +50
+---+---+---+
.flink, .blink . aste _link, . event
V - vtoce header needs updating (. vhdr mod) - aote in transition (.in_trans) - U - aote usage bit (. used)
G - global transparent mod switch (. gtms) XXXX - volume index into dvt (. volx) D - dtm must be updated (.dtm_fl) E .. E - aote-hold-count (. ehcnt)
1-2 APOLLO CONFIDENTIAL INTERNAL USE ONLY.
ACTIVE SEGMENT TABLE lAST) AST: ARRAY[l .. N] OF ASTE_T
N is dependent on physical memory si.ze (type "aste_t" in vm.ins.pas)
+---+---+
+00 I BACK LINK TO AOT I FILE SEGMENT NUM. I
+---+---+
+04 FRONT LINK BACK LINK +---+---+
+08 I POINTER TO FILE MAP +---+---+---+
+OC I ASTE EVENT NUM I IUFRVVVV I PCCCCCCC I +---+---+---+
+10 1 QQQQQQQQ I SSNNNNNN I +12
+---+
Forward mapped machines also include:
+---+
.aote_link, .fsegno . flink,
.blink . fm_addr . event
+12 I ASTE TO MSTE BACK THREAD CHAIN .mst_thread
+---+
+16 I PHYSICAL ADDR OF PMAP .pmapyhadd
+1A +---+
I - aste in transition (.in_trans) U - aste usage bit (. used)
- file-map modified (. fm mod R - true i f object is remote (-:-remote) VVVV - index in dvt (. volx)
- padding (.padl) C .. C - aste-hold-count (.ehcnt) Q •• Q - padding (.pad2) SS - padding (.pad3)
N .. N - number of pages resident (.npr)
APOLW CONFIDENTIAL INTERNAL USE ONLY. 1-3 AEGIS
ACTIVE OBJECT TAB1 E HEADER
AEGIS
31 16 15
+---t---t
+00 I I I .hashtb[O .. 60]
+ +
HASH TABLE
START POINTERS
+ +
t - - - t - - - t
[0 .. 250]
for forward mapped
t7A I AOTE FREE POINTER . free_aote_ptr
+---t---+
t7E AOTE FREE LIST I .lru_aote
t - - - t - - - t
+80 I ASTE FREE POINTER I . free_asteytr
+---t---+
+84 ASTE FREE LIST I---DDDDI .lru_aste,
+---+---+ .
dm req+88 PROCESSES PER VOLUME .vm_cnt[l. .4]
+---t
+90 AOT SEQUENCE NUMBER I .aot_se~num
t---+
+94 AST SEQUENCE NUMBER I .ast_se~num
+---+
+98 NUMBER OF DISMOUNTS + .dism_seqn
+---+
+9C I EVENT COUNT FOR DISMOUNTER I . vm _ ec +---+
+AO GRACE RPLC PTR I .lrug
+A2 +---+
DODD - Dismount request flags (.dm_req) (bit 16 = volume 1)
1-4 APOLLO CONFIDENTIAL. INTERNAL USE ONLY.
AST PAGE HAPS - REVERSE MAPPED
AST_PMAPS: ARRAY [1 •• N] OF PMAP_T PAGE MAP ENTRY (PMAPE):
(type Dpmape_tn in vm.ins.pas) I f page is resident:
+---+---+
+00 IWWTRN---HHHHHHIPHYS PAGE NUMBER I R=l +---+
If page is NOT resident:
+---+---+
+00 IWWTRN---I FULL DISK ADDRESS I R-O +---+---+
WW - Wired count (. wired)
T - page is in transition (. in_trans) R - page is resident in memory (. resident) N - Page is null. (no copy on disk) (.null)
AST PAGE MAPS - FORWARD MAPPED
For DNx60, DN5xx-T if page is resident:
+---+---+
+00 IVUMIXTWWRNHHHHHHI PHYS PAGE NUM I R=l +---+---+
For DNx60, DN5xx-T if page is NOT resident:
+---+---+
+00 IVUMIXTWWRN I FULL DISK ADDRESS I R=O +---+---+
V - Entry is valid (. valid)
U - Page has been used, set by Hardware (. used) M - page has been modified, set by hardware (. pmod) I - Indirect entry (. indirect)
X - Page may be written (.write) H •• H - Disk address high bits Others as above.
For machines with PMMU (Series 3000) i f the page is resident:
+---+---+---+
+00 ITNRHHHHHI PHYS PAGE NUM I WW---MUPIV I R=l +---+---+---+
For machines with PMMU if the page is not resident:
+---+---+---+
+00 ITNRI FULL DISK ADDRESS I---MUPIVI R=O +---+---+---+
- Write protect (.writeyrot) Others as above.
APOUO CONFIDENTIAL. INTERNAL USE ONLY. 1-5 AEGIS
AEGIS
In forward mapped systems, these are the page tables used by the address translation hardware. AST_PMAPS are dynamically allocated one-.for-one with ASTEs.
(type "clock_tn in base.ins.pas)
1<- - - - -
-.high- - -->1<-
-.low -->1
47 33 32 16 15
+---+---+---+
I I I I
+---+---+---+
1<-
.high16-->1<- - - - -
.low32 - - - -->1
Low-order bit represents four microseconds.Clock. high is type clockh t (base.ins.pas);
low-order bit represents ~pprox. four milliseconds.
Hardware clock is only 16 bits. The upper 32 bits are maintained by clock interrupt routine. There are three hardware clocks (not counting calendar clock) :
Clock 1: 4 microseconds (real-time clock) Clock 2: 8 microseconds (process timer) Clock 3: 128 microseconds (real-time intervals)
1-6 APOUO CONFIDENTIAL INTERNAL USE ONlY.
PISK eONTROI,T,ER TABT,E ENTRX
(type dcte_t in io.ins.pas) 31
+---+---+
+00 ICONTROLLER TYPI CONTROLLER t I .ctype, .cnum +---+---+
+04 I CONTROLLER STATUS I • cstatu3 +---+
+08 I LOCK NUMBER I .lock_no
+---+
+DA I BLOCK HEADER POINTER I .blk_hdrytr +---+
tOE I BLOCK HEADER PAGE I .blk_hdrya +---+
+12 I I/O REGISTER PAGE POINTER I • csrsytr +---+
+22 I PAGE ZERO INTERRUPT VECTOR I . vector y t r +---+
+26 I ACTUAL INTERRUPT ENTRY I .int_entry +---+
+2A I DEV DEPENDENT INTERRUPT RTN I .int_routine +---+
+2E I DISK DINIT I .disk_dinit
t---+
+32 I DISK I/O ROUTINE .disk_do_io t---+
+36 I DISK ERROR RECOVERY .disk_error_que t---+---+
+3A I NCDL---I UNIT NUMBER I .dflags, .d_unit_irq +---t---+
+3E I PYSICAL DVTE INDEXES I .pdvte_index +44 t - - - t
DISK FLAGS:
N -
=
no headers on deviceC - ... do checkswmning for this controller D - 1 III driver supports multi-read requests (temp) L - 1 ... liberty (SInd) type winchester
APOLLO CONFIDENTIAL. INTERNAL USE ONLY. 1-7 AEGIS
PISK VOLPME T1\'BI,E ENTRY
(type dvte_t in disk.pvt.pas) 15
+---+
+00 I STATE I . state
+---+
+02 I BLOCKS PRE VOLUME I .blocks-per_vol +---+
+06 I OWNER PROCESS I .owner-proc +---+
+08 I BASE DADDR I .lv_base
+---+
+OC I UID OF PV OR LV I .uid +---+
+14 I PTR TO DEVICE CTR TABLE I . dcte
+---+
+18 I DVTE INDEX .pdvtex
+---+
+lA I DISK UNIT NUMBER I . unit +---+
+lC I DISK TYPE I . dtype +---+
+lE I BLOCKS PER TRACK I .blocks-per_track +---+
+20 I TRACKS PER CYLINDER I .tracks...Per_cyl +---+---+
+22 I DISK FACTOR I UNWI • bat_step, .flags +26 +---+---+
state: - free - being_mounted - aSSigned 3 - mounted
flags: U - use_ca11er_blkhdr N - no_crc_retry W - write ""'protect
EyENT CotWT
(type eventcount_t of base.ins.pas) 31
+---+
+0 I CURRENT EC VALUE I • value +---+
+4 I NEXT PROCESS I . nnext +---+
+8 I PREVIOUS PROCESS I • nprev +---+
AEGIS 1-8 APOLLO CONFIDENTIAL INTERNAL USE ONLY.
FAULT DIAGNOSTIC RECORP
(type "fault_Sdia9'_t" in fault.ins.pas) 15
+---+
+00 111011111110111111 . pattern (iDFDF) +---+
+02 I STATUS .status
+06
+
I WORD+
I+---+
REGISTERS +---+
. registers
+46 1- - - -RNFFFI • bus_info
+---+
+48 1 ACCESS ADDRESS I . access_address +---+
+4C I INTRUCTION REG I . inst _register
+---+
+4E I FLAGS I
+---+
R - Read operation (.write_op)
N - Not instruction reference (.not_inst) FFF - Instruction function code ( . function_code) :
001 User data 010 User program 101 Supervisor data 110 Supervisor program 111 Interrupt acknowledge
APOu.o CONADENTIAL INTERNAL USE ONlY. 1-9 AEGIS
MAPPED SEGMENT TABLE (MST)
AEGIS
The MST is a wired array indexed by asid and va. Each mste describes one segment of virtual memory.
MST: array[O .. (asid_tn*mst.Jlages_tn)-lJ of pinteger mst_entry_free ",. 0
mst.Jlages_tn is the number of mst entries needed to describe one asid.
mstes.j)er-page == page_size div sizeof mste_t mstJages_tn
=
mst_seg_tn div mstes.j)er.j)age1-10 APOUD CONFIDENTIAL-INTERNAL USE ONLY.
MAPPED SEGMENT TABLE ENTRY (MSTE) (type "mste_t" in vm..ins.pas)
31 16 15
+---+---+
+00
I
UID OF FILE . uid+---+---+
+08
I
FILE SEGMENT fj:I
EGxxxxxPPPPPPPPPI .
fsegno +---+---++OC INDEX OF VTOC ENTRY (VTOCX) .locx
I
ORI
I R C C C C C S Q Q Q Q Q _ I +10 +---+
E - 1 =) File extension allowed (. ext_ok) G = 1 ==) Interrrupt on ref (. guard)
for DNx60 =) --PPP for DN5xx-T .... ) PPPPP for DN3000 ==) ----P for others -) AAAAA AAAAA - Access (. access) :
00000 Nil (access_$nil) 00010 Read (access_$r) 00011 Read-execute (access_$rx) 00110 Write-read (access_$wr) 00111 write-read-execute (access_$wrx) 10010 Supervisor read (access_$sr) 10011 Supervisor read-execute (access_$srx) 10110 Supervisor write-read (access_$swr) 10111 Supervisor write-read-execute (access_$swrx) P - Probable ASTEX (. pastex)
R - Object is remote (.mate_remote) C - Touch ahead count (.mste_touch_cnt) S - Sequential access
Q - Next sequential page M - Mste-node
MAPPED SEGMENT TABLE ENTRY PAGES:
(defined in /os/kins/mst.pvt.pas) (type "mste Jages" in kins/mat. pvt. pas)
MSTE_PAGES : ARRAY[l.. (ppn_tn DIV mstj)ageJercentage] of mstJage_t mstyage_t : array[O .. mstes-perj)age - 1] of lllSte_t For systems with a virtual address space greater than 1Gb:
ARRAY[l. . (mst_sm_config
*
mstJ>agej)ercentage DIV 100 + «ppn_tn - mst_sm_config)*
mst_l_configj)ercent DIV 100» 1 of mst_page_tAPOLLO CONFIDENTIAL INTERNAL USE ONLY. 1-11 AEGIS
MSTE_PAGES is an array of pages that are wired as needed to support mappings in the mst. When a segment is mapped and the corresponding mst entry = mst_entry_free, a free page is found in the msteyages array and wired. I t ' s number is put into mst [entry] . The number of pages that can be used is limited at boot time to be some percentage of physical memory. See mst_$init.
MEMORY MAP (MMAP)
For all machine types an MMAPE (rnmap entry) is 12 (decimal) bytes in size.
MEMORY MAP ENTRY (MMAPE) !REVERSE MAPPED MACHINES)
AEGIS
(type "mmape" in mmap.pvt .pas)
15 0
+----+---+
+001 IARO 1 PTT INDEX 1 . pttx +----+---+
+02IPREV LSTICUR LISTI .prev_lst, +---+---+ .list +041 PPN NEXT PAGE . flink
+---+
+061 PPN PREV PAGE .blink +---+
+081 LOW DISK ADDR .daddr_1 +--+---+
+OA 1 D-I ASTE INDEX I . astex +--+---+
1 => Entry in use (. inuse)
A - 0 => Page is wired or in transit (. avail) R - 1 => Page mod' ed but dtro shouldn't
be updated (. rmod)
o 1 => page is on some memory page l i s t (.onlist) 1 => This page is holding data (as opposed
to code) (. d_pg)
MMAPEs are organized onto a number of lists, each list is described by a l i s t header (type ws~hdr_t in rnrnap. pvt .pas) the 'Leaders are collected into the mmap _$wsl array (type wsl_t in rnrnap.pvt.pas)
1-12 APOLLO CONFIDENTIAL. INTERNAL USE ONLY.
List name List index Use mmap_$xfree
mmap _ $xhi yure mmap _ $xpure mmap_$ximpure_l 3
nunap _ $xos _shared 5 mmap_$xnet_pager
mmap _ $xinit yroc 7
Pages not poi.nted at by a PMAPE . . . contain no useful data Pages not in use . . . have already been purified
Pages not in use . . . are pure, don't need to be written
Pages not in use . . . are impure, need to be written to local disk Pages not in use . , . are impure, need to be written to remote disk Pages in use by any of the Ll Aegis processes
Pages being , cached' by one of the network paging servers . . .
replaces the remote paging pool Pages in use by process 1 (DM) Lists after this hold pages in use by some process, assigned at process creation.
32 16 15
+---+---+
+00
I IP---I . cur_5ize+---+---+
+041
UNUSED I . flink I+---+---+
+081
.max_size I UNUSED+---+---+
+OCI .wsyri
+---+
+101
.la5t_w5_scan1
+---+---+
+141
.interr_cnt I .prot_size I+---+---+
=>
list is in use (. inuse)=>
scan l i s t periodically in real time (.p_scan). cur_size of pages (MMAPEs) on this l i s t . flink PPN of first page on this l i s t
(if .cur_size > 0) . . . anchors a doubly threaded l i s t of MMAPEs .max_5ize maximum of pages that this list can hold .ws_pri time (+:ime_$clockh) the process 'owning'
this last last ran
.last_ws_scan: time (time_$clockh) this last was last scanned
.interr_cnt used in scheduling scans on this list .prot_size list is always allowed to have this many pgs
on i t (i. e., list size won't be forced below this )
APOllO CONFIDENTIAl. INTERNAL USE ONLY. 1-13 .. AEGIS
OS MAPPING
, 2 4 . - - - ,
SINGLE NODE PROCESS
GLOBAL
VIRTUAL ADDRESS SPACE
AEGIS
ADDRESS SPACE MAPPING
1-14
:z3'r-'---,
NElWORK GLOBAL OBJECT SPACE
APOLW CONFIDENTIAL. INTERNAL USE ONlY.
PAGING SYSTEM
PHYSICAL MEMORY
APOLLD CONFIDENTIAL INTERNAL USE ONLY. 1-15
MAPPED SEGMENT TAULE
AEGIS
PROCESS CONTROl, Bl,OCK (PCB)
AEGIS
(type nprocl_ t n in procl. pvt. asm) 31
+---+
+00
-->
NEXT READY PCB .nextp +---++04
I -->
PREVIOUS READY PCB .prevp +---++08 I d2 I .save_d2
+---+
+---+
+lC I d7 I .save_d7
+---+
+20 I a2 I .save_a2
+---+
+---t
+28 a4 .save_a4
+---+
+20 I as I .save_db
+---+
+30 I a6 I . save_sb
+---t
+34 a7 I . save_sp
+---+
+38 I USP I .save_usp
+---t
+3C ICLOCKH_T AT START OF BC_$WAITI .wait_start +---+
+40 RESOURCE LOCK WORD • rlock +---t---t
+44 I PID I ASID I .mypid, .asid +---+---+
+48 IT.S. REM.*8MICIFLPT.PROC.TYPBI .vtimer .fpptype +---+---+
+4C I CPU TIME I . cpu_total
+---t---+
+50 I CPU TIME I priority 1 .priority +---t---+
+54 I STATE: TBPSW I PRI Minimum I . state, .pri_min t---t---+
+58 I PRl Maximum I Inhibit cr.+: I .pri_max . inh,;..oount t---+---+
+58 I bus status I pad I . sw_bsr .pcbyad t---t---+
State: T - Time slice end with rl.ock <> [} (tse_onb) B - Bound (bound)
- Suspension pending (suspyending) - Suspended (suspended)
W - Waiting (waiting)
1-16 APOllO CONADENTIAL INTERNAL USE ONLY.
procl_$state_t "'" SET OF (waiting, suspended, suspyending, bound, t se _ onb) ;
(State is type Dproc1_$state_tn in proc1.ins.pas)
£I.Q ~ Descript iQn
10 11 12 13 14 15 16 64 56
Initial user process and DM Null process
Wired DXM process Page purifier local Page purifier remote Unwired DXM process Network-receive server Network-paging server Network-request server Terminal helper First user process Second user process
Last user process
Note: Processes with an ASID of 0 run entirely in global space.
Note: If the debugger's Lights command has been given, there will be a Lights process with PID 11 or greater with a zero ASID.
Note: If the netsvc -servers option has been used there may be more net-paging and net-request servers.
Note: There can also be IIC guardian Process Ethernet router for Bridge nodes.
APOLLO CONADENTIAL. INTERNAL USE ONLY. 1-17 AEGIS
RING PACKET FORMAT
Message Headgr 15
+---;---+
+00 TO ADDRESS +---+
+04 I TYPE FIELD I
+---+---+
+06 I Os IEARLYACKI
+---+---+
+08 FROM ADDRESS
+---+
+OC HEADER
DATA
1(0 - 1024 BYTES) I
+40C +---+
Typg Field
AEGIS
15 14 13 12 11 10
+---+---+---+---+---+---+-:....---+---+
I BST I T T T T T T T
+---+---+---+---+---+---+---+---+
+---+---+---+---+---+---+---+---+
T T T T T T T T
+---+---+---+---+---+---+---+---+
Bit 15 - BST (Broadcast) - This bit is set in a packet intended to be broadcast to all receivers.
If i t is set, the To Address field is ignored.
Bit 14 thru 0 - T (Type) - This field determines whether a packet is to be received. Each 1 bit in the received Type f~"'ld is compared to the corresponding bit in the controller Type register. If any bit selected in the Type register is a 1, the message is received. If all bits selected in the Type register 0, the message is ignored. The APOLLO I only implements Bits 14 through 8 only; bits 7 through 0 never match.
1-18 APOLLO CONFIDENTIAL. INTERNAL USE ONLY.
Early Acknowledge Field
The Early Acknowledge field is inserted by the transmitter and modified by the receivers. For the purposes of the CRe calculation the EARLY ACK field is treated like a byte of zeros. This allows receivers to modify the ACK field without having to recompute the eRe checksum.
+---+---+---+---+---+---+---+---+
l O X I x 0 I Iep I x I PAR I a
+---+---+---+---+---+---+---+---+
Bit 7-0 - This bit is inserted to prevent the remaining bits in the late-acknowledge byte from being modified by the bit-stuffing protocol.
- This bit is not used.
Bit 5-X - Don't - This bit is not used.
Bit 4-0 - This bit is inserted to prevent the remaining bits in the late-acknowledge byte from being modified by the bit-stuffing protocol.
Bit 3-ICP - Intend to Copy - This bit is set by an addressed receiver i f i t was set up to copy a message and the type field matched. A NAK (negative acknowledge) condition is indicated when no receiver sets this bit.
Bit 2-x - Don't care - This bit is not used.
Bit I-FAR - Parity - This parity bit is set so that there are an odd number of bits in the late acknowledge byte.
Bit 0-0 - This bit is inserted to prevent bits in the late-acknowledge being modified by the protocol.
APOLLO CONFIDENTIAL. INTERNAL USE ONLY. 1-19
the remaining byte from bit-stuffing
AEGIS
Message pata
<---
8 bits--->+---+
I I
I Message Data 0 - 1024 bytes I
I I
+---+
The Message Data field varies in length from 0 to 1024 bytes but must always be an even number of bytes (on the Apollo I the controller always uses word DMA) . The contents of Message Data field is determined by the software; i t is transmitted verbatim.
RI!jSOURCE LOCK
AEGIS
Defined in base. ins. pas network_$serv_lock, (00 } rnt_$lock, ( O l } xpd $lock, ( 0 2 } te~_$lock, { 0 3 } proc2_$lock, { 04 10 } file $lock lock, {05 20 } ec2_$lOCk, - { 06 40 } srnd_$respond_lock, { 07 80 } srnd $request lock, ( 08 100 ) pbv:=$lock, - { 09 200 } aCl_$lock, { 10 400 } procl $create lock, { onb_$lock, - {
11 800 I
12 1000 faulted to CPUB bok..:..$lock, { 13 2000 runnable on B } disk $rnnt lock, {
vtoc:=$loc'k, { bat _ $lock, {
14 4000 ) 15 8000 ) 16 10000 ) ast $lock, { 17 pag - $lock, { 18
sm_Slock, ( 19
fIp $lock, ( 20 win:=$lock, { 21 rin9_$xmit_lock, {22 ml_$free7, { 23
20000 ) 40000 ) 80000 ) 100000 ) 200000 ) 400000 ) 800000 )
{ the next two locks are highest}
time _ $proc _lock, t ime_$ lock
( 24 1000000 clock process only) { 25 2000000 clock process data base
1-20 APOUD CONFIDENTIAL INTERNAL USE ONLY.
SYSTEM BOOT FILES
FILES REQUIRED DURING BOOT REQUESTING AGENT
prom /sysboot (records 2-b on track 0) (if DNx60 /saun/wcs.uc (microcode file)
or DN5xx-T) dcode. uc (instr. decode ram contents) spad. uc (DNx60 only) (scratchpad constants, temps)
sysboot
aegis
uload (program to load the above) / saun/ aegis
/saun/salvol
(aegis load file) (only if salvage required) (uncataloguedl
[os paging file]
/ / (uids found and saved by nam.e_Sinit)
shell / /com /sys/node data
/sys/peb Iticrocode or peb2 microcode (1) 'node_data/boot_shell (2) (mapped by proc2_Sinit) /sys/apollo_logo (3)
'node data/startup shell (3) (cmd fi.le to override dflts) /sys/;nv (shell tells him what to run)
env /lib/?*
/sys/dm/dm /sys/boot
"go" command or normal boot
"sh" or boot from sio line / sys/ spm/ spm "spm" or normal boot on server node dIn 'node data/dev/sio
/sysidm/fonts
'node data/startup [.191, . color, • 1280color, .1280bw] (3) /sys/boot
boot /registry/registry (4) (+ppo, account files pointed to) local registry
local=site/?*
/com/sh NOTES:
(1) PEB is disabled if microcode file not found.
(2) If booted from cartridge tape, the tape is first searched for BSCOM/RBAK _SHELL.
(3) Optional -- system will manage without it.
(4) If no registries are available, you can login only as USER. NONE. NONE.
APOllO CONFIDENTIAL. INTERNAL USE ONLY. 1-21 AEGIS
SYSTEM PJRECTQRUjS
AEGIS /bscom Icc Icom /core /dev /install /lib /saul /sau2 /sau3 /sau4 /sauS /sau6 /sau8 /sys
Boot shell command directory C compiler (optional) Shell commands directory Core graphics (optional) Peripheral I/O device definitions Installation scripts directory System libraries directory Stand-alone utilities for DN4xx/600 Stand-alone utilities for DN300/320/330 Stand-alone utilities for DSP80/80A/90 Stand-alone utilities for DNx60,DSPl60 Stand-alone utilities for DN550/560/570/580 Stand-alone utilities for DN5xx-T Stand-alone utilities for DN3000,DSP3000 /sys/alarm
/sys/boot /sys/dm /sys/dIn/fonts /sys/env /sys/hasp /sys/help /sys/ins /sys/mbx /sys/net
Alarm :server Boot shell file Display manager programs Display manager font definitions Process 1 initializer
Hasp support Help text files User insert files Mailbox helper
Netman (diskless node support) Per node read/write data files Store and foward files /sys/node data[.nn]
/sys/sf -
/ sys/ siologin Sioline login support /sys/source Selected source files /sys/spm Server process manager /sys/stream $sfcbs Stream mgr control blocks /sys/subsys- Protected system support / eye/ sysdev Stream device files / sysboot System boot file
/systest On-line system tests directory
1-22 APOUD CONFIDENTIAL INTERNAL USE ONLY.
TRAP CODES
SVC -- 0 arguments SVC -- 1 arguments SVC -- 2 arguments SVC --3 arguments SVC -- 4 arguments
SVC -- any number of arguments SVC -- from GPIO interrupt routines Undefined (reflected to user space) Undefined (reflected to user apace) Undefined (reflected to user space) A Undefined (reflected to user space) B Undefined (reflected to user space) C Undefined (reflected to user space) D Undefined (reflected to user space) E Software-generated fault (pfm _ Serror _trap) F Undefined (traps to PROM debugger)
APOLLO CONFIDENTIAL INTERNAL USE ONLY. 1-23 AEGIS
CHAPTER 2 FILE SYSTEM
ACLS STRUCTURE
ACI, Header; Record
(type aCl_$hdr in acls.pvt.pas)
15 0
+---+
+0 I VERSION OF ACL I . version +---+
+02 I TYPE OF OBJECT . atype
\ FOR WHICH THIS \ I CAN BE ACL I +---+
+OA I I .def_nil
I DEFAULT NODE LIST I I FOR NEW ENTRIES I +---+
+OE I NUMBER OF ENTRIES I . nent s +---+
+10 INO. OF NODE LISTSI .nlists +---+
+12 NOT USED . spare +---+
+14 I .extra
NOT USED \ +34 +---+
ACL Record
(type acl $rep in acls,pvt.pas)
15 - 0
+---+
+0
HEADER +---+
+34 ENTRIES I .entries
array I
[1.acl_$entmaxl I of acl_ Sentry I +---+
APOLLO CONFIDENTIAL. INTERNAL USE ONLY. 2-1 File System
(type aCl_$entry in acl.ins.pas) 6'
+---+
+00 I PERSON UID I .pers in aCl_$sid +---+
+08 I PROJECT UID .proj in aCl_$sid
+---+
+10 I ORGANIZATION UID .org in aCl_$sid +---+
+18 I SUBSYSTEM UID I .subs in aC1_$sid +---+---+
+20 I NODE ID EXP DATE .node_t, .exp_date +---+---+
+28 I ACL RIGHTS I . rights
+---+
BLOCK AVAILABILITY TABLE (BAT)
(type nbat_blkn in vol.ins.pas)
31
+---+
+00 I BAT WORD [0) I
+---+
+04 I BAT WORD [11 I +---+
+---+
+3FC I BAT WORD [2551 I +400 +---+
First BAT block pointed to by BAT header in logical volume label (pv_label). BAT resides in contiguous records.
Bit 0, BAT WORD [OJ corresponds to first block (bat_hdr.base_add) in the logical volume. BAT bit ... 1 if block is available.
File System 2-2 APOLLO CONFIDENTIAL INTERNAL USE ONLY.
BLOCK AVAILABILITY TABLE HEAPER (type "bat_hdr_t" in vol.ina.pas)
31
+---+
+2C I NUMBER OF BLOCKS REPRESENTED I . n _ blk +---+
+30 NUMBER OF FREE BLOCKS . n _free +---+
+34 I DADDR OF FIRST BAT BLOCK 1 • addr +---+
+38 IBLK
'*
REP BY lat BIT IN BAT I .baae_add +---+---++3C I VCB---I BAT_
+---+---..,.---+
+40 1 STEP 1 I . bat _ atep
+---+ 1
I
UNUSED /
+4C +---+
V - Volume trouble, Bet by OS i f volume needa salvaging, cleared by SALVOL. (.vol trouble) C - Volume CHUVOLed (. vol_ chuvoled) - B - Volume being CHUVOLed (.vol_being_chuvoled) BAT header lives in logical volume label.
Offset a given are from start of label.
APOLLO CONFIDENTIAL INTERNAL USE ONLY. 2-3 File System
..
QIRECTORY STRUCTURE
Directory Oyeryiew (type dir_t in name.pvt.pas)
+---+
HEADER I
+---+
I LINEAR LIST I
+---+
I INFO BLOCK I
+---+
HASH THREADS I
+---+
I ENTRY I
I BLOCKS I
+---+
Directory Info B10gk
(type infoblk_hdr_t in name.pvt.pas)
+---+
Directory configuration information
Sequentially used directory entries
ACL manager's intial Acr~
description block Pointers to linked lists of
hashed entries Holding blocks for hashed
entries and/or link text
+00 I VERSION 1 M B Z I Info block version number
+---+
+02 INFO BLOCK LENGTH I Total length of info block +---+
+04 INFO BLOCK HDR LENGTH I Length of info blk hdr (8)
+---+
+06 1 M B Z I Reserved for future uae
+---+
+08 DEFAULT ACL OlD laID of ACL to be applied to FOR DIRECTORIES I directories catalogued in
+---+
this directory+OC I DEFAULT ACL UID I UID of ACL to be applied to I FOR FILES I files catalogued in this +---+ directory
+10 I 24 UNUSED BYTES I Reserved for future use
\ \
+30 +---+
File System 2-4 APOLLO CONFIDENTIAL INTERNAL USE ONLY .
Directory EDt ry
(type dir_entry_t in name.pvt.pas)
+---+
+00 I
ENTRY NAMEI 32
bytes of entry name+---+
+20
UNUSED I Reserved+---+
+22
I UNUSED I Reserved+---+
+24
I UNUSED I Reserved+---~----+---+
I I
+26
I NAME LENGTH I ENTRY TYPE II I I
Name length - #= of useful characters in entry name Entry type - 0
=
not in useI I I
+---+---+
1
=
name/UrD pair 3 == name/ link-dataI I
+28
I 4 WORDS OF II ENTRY DATA I
pair If entry type == 1, UrD Entry type = 3, =>
I (EITHER UID OR LINK I Link text: link text len, I TEXT DESCRIPTION) I
I I
Blk holds Ink text chrs, 1-144 Blk holds Ink text chrs,
145-256 +---+
Reserved for future use Directory Entry Block(type entry block t in name.pvt.pa6) total length -
150
bytes+---+
+00
I NEXT BLOCK NUMBER I Forward thread - doubly linked+---+
l i s t+02
I PREV BLOCK NUMBER I Backward thread - doubly lin.ked+---+---+
l i s tI I Use count - #= of used entries
+04
I USE COUNT BLOCK TYPE I in this blockI I Blk type - 0
=
not in useI I -1
=
hash blk with 3 dir entrs+---+---+
-3=
link text holding block+06
I ENTRY BLOCK I Either 3 dir entries or I DATA I Up to 144 chars of link text+---+
APOLW CONADENTIAL INTERNAL USE ONLY, 2-5 File System
Directory Header
(first part of type "dir_t" in name.pvt .pas) +---t
tOO I VERSION I version number of this directory (1) +---+
+02 I HASH VALUE I
*
of hash threads used for entry +---+ name hashing+04 LIST SIZE I t of entries configured into +---+ l.inear list (18) +06 I POOL SIZE I .. of entry blocks in this
+---+ directory (429) t08 I ENTRIES PER BLOCK I t of entries that fit in an
+---t entry block (3) +OA I HIGH BLOCK NUMBER I t of the highest entry block
+---+ used so far
tOe I FREE BLOCK THREAD I ... of the first block on the free +---t block list
tOE I UNUSED I Reserved for future +---+
t10 I UNUSED I Reserved for future +---+
t12 I UNUSED I Reserved for future +---t
t14 I UNUSED I Reserved for future use t---t
+16 I ENTRY COUNT I
'*
of entries currently catalogued +---+ in this directoryt18 I MAXIMUM COUNT I .. of entries this directory can +---+ hold (l300)
Notes on directories
1. To add an entry to a directory:
File System
A. Look for an unused entry in the linear list. If you find one, use it and you're done.
B. Hash the name you want to add:
- name is:
array [1 .. 32J of CHAR - lnth is useful lnth of name
sum: =0;
For i :
=
1 to 1nth DO sum :=
ord (name [i]) +2*sum;HASH_VAL ,.. sum mod HASH_VALUE;
C. Get the hash thread for the specified hash value and call that value the found block.
D. If the found block number is 0 then we need a new entry block, so:
2-6 APOLLO CONFIDENTIAl. INTERNAL USE ONLY.
a) See i f there are any blocks threaded through the free block l i s t and i f so, take one of those. Otherwise, bump the high block number and use that.
b) Initialize the newly obtained block, add i t to the end of the apprpriate hash chain, add the new entry as the first entry in the new entry block and you're done.
E. If there is an unused entry in the found block, use i t and you're done.
F. Change the found block value to the number in the current found block's NEXT BLOCK field and go to step D.
2. The searching rule for a directory is:
A. Look in the linear list.
B. Hash the name you're searching for.
C. Follow the hash thread for the specified hash value to the first entry block with that hash synonym.
D. Search all (3) of the entries in the found entry block
E. Follow the "next block number" in the found entry block to get a NEW found entry block. If the next block number is zero, then return NOT FOUND.
F. Go to step D with the newly found block.
APOLLO CONFIDENTIAL INTERNAL USE ONLY. 2-7 File System
DISK BLOCK HEApER
31 16 15
+---+---+
+00 I urD OF OBJECT
TO WHICHI .
uid+
I BLOCK BELONGS
+ +---:---+
+08
I PAGE NUMBER IN FILE I+---+
+OC I TIME WRITTEN (clock.high32) I
+---+---+---+
+10
I BLKTYP I SYSTYP I I+---+---+
+14
I UNUSED+
I+ +---+
.page .dtm .blk_type,
.sys_type
+18 CHECKSUM I . chksum
+---+---+
+lC I DISK ADDRESS I .daddr
+20 +---.:..---+
BLKTYP:
0 -
Data block1 - Level 1 index block in file map 2 -
3 - SYSTYP : - File
- Directory - System directory
PISK SERRCS INFO
31
+---+
+00
TIMEOF
R!WI
+---+
+04 DADDR I
+---+---+
+08
I B_PR_TRK I TRK_PR_CYL I+---+---+
+OC I REQUESTED I UID, page,
I HEADER I daddr
+---+
+2C I READ I
I HEADER I
+---+---+
+4C I VOLX PPN I
+---+---+
+50
STATUSI
+---+
File System 2-8 APOUD CONFIDENTIAL. INTERNAL USE ONLY.
DISK/VQPIME FORMAT
+---=----=+
I BLOCK 00 OF PHYSICAL VOLUME
+----1 PHYSICAL (1 BLOCK) 1 +---1 VOLUME LABEL
11+--1
III
+ - = - - - = - +
I +-> I I BLOCK 00 OF LOGICAL VOLUME (1 BLOCK)
I I LOGICAL
1---+
I I VOLUME LABEL 1---+ I
I I I I I
I
+---+
I II I I I I BLOCK 01 OF LV (10 BLOCKS)
I I BOOT I I I
I I FILE I I I
I I I I I
I
+---+
I II I I BLOCK OB OF LV
I FREE I I
I I I
BLOCKS I I
I I
+---+ I I
I 1<--+ I
I VTOC I I
I I I
+---+ I
I
1<----+
I BAT I
I I
+---+
I I
I I FREE I NOTE: all disk addresses I / / (DADORS) in a logical volume I I BLOCKS are relative to the start
I I I of a logical volume.
I I
+---+
I +--> I I LAST BLOCK OF LOGICAL VOLUME I I LOGICAL VOLUME I
I ILABEL (2nd COPY) I
I I I
I +==---===-+
+---> I NEXT LOGICAL I VOLUME I
Badspots may caU5e the VTOC to be non-contiguou5 and not adjacent to BAT. There may be dead space between logical volumes. Bad spots may not be added to the VTOC once i t has been INVOLed.
APOLLO CONADENTIAL. INTERNAL USE ONLY. 2-9 File System
+---+
+00 1 1----> DATA BLOCK 1 +---+
+04 1----> DATA BLOCK 2 +---+
+08 1 1
/ /
1 1
+---+
+7C 1----> DATA BLOCK 32 +---+
+---+ LEVEL 1 +80 1----> +---+
+---+ 1 1----> DATA BLOCK 33 +84 1 1--+ +---+
+88 +---+ 1 1 1----> DATA BLOCK 34
+---1 1 +---+
1 +---+ 1 1 1
1 1 1 1
1 1 +---+
1 1 1 1----> DATA BLOCK 288
1 1 +---+
1 1
1 LEVEL 3 I LEVEL 2 +-->+---+
1 1
1 256 1 I POINTERS I 1 TO 1 ILEVEL 21 I BLOCKS 1
1 1
+---+
+-->+---+
1 1
1 256 1 I POINTERS 1 1 TO 1 I LEVEL 11 1 BLOCKS 1
1 1
+---+
Maximum file size - (32+256+256**2+256**3) *1024 bytes - 17,247,300,000 bytes.
File map resides in VTOCE and AST entries.
File System 2-10 APOLLO CONFIDENTIAL. INTERNAL USE ONLY.
REGISTRY FORMAT
Header Record
(type ppo_$header_t in ppo.ins.pas) +---+
+0 I TRANSACTION UID FOR SALVAGING I .ppo_$xact_uid +---+---+---+---+---+
+8 I e l F I HDR LEN I NUMBER I READ +---+---+---+---+---+
+10 I WRITE I I PW LENIREC LENI .ppo_$rec_len +---+---+---+
+18 UNUSED UNUSED .ppo_$space,
+---+---+ . ppo _ $space2 C = 1 => committed (.ppo_$cornmitted)
F = 1 => local (.ppo $10cal flag)
NUMBER - number of entri;s (.ppO"_$nwn_entries)
READ - oldest software that can read this (.ppo_$r_vers) WRITE - oldest software that can write new (.ppo $w vers) PW LEN - minimwn password length (. ppo _ $min ylen) - - PPO Record
(type ppo_$record_t in ppo.ins.pas) +---+
+00
+08 PPO NAME .ppo_$name
+10
+ +18
+---+---+
+20 I NAMLEN I UID . . . I .ppo_$namlen +---+ • ppo _ $uid +28 1 ... 1---1
+---+---+
APOLLO CONFIDENTIAl. INTERNAL USE ONLY. 2-11 File System
Account Header
(type acct_$header in acct.ins.pas)
+---+
+00
I TRANSACTION UID FOR SALVAGING I .acct_$xact_uid+---+---+---+---+---+
+08 1 C 1 F IHDR LENINUM ENTI READ
+---+---+---+---+---+
+10 1 WRITE 1---1 PW LEN 1 REC LEN 1
+---+---+---+---+
+18
lCLOCKH TIME PERI UNUSED I .acct_$expyeriod+---+
C = 1
->
committed «.acct_$committed) F = 1->
local (. acct $local flag) HDR LEN - header length «. ac~t $hdr len) NUM ENT - number of entries (.;cct_$num_entries)READ - oldest software that can read this (.acct_$r_vers) WRITE - oldest software that can write new (.acct $w vers) PW LEN - minimum password length (. acct _ $min ylen) - - REC LEN - record length (.acct_$rec_len)
AccQunt Record
(type acct_$record_t in acct .ins .pas)
+---+
+00
I PERSON UID .acct_$pers_uid+---+
+08
I PROJECT UID I .acct_$proj_uid+---+
+10
I ORGANIZATION UID I .acct_$org_uid+---+
+18
1 ACCT PW 1 .acct_$pwd+
+20 1+---+
I EXP DATE I .acct_$exp_date*
+---+---+
+28
1---1 LAST LOGIN 1---1 .acct_$last_login*+---+---+---+
+30
1 FLAGS 1 NODE I HM LN I+---+---+---+
+38 1 1
\ HOME \ .acct_$home
1 1
+l38+---~---+
* local registries only
FLAGS - set of acct_$invalid (local registries only) (.acct $flags)
NODE - node type- (local registries only) (.acct_$node) 8M LN - home length (.acct_$home_len)
File System 2-12 APOUD CONFIDENTIAL INTERNAL USE ONLY.
Regi at Ty Record
(type rgy_$registry_t in rgy.ins.pas)
+---+---+
+00 I
FLAGS1 NUM
PNAMESI
.rgy_$count+---+---+
+04 I
LENGTHOF
REGISTRY NAMEI
.rgy_$nlen+---+
+08
FIRST PNAME I .rgy_$ent_name+---+
\ MORE LENGTHS AND NAMES AS I INDICATED BY COUNT FIELD I+---+
First pname is path of original registry; i t is used as lock.
APOLLD CONFIDENTIAL INTERNAL USE ONLY. 2-13 File System
STREAM E'ILE HEADER
31 16 15
+---+---+
+00 j HEADER LENGTH I VERSION .hdr_lgth, +---+---+ . version
+04 I e R e
+---+
+08 I RECORD LENGTH (SEE BELOW) + . rec_1gth +---+
+OC FILE LENGTH (INC. HEADER) . file_length +---+
+10 I--RRAESC I--CO----I---I---I +---+---+---+---+
+14
RESERVED
+20 +---+
eRC = -(integer sum of (1 + 3 thru n longwords»
RR - Record type (. rec type, stream $rtype t ) : 00 - var len w/co~nts (stream_$v1) - 01 - fixed length (stream $f2) 10 - no record structure (stream_$undef) A 0 => Binary, 1 => ASCII (.elb_flag)
1 => No automat~c type change (.expl~c~t_type) 1 => File may have holes (. sparse)
C 1 => Carriage control (ASCII only) (. cc) CO - Concurrency (.conc, stream_$fconc_t):
00 - N readers or 1 writer (stream $n or 1) 01 - N readers and 1 writer (stre~_$~_and_1) 10 - N readers and N writers (steam_$n_and_n) RECORD LENGTH: Record length for fixed
Maximum length for variable
o
for undefined record lengthStream file header is the first 32 bytes of a file to be accessed by the stream interface.
File System 2-14 APOLLO CONFIDENTIAl. INTERNAL USE ONLY.
tWIotJE IpENTIFIER mIp>
(type "uid_tll in base.ins.pas)
31 16 15
+---+---.. -+
I CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC I • clock
+---+---+---+
I iiii----I----NNNNINNNNNNNNNNNNNNNNI .node
+---+---+---+
C •• C - TOp 32-bits of clock (4 mSec units) i i i i - A counter i f more than one UID is generated
in one four-millisecond interval N •• N - Node ID
PIP Hash Algorithm
x = the four words of the UlD XORed together INDEX
=
X mod TABLE_SIZEwhere TABLE SIZE is the size of the table into which the urD is being hashed (e.g., vtoc_hdr.vtoc_size).
APOLLO CONFIDENTIAL INTERNAL USE ONlY. 2-15 File System
tlIpS - - Syst em
(from /os/nuc/uid_list .asm) uid $nil
ac()nil
00000000,0 00000100,0 disk structure canned PIDs (000002xx series) pv label $uid
lv -1abe1-$uid vtoc_$uid bat_$uid
00000200,0 00000201,0 00000202,0 00000203,0 canned object type UIDs (000003xx series) records $uid
hdr_undef_$uid object_file_$uid UNDEr $uid pad_$~id inputyad_$uid sio $uid dd()uid mbx_$uid nu1ldev $uid D3M area $uid D3M=sCh_$uid pipe $uid uasc:$uid directory _ $uid unix directory $uid mt~$~id - sysboot_$uid
00000300,0 00000301,0 00000302,0 00000304,0 00000305,0 00000309,0 0000030A,0 00000308,0 0000030C,0 0000030D,0 0000030E,0 0000030r,0 00000310,0 00000311,0 00000312,0 00000313,0 00000314,0 00000315,0 canned objects UIDs (000004xx series) display1 $uid
display2 -Suid name_$ca~ned_root_uid
00000400,0 00000401,0 00000308,0 special seg $uid 00000402,0 diskles;_$u'id 00000403,0 name_$canned_rep_root_uid 00000404,0 display3 $uid 00000405,0 os_wired:=$uid 00000406,0
File System 2-16 APOLLO CONFIDENTIAL INTERNAL USE ONLY.
canned person. project, organization and subsystem UIDs (005xx series) canned persons (0000050x series)
00000500,0 canned projects (0000054x series) acl_$sysyroj_uid
acl_$login_uid acl_$locksmith_uid
00000540,0 00000541,0 00000542,0 canned organizations (0000058x series)
00000580,0 canned subsystems (000005Cx s.eries)
000005CO,0 canned ACL type UIDs (000006xx series) acl $file acl.
aCl=$dir_-;cl
00000600,0 00000601,0 canned ACL UIDs (file ACLs) (0001xxxx series) ac1_$fnil
ac1 $fndwrx aCl=$file_nwrx
00010000.0 0001BOOF,0 0001B007,0
canned ACL UIDs (directory ACLs) (0002xxxx series) acl_$dnil
acl $dndcal acl=$dir_ncal
APOLlD CONADENTIAL INTERNAL USE ONLY.
00020000,0 0002801F,0 0002BOOF,0
2-17 File System
YOI.PME LABEr. - - LOGrCAL
31 16 15
+---+---+
+00 1 VERSION UNUSED I . version
+---+---+
+04 I I .name
/ LOGICAL VOLUME NAME /
I I
+---+
+24 UNIQUE ID OF 1 • id
+
I LOGICAL VOLUME
+
I +---+
+2C I I .bat_hdr
/ BAT HEADER /
I +---+
+4C 1 1 .vtoc_hdr
/ VTOC HEADER /
I I
+---+
+sO 1 TIME LABEL WRITTEN 1 .label_write_time +---+
+B4 1---1 LAST MOUNTED NODE 1 .last_mounted_oode
+---+
+B8 1 TIME SYSTEM WAS BOOTED 1 .node_boot_time +---+
+BC I TIME THIS VOLUME WAS MOUNTED 1 +---+
+cO 1 TIME THIS VOLUME WAS DISMOUNTED 1
+---+
+C4 1---1 NODE OF LAST SALVAGE 1
+---+
+C8 1 TIME SALVAGE COMPLETED 1
+---+---+
+CC IMODE OF SALVAGE 1 SHUTDOWN STATE 1 +---+---+
+DO I TIME DUMP STARTED I +---+
+04 I TIME DUMP FINISHED I +---+
+08 1 UID OF CURRENT 1
+
I ITEM BEING ~UMPED
+ +---+---+
CONTINUED ON NEXT PAGE 1
• dismounted_time
• salvage_node
• salvage_t~
• salvage_mode,
• sy:s_shut_state
• dwnp _start_time
File System 2-18 APOLLO CONROENTIAL INTERNAL USE ONlY.