You are here: Home » NewsFeeds » The original Unix init system (1972)

The original Unix init system (1972)








/ init — process control initialization
sys intr; 0
sys quit; 0
sys 38. / get console switches
cmp r0,$173030
bne 1f
help:
clr r0
sys close
mov $1,r0
sys close
sys open; ctty; 0
sys open; ctty; 1
sys exec; shell; shellp
br help
1:
sys mount; rk1; usr
sys mount; rk2; ssys
sys mount; rk3; crp
mov $’0,r1
1:
movb r1,tapx+8
sys chmod; tapx; 17
inc r1
cmp r1,$’8
blo 1b
sys creat; utmp; 16
sys close
sys unlink; dpdlock
sys fork
br daemon
sys fork
br dirass
sys fork
br dds
movb $’x,zero+8.
jsr pc,wtmprec
mov $itab,r1
br 1f
daemon:
sys exec; etcdpd; etcdpdp
sys exit
dirass:
sys chdir; usrmel
sys exec; melda; meldap
sys exit
dds:
sys exec; usrdd; usrddp
sys exit
/ create shell processes
1:
mov (r1)+,r0
beq pwait
movb r0,ttyx+8
jsr pc,dfork
mov r0,(r1)+
br 1b
/ wait for process to die
pwait:
sys wait
mov $itab,r1
/ search for process id
2:
tst (r1)+
beq pwait
cmp r0,(r1)+
bne 2b
/ take name out of utmp
sub $4,r1
mov r1,-(sp)
mov (r1),r1
sub $’0,r1
cmp r1,$’a-‘0
blo 2f
sub $’a-‘0-10.,r1 / map a-z into 10. on
2:
asl r1
asl r1
asl r1
asl r1
mov r1,0f
mov $zero,r1
2:
clr (r1)+
cmp r1,$zero+16.
blo 2b
sys open; utmp; 1
bes 2f
mov r0,r1
sys seek; 0:..; 0
mov r1,r0
sys write; zero; 16.
mov r1,r0
sys close
/ re-create user process
2:
mov (sp)+,r1
mov (r1)+,r0
movb r0,ttyx+8
movb r0,zero+8.
jsr pc,wtmprec
jsr pc,dfork
mov r0,(r1)+
br pwait
dfork:
sys fork
br 1f
bes dfork
rts pc
1:
sys quit; 0
sys intr; 0
sys chown; ttyx; 0
sys chmod; ttyx; 15
sys open; ttyx; 0
bes help1
sys open; ttyx; 1
bes help1
sys exec; getty; gettyp
sys exit / HELP!
help1:
jmp help
wtmprec:
mov r1,-(sp)
sys time
mov r0,zero+10.
mov r1,zero+12.
sys open; wtmp; 1
bes 2f
mov r0,r2
sys seek; 0; 2
mov r2,r0
sys write; zero; 16.
mov r2,r0
sys close
2:
mov (sp)+,r1
rts pc
etcdpdp:
etcdpd; 0
meldap:
melda; 0
usrddp:
usrdd; 0
usrdd:
melda:
usrmel:
rk1:
rk2:
rk3:
usr:
ssys:
crp:
ctty:
shell:
shellm:
dpdlock:
etcdpd:
tapx:
utmp:
wtmp:
ttyx:
getty:
.even
shellp: shellm
0
gettyp: getty
0
itab:
‘0; ..
‘1; ..
‘2; ..
‘3; ..
‘4; ..
‘5; ..
‘6; ..
‘7; ..
‘8; ..
‘a; ..
‘b; ..
0
.bss
offset: .=.+2
zero: .=.+8.; .=.+6; .=.+2.



 

Original article