『OSC Ch 2. System Structures』

  • 시스템에 대해 보다 자세히 다루는 챕터.

Operating-System Services

+-----------------------------------------------------------------------------------------------------------------------+
| user and other system programs                                                                                        |
+-----------------------------------------------------------------------------------------------------------------------+
| +-----+-------+-------------+                                                                                         |
| | GUI | batch | commandline |                                                                                         |
| +-----+-------+-------------+                                                                                         |
| | user interfaces           |                                                                                         |
| +---------------------------+                                                                                         |
+-----------------------------------------------------------------------------------------------------------------------+
| system calls                                                                                                          |
+-----------------------------------------------------------------------------------------------------------------------+
| +-------------------------------------------------------------------------------------------------------------------+ |
| | +-------------------+ +----------------+ +-------------+ +---------------+ +---------------------+ +------------+ | |
| | | program execution | | I/O operations | | file systems| | communication | | resource allocation | | accounting | | |
| | +-------------------+ +----------------+ +-------------+ +---------------+ +---------------------+ +------------+ | |
| | +-----------------+                                                                   +-------------------------+ | |
| | | error detection |                                                                   | protection and security | | |
| | +-----------------+                                                                   +-------------------------+ | |
| +------------------------------------------------------services-----------------------------------------------------+ |
+----------------------------------------------------operating system---------------------------------------------------+
| hardware                                                                                                              |
+-----------------------------------------------------------------------------------------------------------------------+
  • 운영체제는 사용자와 시스템에게 다양한 서비스를 제공한다:
    • UI(User Interface):
      • 사용자와 컴퓨터 시스템이 만나는 지점.
      • 키보드 타이핑이나 마우스 클릭과 같은 행동으로 사용자는 컴퓨터를 조작할 수 있다.
      • CLI(Command-Line Interface): 사용자가 텍스트 명령을 통해 명령을 내리는 인터페이스.
      • 배치 인터페이스(Batch interface): 명령을 파일에 넣어 파일을 통해 명령을 실행하는 인터페이스:
        • CLI가 널리 쓰이기 전 40~60년대 컴퓨터는 이러한 방식을 사용했다.
      • GUI(Graphical User Interface):
        • 현재 가장 흔하게 찾아볼 수 있는 인터페이스.
        • 사용자는 다양한 방법으로 화면에 띄워진 그래픽을 조작하며, 이를 통해 컴퓨터에게 명령을 내린다.
    • 프로그램 실행(Program execution):
      • 시스템은 프로그램을 메모리에 로드하고, 이를 실행할 수 있어야 한다.
      • 또한 프로그램은 정상적으로든 그렇지 않든 실행을 끝낼 수 있어야 한다.
    • 입출력 명령(I/O operations):
      • 프로그램이 입출력을 필요로한다면 운영체제는 입출령 명령을 수행해야 한다.
      • 이때 효율과 보안을 위해 운영체제는 사용자가 직접 입출력 장치를 조작하지 않고 자신을 거치도록한다.
    • 파일 시스템 조작(File-system manipulation):
      • 파일을 쓰고, 읽고, 만들고, 지운다.
      • 사용자가 파일에 접근하지 못하도록 막기도 한다.
    • 통신(Communications):
      • 공유 메모리(Shared memory): 여러 프로세스가 메모리의 한 부분을 공유하도록 하는 것.
      • 메세지 패싱(Message passing): 프로세스 간에 정보 패킷을 주고 받는 것.
    • 에러 탐지(Error detection):
      • 운영체제는 하드웨어, 입출력장치, 사용자 프로그램 등에서 일어나는 에러를 탐지하고 바로 잡아야 한다.
  • 운영체제는 사용자에게 직접적인 도움은 안 되지만, 시스템을 위한 작업도 수행한다:
    • 자원 할당(Resource allocation):
      • 여러 사용자나 여러 작업을 동시에 처리해야 한다면 컴퓨팅 자원은 각각 잘 배분되어야 한다.
      • 이러한 상황에서 운영체제는 다양한 종류의 자원을 관리한다.
    • 회계(Accounting):
      • 시스템은 어떤 유저가 어떤 종류의 자원을 얼마나 사용하고 있는지 계속 추적해야 한다.
      • 이 기록은 회계나 사용량 통계를 위해 사용될 수 있다.
      • 직역하면 회계지만, 대략 관리, 통계 정도로 받아들이면 될 것 같다.
    • 보호와 보안(Protection and security)

System Calls

                           +------------------+
                      +----+ user application |<----+
               open() |    +------------------+     |
user                  v                             |
mode    +-------------------------------------------+--------------+
--------+ system call interface                                    |
kernel  +---+------------------------------------------------------+
mode        |     +-----+                                      ^
            +---->| ... |                  open()              |
                  +-----+                    implementation    |
                i |     +------------------> of open()         |
                  +-----+                    system call       |
                  | ... |                    ...               |
                  +-----+                    return -----------+
  • 시스템 콜은 커널과 사용자 프로그램을 이어주는 인터페이스 역할을 한다.
  • 사용자 프로그램이 디스크에 있는 파일을 연다는 것은 파일 시스템에 접근한다는 의미다:
    • 시스템에 접근하기 위해서는 커널 모드로 전환되어야 하는데, 이때 시스템 콜을 사용한다.
    • 메모리의 특정 주소 범위에는 어떤 동작들이 할당되어 있다:
      • 이것을 시스템 콜 테이블(System call table), 인터럽트 벡터(Interrupt vector)라고 부른다.
    • fopen() 함수를 호출한다면:
      1. 운영체제는 파일을 여는 함수를 찾기 위해 시스템 콜 테이블을 참조한다.
      2. 시스템 콜 테이블은 메모리 주소의 모음이며, 해당 메모리 주소는 인터럽트 서비스 루틴(Interrupt service routine)을 가리킨다.
      3. 인터럽트 서비스 루틴은 시스템 콜 테이블이 가리키는 특정 메모리 주소가 구체적으로 어떤 동작을 할지 정의해놓은 것이다.
  • 시스템 콜에는 fork(), exit(), read(), write()와 같은 함수들이 있다:
    • 하지만 개발자가 이것을 직접 조작하는 것은 불편하고 위험한 일이다.
    • 그래서 stdio.h와 같은 표준 라이브러리를 사용한다.
  • 사용자 프로그램이 운영체제에게 매개변수를 넘기는 방법은 3가지가 있다:
    1. Call by value: 매개변수의 값 자체를 복사해서 CPU 레지스터에 전달한다.
    2. Call by reference: 값의 메모리 주소를 전달한다. 많은 값을 전달한다면 이렇게 하는 것이 효율적이다.
    3. 프로그램에을 통해 스택에 매개변수를 추가하고, 운영체제를 통해 값을 뺀다.

Types of System Calls

  • 프로세스 제어: end, abort, load, execute
  • 파일 관리: create, delete, open, close, read, write
  • 장치 관리: read, write, request, release
  • 정보 유지: get/set time or date
  • 통신: send/receive messages, transfer status
  • 보호

Operating System Structure

  • 현대 운영체제는 계층을 나눠서 시스템을 관리한다.

Simple Structure

+-------------------------------------+
| application program                 |
+--+-------------------------------+--+
   |                               |
   v                               |
+------------------------------+   |
| resident system program      |   |
+--+------------------------+--+   |
   |                        |      |
   v                        |      |
+-----------------------+   |      |
| MS-DOS device drivers |   |      |
+--+--------------------+   |      |
   |                        |      |
   v                        v      v
+-------------------------------------+
| ROM BIOS device drivers             |
+-------------------------------------+
  • 과거에는 사실상 계층이 구분되어 있지 않았다.
  • MS-DOS에서는 사용자 프로그램이 입출력 루틴에 접근해 디스플레이와 디스크 드라이브에 직접 쓰기를 할 수 있었다.
  • 따라서 만약 사용자 프로그램에 문제가 생기면 전체 시스템에 문제가 생겼다.
+------------------------------------------------------------------+
| (the users)                                                      |
+------------------------------------------------------------------+
| shells and commands                                              |
| compilers and interpreters                                       |
| system libraries                                                 |
+------------------------------------------------------------------+ -+
| system-call interface to the kernel                              |  |
+------------------------------------------------------------------+  |
| signals terminal       file system              CPU scheduling   |  |
| handling               swapping block I/O      page replacement  |  | kernel
| character I/O system   system                  demand paging     |  |
| terminal drivers       disk and tape drivers   virtual memory    |  |
+------------------------------------------------------------------+  |
| kernel interface to the hardware                                 |  |
+----------------------+--------------------+----------------------+ -+
| terminal controllers | device controllers | memory controllers   |
| terminals            | disks and tapes    | physical memory      |
+----------------------+--------------------+----------------------+
  • 전통적인 UNIX 시스템 구조는 MS-DOS에 비해 기능이 분리되었지만, 여전히 하나의 계층이 너무 많은 일을 했다.
  • 하드웨어 계층 위, 사용자 계층 아래에 있는 커널이 모든 기능을 제공했다.
  • 이러한 모놀리딕(Monolithic) 구조는 구현과 유지보수가 쉽지 않았다.

Layered Approach

+-------------------------------+
| layer N: user interface       |
| +---------------------------+ |
| | ...                       | |
| | +-----------------------+ | |
| | | layer 1               | | |
| | | +-------------------+ | | |
| | | | layer 0: hardware | | | |
| | | +-------------------+ | | |
| | +-----------------------+ | |
| +---------------------------+ |
+-------------------------------+
  • 운영체제를 더 세분화해 계층을 분리한 것이 계층적 접근(Layered approach) 방식이다.
  • 가장 아래에 있는 계층(레이어 0)은 하드웨어고, 가장 높은 계층(레이어 N)은 사용자 인터페이스다.
  • 하나의 계층에만 신경쓰면 다른 계층에는 아무런 신경을 쓰지 않아도 되기 때문에 유지보수가 아주 편하다.

Microkernels

  • 마이크로커널은 커널에서 핵심적인 요소만 남긴 가벼운 커널을 말한다.
  • 커널이 커질수록 문제가 생길 가능성이 높아지고, 유지보수가 힘들어지기 때문에 커널을 더 가볍게 만들 필요가 있었다.
  • 마이크로커널은 코드 양이 훨씬 적어 컴파일, 테스트 시간이 비교적 짧으며, 다른 시스템에 이식(Porting)하기도 쉽다.
  • 다만 시스템 프로그램을 추가해 기능을 늘리려하면 속도가 느려진다.
  • OS X의 커널(Darwin)의 일부가 마이크로커널 Mach를 기반으로 만들어졌으며, IoT에도 마이크로커널이 사용된다.

Modules

  • 모듈은 커널을 확장하기 위한 기술로, OOP에서 말하는 그 모듈화와 같은 개념이다.
  • 프로세스에 실시간으로 모듈을 붙여 작동시킬 수 있다.
  • 각 기능들을 독립적으로 관리할 수 있어 효과적으로 시스템을 유지할 수 있다.
  • 장치 드라이버는 모두 모듈로 구현되어 있으며, 윈도우에서 .dll파일이 바로 모듈이다.

Hybrid Systems

  • 스마트폰은 OS 구조의 최신판이라고 할 수 있다.
  • 하이브리드 시스템은 커널의 핵심만 남기고 나머지는 따로 구현한 시스템이다.
  • OS X의 경우 BSD가 핵심이지만 나머지는 모두 애플이 자체 구현했다.
  • 안드로이드는 리눅스 커널위에 자체 구현한 라이브러리를 올린 시스템이다.

이 문서를 인용한 문서