1
0
mirror of https://github.com/DoctorWkt/unix-jun72.git synced 2026-01-11 23:53:34 +00:00
2008-05-02 17:50:21 +00:00

57 lines
1.9 KiB
Plaintext

bne 3f / no
asr r2 / yes, it is a parent
cmpb p.stat-1(r2),$3 / is the child of this dying process a
/ zombie
bne 2f / no
clrb p.stat-1(r2) / yes, free the child process
2:
asl r2
3: / search the process name table for the dying process's parent
cmp p.pid-2(r2),r4 / found it?
bne 3f / no
mov r2,r5 / yes, put index to p.pid table (parents
/ process # x2) in r5
3:
cmp r2,$nproc+nproc / has whole table been searched?
blt 1b / no, go back
mov r5,r1 / yes, r1 now has parents process # x2
beq 2f / no parent has been found. The process just dies
asr r1 / set up index to p.stat
movb p.stat-1(r1),r2 / move status of parent to r2
beq 2f / if its been freed, 2f
cmp r2,$3 / is parent a zombie?
beq 2f / yes, 2f
movb u.uno,r3 / move dying process's number to r3
movb $3,p.stat-1(r3) / make the process a zombie
cmp r2,$2 / is the parent waiting for this child to die
bne 2f / yes, notify parent not to wait any more
decb p.stat-1(r1) / awaken it by putting it (parent)
mov $runq+4,r2 / on the runq
jsr r0, putlu
2: / the process dies
clrb u.uno / put zero as the process number, so "swap" will
jsr r0,swap / overwrite process with another process
0 / and thereby kill it; halt?
intract: / interrupt action
cmp *(sp),$rti / are you in a clock interrupt?
bne 1f / no, 1f
cmp (sp)+,(sp)+ / pop clock pointer
1: / now in user area
mov r1,-(sp) / save r1
mov u.ttyp,r1 / pointer to tty buffer in control-to r1
cmpb 6(r1),$177 / is the interrupt char equal to "del"
beq 1f / yes, 1f
clrb 6(r1) / no, clear the byte (must be a quit character)
mov (sp)+,r1 / restore r1
clr u.quit / clear quit flag
bis $20,2(sp) / set trace for quit (sets t bit of ps-trace trap)
rti / return from interrupt
1: / interrupt char = del
clrb 6(r1) / clear the interrupt byte in the buffer
mov (sp)+,r1 / restore r1
cmp u.intr,$core / should control be transferred to loc core?
blo 1f
jmp *u.intr / user to do rti yes, transfer to loc core
1: