본문 바로가기

[운영체제] 2주차 (1)

운영체제도 소프트웨어다

-> 여러 형태로 구현할 수 있다: 운영체제마다 각 운영체제의 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이 쉬워짐

+안전하고 디버깅이 쉬워진다.

 

Microkernel system architecture

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