OS는 굉장히 큰 프로그램이다. 따라서 역할별로 계층이 나누어져 있다.
Windows, Linux, Mac OS 등 각 운영체제마다 다양한 구조를 가지고 있다.
운영체제의 구조의 종류는 다음과 같다.
1. Simple Structure
- 기능적으로 구역을 나누어져 있다.
- module 단위로 나누어지지 않는다.
- 인터페이스와 기능의 레벨이 잘 분리되어 있지 않다.
- MS DOS가 이런 구조로 이루어져 있다.
2. Monolithic Structure
- 시스템 프로그램과 커널로 이루어져 있다.
- 커널은 사용자, 프로그램과 system call interface를 통해 소통한다.
- 각 device controller와 kernal interface를 통해 소통한다.
- file system, CPU scheduling, 메모리 관리 등의 모든 기능이 하나의 레벨에 존재한다.
- 따라서 일부를 고치면 프로그램 전체를 고쳐야 하는 단점이 있다.
- UNIX가 이런 구조로 되어 있다.
3. layered approach
- 각 층의 독립성을 높였다.
- 모듈화를 통해 각 계층은 바로 아래 계층에서 제공하는 기능과 서비스만 사용하므로 어떻게 구현되었는 지는 알 필요가 없다.
- 이런 구조로 구축, 디버깅이 단순하고 설계와 구현이 쉽다는 장점이 있다.
- 하지만 각 계층의 기능을 명확히 정의하기 어렵고 오직 하위 계층의 기능만 사용하기 때문에 주의 깊은 설계가 필요하고 순서대로 기능이 수행되므로 효율성이 떨어진다는 단점이 있다.
- Solaris 초기 구조이다.
4. Microkernel(Mach)
- 커널의 많은 부분을 user space에서 수행하도록 했다.
- User module 간에 message passing 방식을 이용하여 통신한다.
- 확장이 쉽고 OS를 새로운 구조로 만들기 쉽고 커널에서 돌아가는 코드가 적기 때문에 신뢰적이고 안전하다는 장점이 있다.
- User space와 Kernel space 간의 통신의 overhead가 크다는 단점이 있다.
- Mach 커널이 Microkernel 중 하나이다. Mac OS X의 kernel인 darwin의 일부를 mach 커널 기반으로 만들었다.
5. Modules
- 기능 단위로 모듈을 구성한다.
- layered와 비슷하지만 더 flexible하다.
- 커널 내 통신이 빠르다.
- monolithic 방식은 업데이트가 너무 어렵기 때문에 기능 단위로 module을 구성하고 이 module들이 모여 하나의 kernel 서비스를 제공한다.
- 현재 OS는 loadable kernel modules를 사용한다.
- 객체지향 방식의 접근법을 사용하였다.
- 각 핵심 component가 분리되어 있다.
- 서로 정의된 interface를 통해 통신한다.
- kernel에서 필요할 때 load된다.
- linux가 이런 방식을 사용한다.
6. Hybrid Systems
- 성능, 보안, 실용성을 위해 여러 가지를 조합하여 커널을 구성한다.
- Linux, solaris는 monolithic에 modular를 더한 커널을 사용
- 윈도우는 monolithic 기반에 다른 서브시스템의 개성을 위해 microkernel을 사용한다.
- MAC OS는 mach커널에 BSD커널이 hybrid형태로 되어 있는 darwin커널을 제공. 각각 따로 인터페이스가 이루어져 있다.
IOS와 Android
- IOS
- darwin 커널에 근간하여 OS X와 동일한 커널을 사용하지만 OS X의 프로그램이 동작하지는 않는다. CPU 구조도 다르기 때문에 돌아갈 수 없다.
- 어플 개발을 위해 cocoa touch라는 API를 제공하는 계층이 있다.
- 그래픽, 오디오, 비디오를 위한 media service를 제공하는 계층이 있다.
- 클라우드 컴퓨팅, 데이터 베이슬르 위한 Core service 계층이 있다.
- linux 기반의 core os 계층이 맨 아래에 있다.
- Android
- Google에서 만든 오픈소스이다.
- 모바일 어플케이션 개발으리 위한 framework를 제공하는 S/W 계층이 있다는 점이 IOS와 유사하다.
- 제일 하위 계층은 Linux 커널 기반으로 프로세스, 메모리, 장치 드라이버 지원과 전력 관리 기능이 추가되었다.
- n안드로이드 실행환경은 라이브러리와 dalvik 가상 기계를 포함한다. java의 바이트 코드가 컴파일되고 dalvik 가상기계에서 실행된다.
- linux kernel과 libraris 사이에 하드웨어에 관계 없이 상위 계층이 동작하도록 추상화한 HAL계층이 있다.
'운영체제' 카테고리의 다른 글
[OS] 운영체제의 기능과 목적 (0) | 2021.12.30 |
---|---|
[OS] 컴퓨터 시스템의 구조와 운영체제가 실행되는 과정 (0) | 2021.12.30 |