40 Advanced Operating Systems Implementing System Calls
41 System Call Implementation Under Linux system calls have 2 separate function calls –The do_xxx call which does the work –The sys_xxx macro which deals with arguments a call numbers
42 System Call Implementation System calls involve switching from user to supervisor mode through an interrrupt (0x80 on PCs) _syscall macro generates the actual system call number (unistd.h) Interrupt routine handles the call (arch/kernel/entry.s) If legitimate, the routine looked up in sys_call_table[]
43 System Call Implementation Some call may be traced - ie debugged calls – using the syscall_trace function On return from system call a number of administrative tasks must be done –Send parent signals –Any pending interrupt service routines called –Signals handled
44 Implementing fork() & clone() Under Linux fork() and clone() are essentially the same call with some (important) differences –Fork() create a completely new process –Clone() creates a new thread within a process
45 Linux fork() versus traditional fork() UNIX fork() creates –New process environment –Copies data –Copies text* –Copies files, locks and signals –Creates new PID Linux fork() creates –New process environment –Makes data write protected (copies on write) –Copies files, locks and signals –Creates new PID * Text may be shared
46 Implementing fork() & clone() They both call do_fork() however clone() sets up some extra parameters beforehand –Set up a new set of register and stack pointers do_fork() is called as follows –do_fork(SIGCHILD, regs, esp, ®s); Or –do_fork(clone_flags, newsp, ®s);
47 Implementing fork() & clone() do_fork() –Creates a new stack –using kmalloc() –Gets a new process table entry The child or thread inherits all of the parents task structure but changes some entries –Exec flag, time, signal flags
48 Implementing fork() & clone() The difference between fork and clone is found at the final section of the call – when the task substructures are copied (or not!) –This copies files, file systems, signal handlers, memory management –The parent gets the child or thread pid
49 Fork and Clone Kernel Thread Process 1 User Space Kernel Space
50 Executable formats Before looking at exec a word on file formats – there are a number of different formats –a.out – the original UNIX format –COFF – Common Object File Format –ELF – Executable and Linkable Format There are others – lots of them!
51 Linux and file formats Linux supports a large number of file formats – each ones is tried until one works –Done by do_exec –Use linux_binfmt Loads binary Loads libs Deals with the core file They can be load as modules
52 ELF p_type p_offset p_vaddr p_filesz p_memsz p_flags p_type p_offset p_vaddr p_filesz p_memsz p_flags CODE DATA ‘E’ ‘L’ ‘F’ 0x e_indent e_entry e_phoff e_phentsize e_phnum PT_LOAD 0 0x PF_R, PF_X PT_LOAD x8059BB PF_R, PF_W Physical Header Physical Header