-
rsc authored
Various cleanup: - Got rid of dummy proc[0]. Now proc[0] is init. - Added initcode.S to exec /init, so that /init is just a regular binary. - Moved exec out of sysfile to exec.c - Moved code dealing with fs guts (like struct inode) from sysfile.c to fs.c. Code dealing with system call arguments stays in sysfile.c - Refactored directory routines in fs.c; should be simpler. - Changed iget to return *unlocked* inode structure. This solves the lookup-then-use race in namei without introducing deadlocks. It also enabled getting rid of the dummy proc[0].
f32f3638
initcode.S 335 B
# Initial process execs /init.
#include "syscall.h"
#include "traps.h"
# exec(init, argv)
start:
pushl $argv
pushl $init
pushl $0
movl $SYS_exec, %eax
int $T_SYSCALL
# for(;;) exit();
exit:
movl $SYS_exit, %eax
int $T_SYSCALL
jmp exit
# "/init\0"
init:
.string "/init\0"
.p2align 2
argv:
.long init
.long 0