다양한 방법으로 OS를 구조화할 수 있다.
- MS-DOS같이 간단한 구조
- 초기의 Linux, UNIX같이 좀 더 복잡한 구조
- 추상적인 Layered 구조
- kernel에서도 핵심적인 부분인 Microkernel (embedded OS)
- 현대의 OS(Linux 등) 구조인 module 구조
Simple Structure
- 최소한의 공간만 사용하여 대부분의 기능을 제공하도록 만들어진다.
- 완전히 modules로 나누어 지지 않는다.
- 사용자 프로그램이 I/O 장치의 임의의 장소에 접근하여 데이터를 파괴할 수 있기에 신뢰도가 떨어진다.
🍎 interface없이 direct로 접근할 수 있다.
Non Simple Structure
- 초기의 70, 80s의 UNIX는 두 개로 분리 가능한 구조였다.
🍭 Systems programs과 The kernel
- 모든 것이 system call interface(이를 통해 kernel로 접근) 아래로 구성되었고, 물리적인 하드웨어 위로 구성되었다.
- CPU scheduling, memory 관리, file system과 같은 OS 시스템 기능을 하나의 level에서 많이 제공했다.
🍳 단일 정적 이진트리에 한꺼번에 kernel, OS의 모든 핵심 기능을 구현했다. (monolithic kernel structure)
- kernel내의 통신속도는 빨랐으나, 구현하기 어렵고 유지보수와 확장이 어려웠다.
- 하나의 입구를 통해서 접근해야 했다. 때문에 system call interface의 overhead가 거의 없었다.
Layered Approach
- OS가 여러 계층으로 나뉜다. 맨 위의 계층 N은 사용자 인터페이스고 맨 아래 계층 0은 하드웨어입니다.
- modules로 나뉘어져 있어 선택된 계층은 자신의 것과 하위 계층들의 서비스와 기능만을 사용할 수 있다.
🧀 하위 계층과는 인터페이스를 통해 접근한다. 아래의 계층은 모두 제대로 구현되었다고 가정한다.
- 구현이 간단하고 debugging이 간단하다. 하지만 중간의 layer를 결정하기 애매모호하여 어렵다.
🥩 위의 계층은 아래의 계층의 서비스만 이용할 수 있기에, 만약 위의 계층의 서비스가 필요한 프로그램이 있다면, 사용할 수 없다.
- 자신의 계층에 오류가 나면 자신의 계층만 debugging한다.
이때, 아래 계층은 완전히 debugging되었다고 가정한다.
- 인터페이스가 잘 정의되어야 한다. 여러 계층을 통해서 서비스를 받는 경우 overhead가 발생한다.
Microkernel System Structure
- kernel space에서 최대한 user space로 옮긴다.
아주 중요한 기능만 kernel에서 구현한다.
- message passing을 통해서 사용자 module간의 통신이 일어난다.
- microkernel은 가벼우며 확장하기 좋고, OS를 새로운 architectures에 이식하기 쉽다.
또한 kernel에서 실행되는 코드가 적기 때문에 안정적이고 modules로 구현되어 독립적이기에 안전하다.
- 하지만 kernel space의 통신 때문에 overhead(messages passing overhead)가 발생한다.
🍔 microkernel은 반드시 message passing이 필요하다.
하지만 modules은 필요없다.
user mode는 OS component로 고장나도 고치기 쉽기에 신뢰도가 높다.
Modules
🍱 layered approach와 닮은점으로 각각의 부분이 interface를 통해 module에 접근해 서비스를 요청한다는 점이 있다.
하지만 layered approach에 비해 더 유연한 구조이다.
- 대부분의 최신 OS는 적제가능한 kernel modules로 구현된다.
- 객체지향 접근방식으로 사용되며 새로운 modules을 kernel에 링크할 수 있다.
- 각각의 모든 핵심요소는 별도이다.
- modules들은 서로서로 이미 인지하고있는 인터페이스를 통해서 다른 인터페이스와 대화한다.
- 각각은 kernel내에서 필요에 따라 불러올 수 있다.
- modules는 microkernel은 모두 핵심 기능만을 가지고 modules는 다른 서비스를 동적으로 삽입하고 삭제할 수 있다.