운영체제도 소프트웨어다
-> 여러 형태로 구현할 수 있다: 운영체제마다 각 운영체제의 Software architecture가 달라진다
MS-DOS
초창기의 OS
초창기라 HW 스펙이 떨어짐 -> 최소한의 메모리 공간
모듈 X, 필요에 따라 Component 생성 후 component끼리 communication함
Application이 바로 ROM BIOS에 접근할 수 있다 -> 프로그램 때문에 컴퓨터 전체가 맛탱이가 갈 수도 있음
UNIX(초창기)
Monolistic structure
다음의 두 부분으로 구성
- System programs
- Kernel: 하드웨어 위, System call 아래
필요에 따라 Kernel에 기능이 포함되어 있음(약간 주먹구구)
Layered approach
OS의 계층을 나누고 각 계층을 쌓아 운영체제를 만든다
Bottom layer: H/W
Top layer: UI
단방향: $n+1\; Layer$에서 $n\; Layer$에서 제공되는 기능만으로 구현해야 한다.
$n+1\;Layer$에서 바로 $n-1\; Layer$로 갈 수 없다.
장점
전체 SW 구축 시 간단하고 디버깅이 쉽다.
: $n$부터 $n-1$까지 이상이 없다는 게 보장되고 n+1에서 문제 발생시 n+1만 보면 됨
+ 각 계층은 바로 아래 계층의 기능으로만 구현되기 때문
단점
OS를 어떻게 계층 별로 나눌 것인가?
효율성이 떨어짐: n+1에서 n-1로 액세스하려면 무조건 n을 거쳐야 함
Microkernel System
기존의 커널의 대부분을 User space로 빼냄 -> Kernel이 간단해져서 porting이 쉬워짐
+안전하고 디버깅이 쉬워진다.

User space로 빠진 kernel에 접근하려면 Message passing을 통해 User module 간 Communication이 이루어진다
-> Communication overhead: 속도 저하 가능성
Application program, File system, Device driver 등의 core service를 User mode로 뺌
-> Application program에서 파일을 읽으려면?
Application program에서 Kernel로 message를 보내고, 그 message를 다시 File System으로 전달 -> 느림
: Message passing을 이용해 데이터를 주고받음 -> Message passing은 Kernel mode로 제공되는 운영체제의 기능
Modules
대부분의 운영체제는 모듈 기반
-> Loadable kernel module: 동적으로 커널 모듈을 메모리에 넣었다 뺐다 가능
기존: 커널의 기능을 바꾸려면 커널 수정 후 rebuild 후 커널 restart
Module 기반: 기존 커널은 실행 중인 상태로 추가 모듈을 추가하면 끝
Layered approach와 유사하게 모듈이 제공하는 인터페이스가 predefined되어 있다.
OS는 미리 정의된 API를 통해 module을 access한다.
단 Layered approach처럼 n-1 을 호출하려면 n을 거쳐야하는 식은 아니다.
모듈을 마음대로 넣고 뺄 수 있다
-> 기존 커널은 수행 중인 상태로 추가 모듈을 넣으면 끝
+ 뺄 기능도 그냥 모듈을 빼면 된다
빠르다
Microkernel처럼 compact하게 관리할 수 있으면서 Message passing과 같은 절차 없이 바로 API를 직접 호출할 수 있다.
* Module은 일반적인 프로그래밍과 다르다.
커널은 모듈 기반: 모듈 프로그래밍을 위한 약속(절차)에 맞게끔 코드를 작성해야 함
System call
운영체제 service를 제공받기 위한 programming interface.
사용자가 System에 치명적인 영향을 미칠 수 있는 명령어를 마음대로 호출하는 게 아니라 반드시 System call을 거쳐서 호출하기 때문에 시스템을 안정적으로 관리할 수 있다.
'강의노트 > 운영체제' 카테고리의 다른 글
| [운영체제] 2주차 (3) (0) | 2021.03.14 |
|---|---|
| [운영체제] 2주차 (2) (0) | 2021.03.13 |
| [운영체제] 1주차 (3) (0) | 2021.03.08 |
| [운영체제] 1주차 (2) (0) | 2021.03.07 |
| [운영체제] 1주차 (1) (0) | 2021.03.05 |