Advanced Operating Systems Implementing System Calls 40 System

  • Slides: 13
Download presentation
Advanced Operating Systems Implementing System Calls 40

Advanced Operating Systems Implementing System Calls 40

System Call Implementation • Under Linux system calls have 2 separate function calls –

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 41

System Call Implementation System calls involve switching from user to supervisor mode through an

System Call Implementation System calls involve switching from user to supervisor mode through an interrrupt (0 x 80 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[] 42

System Call Implementation • Some call may be traced - ie debugged calls –

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 43

Implementing fork() & clone() • Under Linux fork() and clone() are essentially the same

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 44

Linux fork() versus traditional fork() • UNIX fork() creates – New process environment –

Linux fork() versus traditional fork() • UNIX fork() creates – New process environment – Copies data – Copies text* – Copies files, locks and signals – Creates new PID * Text may be shared • Linux fork() creates – New process environment – Makes data write protected (copies on write) – Copies files, locks and signals – Creates new PID 45

Implementing fork() & clone() • They both call do_fork() however clone() sets up some

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, &regs); • Or – do_fork(clone_flags, newsp, &regs); 46

Implementing fork() & clone() • do_fork() – Creates a new stack –using kmalloc() –

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 47

Implementing fork() & clone() • The difference between fork and clone is found at

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 48

Fork and Clone Process 1 User Space Thread Kernel Space 49

Fork and Clone Process 1 User Space Thread Kernel Space 49

Executable formats • Before looking at exec a word on file formats – there

Executable formats • Before looking at exec a word on file formats – there 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! 50

Linux and file formats • Linux supports a large number of file formats –

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 51

e_indent e_entry e_phoff e_phentsize e_phnum Physical Header p_type p_offset p_vaddr p_filesz p_memsz p_flags ‘E’

e_indent e_entry e_phoff e_phentsize e_phnum Physical Header p_type p_offset p_vaddr p_filesz p_memsz p_flags ‘E’ ‘L’ ‘F’ 0 x 8048090 52 52 2 ELF PT_LOAD 0 0 x 804800 68532 PF_R, PF_X PT_LOAD 68536 0 x 8059 BB 8 2200 4248 PF_R, PF_W CODE DATA 52