운영체제 시스템 콜
정의
시스템콜은 사용자 수준 응용들에게 커널이 자신의 서비를 제공하는 인터페이스를 말하며, 대표적인 예로 sys_fork(), sys_read(), sys_nice() 등이 있다.
동작방식
사용자 프로세서가 시스템콜을 요청하면 제어가 커널로 넘어간다(User Mode -> 커널 Mode)
커널은 내부적으로 각각의 시스템콜을 구분하기 위해서 기능별로 번호를 할당해놓는다.
해당번호는 커널 내부의 제어루틴을 정의한다.
커널은 요청받은 시스템 콜에 대응하는 번호를 확인한다.
커널은 그 번호에 맞는 서비스 루틴을 호출하게 되고, 서비스루틴을 모두 처리하고 나면 커널 mode에서 user모드로 다시 돌아온다.
예시 fork()
1. libc.a에서 fork() 시스템콜의 고유번호 인 ‘2’를 eax 레지스터에 저장하고, 0x80인터럽트를 발생한다.
2. 커널은 IDT에서 0x08주소에 있는 system.call() 함수를 찾는다.
3. system_call()함수에서는 호출된 시스템 콜 번호와 모든 레지스터를 스택에 저장하고 올바른 시스템 콜 번호인지 검사 후 sys_call_table에서 시스템 콜 번호에 해당하는 함수'sys_fork()'를 실행한다.
'프로그래밍' 카테고리의 다른 글
1일차. Triple 여행자 클럽 마일리지 서비스 (0) | 2022.07.05 |
---|---|
[스프링 공부] 스프링 IoC 컨테이너 (0) | 2021.10.13 |
[공부] 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 - 그레이들 셋팅 (0) | 2021.09.15 |
Web 취약점 - 정보누출 (0) | 2021.09.03 |
실전자바소프트웨어개발 (0) | 2021.08.31 |