06_운영체제 구조
운영체제와 같이 크고 복잡한 시스템은 적절하게 동작하고 쉽게 변경 될 수 신중히 제작되어야 한다. 일반 적인 접근 방법은 한 개의 일관된 시스템보다는 태스크를 작은 구성요소로 분리 하는 것이다.
[간단한 구조(Simple Structure)]
운영체제는 처음에는 소형이면서 간단하고 제한된 시스템으로 시작 되었다. 최소의 공간에 최대의 기능들을 제공하도록 작성되어 있어서 모듈들로 주의 깊게 분할 되지 않았다. MS-DOS와 UNIX를 예를 들어 보자.
- MS-DOS : 인터페이스와 기능 계층이 잘 분리되어 있지 않다. 예를 들면 응용 프로그램이 기본 입/출력 루틴을 통하여 디스플레이와 디스크 드라이브에 직접 쓰기가 가능 하다. 이런 자유는 프로그램을 취약하게 만들었다. 따라서 사용자 프로그램이 고장나면 시스템 전체가 고장나게 된다. MS-DOS는 시작부터 하드웨어의 기능에 제한적이었으며 Intel 8088이 이중 모드와 하드웨어 보호 기능을 제공하지 않기 때문에 MS-DOS의 설계자들은 기본 하드웨어를 접근하도록 하용 할 수 밖에 없었다.
- UNIX : 처음에는 하드웨어 기능에 의해 제한 받는 시스템 구조였다. UNIX는 커널과 시스템 프로그램으로 구성되어 있는데 커널은 여러 가지 인터페이스와 장치 드라이버로 다시 분리 되었다. 이는 발전 할수록 추가되고 확장 된 것이다. 시스템 인터페이스 아래와 물리적 하드웨어 위의 모든 것이 커널이다. 시스템 호출을 통해 파일 시스템, CPU 스케줄링, 메모리 관리 그리고 다른 운영체제의 기능을 제공 한다. 이 모노놀리딕(Monolithic)구조는 구현하기 어렵고 유지보수하기도 어렵다.
[계층적 접근(Layered Approach)]
하향식(top-down) 접근법에서는 전체적인 기능과 특징이 결정되고 구성 요소로부터 분리가 된다. 정보의 은폐 또한 중요하다. 저 수준의 루틴에서 외부 인터페이스가 변경되지 않고 루틴 자체가 공시된 일을 수행한다면 자유스럽게 구현할 수 있는 대신 보안에 취약하기 때문이다.
계층적 접근 방식은 운영체제가 여러 개의 계층으로 나누어 진다. 최하위 계층(계층0)은 하드웨어이고 최상위 계층(계층 N)은 사용자 인터페이스 이다.
계층적 접근 방식의 장점은 구현과 디버깅의 간단함에 있다. 계층들은 단지 자신의 하위 계층들의 서비스와 기능(연산)만 사용하도록 선택 된다. 첫 번째 계층은 정의에 의해 하드웨어(하드웨어는 오류가 없다고 가정함)만을 사용하여 이 계층의 기능을 구현하기 때문에 나머지 시스템에 아무런 신경을 쓰지 않고 디버깅 할 수 있다. 첫 번째 디버깅이 끝나고 두 번째 계층을 디버깅 하는 동안 그것이 정확하게 동작한다고 가정될 수 있으며 이러한 과정이 반복 된다. 만일 어느 계층의 디버깅 중 오류가 발견되면 그 하위의 계층은 이미 디버깅 되었기 때문에 오류는 반드시 그 계층에 있다. 각 계층은 자신보다 저 수준의 계층에 의해 제공된 연산만 사용해 구현한다. 한 계층은 이러한 연산들이 어떻게 구현되는지 알 필요가 없고 이러한 연산들이 무엇을 하는 지만 알면 된다. (객체지향의 캡슐화와 비슷하다.) 따라서 계층을 나누면 시스템의 설계나 구현이 간단해 진다.
단점으로는 여러 계층을 정의하는 것이 어렵다. 예를 들어 예비 저장 장소(Backing store :가상 메모리 알고리즘에 의해 사용되는 디스크 공간)를 위한 장치 드라이버는 메모리 관리가 예비 저장 장소를 사용할 수 있는 능력을 필요로 하기 때문에 메모리 관리 루틴들보다 저 수준에 있어야 한다.
계층적 구현의 문제점은 다른 유형의 구현 방법보다 효율성이 낮다는 것이다. 각 계층은 시스템 호출에 오버헤드를 추가하며 그 결과 계층적 구조가 아닌 시스템보다 시스템 호출의 수행 시간이 더 오래 걸린다.
[마이크로커널(Microkernel)]
이 방법은 중요치 않은 구성 요소를 커널로부터 제거하고 그들을 시스템 및 사용자 수준 프로그램으로 구현하여 운영체제를 구성 하였다. 마이크로커널의 주 기능은 클라이언트 프로그램과 사용자 공간에서 수행되는 다양한 서비스간에 통신 설비를 제공하는 것이다.
클라이언트 프로그램과 서비스는 직접 상호 작용을 하지 않고 마이크로커널과 메시지를 교환함으로써 통신 한다.
마이크로 커널의 장점은
- 운영체제의 확장이 용이하다 모든 새로운 서비스는 사용자 공간에 추가되며 커널 변경은 최소화 된다.
- 다른 하드웨어로 이식이 쉽다
- 높은 보안성과 신뢰성을 제공
- 서비스가 잘못되더라도 운영체제의 다른 부분은 영향을 받지 않는다.
단점으로는 가중된 시스템 기능 오버헤드 때문에 성능이 감소 된다.
[모듈(module)]
모듈화 커널을 만들기 위한 운영체제 설계의 가장 최근의 기술은 객체지향 프로그래밍 기법을 사용하는 것이다. 이 접근법은 커널은 핵심적인 구성 요소으 ㅣ집합을 가지고 있으고 부팅 때 또는 실행중에 부가적인 서비스들을 링크한다.
이러한 설계는 핵심 서비스를 제공할 수 있게 할 뿐 아니라 특정 기능들을 동적으로 구현할 수 있게 한다. 예를들어 특정 하드웨어를 위한 장치와 버스 드라이버는 커널에 추가 될 수 있고 다른 파일 시스템도 적재 가능 모듈을 이용하여 지원 될 수 있다. 전체적인 결과는 각 커널의 각 부분이 정의되고 보호된 인터페이스를 가진다는 점에서 계층적 구조를 닮았다. 그러나 모듈은 임의의 모듈을 호출 할 수 있다는 점에서 계층적 구조보다 유연하다. 또한 중심 모듈은 핵심 기능만을 가지고 있고 다른 모듈의 적재 방법과 모듈들과 어떻게 통신하는지 안다는 점에서 마이크로 커널과 유사하다. 그러나 통신하기 위하여 메시지 전달을 호출할 필요가 없기 때문에 더 효율적이다.
'SW Engineering > OS Concept' 카테고리의 다른 글
08_시스템 부트 (0) | 2015.07.16 |
---|---|
07_가상 머신(Virtual Machine) (0) | 2015.07.16 |
05_운영체제 구조_설계 및 구현 (0) | 2015.07.16 |
04_운영체제 구조_시스템 프로그램 (0) | 2015.07.16 |
03_운영체제 구조_시스템 호출의 유형 (0) | 2015.07.16 |