운영체제의 SystemCall
OS가 Application에게 자원을 이용할 수 있도록 제공하는 인터페이스다.
이 인터페이스는 시스템 상의 치명적인 영향을 줄 수 있는 명령어에 대해서 불법 사용자로부터 실행되는 것을 막고자하는데, 이에 대해 내부적으로 DualMode(이중 동작모드)를 갖추고 있다.
운영체제의 Dual Mode
Dual Mode란 커널에서 중요한 자원을 관리하고 있는데, 사용자가 그 중요자원에 접근하지 못하도록 모드를 2가지로 분류한 것이다. 그게 바로 UserMode와 KernelMode.
User Mode
- 유저가 접근할 수 있는 영역을 제한적으로 둠 → 프로그램 자원에 함부로 침범하지 못하게 함
- User Mode에서 코드를 작성하거나 프로세스를 실행하는 등의 행동 가능
- ‘User Application Code’는 ‘UserMode’에서 실행된다.
PC register가 사용자 프로그램이 올라간 Memory를 가리키고 있을 경우, 현재 사용자 프로그램을 수행중이라고하며 CPU가 UserMode에서 수행중이라고 할 수 있다
Kernel Mode
- 모든 자원(드라이버, 메모리, CPU 등)에 접근, 명령 가능
- UserMode의 규모와는 다른, 컴퓨터의 내부의 모든 행동의 제어가 가능하게 됨
PC Register가 OS가 존재하는 부분을 가리키고 있을 경우, 현재 운영체제 코드를 수행중이라고 하며 CPU가 KernelMode에서 수행중이라고 할 수 있다
서로 다른 시스템 콜을 어떻게 구분할 수 있을까
운영체제는 시스템 콜이 요청되었을 때, 각 시스템 콜을 특정 숫자와 테이블을 사용해 구분한다. 각 단계를 설명하면 이렇다.
시스템 콜 요청 시 작동과정
1. 시스템 콜 번호 부여
OS가 각각의 시스템 콜에 고유 번호를 부여한다
File open: 1번
File write: 2번
File close: 3번
프로그램이 시스템 콜을 요청할 떄, 이 번호를 OS에 전달한다.
2. 시스템 콜 테이블
운영체제는 시스템 콜을 처리하기 위해 시스템 콜 테이블을 유지하게 되어있다. 이 테이블은 시스템 콜 번호와 해당 핸들러 함수의 주소를 매핑한다
1번 -> open()
2번 -> write()
3번 -> close()
3. 커널에서의 처리
프로그램이 시스템 콜을 요청하면 운영체제는
(1). 전달받은 번호를 테이블에서 찾기
(2). 해당 번호가 가리키는 함수(핸들러) 호출
(3). 요청된 작업(열기, 쓰기) 실행
4. 작업 완료와 알림
작업이 끝나면 OS는 CPU에게 인터럽트를 발생시켜 프로그램 작업이 완료되었음을 알린다.