개요
System Call 이란?
System Call은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
정말 간단하게 다시 말하자면, System Call은
커널에 접근하기 위한 수단 혹은 도구
이다.
그렇다면 우리는 커널에 왜 접근해야하는지를, 그리고 커널에 접근하는 수단과 도구가 따로 만들어진 이유를 알면 System Call에 대해 이해할 수 있다는 것이다.
System Call이 필요한 이유
커널에 왜 접근해야할까?
우리가 일반적으로 쓰는 프로그램들은 OS, 시스템의 힘을 빌려서 만들어진다.
유저 레벨의 함수들로는 고차원적인 동작을 하는 프로그램을 만드는게 사실상 불가능하다.
그렇기에 커널(kernel)의 도움을 반드시 받아야 한다.
커널은 크게 4가지 기능을 수행한다.
- 메모리 관리
- 프로세스 관리
- 장치 드라이버
- 시스템 호출 및 보안
위의 4가지 중 메모리와 프로세스 관리는 프로그램 구동의 거의 필수적인 요소이다.
위와 같은 커널들의 기능을 빌려야만 고차원적인 기능을 수행할 수 있기에 커널에 접근하는 것은 필수적이다.
커널에 쉽게 접근할 수 없는 이유?
그렇다면 ‘커널에 접근하는 것이 왜 어려운가?’ 가 다음 핵심 질문이 된다.
커널에 접근하는게 별 거 아닌 일이거나 흔한 구성 요소중 하나면 이 System Call 이라는 것이 등장하지도 않았을 것이다.
커널에 쉽게 접근할 수 없는 가장 핵심적인 이유는 권한 때문이다.
권한이 걸려있는 이유는 여러가지 이유가 있겠지만, 가장 쉽게 생각해볼 수 있는 이유들로는 해킹 방지와 시스템의 치명적인 부분 보호 정도가 있을 것이다.
결론적으로 System Call이 필요한 이유
결론적으로 System Call이 필요한 이유를 압축하자면,
"프로그램 구동의 필수적인 부분을 맡고있는 커널의 기능을 빌려야 고차원적인 프로그래밍이 가능한데,
권한으로 인해 커널에 함부로 접근할 수 없어서"
가 된다.
위의 이유로 System Call이라는 접근 수단을 만들어 커널의 기능들을 사용하자는 것이 된다.
System Call 의 동작
mode
동작에 들어가기 전에 일단 간단하게 모드에 대해서 알아보자.
대부분의 CPU는 두 가지 모드를 갖는데, 위에서 말한 kernel을 쓸 수 있는 kernel mode와 일반적인 사용자가 이용하는 user mode이다.
각 모드에서 할 수 있는 것들을 정리하면 다음과 같다.
Kernel Mode | 모든 명령어 hardware의 모든 feature |
User Mode | 일부 명령어 hardware의 일부 feature I/O와 memory protection과 관련된 모든 명령어는 제한 |
사용자는 평상시에는 user mode에 있다가, I/O와 memory protection과 관련된 명령어를 사용하게 되면 kernel mode로 들어가게 된다.
kernel mode로의 진입 : interrupt
kernel mode로 들어가야만 kernel의 기능들을 사용할 수 있는 것은 잘 알았다.
"그렇다면 어떻게 해야 kernel mode로 들어갈 수 있을까?"
kernel mode에는 interrupt라는 것을 통해 들어갈 수 있다.
interrupt는 크게 하드웨어적 interrupt와 소프트웨어적 interrupt로 나뉘는데, 하드웨어적 interrupt를 일반적인 interrupt라고 부른다.
소프트웨어적 Interrupt로는Trap과 System Call이 있다.
우선은 하드웨어 interrupt부터 보자.
Interrupt
interrupt는 하드웨어의 신호에 의해서 발생한다.
하드웨어 interrupt는 비동기적으로 동작한다. ▼
trap
소프트웨어적 흐름의 변화 혹은 소프트웨어 interrupt라고도 한다.
trap은 주로 interrupt와 비교되곤 하는데, 그 이유는 trap의 동작이 intterupt와 비슷하기 때문이다.
둘의 핵심적인 차이는 interrupt가 하드웨어적이라면 trap은 소프트웨어적이라는 것이다.
그래서 trap을 소프트웨어interrupt라고 부르는 것이다.
trap의 동작 과정은 아래와 같다. ▼
System Call
위를 보면 trap이 다 하는거 같은데 System Call은 trap과 무슨 차이점이 있는것이냐고 물을 수 있다.
실제로도 일은 trap이 다 하고, System Call은 trap을 이용한 인터페이스이다.
그렇다면 trap이랑 System Call이랑 본질적으로는 같은것이 아니냐? 라고 되물을 수 있는데, OS는 이 둘을 다르게 취급한다고 한다.
trap과 System Call은 둘 다 예외 처리를 작동시키는 것은 맞지만, 결과는 다른 타입으로 취급이 된다고 한다. ▼
+) 추가 정보
그림에는 생략되었지만 interrupt가 일어나면 register와 stack pointer가 저장된다.
저장된 register와 stack pointer를 토대로, kernel mode에서 빠져나올 때 실행하던 프로세스로의 재개가 이뤄진다.
'CS > 운영체제' 카테고리의 다른 글
CPU Scheduling (0) | 2024.03.04 |
---|---|
Process (0) | 2024.03.04 |
Operating System’s Structure (0) | 2024.01.29 |
Operating System 개요 (0) | 2024.01.29 |