User mode vs. Kernel mode
Process
User Stack
x86_64 calling convention
Register vs. Memory
argument vector
Executable Linkable Format (ELF) & loader
system call (syscall)
!!CAUTION!! some system call’s semantic may differ from POSIX standards
file descriptor
init.c → int main(void) → run_actions(argv) → run_task(char **argv) → process_create_initd(task) → thread_create (file_name, PRI_DEFAULT, initd, fn_copy) → initd→process_exec → load, do_iret
process_create_initd(task)
->process_exec
->argument_stack()
->process_wait
syscall이 호출되기 전 포인터에 대한 검증을 거친뒤 syscall을 실행
따라서 주소 값이 유저 영역에서 사용하는 주소 값인지 확인하는 함수, 유저 영역을 벗어난 영역일 경우 프로세스 종료