-
운영체제 종류
-
MS-DOS : Single structure
-
UNIX : Monolithic
-
Layered Approach : Abstraction based
-
Mach : Micro Kernel
-
- MS-DOS : Single structure
- System이 켜지면 Command Interpreter인 Shell 이 켜진다.
- user mode, kernel mode가 없다.
- application program이 kernel에 직접 접근이 가능하다.
- Layered Approach : OS 복잡도를 낮추기 위한 방안
- 자기 바로 위 아래 레이어들만 interaction 할 수 있다.
- 제일 바깥쪽 = Layer N = User interface
- 제일 안쪽 = Layer 0 = Hardware
- 장점 : Layer의 수정이 다른 Layer와 독립적이다.
- 자기 바로 위 아래 레이어들만 interaction 할 수 있다.
- UNIX : Monolithic : 커널의 모든 서비스가 같은 Adress Space에 위치한다.
- System call과 Hardware 인터페이스를 하나의 공간에서 처리한다.
- 장점 : 어플리케이션과 모든 kernel 서비스가 하나의 공간에 있기 때문에 데이터 전달시 overhead가 적다.
- 단점 : 작은 부분이 잘못되면 전체가 잘못된다. 유지보수가 어렵다.
- System call과 Hardware 인터페이스를 하나의 공간에서 처리한다.
- Mach : Microkernel
- Kernel 서비스를 기능에 따라 모듈화하여 독립된 주소공간에서 실행시키자.
- 이러한 모듈을 커널 서버라고 하며, 커널 서버들은 독립된 프로세스 구현, 커널들은 서로 다른 Address space 사용
- Microkernel은 서버간의 통신(IPC) 같은 단순한 기술만 제공
- 장점
- 커널 서비스가 따로 구성되어 서로간의 의존성이 낮다.
- 커널의 개발 및 유지보수가 용이하다.
- Monolithic보다 안정적이다.
- 단점
- 독립된 서버들간의 context-switching 때문에 overhead가 크다.
- 장점
mechanism : 어떤 특정 주민등록번호를 트래킹하는
policy : 태어난 날짜에 따라서 언제언제 판다
low level : assembly
실용적인 실제 운영체제의 구조를 보자
MS-DOS
아주 간단하다.
두루뭉실하다. 경계가 나눠져있지 않음
프로그램은 하나만 나오고
프로그램 하나가 컴퓨터의 메모리 전체를 보고 전체를 관리하는 Single-tasking, single memory space다.
컴퓨터를 켜고 커맨드라인 창 띄우는게 command interpreter이다.
사용자가 입력한것을 parsing 한다.
컴퓨터에서 돌아가는 것은 프로세스라고 한다.
이 당시에는 프로세스가 따로 만들어지는게 아니라 현재 돌고있는 시스템에 돌고 끝나고 돌고 끝나고 이런식이었다.
여러개의 프로그램을 돌리는 프로세스라는 개념이 없었다.
되게 간단하게 만들었다.
왜냐? 후져서. 쉽게쉽게 짰다. : MS-DOS
그러다가 복잡해지면 잘 되겠나? 해서 만든게
Layered Approach
레이어드 어프로치이다.
제일 바깥에 사용자가 접근할 수 있는 레이어를 하고 계속 레이어를 쌓아 놓는다. 레이어드 옷처럼
각 레이어드는 뜬금없이 아무대나 가서 하드웨어를 접근할 수 있는게 아니라
레이어드 시스템에서 어떤 한 레이어는 자신의 밑의 레이어, 자신의 위의 레이어에만 interaction 할 수 있다.
이런식을 과정을 거치면서 만들어지고 있다.
그런데 계속 거치면서 가야 되니까 슬슬
어느정도 레이어는 갖춰져 있다.
유저과 쉘과 커맨드라인을 통해서 할 수 있는 레이어가 하나 있고
그 밑에 운영체제가 큰 하나로 복잡하게 되어있다.
모듈을 만드는데 복잡하게 얽혀있는 이런 구조로 진화하게 된다.
이렇게 레이어로 하다보니까 굉장히 운영체제가 커다란 하나의 덩어리처럼 만들어지게 되는
완전히 레이어도 아니고 완전히 자유분방한 MS-DOS도 아니게 중간 쯤하는 Monolithic 으로 가게 된다.
UNIX
모놀리틱 운영체제의 핵심부분이 커널이다.
그래서 보면 시스템콜과 하드웨어 인터페이스 중간에 모든게 하나로 큰 덩어리를 이루고 있는게 Monolithic의 특징이다.
운영체제가 처리해야할 수많은 하드웨어 기능들을 하나의 레벨에서 다 처리한다.
그래서 보면 시스템콜과 하드웨어 인터페이스 중간에 모든게 하나로 큰 덩어리를 이루고 있는게 Monolithic의 특징이다.
수많은 하드웨어 기능들을 하나의 레벨에서 다 처리한다.
현존하는 UNIX 운영체제는 Monolithic 이다.
이렇게 만든 이유는 사실
레이어드를 계속 만들고 하면 보안도 좋아지고 하지만 시간도 길어지고 시스템 자원을 깎아먹는거라 그러다보면 성능이 떨어진다.
시스템을 운영하기 위해서 너무 많은 리소스가 드는 상황이 발생하니까 이런 상황을 피하고자 중간으로 협의를 본거다.
그런데 업그레이드 하려면 Monolithic 전체를 업그레이드 해야해서 불편하다.
보안의 측면에서는 운영체제가 더이상 쪼개지지 않는 한 덩어리로 돌아가니까 운영체제의 한부분만 잘못돼도 전체 운영체제가 다 똑같이 갈 수 있다.
운영체제의 작은부분이 잘못 되어도 전체를 망가뜨릴 수 있다.
그래서 Security 나 reliability 부분에서는 Monolithic 이 좋지 않다.
성능은 좋지만 안정적이지 못하고 업그레이드도 힘들고 관리도 힘들다.
그래서 제대로된걸 만들어보자 : Micro Kernel
Microkernel
마이크로 커널이 뭐냐면
말그대로, 운영체제의 핵심부분을 굉장히 작게 만들자.
커널의 수많은 기능 중에서 되도록이면 최대한 많이 빼서 user space처럼 서버스처럼 싹 빼버리고, 커널을 최소화 시켜서 정말 시스템의 동작에 필요한 Process간의 통신, 메모리 관리, CPU 스케줄링 딱 3개만 커널로 구현하고 나머지는 user space로 빼버리자.
이게 마이크로 커널의 접근 방법이다.
굉장히 모듈러 하고 추가하기 쉽고 관리하기 쉽다.
전혀 다른 곳에서 돌려도 하드웨어의 부분은 최소화 시킬 수 있기 때문에 port하기가 쉽다.
무엇보다 모놀리틱 보다 reliable하다.
잘게 쪼개놓고 필요한 부분만 커널에서 돌리고 나머지 부분들은 다 user space 에서 돌리니까 안정적이다.
아무리 잘 만들었다고 하더라고 시스템들이 메시지를 잘 주고 받아야 하니까
Monolithic 보다는 overhead가 크게 된다.
Monolithic의 단점이 Micro Kernel의 장점이 되고,
Monolithic의 장점이 Micro Kernel의 단점이 된다.
이게 이론적으로만 겹쳐져 있는게 아니라
Micro Kernel 접근 방법을 가지고 많이 구현을 했다.
마하 커널이라는 것을 구현했고 맥이나 윈도우즈XP 를 만들었다.
새로 만들어보자 해서 L3/L4 도 만들었다.
커널 코드들이 되게 작아지니까, 코드의 양이 작아지니까 얘내를 잘 만들다 보니까 수학적으로 모델링 할 수 있지 않을까?
운영체제를 새로 만든게 seL4 라는 마이크로 커널이다.
이것은 수학적으로 증명이 되어있다.
deadlock 이나, livelock 등 이런 버그들이 발생하지 않는다고 수학적으로 증명했다.
운영체제의 일부 기능을 동적으로 올렸다 내렸다 할 수 있는 기능을 Module이라고 한다.
리눅스의 대부분의 기능이 모듈화가 잘 돼있다.
선택적으로 다 쓸 수 있다.
요즘은 어떤거가 정확히 하나다 라고 하지 않고 여러가지 모듈의 특징을 가지고 있다.
5가지의 차이를 잘 알아놔라.
Simple
Layered
Monolithic
Micro Kernel
Module
운영체제 |
|||
Simple structure |
Layered Approach |
Monolithic |
Micro Kernel (MAC OS, Windows XP, Mach) |
인터페이스와 기능적부분의 경계가 나눠지지 않음 |
layer 0 (hadware) |
운영체제의 핵식 부분 = kernel System call과 hadrware interface가 큰 덩어리를 이룬다. |
아주 작은 운영체제 kernel 이 3가지만 갖는다. 1. process간의 통신 2. 메모리 관리 3. CPU 스케줄링 |
shell (= command interpreter = 터미널 창) |
위아래 레이어에서만 interaction 가능 |
장점 : performance 단점 : security, 업그레이드, reliability |
장점 : 관리하기 쉽다. 단점 : over head가 크다 |
'🚦 Server > Operating System' 카테고리의 다른 글
06. Inter-Process Communication (0) | 2020.04.14 |
---|---|
05. Processes (0) | 2020.04.06 |
03. Operating System Structures (1) (0) | 2020.03.25 |
02. System Call (0) | 2020.03.23 |
Programming Assignment 0 (0) | 2020.03.18 |