x
This commit is contained in:
parent
4a87a0ae8b
commit
b154cf091c
|
@ -1,14 +1,8 @@
|
|||
# qemu -kernel starts at 0x1000. the instructions
|
||||
# there seem to be provided by qemu, as if it
|
||||
# were a ROM. the code at 0x1000 jumps to
|
||||
# 0x80000000, the _start function here,
|
||||
# in machine mode. each CPU starts here.
|
||||
.section .data
|
||||
.globl stack0
|
||||
# qemu -kernel loads the kernel at 0x80000000
|
||||
# and causes each CPU to jump there.
|
||||
# kernel.ld causes the following code to
|
||||
# be placed at 0x80000000.
|
||||
.section .text
|
||||
.globl start
|
||||
.section .text
|
||||
.globl _entry
|
||||
_entry:
|
||||
# set up a stack for C.
|
||||
# stack0 is declared in start.c,
|
||||
|
@ -22,5 +16,5 @@ _entry:
|
|||
add sp, sp, a0
|
||||
# jump to start() in start.c
|
||||
call start
|
||||
junk:
|
||||
j junk
|
||||
spin:
|
||||
j spin
|
||||
|
|
16
user/init.c
16
user/init.c
|
@ -31,8 +31,20 @@ main(void)
|
|||
printf("init: exec sh failed\n");
|
||||
exit(1);
|
||||
}
|
||||
while((wpid=wait(0)) >= 0 && wpid != pid){
|
||||
//printf("zombie!\n");
|
||||
|
||||
for(;;){
|
||||
// this call to wait() returns if the shell exits,
|
||||
// or if a parentless process exits.
|
||||
wpid = wait((int *) 0);
|
||||
if(wpid == pid){
|
||||
// the shell exited; restart it.
|
||||
break;
|
||||
} else if(wpid < 0){
|
||||
printf("init: wait returned an error\n");
|
||||
exit(1);
|
||||
} else {
|
||||
// it was a parentless process; do nothing.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Initial process execs /init.
|
||||
# Initial process that execs /init.
|
||||
# This code runs in user space.
|
||||
|
||||
#include "syscall.h"
|
||||
|
|
Loading…
Reference in a new issue