Operating System Services
사용자 인터페이스
- 거의 모든 운영체제는 사용자 인터페이스를 제공
- GUI(그래픽 사용자 인터페이스)는 I/O를 지시
- CLI(명령어 라인 인터페이스)는 명령을 사용하며 특정 형식으로 명령을 입력 받아 사용됨
- CLI, command interpreter는 직접 명령 입력을 허용함
- shell - 유저의 명령어를 받아들여서 실행시킬 수 있도록 만드는 프로그램
프로그램 수행
- OS가 메인 메모리로 프로세스를 가져오고, CPU를 할당해 실행
- 에러가 발생되면 소프트웨어 인터럽트를 발생시킴
I/O 작업
- 사용자가 입출력 장치를 직접 제어할 수 없어 운영체제가 입출력 수행의 수단을 제공
파일 시스템 관리
- 파일을 읽고 쓰거나, 생성하고 삭제 할 수 있어야 하고 파일에 대한 정보를 찾고 열거할 수 있어야 함
- 디렉토리에 접근을 허가하거나 거부할 수 있게 하는 등 다양한 파일 시스템을 제공
통신
- 한 프로세스가 다른 프로세스와 정보를 교환
- 동일한 컴퓨터에서 수행되고 있는 프로세스들 사이에서 일어나는 통신
- 네트워크에 의해 함께 묶여 있는 컴퓨터 시스템 상에서 수행되는 프로세스들 사이에서 일어나는 통신
- 공유 메모리, 메시지 전달 기법(message passing)을 사용하여 구현
- 공유 메모리는 프로세스 A, B가 서로 공유할 수 있는 메모리를 만들어 A와 B가 공유 메모리를 통해 정보를 교환하는 방법
- 메시지 전달 기법은 공유된 메모리 없이 A가 B에게 send, receive와 같은 시스템 콜을 통해 통신하는 방법
오류 탐지
- 오류를 항상 의식하고 있어야 하고, 올바르고 일관성 있는 계산을 보장하기 위해 오류에 대해 적당한 조치를 해야 함
- 에러가 발생하는 경우 처리할 수 있는 방법을 운영체제가 제시해 줌
자원 할당
- 다수의 프로세스나 작업이 동시에 실행될 때, 그들 각각에 자원을 할당
- ex) CPU를 효율적으로 이용하기 위해 운영체제는 CPU 스케줄링 루틴이 여러 요인들을 고려하도록 해야 하고, I/O device를 할당하는 등 여러 종류의 자원을 할당해 주는 역할을 함
Accounting
- 현재 메인 메모리 안에서 사용자가 사용할 수 있는 공간이 얼마나 남아있는지를 확인 가능하게 함
Protection and security
- 보호는 시스템 자원에 대해 모든 접근이 통제되도록 보장
- 내 파일을 다른 사람이 보지 못하도록 하거나 권한 없이 수정하지 못하도록 만들어 주는 등의 역할
- 시스템 보안은 각 사용자가 자원에 대한 접근을 원할 때 아이디와 패스워드를 통해 자신을 인증
System Calls
- OS에서 제공하는 서비스에 대한 프로그래밍 인터페이스
- 일반적으로 고급 언어(C 또는 C++)로 작성됨
- 대부분 직접적인 시스템 콜 사용이 아닌 API를 통해 프로그램에서 액세스함
- 가장 일반적인 세 가지 API는 Windows용 Win32 API, POSIX 기반 시스템용 POSIX API(거의 모든 버전의 UNIX, Linux 및 Mac OS X 포함), Java 가상 머신(JVM)용 Java API
- POSIX - Portable OS Interface 표준화된 인터페이스
API - System Call - OS Relationship

- 시스템 콜을 수행하기 위해 유저 API를 이용
- 시스템 콜 인터페이스는 API 함수의 호출을 가로채 필요한 운영체제 시스템 콜을 부르는 역할을 하는데, 각 시스템 콜에는 번호가 할당되어 있고 시스템 콜 인터페이스는 이 번호에 따라 색인되는 테이블을 유지함
- open() 시스템 콜을 불렀을 때 open() 시스템 콜의 번호에 맞게 system call interface 테이블의 해당 인덱스로 가 open()를 처리하기 위한 kernel 함수의 start address를 찾는다.
- 인터럽트를 수행할 때 interrupt 번호를 읽고 이 번호를 interrupt vector의 인덱스로 사용하여 interrupt service routine의 start address를 찾는 과정과 흡사
- start address로 점프하여 open()를 수행하기 위한 kernel 함수를 수행
- user mode로 돌아감
System Call Parameter Passing
- OS에 매개 변수를 전달하는 데 사용되는 세 가지 일반적인 방법
- 레지스터 안에 매개 변수 저장 → 레지스터 개수가 한정되어 있다는 한계
- 메모리 안에 파라미터를 저장한 후, 해당 블록의 start address를 레지스터에 저장
- stack 이용
- 2, 3번은 매개 변수의 수 또는 길이를 제한하지 않음!
System Call의 유형
- Process control - 메모리 할당, 종료, 중단, 로드, 실행 등
- File management - 파일 생성, 삭제, 읽기, 쓰기 등
- Device management - 장치 요청, 장치 해제, 읽기, 쓰기 등
- Information maintenance - 시간 또는 날짜, 시스템 데이터, 프로세스 설정
- Communications - 공유 메모리, 메시지 전달 기법
- Protection - 자원에 대한 접근 제어, 사용자 액세스 허용 및 거부
Standard C Library Example

- C 라이브러리 함수 printf 호출
- 시스템 콜 인터페이스 안에 write()에 대한 번호를 가지고 system call interface로 가서 테이블을 서치하고, mode bit가 1에서 0으로 바뀌어 kernel mode가 된다.
- 테이블의 인덱스를 이용하여 write()를 수행하기 위한 kernel 함수의 start address를 찾아 점프한다.
- 함수를 수행 후 mode bit가 0에서 1로 바뀌면서 결과가 유저에게 반환된다.
Example : MS-DOS
- 하나의 프로세스
- 시스템 부팅 시 shell이 호출됨
- 프로세스 하나가 전체 메모리 공간 사용
- 프로그램을 메모리에 로드하고 커널을 제외한 모든 프로그램(command interpreter - 유저 명령어 실행)을 덮어씀
Example : FreeBSD
- UNIX 계열
- Multitasking - 여러 프로세스
- 사용자 로그인 -> 사용자가 선택한 shell 호출
- shell이 fork() 시스템 콜을 실행하여 새로운 child 프로세스를 생성
- exec()을 실행하여 프로그램을 프로세스에 로드
- shell이 프로세스가 종료될 때까지 기다리거나 사용자 명령을 계속 함
System Programs
파일 처리
- 파일과 디렉토리를 Create, delete, copy, rename, print, dump, list 등 파일을 처리하는 역할을 하는 시스템 프로그램
상태 정보
- 날짜, 시간, 메모리 사용량, 디스크 공간, 사용자 수 등에 대한 시스템의 상태 정보들, 세부 적인 성능, 로깅, 디버깅 기능 제공
- 일부 시스템은 구성 정보를 저장하고 검색하는 데 사용되는 레지스트리를 구현
파일 수정
- 파일의 내용을 생성하고 수정하는 문서 편집기
- 문서의 변환을 수행하거나 파일 내용을 검색하는 특수 명령어가 제공
프로그래밍 언어 지원
- 프로그래밍 언어들에 대한 컴파일러, 어셈블러, 디버거, 인터프리터가 제공
프로그램 적재와 수행
- 프로그램이 어셈블되거나 컴파일 된 후 수행되기 위해 메모리에 적재
- 시스템은 Absolute loaders, relocatable loaders, linkage editors, and overlay-loaders 등과, 고급어나 기계어를 위한 디버깅 시스템을 제공
통신
- 프로세스, 사용자 및 컴퓨터 시스템 간에 가상 연결을 생성하는 메커니즘을 제공
- 사용자가 서로의 화면으로 메시지를 전송하거나, 웹 페이지를 찾아보거나, 전자 우편 메세지를 보내거나, 원격 로그인, 한 컴퓨터에서 다른 컴퓨터로 파일 전송을 허용
백그라운드 서비스
- 항상 실행되는 시스템 프로그램 프로세스 - 서비스, 서브시스템, 데몬
- 디스크 검사, 프로세스 스케줄러, 오류 기록, 출력과 같은 기능들을 제공
Application programs
- 시스템과 관련되지 않고 사용자에 의해 실행
- 일반적으로 OS의 부분으로 생각되지 않고 명령 줄, 마우스 클릭 등으로 실행 ex) 에디터, 웹 브라우저
Emulation - 가상의 장치를 만들어주는 소프트웨어 (OS가 가상의 장치 위에서 동작 가능)
Simulation - 이벤트를 가상해서 짜는 프로그램
Operating System Structure
Simple Structure - MS-DOS
- 최소 공간에서 가장 많은 기능을 제공
- 모듈로 분할되지 않고, 인터페이스와 기능 수준이 잘 분리되어 있지 않음
- Dual mode가 없어 kernel mode와 user mode가 따로 구분되어 있지 않음
- Application program와 시스템 프로그램이 디바이스에 직접 접근이 가능해, 데이터를 맘대로 접근해서 수정할 수 있으므로 보호되지 않아 보안상의 취약점이 있음

Non Simple Structure - UNIX
- 최초의 UNIX 운영체제로 kernel과 시스템 프로그램의 두 부분으로 구성
- Monolithic 구조로, kernel은 시스템 콜을 통해 파일 시스템, CPU 스케줄링, 메모리 관리 등 운영체제 기능을 제공하고 필요한 프로그램이 모두 구현되어 있음
- Dual mode로, user mode와 kernel mode가 구분이 되어있어 유저는 OS에 서비스를 받기 위해서 시스템 콜 인터페이스를 통해 호출해야 하고, 사용자가 디바이스에 직접 접근이 불가능
- 장점 : 성능 면에서 시스템 콜 인터페이스에는 오버헤드가 거의 없고 kernel 안에서의 통신 속도가 빠르다.
- 단점 : 이 구조는 구현 및 확장하기 어렵고 많은 함수들 중에 잘못된 부분을 찾기가 어려워 디버깅하기 어려움

Layered - 계층 구조
- 운영체제가 여러 개의 층으로 나누어진 구조
- 모듈화를 시켜준 것으로, 최하위 층은 하드웨어, 최상위 층은 유저 인터페이스로 이루어져 있고, 각 각의 계층은 아래 계층에서 제공하는 인터페이스만 가지고 자기 계층에 할당된 기능을 수행
- 에러가 발생한다면 아래의 계층들은 모두 맞다는 가정하에 구현이 되었으므로, 각각의 모듈은 자기 계층만 보면 됨
- 장점 : 구현이 간단하고 디버깅하기 쉬움
- 단점 : 이러한 구조는 위의 계층에서 데이터가 수정이 됐을 경우에 아래에 있는 계층들이 영향을 받게 됨, 각 계층에 어떤 것을 할당해야 하는지 명확하게 정의하기 어려움
- ex) 메인 메모리와 device driver, CPU 스케줄링 중에서 누가 위의 계층으로 가야 하는지 정의하기가 어려움

Microkernel System Structure
- 프로세스 간 통신, 메모리 관리, CPU 스케줄링 이 세가지의 핵심적인 기능만 있으면서 나머지 기능들은 필요할 때마다 유저 공간에서 구현됨
- 마이크로커널은 사용자 공간에서 수행되는 다양한 서비스 간에 통신을 제공
- 파일로부터 어떤 것을 읽고 싶으면 메시지 전달 기법을 통해 파일 시스템에 요청 → 이 요청은 마이크로커널을 거쳐서 파일 시스템에게 요청을 전달 → 파일 시스템은 요청에 대한 응답을 마이크로커널을 거쳐 어플리케이션에 보내줌
- 이와 같이 추가적인 기능과 유저 어플리케이션 간의 요청과 요청에 대한 응답은 마이크로커널을 통한 메시지 전달 기법을 통해 이루어지는 구조를 가짐
- 이 구조의 장점
- 마이크로커널은 핵심적인 부분만 있기 때문에 우리 나름대로의 형식으로 유저 레벨에서 구현해 기능들을 붙일 수 있어 마이크로커널의 기능을 확장시키기가 쉽다
- 마이크로커널이 작아 변경 혹은 디버깅하기 쉽고, 서비스 대부분이 커널이 아닌 사용자 프로세스로 수행되기 때문에 높은 보안성과 신뢰성을 제공
- 이 구조의 단점
- 추가적인 서비스가 마이크로커널을 통한 메시지 전달 기법으로 통신을 해야 하기 때문에 그냥 수행하는 것보다 속도가 느려질 수밖에 없음

Module
- 커널은 핵심 기능을 제공하고 핵심 기능 이외의 다른 기능들은 커널이 실행되는 동안 동적으로 구현
- 이 구조는 유저 단계에서 필요할 때마다 얼마든지 동적으로 필요한 모듈을 붙일 수 있다.
- 모듈화가 되어 있어, 각 모듈이 잘 정의된 인터페이스로 구성되어 있고, 인터페이스를 통해 필요한 kernel 모드를 호출
- 커널의 각 부분이 정의되고 보호된 인터페이스를 가진다는 점에서 계층 구조와 유사하지만, 모듈화 되어 있는 OS는 자신이 필요한 임의의 모듈을 호출할 수 있어 계층 구조보다 유연함
- 핵심적인 기능만을 가지고 있고 필요한 기능들은 동적으로 연결이 가능하다는 점에서 마이크로커널과 유사하지만, 모듈화 되어 있는 OS는 추가적으로 붙인 모듈과 통신하기 위한 메시지 전달 기법이 필요 없고, 모드 비트를 바꿔서 커널 모드로 간 후 해당 모듈을 호출하면 되기 때문에 더 효율적
참고 자료 : Operating System Concepts - 10th edition, Sliberscahatz, Galvin and Gagne
'CS > 운영체제' 카테고리의 다른 글
운영체제 ch 7. Synchronization Examples (0) | 2023.05.02 |
---|---|
운영체제 ch 6. Synchronization Tools (0) | 2023.04.18 |
운영체제 ch 5. CPU Scheduling (0) | 2023.04.12 |
운영체제 ch 3. 프로세스 (0) | 2023.04.10 |
운영체제 ch 1. Introduction (0) | 2023.04.07 |
Operating System Services
사용자 인터페이스
- 거의 모든 운영체제는 사용자 인터페이스를 제공
- GUI(그래픽 사용자 인터페이스)는 I/O를 지시
- CLI(명령어 라인 인터페이스)는 명령을 사용하며 특정 형식으로 명령을 입력 받아 사용됨
- CLI, command interpreter는 직접 명령 입력을 허용함
- shell - 유저의 명령어를 받아들여서 실행시킬 수 있도록 만드는 프로그램
프로그램 수행
- OS가 메인 메모리로 프로세스를 가져오고, CPU를 할당해 실행
- 에러가 발생되면 소프트웨어 인터럽트를 발생시킴
I/O 작업
- 사용자가 입출력 장치를 직접 제어할 수 없어 운영체제가 입출력 수행의 수단을 제공
파일 시스템 관리
- 파일을 읽고 쓰거나, 생성하고 삭제 할 수 있어야 하고 파일에 대한 정보를 찾고 열거할 수 있어야 함
- 디렉토리에 접근을 허가하거나 거부할 수 있게 하는 등 다양한 파일 시스템을 제공
통신
- 한 프로세스가 다른 프로세스와 정보를 교환
- 동일한 컴퓨터에서 수행되고 있는 프로세스들 사이에서 일어나는 통신
- 네트워크에 의해 함께 묶여 있는 컴퓨터 시스템 상에서 수행되는 프로세스들 사이에서 일어나는 통신
- 공유 메모리, 메시지 전달 기법(message passing)을 사용하여 구현
- 공유 메모리는 프로세스 A, B가 서로 공유할 수 있는 메모리를 만들어 A와 B가 공유 메모리를 통해 정보를 교환하는 방법
- 메시지 전달 기법은 공유된 메모리 없이 A가 B에게 send, receive와 같은 시스템 콜을 통해 통신하는 방법
오류 탐지
- 오류를 항상 의식하고 있어야 하고, 올바르고 일관성 있는 계산을 보장하기 위해 오류에 대해 적당한 조치를 해야 함
- 에러가 발생하는 경우 처리할 수 있는 방법을 운영체제가 제시해 줌
자원 할당
- 다수의 프로세스나 작업이 동시에 실행될 때, 그들 각각에 자원을 할당
- ex) CPU를 효율적으로 이용하기 위해 운영체제는 CPU 스케줄링 루틴이 여러 요인들을 고려하도록 해야 하고, I/O device를 할당하는 등 여러 종류의 자원을 할당해 주는 역할을 함
Accounting
- 현재 메인 메모리 안에서 사용자가 사용할 수 있는 공간이 얼마나 남아있는지를 확인 가능하게 함
Protection and security
- 보호는 시스템 자원에 대해 모든 접근이 통제되도록 보장
- 내 파일을 다른 사람이 보지 못하도록 하거나 권한 없이 수정하지 못하도록 만들어 주는 등의 역할
- 시스템 보안은 각 사용자가 자원에 대한 접근을 원할 때 아이디와 패스워드를 통해 자신을 인증
System Calls
- OS에서 제공하는 서비스에 대한 프로그래밍 인터페이스
- 일반적으로 고급 언어(C 또는 C++)로 작성됨
- 대부분 직접적인 시스템 콜 사용이 아닌 API를 통해 프로그램에서 액세스함
- 가장 일반적인 세 가지 API는 Windows용 Win32 API, POSIX 기반 시스템용 POSIX API(거의 모든 버전의 UNIX, Linux 및 Mac OS X 포함), Java 가상 머신(JVM)용 Java API
- POSIX - Portable OS Interface 표준화된 인터페이스
API - System Call - OS Relationship

- 시스템 콜을 수행하기 위해 유저 API를 이용
- 시스템 콜 인터페이스는 API 함수의 호출을 가로채 필요한 운영체제 시스템 콜을 부르는 역할을 하는데, 각 시스템 콜에는 번호가 할당되어 있고 시스템 콜 인터페이스는 이 번호에 따라 색인되는 테이블을 유지함
- open() 시스템 콜을 불렀을 때 open() 시스템 콜의 번호에 맞게 system call interface 테이블의 해당 인덱스로 가 open()를 처리하기 위한 kernel 함수의 start address를 찾는다.
- 인터럽트를 수행할 때 interrupt 번호를 읽고 이 번호를 interrupt vector의 인덱스로 사용하여 interrupt service routine의 start address를 찾는 과정과 흡사
- start address로 점프하여 open()를 수행하기 위한 kernel 함수를 수행
- user mode로 돌아감
System Call Parameter Passing
- OS에 매개 변수를 전달하는 데 사용되는 세 가지 일반적인 방법
- 레지스터 안에 매개 변수 저장 → 레지스터 개수가 한정되어 있다는 한계
- 메모리 안에 파라미터를 저장한 후, 해당 블록의 start address를 레지스터에 저장
- stack 이용
- 2, 3번은 매개 변수의 수 또는 길이를 제한하지 않음!
System Call의 유형
- Process control - 메모리 할당, 종료, 중단, 로드, 실행 등
- File management - 파일 생성, 삭제, 읽기, 쓰기 등
- Device management - 장치 요청, 장치 해제, 읽기, 쓰기 등
- Information maintenance - 시간 또는 날짜, 시스템 데이터, 프로세스 설정
- Communications - 공유 메모리, 메시지 전달 기법
- Protection - 자원에 대한 접근 제어, 사용자 액세스 허용 및 거부
Standard C Library Example

- C 라이브러리 함수 printf 호출
- 시스템 콜 인터페이스 안에 write()에 대한 번호를 가지고 system call interface로 가서 테이블을 서치하고, mode bit가 1에서 0으로 바뀌어 kernel mode가 된다.
- 테이블의 인덱스를 이용하여 write()를 수행하기 위한 kernel 함수의 start address를 찾아 점프한다.
- 함수를 수행 후 mode bit가 0에서 1로 바뀌면서 결과가 유저에게 반환된다.
Example : MS-DOS
- 하나의 프로세스
- 시스템 부팅 시 shell이 호출됨
- 프로세스 하나가 전체 메모리 공간 사용
- 프로그램을 메모리에 로드하고 커널을 제외한 모든 프로그램(command interpreter - 유저 명령어 실행)을 덮어씀
Example : FreeBSD
- UNIX 계열
- Multitasking - 여러 프로세스
- 사용자 로그인 -> 사용자가 선택한 shell 호출
- shell이 fork() 시스템 콜을 실행하여 새로운 child 프로세스를 생성
- exec()을 실행하여 프로그램을 프로세스에 로드
- shell이 프로세스가 종료될 때까지 기다리거나 사용자 명령을 계속 함
System Programs
파일 처리
- 파일과 디렉토리를 Create, delete, copy, rename, print, dump, list 등 파일을 처리하는 역할을 하는 시스템 프로그램
상태 정보
- 날짜, 시간, 메모리 사용량, 디스크 공간, 사용자 수 등에 대한 시스템의 상태 정보들, 세부 적인 성능, 로깅, 디버깅 기능 제공
- 일부 시스템은 구성 정보를 저장하고 검색하는 데 사용되는 레지스트리를 구현
파일 수정
- 파일의 내용을 생성하고 수정하는 문서 편집기
- 문서의 변환을 수행하거나 파일 내용을 검색하는 특수 명령어가 제공
프로그래밍 언어 지원
- 프로그래밍 언어들에 대한 컴파일러, 어셈블러, 디버거, 인터프리터가 제공
프로그램 적재와 수행
- 프로그램이 어셈블되거나 컴파일 된 후 수행되기 위해 메모리에 적재
- 시스템은 Absolute loaders, relocatable loaders, linkage editors, and overlay-loaders 등과, 고급어나 기계어를 위한 디버깅 시스템을 제공
통신
- 프로세스, 사용자 및 컴퓨터 시스템 간에 가상 연결을 생성하는 메커니즘을 제공
- 사용자가 서로의 화면으로 메시지를 전송하거나, 웹 페이지를 찾아보거나, 전자 우편 메세지를 보내거나, 원격 로그인, 한 컴퓨터에서 다른 컴퓨터로 파일 전송을 허용
백그라운드 서비스
- 항상 실행되는 시스템 프로그램 프로세스 - 서비스, 서브시스템, 데몬
- 디스크 검사, 프로세스 스케줄러, 오류 기록, 출력과 같은 기능들을 제공
Application programs
- 시스템과 관련되지 않고 사용자에 의해 실행
- 일반적으로 OS의 부분으로 생각되지 않고 명령 줄, 마우스 클릭 등으로 실행 ex) 에디터, 웹 브라우저
Emulation - 가상의 장치를 만들어주는 소프트웨어 (OS가 가상의 장치 위에서 동작 가능)
Simulation - 이벤트를 가상해서 짜는 프로그램
Operating System Structure
Simple Structure - MS-DOS
- 최소 공간에서 가장 많은 기능을 제공
- 모듈로 분할되지 않고, 인터페이스와 기능 수준이 잘 분리되어 있지 않음
- Dual mode가 없어 kernel mode와 user mode가 따로 구분되어 있지 않음
- Application program와 시스템 프로그램이 디바이스에 직접 접근이 가능해, 데이터를 맘대로 접근해서 수정할 수 있으므로 보호되지 않아 보안상의 취약점이 있음

Non Simple Structure - UNIX
- 최초의 UNIX 운영체제로 kernel과 시스템 프로그램의 두 부분으로 구성
- Monolithic 구조로, kernel은 시스템 콜을 통해 파일 시스템, CPU 스케줄링, 메모리 관리 등 운영체제 기능을 제공하고 필요한 프로그램이 모두 구현되어 있음
- Dual mode로, user mode와 kernel mode가 구분이 되어있어 유저는 OS에 서비스를 받기 위해서 시스템 콜 인터페이스를 통해 호출해야 하고, 사용자가 디바이스에 직접 접근이 불가능
- 장점 : 성능 면에서 시스템 콜 인터페이스에는 오버헤드가 거의 없고 kernel 안에서의 통신 속도가 빠르다.
- 단점 : 이 구조는 구현 및 확장하기 어렵고 많은 함수들 중에 잘못된 부분을 찾기가 어려워 디버깅하기 어려움

Layered - 계층 구조
- 운영체제가 여러 개의 층으로 나누어진 구조
- 모듈화를 시켜준 것으로, 최하위 층은 하드웨어, 최상위 층은 유저 인터페이스로 이루어져 있고, 각 각의 계층은 아래 계층에서 제공하는 인터페이스만 가지고 자기 계층에 할당된 기능을 수행
- 에러가 발생한다면 아래의 계층들은 모두 맞다는 가정하에 구현이 되었으므로, 각각의 모듈은 자기 계층만 보면 됨
- 장점 : 구현이 간단하고 디버깅하기 쉬움
- 단점 : 이러한 구조는 위의 계층에서 데이터가 수정이 됐을 경우에 아래에 있는 계층들이 영향을 받게 됨, 각 계층에 어떤 것을 할당해야 하는지 명확하게 정의하기 어려움
- ex) 메인 메모리와 device driver, CPU 스케줄링 중에서 누가 위의 계층으로 가야 하는지 정의하기가 어려움

Microkernel System Structure
- 프로세스 간 통신, 메모리 관리, CPU 스케줄링 이 세가지의 핵심적인 기능만 있으면서 나머지 기능들은 필요할 때마다 유저 공간에서 구현됨
- 마이크로커널은 사용자 공간에서 수행되는 다양한 서비스 간에 통신을 제공
- 파일로부터 어떤 것을 읽고 싶으면 메시지 전달 기법을 통해 파일 시스템에 요청 → 이 요청은 마이크로커널을 거쳐서 파일 시스템에게 요청을 전달 → 파일 시스템은 요청에 대한 응답을 마이크로커널을 거쳐 어플리케이션에 보내줌
- 이와 같이 추가적인 기능과 유저 어플리케이션 간의 요청과 요청에 대한 응답은 마이크로커널을 통한 메시지 전달 기법을 통해 이루어지는 구조를 가짐
- 이 구조의 장점
- 마이크로커널은 핵심적인 부분만 있기 때문에 우리 나름대로의 형식으로 유저 레벨에서 구현해 기능들을 붙일 수 있어 마이크로커널의 기능을 확장시키기가 쉽다
- 마이크로커널이 작아 변경 혹은 디버깅하기 쉽고, 서비스 대부분이 커널이 아닌 사용자 프로세스로 수행되기 때문에 높은 보안성과 신뢰성을 제공
- 이 구조의 단점
- 추가적인 서비스가 마이크로커널을 통한 메시지 전달 기법으로 통신을 해야 하기 때문에 그냥 수행하는 것보다 속도가 느려질 수밖에 없음

Module
- 커널은 핵심 기능을 제공하고 핵심 기능 이외의 다른 기능들은 커널이 실행되는 동안 동적으로 구현
- 이 구조는 유저 단계에서 필요할 때마다 얼마든지 동적으로 필요한 모듈을 붙일 수 있다.
- 모듈화가 되어 있어, 각 모듈이 잘 정의된 인터페이스로 구성되어 있고, 인터페이스를 통해 필요한 kernel 모드를 호출
- 커널의 각 부분이 정의되고 보호된 인터페이스를 가진다는 점에서 계층 구조와 유사하지만, 모듈화 되어 있는 OS는 자신이 필요한 임의의 모듈을 호출할 수 있어 계층 구조보다 유연함
- 핵심적인 기능만을 가지고 있고 필요한 기능들은 동적으로 연결이 가능하다는 점에서 마이크로커널과 유사하지만, 모듈화 되어 있는 OS는 추가적으로 붙인 모듈과 통신하기 위한 메시지 전달 기법이 필요 없고, 모드 비트를 바꿔서 커널 모드로 간 후 해당 모듈을 호출하면 되기 때문에 더 효율적
참고 자료 : Operating System Concepts - 10th edition, Sliberscahatz, Galvin and Gagne
'CS > 운영체제' 카테고리의 다른 글
운영체제 ch 7. Synchronization Examples (0) | 2023.05.02 |
---|---|
운영체제 ch 6. Synchronization Tools (0) | 2023.04.18 |
운영체제 ch 5. CPU Scheduling (0) | 2023.04.12 |
운영체제 ch 3. 프로세스 (0) | 2023.04.10 |
운영체제 ch 1. Introduction (0) | 2023.04.07 |