리눅스 fork 함수 호출
2018. 12. 15. 18:04ㆍOS/리눅스
반응형
1. 사용자 프로그램에서 fork()를 호출
2. C언어 라이브러리(libc)에서 fork()를 실행
3. fork() 의 시스템 호출 번호인 2번을 eax 레지스터에 저장하고 int $0x80을 실행하여 인터럽터 80번을 발생
4. IDT 테이블에서 0x80번째 항목을 찾음
5. 0x80 번째에 system_call() 함수의 위치가 저장되어 있기 때문에 함수를 실행
6. syetem_call() 함수는 어셈블리에서 ENTRY(system_call)로 정의
7. fork() 함수를 실행했을 때 C 라이브러리에서 eax 레지스터에 값을 저장
8. [call *sys_call_table(,%eax, 4)]에서 eax 레지스터에 저장된 값 -fork의 시스템 호출 번호는 2번을 이용해서 sys_call_table에서 2번째 함수를 찾음
9. 해당 함수는 sys_fork() 이기 때문에 sys_fork() 가 실행
10. fork() 는 실행결과에 따라서 반환값을 갖지만, 커널 영역과 사용자 영역은 값을 마음대로 주고 받을 수 없기 때문에 eax레지스터에 담아서 사용자 영역에 돌려줌
반응형
'OS > 리눅스' 카테고리의 다른 글
centos 7 apm yum install (0) | 2018.12.18 |
---|---|
linux kernel upgrade (0) | 2018.12.16 |
vi 편집기 분할 사용 / 외부 명령어 사용 (0) | 2018.11.20 |
TLS_packet export certificate (0) | 2018.09.30 |
리눅스 시스템 PDT -> KST 타임존 변경 (0) | 2018.09.30 |