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계층이 있다.

운영체제(Operating Sysetm)는 컴퓨터 사용자가 하드웨어를 잘 사용할 수 있도록 도와주고 하드웨어 자원을 관리하는 시스템 프로그램이다. 운영체제가 제공하려는 서비스의 목적은 다음과 같다.

  • 환경 제공 : 사용자가 컴퓨터 시스템을 편리하게 사용할 수 있는 환경을 제공한다.
  • 프로세스 제어 관리 : 사용자 프로그램을 효율적으로 실행시켜 사용자 문제를 좀 더 쉽게 해결한다.
  • 자원 관리 : 컴퓨터 하드웨어를 효율적인 방법으로 사용할 수 있게 한다.

위 세 가지 이외에도 사용자에게 편리한 인터페이스를 제공하기도 하고 저전력으로 OS를 동작할 수 있게 하는 등의 여러가지 기능을 제공한다.

 

컴퓨터 시스템의 동작

  • 속도가 느린 I/O device와 속도가 빠른 CPU가 동시에 동작할 수 있도록 한다.
  • 각 device driver는 특정한 디바이스를 담당하고 자신마의 buffer를 가진다.
  • CPU가 데이터를 main memory에서 device의 buffer로 쓰거나 읽도록 명령을 내린다.
  • 입출력 요청을 device에서 controller의 buffer로 보낸다.
  • Device controller는 CPU에게 interrupt를 보내면서 작업이 끝났다는 것을 알린다.

컴퓨터 시스템에서 발생하는 interrupt는 다음과 같이 두 가지 종류가 있다.

  • H/W interrupt : CPU의 pin에서 신호를 일으켜서 발생한다. I/O device와 관련이 있다.
  • S/W interrupt : OS가 발생시키는 interrupt이다. trap이라고도 하며 division by zero와 같은 run time error가 해당된다.

OS가 사용자나 프로그램이 프로그램을 실행할 수 있도록 제공하는 환경

  • User interface
  • Program execution
  • I/O operation

OS가 사용자를 위해 제공하는 기능

  • File-system manipulstion
  • communications
  • Error detection

OS가 효율적인 OS 시스템 자체를 위해 제공하는 기능

  • Resource allocation
  • accounting
  • protection and security

컴퓨터 시스템은 크게 3가지의 컴포넌트로 구성된다. 이 세 가지 컴포넌트는 다음과 같다.

  • 하드웨어 : 기본적인 컴퓨팅적 자원을 제공한다. Ex) CPU, 메모리, I/O 장치
  • 운영체제 : 여러가지 어플리케이션과 사용자 간의 하드웨어의 사용을 제어한다. HW와 어플리케이션 프로그램 사이에 중간 다리 역할을 한다.
  • 어플리케이션 프로그램 : 시스템 자원을 사용하여 사용자의 컴퓨팅적인 문제를 해결한다. Ex) 워드 프로세서, 웹 브라우저, DB 시스템, 비디오 게임

컴퓨터를 시작하는 프로세스 : Bootstrap

  1. bootstrap은 컴퓨터 전원을 켜거나 재부팅을 할 때 메모리에 load된다.
  2. bootstrap은 일반적으로 firmware로 알려져 있는 ROM이나 EEPROM에 주로 저장되어있다.
  3. 시스템을 초기화하고 필요한 하드웨어를 확인한다.
  4. OS 커널을 메인 메모리에 올리고 실행한다.

컴퓨터가 실행되는 과정(부트로더 흐름)

      1. 전원을 켜거나 재부팅할 경우 ROM BIOS가 먼저 실행된다. bootstrap은 BIOS의 일부분이다.
      2. BIOS는 HW적으로 오류가 있는지 확인한다 (POST : power on self test라고도 한다).
      3. BIOS가 디스크의 sector 1번인 Master Boot Record를 읽어온다. MBR에 부트로더가 존재한다.
      4. 부트로더의 GPIO 설정, 클록 활성화, RAM 설정, 부팅 루틴 복사 등을 한다.
      5. 부트로더가 UART(universal asynchronous receive and transmit), 타이머, 플래시, 이더넷 등을 초기화한다.
      6. 자동 부팅 메시지를 출력하고 임의의 키를 입력하면 수동 부팅 모드(명령어 모드)로 실행하고 그게 아니면 자동 부팅모드로 실행한다.
      7. Boot loader가 커널이 올라가야 할 메모리의 위치에 이미지를 올리면 1번 프로세스부터 동작하고 OS가 동작한다.

부트로더는 assembler와 C언어로 구성되어 있다. HW와 더 가까운 작업은 assembler가 수행한다.

'운영체제' 카테고리의 다른 글

[OS] 여러 가지 운영체제 구조  (0) 2021.12.30
[OS] 운영체제의 기능과 목적  (0) 2021.12.30

+ Recent posts