System Calls

System Calls

System Calls COMS W4118 References: Operating Systems Concepts (9e), Linux Kernel Development, previous W4118s Copyright notice: care has been taken to use only those web images deemed by the instructor to be in the public domain. If you see a copyrighted image on any slide and are the copyright owner, please contact the instructor. It will be removed. 1 Address Space Overview Kernel Address Space Process A Process B Process C 2 System calls • User process normally runs in unprivileged user mode – Cannot perform privileged operations • User process issues system call to enter kernel mode – Privilege elevated, but only for predefined functions 3 Three kinds of interrupts • Hardware interrupts – Ex) network packet, while (1) { if (interrupt or exception) { timer, key press, n = interrupt/exception type mouse click call interrupt handler n } • fetch next instruction Exceptions if (instruction == int n) – Ex) dividing by zero call interrupt handler n else • run instruction Software interrupts } – Ex) int 0x80 4 Linux System Call Dispatch write(fd, buf, sz) User program movl __NR_write, %eax int 0x80 User mode ret // libc kernel mode sys_call_ system_call() { table IDT sys_call_table[%eax]() } // arch/x86/kernel/entry_32.S sys_write 0x80 system_call sys_write(…) { // do real work } // fs/read_write.c /arch/x86/kernel/ syscall_table_32.S To see code for a Linux syscall: http://syscalls.kernelgrok.com 5 Linux System Call Parameter Passing • Syscalls with fewer than 6 parameters passed in registers – %eax (syscall number), %ebx, %ecx, %esi, %edi, %ebp • If 6 or more arguments – Pass pointer to block structure containing argument list • Maximum size of argument is register size – Larger arguments passed as pointers • Use special routines to fetch pointer arguments – get_user(), put_user(), copy_to_user(), copy_from_user – Include/asm/uaccess.S – These functions can block. Why? – Why use these functions? • OS must validate system call parameters 6 Tracing system calls in Linux • Use the “strace” command (man strace for info) • Linux has a powerful mechanism for tracing system call execution for a compiled application • Output is printed for each system call as it is executed, including parameters and return codes • ptrace() system call is used to implement strace – Also used by debuggers (breakpoint, singlestep, etc) • Use the “ltrace” command to trace dynamically loaded library calls 7 System Call Tracing Demo • pwd • ltrace pwd – Library calls – setlocale, getcwd, puts: makes sense • strace pwd – System calls – execve, open, fstat, mmap, brk: what are these? – getcwd, write 8 Interesting System Calls • brk, sbrk: increase size of program data – void* sbrk(int bytes) – Accessed through malloc • mmap – Another way to allocate memory – Maps a file into a process’s address space – Or just grab memory with MAP_ANONYMOUS – MAP_PRIVATE or MAP_SHARED 9.

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    9 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us