Shine's dev log
운영체제의 구조 (2) 본문
이제 본격적으로 운영체제의 구조에 대해 살펴보자.
운영체제는 구조에 따라 크게 4가지로 분류된다.
지금부터 하나씩 살펴보자.
1. Simple Structure
가장 간단하고, 가장 오래된 운영체제의 구조이다.
가장 대표적인 운영체제로는 MS-DOS가 있다.
과거 컴퓨터의 메모리와 성능이 지금보다 안좋을 때 나온 운영체제이기 때문에
공간 활용을 극대화 시켰다.
그래서 모듈화로 구분되어 있다기보다는 하나의 큰 덩어리로 되어있는 구조이다.
위의 그림이 MS-DOS의 대략적인 구조를 나타낸 그림이다.
그림에서 볼 수 있다시피 일반 어플리케이션도 하드웨어에 직접적으로 접근을 할 수 있는 구조이다.
즉, 유저모드와 커널모드의 구분이 없어서 보안상으로 취약한 형태의 운영체제라고 할 수 있다.
또한, 이 당시에는 여러개의 프로그램이 돌아간다는 개념이 없었기 때문에
프로세스라는 컨셉조차 없었고, 하나의 프로그램이 메모리를 다 할당 받는 형태였다.
위의 그림은 MS-DOS에서
프로그램이 돌지 않을때와 돌때의 메모리 상태를 나타낸 그림이다.
우선, 프로그램이 돌지 않을때는 커널과 쉘이라고 불리는 명령어 해석기가 메모리에 올라와 있다.
이후 사용자의 요청으로 프로그램이 실행되면,
명령어 해석기에서 프로그램 실행 시 필요없는 부분은
버리고 프로그램에 최대한의 메모리를 할당해주는 방식을 사용했다.
하지만 MS-DOS와 같은 구조는 보안상 취약하고, 여러 프로그램을 돌릴 수 없기 때문에
너무나도 많은 단점을 보유하고 있었다.
2. Layered Approach
앞서 나온 단점들을 보완하기 위해 레이어드 방식으로 설계된 운영체제가 나왔다.
위의 그림과 같이 여러겹의 레이어 형태로 되어있는 구조의 운영체제이다.
이 때 하나의 레이어는 자신의 바로 한단계 안/밖에 있는 레이어와만 접근이 가능하다.
사용자는 가장 바깥레이어와 소통을 하는데, 만약 하드웨어에 접근하고 싶다면,
N번의 레이어 간의 연결을 거쳐 가야한다.
이런 구조는 운영체제의 유지보수와 확장이 용이하고 (모듈화 가능)
보안적으로 우수하다는 장점이 있지만, 너무 레이어 간의 절차가 엄격해서 성능이 떨어진다는 단점이 있다.
3. Monolithic Structure
앞서 말한 두가지의 구조를 짬뽕시킨게 바로 Monolithic Structure이다.
MS-DOS처럼 그냥 한덩어리로 되어있는 것은 아니고,
그렇다고 엄청 엄격하게 layered 되어있는 형태도 아닌
덩어리들이 조금씩 layered 되어있는 형태가 바로 Monolithic Structure이다.
즉, 기본적으로는 layer화 되어있지만, 너무 엄격하지는 않은 형태라고 할 수 있다.
이렇게 하나의 큰 덩어리의 소프트웨어 시스템을 커널 이라고 부른다.
이 커널이 Monolithic 형태의 운영체제의 핵심이라고 할 수 있다.
커널은 물리적 하드웨어보다는 위에, 시스템콜 인터페이스보다는 아래 위치해 있다.
이런 구조에서는 복잡하고 수많은 기능들을
하나의 레벨에서 처리할 수 있다. (엄격하게 layered 안되어있기 때문)
이런 Monolithic 형태의 운영체제의 가장 큰 장점은
성능이 좋다는 것이다.
그래서 거의 모든 유닉스 시스템 운영체제는 거의 다
monolithic 구조를 사용한다.
반면, 이런 구조는 한 덩어리로 이루어져 있어서 코드들 간의 dependency가 높아지고,
이렇게 되면 유지 보수가 힘들어진다.
즉, 하나의 코드를 고칠 때 그 주변부의 코드도 다 얽혀있다보니
그 주변부도 다 고쳐줘야 한다는 것이다.
또한 안정성과 보안성 측면에도 문제가 있는데, 아무래도 한 덩어리의 형태로 돌아가다 보니,
한 부분만 뚫려도 전체적으로 뚫리기 때문이다.
4. Micro kernel
monolithic 구조의 관리와 유지보수의 어려움때문에
Micro kernel 구조의 운영체제가 나오게 되었다.
이 구조에서는 Kernel은 Inter process, Memory, CPU 에 관한 부분 만 남기고
나머지 원래 커널에 있던 기능들은 사용자들의 영역으로 빼버리는 형태이다.
위의 그림이 Micro kernel 구조의 운영체제이다.
가운데의 커널부분을 최대한 작게 만든 특징이 있다.
만약 파일 시스템 (Monolithic 구조에서는 커널에 포함되어있다)을 통해 파일을 만들고 싶다면,
사용자 레벨에 있는 파일 시스템과 메시지로 소통하는 형태로 운영된다.
이렇게 커널부분은 작고, 어플리케이션 형태로 다 빼버리면
모듈러하게 만들어졌기 때문에 확장성이 좋고 유지보수 측면에서도 장점이 있다.
하지만 이런 어플리케이션과 계속해서 메시지를 주고받아야 하기 때문에
그냥 시스템콜 한번 날리면 바로 해결되는 Monolithic 구조에 비해
불편하다는 단점이 있다.
하지만, Mach나 seL4와 같은 커널들이 마이크로 커널 형태로
잘 설계되었고, 좋은 형태라는 평가를 받는다.
5. Hybrids
여담으로, Monolithic 구조를 좋아한 리누즈 토발즈와
Micro kernel 구조를 좋아한 타넨바움이 서로 치고받고 싸운적이 있다.
하지만, 요즘에는 운영체제를 딱 하나의 형식으로 단정지을 수 없다.
여러개의 구조가 섞인 형태로 되기 때문인데
윈도우의 경우 Monolithic과 Micro kernel형식이 섞여있고
맥OS의 경우에는 layered를 기본으로 여러가지 구조가 섞여있는 형태이다.
오늘 내용을 정리해보면
1. 운영체제의 구조는 크게 4가지가 있다.
2. 요즘에는 여러가지 구조가 섞인 형태로 발전되고 있다.
본 내용은 공부하며 정리한 것으로, 오류가 있을 수 있습니다.
'운영체제' 카테고리의 다른 글
프로세스 생성, 대체, 종료 (0) | 2020.04.09 |
---|---|
프로세스의 개념 (0) | 2020.04.08 |
운영체제의 구조 (BIOS, Policy & Mechanism) (0) | 2020.04.05 |
시스템 콜 (System call) (0) | 2020.04.01 |
운영체제란? (0) | 2020.03.31 |