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, solarismonolithicmodular를 더한 커널을 사용
    • 윈도우는 monolithic 기반에 다른 서브시스템의 개성을 위해 microkernel을 사용한다.
    • MAC OSmach커널에 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계층이 있다.

+ Recent posts