Operating System 5주차 - System Call Analysis - Real-Time Computing and Communications Lab. Hanyang University yjuly0708@hanyang.ac.kr rooterby@gmail.com
Contents Previous Class Question & Answer 시스템 콜 이란? 시스템 콜 처리 과정 IDT fork() 분석 과제 3
Previous Class Question & Answer 1. 커널 컴파일 도중 다음과 같은 메시지가 뜹니다. VirtualBox로 설정한 우분투의 메모리가 부족해서 생기는 현상으로 아래의 순서대로 해결할 수 있습니다. 1. 우분투를 완전히 종료한다. 2. Virtualbox 설정옵션으로 들어가서 메모리를 2048Mb이상 할당한다. 3. 처음부터 다시 컴파일을 시도한다.
Previous Class Question & Answer 2. 컴파일 도중 오류가 났을 때, 의존성 있는 파일들을 지우는 방법 /usr/src/linux 에서 다음과 같은 명령어를 입력해줍니다. $ sudo make clean $ sudo make mrproper 주로 컴파일 도중 에러가 발생하였을 때 사용하시면 됩니다.
Previous Class Question & Answer 3. 커널 컴파일은 꼭 다음과 같은 순서로 진행하여야 하며, 앞의 명령어에서 문제가 발생하면 나머지 부분이 제대로 진행되지 않습니다. $ sudo make menuconfig $ sudo make $ sudo make modules $ sudo make modules_install (‘_’ 언더바 주의할 것) $ sudo make install
Previous Class Question & Answer 4. 커널 컴파일 후 설치가 제대로 되었는지를 확인하고 싶으면, 다음의 명령어를 입력하여 확인할 수 있습니다. $ sudo update-grub Found linux image: /boot/vmlinuz-3.xxxxxx 를 통해 설치된 커널 버전을 확인할 수 있습니다.
Previous Class Question & Answer 5. grub 설정을 변경하지 않고, 우분투를 킴과 동시에 커널버전을 선택하고 싶으면 검은색화면에서 F12를 누르시면 됩니다. 4주차 ppt를 마지막 부분을 보시면, 항상 선택 창이 나오도록 설정을 변경할 수 있으니 참고하시기 바랍니다.
시스템 콜 이란? 시스템 콜 이란 사용자 수준 응용 프로그램에게 커널이 자신의 서비스를 제공하는 인터페이스이다. 리눅스 커널은 각 시스템 콜을 Handler로 구현해 놓고, 요청되었을 때 해당 Handler를 호출하여 서비스를 제공한다.
시스템 콜 이란? 사용자는 각 언어에서 제공하는 라이브러리를 이용하거나, 직접 시스템 콜을 사용하여 프로그램을 개발한다. 시스템 콜은 User Application이 수행할 수 없는, 권한이 없는 작업을 수행하기 위해 필요하다. User Applications System Calls Kernel Hardware Library
시스템 콜 처리 과정 1. 시스템 콜 번호 저장 2. Trap 3. Return System call Handler rax 레지스터에 시스템 콜 번호 저장 (32bit 머신의 경우 eax) 2. Trap int 0x80 IDT를 통해 system_call() 함수 호출 sys_call_table 통해 핸들러 함수 호출 3. Return System call Handler ret_from_sys_call() 함수로 사용자 프로세스로 돌아감.
시스템 콜 처리 과정 … 56 clone 57 fork 58 vfork devide_error(); Debug(); IDT user task 0x00 0x80 devide_error(); Debug(); Nmi(); ... System_call(); ENTRY(system_call) /* arch/x86/kernel/entry_64.S */ SAVE_ALL … Call *sys_call_table(, %rax, 8) ret_from_sys_call main() { ..// pid = fork(); ... } GNU C Library ... fork() { movl 2, %rax int 0x80 …} sys_call_table … 56 clone 57 fork 58 vfork /* kernel/fork.c */ do_fork();
IDT IDT(Interrupt Descriptor Table) 인터럽트 처리를 위해 사용한다. IDTR은 IDT의 위치를 가리키는 레지스터이다.
fork() 분석 아래에 간단한 fork를 이용한 프로그램을 통해, fork 시스템 콜이 커널에서 어떻게 동작하는지 알아보겠습니다.
fork() 분석 1. 사용자 수준 응용프로그램에서 clone system call에 의해 fork 호출 시스템 콜의 호출을 추적하는 strace 명령어를 통해, 확인 가능 간단한 fork 예제를 만들고, $ strace –i ./test 입력
fork() 분석 2. Compile 된 GNU C Library에서 인터럽트 발생, IDT를 보고 시스템 콜 번호에 맞는 해당 핸들러 함수호출 /arch/x86/syscalls/syscall_64.tbl 시스템 콜 번호 확인 /arch/x86/um/sys_call_table_64.c
fork() 분석 fork system call이 호출되면 핸들러 함수 do_fork(…) 호출
fork() 분석 3. do_fork(…) Process 복사하는 copy_process(…)와 wake_up_new_task(…) 호출
fork() 분석 4. copy_process(…) task_create, 정보 복사, 초기화, sched_fork(…) 호출 초기에 wake_up 상태 아님.
fork() 분석 5. sched_fork(…) fork, clone 시 timer setup 해주고, 각 CPU Ready Queue에 넣어준다 p->state = TASK_RUNNING 로 변경해준다.
fork() 분석 6. wake_up_new_task() activate_task(…) 호출, on_rq = 1 (초기에 0, 새로 시작하는 프로세스)
fork() 분석 7. activate_task(…) 8. enqueue_task(…) enqueue_task(…) 호출 sched_info 와 sched_class 정보를 업데이트 해준다.
fork() 분석 전체 함수 콜 관계도
과제3 (System Call Analysis) 1. 위의 실습 자료를 토대로 “exit” 를 분석한다. “exit” system call 프로세스 종료 시스템 콜 사용자가 직접 호출하지 않아도 컴파일러가 프로그램 말단에 자동적으로 삽입 do_exit() 핸들러 함수를 통해 호출
과제3 (System Call Analysis) “exit” system call 함수 콜 관계도
과제3 (System Call Analysis) Due: 2015/04/10 실습 수업 시간 제출방법 보고서로 출력해서 수업시간에 제출 제출물 보고서 표지 과제 내용 요약 시스템 콜 동작과정 요약 exit 시스템 콜 동작과정 분석(스크린샷을 통해서 단계적으로 설명) 최종 함수 콜 관계도 첨부(실습 PPT 참고) 후기
과제3 (System Call Analysis) 문의사항 이름 : 김연준 E-Mail : yjuly0708@hanyang.ac.kr 이름 : 하태욱 E-Mail : rooterby@gmail.com 실습관련 질문 시 제목을 아래의 양식에 맞춰서 메일을 보내주세요. ex> [운영체제] 학번_이름 지연제출에 대해서는 감점이 있을 수 있음.