글
(1) 시스템 콜 처리과정
: |사용자 프로세스|====(시스템콜)====>|libc.a|====(0×80인터럽트발생)====>|커널에서 처리|
시스템콜은 소프트웨어 인터럽트로 볼 수 있다.
(2) 사용자가 fork()시스템콜을 호출한다 가정한다면!!(위의 그림 참조!!)
- c라이브러리 (libc.a)에서 fork시스템콜의 고유번호인 '2'를 eax레지스터에 저장하고 0×80인터럽트를 방생시킨다.
- 인터럽트가 발생하면 "사용자모드"->"커널모드" 로 바뀐다.
- 커널은 IDT에서 0×80 주소에 있는 system_call()을 찾는다. [system_call 은 시스템콜의 핸드러 함수 이다.]
system_call()은 arch/i386/kernel/entry.S에 구현되있다.
- system_call()함수에서는 호출된 시스템콜 번호와 모든 레지스터들을 스택에 저장하고 올바른 시스템콜 번호인지 검사후 sys_call_table [시스템콜테이블]에서 시스템콜 번호에 해단하는 함수를 호출한다.
- 이 함수가 종료하면, entry.S에 정의되 있는 ret_from_sys_call()함수에 의해 사용자 포르세스로 돌아간다.
※ 출처 : http://idkkangjs.blog.me/30091117058
'L inux > Kernel' 카테고리의 다른 글
모듈(Module) (0) | 2011.09.26 |
---|---|
시스템 콜(System Call) - 3 (0) | 2011.09.26 |
시스템 콜(System Call) - 1 (0) | 2011.09.26 |
리눅스 커널 컴파일 (0) | 2011.09.26 |
리눅스 부팅과정 (0) | 2011.09.23 |
RECENT COMMENT