Skip to content
Snippets Groups Projects
  • rsc's avatar
    · f32f3638
    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