본문 바로가기

공부 기록/OS

[OS/공룡책] Chapter 2. 운영체제 구조 - 운영체제 구조

모놀리식 구조

- 운영체제를 구성하는 가장 간단한 구조는 구조가 아예 없는 것이다. => 커널의 모든 기능을 단일 주소 공간에서 실행되는 단일 정적 이진 파일에 넣는 것이다.

- 모놀리식 구조는 운영체제를 설계하는 일반적인 기술이다.

- 제한적인 구조를 가진 운영체제의 예 => 최초의 UNIX 운영체제 => 커널, 시스템 프로그램으로 구성됨

- 모놀리식 커널의 명백한 단순성에도 불구하고 이 구조는 구현 및 확장하기 어렵다.

- 성능 면에서 뚜렷한 이점이 있다. => 시스템 콜 인터페이스에는 오버헤드가 거의 없고 커널 안에서의 통신 속도가 빠르다.


계층적 접근

- 시스템의 한 부분을 변경하면 다른 부분에 광범위한 영향 => 모놀리식 접근법은 밀접하게 결합된 시스템으로 불린다.

- 시스템은 다양한 방식으로 모듈화 될 수 있다. => 그 중 한 가지 방식이 계층적 접근 방식

- 주된 장점 : 구현과 디버깅의 간단함

- 그러나 순수한 계층 접근 방식을 사용하는 운영체제는 비교적 적다. => 각 계층의 기능을 적절히 정의해야 하는 문제, 운영체제 서비스를 얻기 위해 사용자 프로그램이 여러 계층을 통과해야 하는 오버헤드로 인한 성능 저하 문제

- 어느 정도의 계층화는 현대 운영체제에서 공통적이다.


마이크로 커널

- 1980년대 중반에 카네기-멜런 대학교 연구자들이 마이크로커널 접근 방식을 사용하여 커널을 모듈화한 Mach라 불리는 운영체제를 개발했다.

- 통상 마이크로커널은 통신 설비 외에 추가로 최소한의 프로세스와 메모리 관리를 제공한다.

- 주 기능은 클라이언트 프로그램과 사용자 공간에서 수행되는 다양한 서비스 간에 통신을 제공하는 것이다.

- 장점 : 운영체제의 확장이 쉽다. 더욱 높은 보안성과 신뢰성을 제공한다.

- 단점 : 가중된 시스템 기능 오버헤드 때문에 성능이 나빠진다.

- 가장 잘 알려진 실례 => macOS 및 iOS 운영체제의 커널 구성요소인 Darwin, 실시간 운영체제인 QNX 등


모듈

- 운영체제 설계의 최근 기술 중 최선책은 아마 적재가능 커널 모듈(loadable kernel modules, LKM) 기법의 사용일 것이다.

- 커널은 핵심적인 구성요소의 집합을 가지고 있고 부팅 때 또는 실행 중에 부가적인 서비스들을 모듈을 통하여 링크할 수 있다.

- 설계의 주안점은 커널은 핵심 서비스를 제공하고 다른 서비스들은 커널이 실행되는 동안 동적으로 구현하는 것이다.

- 계층 구조보다 유연하며, 마이크로 커널보다 더 효율적이다.


하이브리드 시스템

- 엄격하게 정의된 하나의 구조를 채택한 운영체제는 거의 존재하지 않는다. => 다양한 구조를 결합하여 성능, 보안 및 편리성 문제를 해결하려는 혼용 구조로 구성된다.

 

macOS와 iOS

 

- 사용자 경험 층 : 사용자가 컴퓨팅 장치와 상호 작용할 수 있는 소프트웨어 인터페이스를 정의한다.

- 응용 프로그램 프레임워크 층 : Cocoa 및 Cocoa Touch 프레임워크가 포함되며 Objective-C 및 Swift 프로그래밍 언어에 대한 API를 제공한다.

- 핵심 프레임워크 : Quicktime 및 OpenGL을 포함한 그래픽 및 미디어를 지원하는 프레임워크를 정의한다.

- 커널 환경 : Mach 마이크로커널과 BSD UNIX 커널이 포함된다.

- 응용 프로그램은 사용자 경험 기능을 이용하거나 이 기능을 우회하여 응용 프로그램 프레임워크, 핵심 프레임워크, 또는 커널 환경과 직접 상호 작용할 수 있다.

 

Darwin

- Mach 마이크로커널과 BSD UNIX 커널로 구성된 계층화된 시스템이다.

- Mach 시스템 콜(트랩)과 BSD 시스템 콜(POSIX 기능 제공) 두 개의 시스템 콜 인터페이스를 제공한다.

- Mach에서 제공하는 대부분의 기능은 커널 추상화를 통해서 사용 가능하다.

- Mach 및 BSD외에도 커널 환경은 장치 드라이버 및 동적 적재가능 모듈(커널 확장, kext) 개발을 위한 I/O 키트를 제공한다.

 

Android

- 다양한 모바일 플랫폼에서 실행되며 공개 소스이다.

- ART : 안드로이드 용으로 설계되어 메모리와 CPU 처리 능력이 제한적인 모바일 장치에 최적화된 가상 머신, AOT(ahead-of-time) 컴파일을 수행한다. => 전력 소비를 줄이면서 더 효율적인 응용 프로그램 실행을 가능하게 한다.

- 안드로이드 응용 프로그램에서 사용 가능한 네이티브 라이브러리 집합에는 웹 브라우저(webkit), 데이터베이스 지원(SQLite) 및 네트워크 소켓(SSL 등)을 개발하기 위한 프레임워크가 포함된다.

- 안드로이드는 거의 무제한의 하드웨어 장치에서 실행될 수 있으므로 구글은 하드웨어 추상화 계층 또는 HAL을 통해 물리적 하드웨어를 추상화하기로 선택했다. => HAL은 카메라, GPS 칩 및 기타 센서와 같은 모든 하드웨어를 추상화하여 특정 하드웨어와 상관없이 일관된 뷰를 응용 프로그램에게 제공한다. => 개발자는 이식 가능한 프로그램을 작성할 수 있다.

- 구글은 안드로이드를 위한 Bionic 표준 C 라이브러리를 개발하였다. => glibc보다 메모리 사용량이 적을 뿐만 아니라 모바일 장치를 특징짓는 느린 CPU를 위해 설계되었다.