이 글을 system call에 대해 제가 이해한 부분까지 정리해놓은 글입니다.
(더 자세한 내용은 레퍼런스를 참조해주세요)
system call (syscall)
운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
바꿔 말해 프로그래밍 언어에서 지원하지 않는 기능을 운영 체제에게 처리해달라고 부탁하는 것이다.
커널과 응용 프로그램은 CPU의 권한 수준(privilege levels)이나 하드웨어 접근 능력이 다르다.
커널은 CPU 시스템의 특정 메모리 위치에서 동작한다.
커널의 기계어 코드에서 사용하는 모든 주소는 물리 주소로 고정되어 컴파일되고 로드되어 실행된다.
커널은 부팅과정에서 전체 메모리 리소스 중에 일정 부분을 점유하여 동작하고 인터럽트 등 모든 하드웨어 접근이 가능하다.
그러나 응용 프로그램은 커널이 제공하는 자원을 사용하므로 메모리에서 상황에 따라 다른 위치를 점유하고 실행된다.
그리고 CPU의 권한 수준이 사용자 공간(user space)에서 동작하며 특정한 기계어 명령어 실행이 불가능하다.
응용 프로그램이 자신의 권한을 넘는 일을 요청받는 경우 커널의 서비스를 이용해야 하는데
이 때 사용하는 것이 시스템 콜이다.
시스템 콜이 가져오는 기능은 아래와 같다.
1. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.
2. 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다.
3. 커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.
시스템 콜의 유형(시스템 콜이 할 수 있는 일)은
프로세스 제어, 파일 조작, 장치 관리, 정보 유지, 통신이 있다.
시스템 콜 vs 명령어 실행
시스템 콜과 명령어 실행은 개념이 다르다.
위에서 설명했듯이 시스템 콜은 응용 프로그램에서 수행할 수 없는 일을 요청받을 때 커널에게 도움을 요청하는 것이고
명령어 실행은 해당 프로그램이 가지고 있는 명령어들을 실행하는 것이다.
즉 명령어 실행을 하다가 처리할 수 없는 명령을 만나면 커널에게 넘겨 대신 처리해주는 구조이다.
레퍼런스
https://ko.wikipedia.org/wiki/%EC%8B%9C%EC%8A%A4%ED%85%9C_%ED%98%B8%EC%B6%9C
'background > linux kernel' 카테고리의 다른 글
[Lazenca][Development of Kernel Module] 03.ioctl(Input/Output control) (0) | 2024.03.28 |
---|---|
[Lazenca][Development of Kernel Module] 02.Character Device Drivers (0) | 2024.03.28 |
[Linux Kernel] Device Driver (0) | 2024.03.28 |
[Lazenca][Development of Kernel Module] 01.Hello world! (0) | 2024.03.28 |
fork-exec (1) | 2022.10.11 |