오늘 다룰 내용은 특히 System Call에 대한 내용이다. 또한, OS의 Structure, component와 organization에 대해서 언급하도록 하겠다.
System Call이란 지난 시간에 언급했던 것 처럼, 다음과 같이 정의할 수 있다.
OS에 의해 제공되는 서비스에 대한 요청에 따라 커널에 접근하기 위한 인터페이스
주로 C나 C++ 같은 고급 언어에 의해 사용되며, 직접적인 system call보다는 high-level API를 사용해서 접근하게 된다.
각각의 System call에는 주로 번호가 부여된다.
사용자는 실제로 System Call이 어떻게 동작하는지에 대해 알 필요가 없다. 많은 OS의 detail이 숨겨져 있으며, 사용자는 어떤 값이 return되는지만 정확히 알면 된다.
System Call이 parameter를 전달할 때는 총 세 가지 방법이 사용된다.
- 가장 단순한 방법으로 register를 통해 전달한다. 다수의 parameter가 필요하다면 register의 크기는 매우 작기 때문에, 이러한 방법은 유용하지 않다.
- memory 내부의 block에 parameter를 저장하고, 이 block의 주소를 register를 통해 전달한다. 주로 Linux에서 사용되는 방식이다.
- Stack을 통해 전달한다.
다음으로, OS의 Structure에 대해 알아보자.
기본적인 OS Structure는 다음과 같다.
커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임지는 부분이다. 커널이 주로 담당하는 기능은 프로세스 관리, 메모리 관리, 시스템 관리, 입출력 관리, 프로세스간 통신 관리 등이다. 커널의 기능은 복잡하게 얽혀있으므로, 커널이 기능적으로 어떻게 구성되어야 하느냐에 따라 종류가 다양하다.
종류에 대해서 알아보기 전에 Layered OS design에 대해서 먼저 언급하겠다.
Layered OS design에서 N번째 Layer는 N-1번째 Layer를 사용하게 되고, N+1번째 Layer에 새로운 기능을 제공한다.
해당 design의 장점과 단점은 다음과 같다.
- 장점 : 디자인하기 쉽고, 디버깅이 편리하다. 모듈성이 높고, 단순하며 이식성이 높다.
- 단점 : layer 차가 많이 나는 경우, communication이 어렵고 과도하게 데이터가 복사될 수 있다.
다시 돌아와서 커널의 종류에 대해 알아보자. 커널에 추가되는 feature의 양에 따라 다음과 같은 분류가 가능하다.
- 단일형 커널(monolithic kernel) : 초창기의 운영체제 구조로, 핵심 기능을 구현하는 모듈들이 별도의 구분 없이 하나로 구성되어 있다. 초기 Unix 운영체제, Linux에서 사용되는 커널로, Application을 제외한 모든 기능들을 커널이 관리한다. 모듈 간의 통신 비용이 절감 된다는 장점이 있지만, 모든 모듈이 하나로 묶여 있기 때문에 버그를 처리하기 어렵고 각 기능이 서로 연결되어 상호 의존성이 높기 때문에 작은 결함 하나가 시스템 전체에 영향을 미칠 수 있다.
- 마이크로 커널(microkernel) : Scheduling, Memory 관리 등의 주요 기능만을 커널에 담아 가볍게 만든 기능이다. 기존의 시스템 기능은 유저 프로세스에 존재한다. 장점은 시스템이 견고하고, customization이 쉽다.
이렇듯 OS 디자인에는 simplicity와 performance 사이에 tradeoff가 존재하고, 일반적으로는 simplicity에 집중하면 된다고 한다.
'study > CS377 (2014)' 카테고리의 다른 글
CS377: Threads (0) | 2020.03.11 |
---|---|
CS377: Scheduling Algorithms (0) | 2020.03.11 |
CS 377: Processes (0) | 2020.03.11 |
CS377: OS and Architecture (0) | 2020.03.10 |
CS 377: Introduction (0) | 2020.02.17 |