SYSTEM CALL (Syscall) 15.03.03 CSLAB SEWON PARK
Contents System Call System Call Number System Call Handler Realization Summary
SYSTEM CALL System Call is a Layer in between hardware and user space Abstraction Stability Virtualization *the only method for approaching kernel User Space Process Hardware System Call 사용자 공간에 하드웨어 인터페이스를 추상화된 형태로 제공 파일 입출력 시 애플리케이션은 파일시스템 형식 같은 것을 신경 쓸 필요 없다. 시스템 호출은
SYSTEM CALL printf() 호출 C 라이브러리의 printf() 함수 C 라이브러리의 write() 함수 애플리케이션 C 라이브러리 커널 POSIX SUSv3 그림: printf() 호출 시 애플리케이션, C라이브러리, 커널 사이의 관계 API Application Interface Kernel Interface
System Call Number 이름을 사용하지 않고 고유번호 사용 한번 할당 되면 변경 불가 시스템 호출번호 재사용 안함
System Call Number <asm/unistd.h> User Space Process #define __NR_restart_syscall #define __NR_exit #define __NR_fork #define __NR_read #define __NR_write #define __NR_open 1 2 3 4 5 System Call 3 sys_call_table NR_read Kernel
System Call Number Old New sys_ni_syscall() Old Program #define __NR_restart_syscall #define __NR_exit #define __NR_fork #define __NR_read #define __NR_write #define __NR_open 1 2 3 4 5 #define __NR_restart_syscall #define __NR_exit #define __NR_fork #define __NR_write #define __NR_open 1 2 3 4 5 Old New sys_ni_syscall() -ENOSYS 오류코드 반환 Old Program
System Call Handler Exception Kernel Mode Exception Handler F L F O L W Exception Handler Exception F L O W
System Call Handler int $0x80 Kernel Mode F L O W Exception vector 128 sysenter NR_syscalls ≤ EAX True False return -ENOSYS call *sys_call_table(, %rax, 8) *시스템 테이블의 각 항목의 크기:8byte If x86-32 4byte
Find the appropriate system call read() 함수 호출 Read() 함수 래퍼 System_call() Sys_read() 어플리케이션 C 라이브러리의 read() 함수 래퍼 시스콜 핸들러 sys_read() 사용자 공간 커널공간
if(!capable(CAP_SYS_BOOT)) Realization 정확히 하나의 목적 Bad Ex) ioctl() 매개변수 검사 포인터 유효성 확인 권한 유효성 확인 ex) 프로세스 관련 함수 일 때 PID값의 유효? ex) suser() capable() *using capability system if(!capable(CAP_SYS_BOOT)) Return –EPERM; Reference::<linux/capability.h>
System Call Context Review Syscall Context State Program Syscall Kernel Program User Space Syscall Exception Handler 커널이 프로세스를 대신하여 실행 휴면상태 가능 커널의 기능 사용 가능 완전 선점 가능 다른 작업에 선점 될 수 있음 *재진입이 가능해야 함
System Call long open(const char *filename, int flag, int mode) #define __NR_open 5 _syscall3(long, open, const char *, filename, int, flags, int, mode) 매개변수 n개 2 + 2 * n 개의 인자
“Should not create a system call” Warning “Should not create a system call” 시스템 호출이 추가되면 유연성이 없어진다.
FAST Summary “Provide mechanism, not policy” Simplicity Expandability Compatibility Portability FAST ∵Context Switch And... Linux is perfect