mirror of
https://github.com/DoctorWkt/unix-jun72.git
synced 2026-01-13 15:27:49 +00:00
57 lines
2.1 KiB
Plaintext
57 lines
2.1 KiB
Plaintext
mov u.ttyp,r2 / put pointer to parent process' control tty
|
|
/ buffer in r2
|
|
beq 2f / branch, if no such tty assigned
|
|
clrb 6(r2) / clear interrupt character in tty buffer
|
|
2:
|
|
mov $runq+4,r2
|
|
jsr r0,putlu / put child process on lowest priority run queue
|
|
asl r1 / multiply r1 by 2 to get index into p.pid table
|
|
inc mpid / increment m.pid; get a new process name
|
|
mov mpid,p.pid-2(r1) / put new process name in child process'
|
|
/ name slot
|
|
movb (sp),r2 / put parent process number in r2
|
|
asl r2 / multiply by 2 to get index into below tables
|
|
mov p.pid-2(r2),r2 / get process name of parent process
|
|
mov r2,p.ppid-2(r1) / put parent process name in parent
|
|
/ process slot for child
|
|
mov r2,*u.r0 / put parent process name on stack at location
|
|
/ where r0 was saved
|
|
mov $sysret1,-(sp) /
|
|
mov sp,u.usp / contents of sp at the time when user is
|
|
/ swapped out
|
|
mov $sstack,sp / point sp to swapping stack space
|
|
jsr r0,wswap / put child process out on drum
|
|
jsr r0,unpack / unpack user stack
|
|
mov u.usp,sp / restore user stack pointer
|
|
tst (sp)+ / bump stack pointer
|
|
movb (sp)+,u.uno / put parent process number in u.uno
|
|
mov mpid,*u.r0 / put child process name on stack where r0
|
|
/ was saved
|
|
add $2,18.(sp) / add 2 to pc on stack; gives parent
|
|
/ process return
|
|
clr r1
|
|
1: / search u.fp list to find the files opened by the parent process
|
|
movb u.fp(r1),r2 / get an open file for this process
|
|
beq 2f / file has not been opened by parent, so branch
|
|
asl r2 / multiply by 8
|
|
asl r2 / to get index into fsp table
|
|
asl r2
|
|
incb fsp-2(r2) / increment number of processes using file,
|
|
/ because child will now be using this file
|
|
2:
|
|
inc r1 / get next open file
|
|
cmp r1,$10. / 10. files is the maximum number which can be
|
|
/ opened
|
|
blt 1b / check next entry
|
|
br sysret1
|
|
|
|
sysread:
|
|
jsr r0,rw1 / get i-number of file to be read into r1
|
|
tst r1 / negative i-number?
|
|
ble error1 / yes, error 1 to read it should be positive
|
|
jsr r0,readi / read data into core
|
|
br 1f
|
|
|
|
syswrite:
|
|
jsr r0,rw1 / get i-number in r1 of file to write
|