system’calls’ - columbia universityjae/4118/l10-syscall.pdf · system’calls ’...
TRANSCRIPT
![Page 1: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/1.jpg)
System Calls
COMS W4118
1
References: Opera3ng Systems Concepts (9e), Linux Kernel Development, previous W4118s Copyright no2ce: 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.
![Page 2: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/2.jpg)
Address Space Overview
• Processes can’t access anything outside address space • How do they communicate with outside world?
2
Process A Process B Process C
Kernel Address Space
![Page 3: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/3.jpg)
System calls
• User processes cannot perform privileged opera3ons themselves
• Must request OS to do so on their behalf by issuing system calls
• System calls elevate privilege of user process – Must ensure kernel is not tricked into doing something a user process should not be doing
– Must verify every single parameter!
3
![Page 4: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/4.jpg)
Library vs. System Calls • C program invoking prinT() libc library call, which calls write() system call
4
![Page 5: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/5.jpg)
Examples of Windows and Unix System Calls
5
![Page 6: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/6.jpg)
System Call Dispatch • How should actual system call be invoked?
– Program can’t see kernel namespace
• Need hardware support to change privilege level • Traps
– Type of interrupt – SoYware interrupts and excep3ons – SoYware interrupts ini3ated by programmer – Excep3ons occur automa3cally
6
![Page 7: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/7.jpg)
Traps, Interrupts, Excep3ons
• On x86, int n (n=0:255) calls interrupts n • Some interrupts are privileged • Can’t be called by user mode • Others aren’t, e.g., syscalls • Processor transi3ons to privileged mode when handling interrupt
7
for(;;) { if (interrupt) { n = get interrupt number call interrupt handler n } fetch next instruction run next instruction }
for(;;) { fetch next instruction run next instruction { if (instr == “int n”) call interrupt handler n } if (error or interrupt) { n = get error or interrupt type call interrupt handler n } }
![Page 8: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/8.jpg)
Three kinds of interrupts
8
![Page 9: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/9.jpg)
System call dispatch
1. Kernel assigns system call type a system call number 2. Kernel ini3alizes system call table, mapping system call number
to func3ons implemen3ng the system call – Also called system call vector
3. User process sets up system call number and arguments 4. User process runs int X (on Linux, X=80h) 5. Hardware switches to kernel mode and invokes kernel’s
interrupt handler for X (interrupt dispatch) 6. Kernel looks up syscall table using system call number 7. Kernel invokes the corresponding func3on 8. Kernel returns by running iret (interrupt return)
9
![Page 10: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/10.jpg)
system_call() { sys_call_table[%eax]() } // arch/x86/kernel/entry_32.S
sys_write(…) { // do real work } // fs/read_write.c
Linux System Call Dispatch
10
movl __NR_write, %eax int 0x80 ret // libc User mode
kernel mode
0x80
write(fd, buf, sz) User program
IDT
system_call
sys_call_ table
sys_write
/arch/x86/kernel/ syscall_table_32.S
To find code for a Linux syscall: hlp://syscalls.kernelgrok.com
![Page 11: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/11.jpg)
System call parameter passing
• Typical methods – Pass via registers (e.g., Linux)
• More parameters than registers?
– Pass via user-‐mode stack • Complex: user mode and kernel mode stacks
– Pass via designated memory region • Address passed in register
11
![Page 12: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/12.jpg)
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 – Stub code copies parameters onto kernel stack before calling syscall code (kernel stack, will study later)
• Use special rou3nes to fetch pointer arguments – get_user(), put_user(), copy_to_user(), copy_from_user – Include/asm/uaccess.S – These func3ons can block. Why? – Why use these func3ons?
• OS must validate system call parameters
12
![Page 13: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/13.jpg)
Linux system call naming conven3on • Usually the user-‐mode wrapper foo() traps into kernel, which calls sys_foo() – sys_foo is implemented by DEFINEx(foo, …) – Expands to “asmlinkage long sys_foo(void)” – Where x specifies the number of parameters to syscall – OYen wrappers to foo() in kernel
• System call number for foo() is __NR_foo – arch/x86/include/asm/unistd_32.h – Architecture specific
• All system calls begin with sys_
13
![Page 14: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/14.jpg)
System Call from Userspace
• Generic syscall stub provided in libc – _syscalln – Where n is the number of parameters
• Example – To implement: ssize_t write(int fd, const void *buf, size_t count);
– Declare: #define __NR_write 4 /* Syscall number */ _syscall3(ssize_t, write, int, fd, const void*, buf, size_t count)
• Usually done in libc for standard syscalls
14
![Page 15: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/15.jpg)
Tracing system calls in Linux • Use the “strace” command (man strace for info)
• Linux has a powerful mechanism for tracing system call execu3on for a compiled applica3on
• 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
15
![Page 16: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/16.jpg)
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
16
![Page 17: System’Calls’ - Columbia Universityjae/4118/L10-syscall.pdf · System’Calls ’ COMS’W4118’ 1 ... • Use’the’“strace”’command’(man’straceforinfo) • Linux’has’apowerful’mechanism’for’tracing](https://reader033.vdocuments.us/reader033/viewer/2022050807/5ad995eb7f8b9a6d7e8b8f1e/html5/thumbnails/17.jpg)
Interes3ng 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
17