『OSC Ch 1. Overview』

  • 책 전체 내용이 담겨있는 가장 중요한 챕터.
  • 제대로 정독하고 책을 읽으면 훨씬 읽기 수월하다.

What Operating Systems Do

  • 운영체제는 컴퓨터의 하드웨어를 관리하고, 하드웨어와 소프트웨어, 사용자를 매개하는 프로그램.
  • 커널(Kernel)은 운영체제의 핵심이며 실체:
    • 운영체제는 커널과 커널 모듈(Kernel module)들로 구성된다.
    • 커널이 운영체제의 핵심이다보니 일반적으로 운영체제와 커널은 동일시 됨.
    • 커널이 같다면 같은 운영체제로 취급한다.
  • 컴퓨터 시스템의 요소는 하드웨어, 운영체제, 어플리케이션 프로그램, 유저로 나뉨.
  • 운영체제는 정부와 비슷하다:
    • 정부 그 자체만으로는 쓸모있는 기능을 못하지만, 사람들에게 더 나은 환경을 제공한다.
    • 마찬가지로 운영체제는 프로그램들이 유용한 일을 할 수 있는 환경을 제공한다.
    • 운영체제의 역할은 사용자 관점과 시스템 관점으로 나눠볼 수 있다.

User View

  • 일반적으로 사용자는 컴퓨터 앞에 앉아 키보드와 마우스를 조작한다:
    • 이 경우 운영체제는 사용자가 컴퓨터 자원 사용을 신경쓰지 않게 돕는다.
  • 사용자가 메인프레임에 연결된 터미널을 사용하거나 미니컴퓨터를 사용하는 경우:
    • 이 상황에서는 컴퓨터의 자원을 여러 사용자가 나눠쓰게 된다.
    • 운영체제는 사용자들이 자원을 공평하게 사용할 수 있도록 돕는다.

System View

  • 시스템에게 운영체제는 자원 할당자(Resource allocator):
    • 컴퓨터 시스템은 CPU 시간, 메모리 공간, 파일 저장소 공간, 입출력 장치 등 다양한 문제를 해결해야 함.
    • 운영체제는 이러한 컴퓨터 자원들을 관리하는 제어 프로그램으로서 동작한다.

Computer-System Organization

  • 현대의 일반적인 컴퓨터 시스템은 여러 CPU와 장치 컨트롤러(Device controllers)로 구성되어 있다.
  • 이들은 공통버스(Commmon bus)로 이어져 메모리를 공유한다:
                   disks     mouse, keyborad, printer     monitor
                     |                   |                   |
    +-----+ +--------+--------+ +--------+-------+ +---------+--------+
    | CPU | | disk controller | | USB controller | | graphics adapter |
    +--+--+ +--------+--------+ +--------+-------+ +---------+--------+
       |             |                   |                   |
       +-------------+---------+---------+-------------------+
                               |
                           +---+----+
                           | memory |
                           +--------+
    

Computer Startup

  1. 컴퓨터를 켜면 부트스트랩 프로그램(Bootstrap program)이라는 초기화 프로그램이 실행된다:
  • 부트스트랩 프로그램은 ROM 또는 EEPROM에 저장되어 있으며, 주로 펌웨어(Firmware)라고 불린다.
  1. 부트스트랩 프로그램은 시스템을 초기화하고, 부트로더(Boot loader)를 실행한다:
  • 멀티부팅 컴퓨터의 경우 부트로더가 여러 운영체제를 가리키고 있다.
  • 이 경우엔 어떤 운영체제를 실행할지 선택해야 한다.
  1. 최종적으로 부트로더는 운영체제를 실행하게 된다.
  2. 커널이 로드, 실행되면 시스템과 사용자에게 서비스를 제공해야 한다:
  • 이때 일부 서비스는 커널 외부에서 제공되는데, 이들은 부팅할 때 메모리에 로드되는 시스템 프로세스나 시스템 데몬이다.
  • UNIX의 경우 첫 시스템 프로세스는 init이며, 이 프로세스는 또 다른 데몬들을 실행시킨다.
  • 데몬은 프로세스로 백그라운드에서 돌면서 시스템 로그는 남기는 등의 여러 작업을 한다.
  1. 이러한 과정이 끝나면 시스템이 완전히 부팅되고, 이벤트가 발생하기를 기다리게 된다.

Computer-System Operation

CPU     user          |                |                |          |
        process       |                |                |          |
        executing ----|----------------|--+  +----------|----------|--+    +-----
                      |                |  |  |          |          |  |    |
        I/O interrupt |                |  +--+          |          |  +----+
        processing    |                |                |          |
                      |                |                |          |
I/O     idle      ----|---+            +----------------|--+       +-------------
device                |   |            |                |  |       |
        transferring  |   +------------+                |  +-------+
                      |                |                |          |
======================+================+================+==========+=============
                      I/O              transfer         I/O        transfer
                      request          done             request    done
  • 입출력 장치와 CPU는 동시에 실행될 수 있다.
  • 장치 컨트롤러는 CPU에게 이벤트 발생을 알리는데, 이벤트 발생을 알리는 것을 인터럽트라고 부른다:
    • 보통 컴퓨터는 여러 작업을 동시에 처리하는데, 당장 처리해야 하는 일이 생겨서 기존의 작업을 잠시 중단해야 하는 경우 인터럽트를 보낸다.
    • 그러면 커널은 작업을 멈추고 인터럽트를 처리한 뒤 다시 기존 작업으로 돌아온다.
  • 인터럽트는 하드웨어나 소프트웨어에 의해 발생할 수 있으며, 소프트웨어에 의해 발생하는 인터럽트는 트랩(Trap)이라고 부른다.
  • 하드웨어의 경우 시스템 버스(System bus)를 통해 CPU에 신호를 보냄으로써 인터럽트를 발생시킨다.
  • 소프트웨어는 시스템 콜(System call)이라는 특별한 명령으로 인터럽트를 발생시킨다.

Common Functions of Interrupts

  • CPU가 인터럽트를 받으면 하던 일을 잠시 멈추고 메모리의 특정 고정된 위치를 찾는다:
    • 이 위치는 인터럽트 벡터(Interrupt vector)에 저장되어 있다.
    • 인터럽트 벡터는 인터럽트를 처리할 수 있는 서비스 루틴(Service routine)들의 주소를 가지고 있는 공간:
      • 파일 읽기/쓰기와 같은 중요한 동작들이 하드코딩되어 있다.
    • 이 과정은 사용자가 눈치채지 못할 정도로 빠르게 일어날 수도 있고, 오랜 시간을 기다려야 할 수도 있다.
  • 인터럽트를 처리하고나면 CPU는 다시 원래 작업으로 돌아온다:
  • 값을 0으로 나누는 것 인터럽트이며, 이러한 내부 인터럽트는 예외(Exception)라고 부른다.

Interrupt Handling

  • 현대 운영체제들은 대부분 인터럽트 주도적(Interrupt driven)이다.
  • 인터럽트가 발생하기 전까지 CPU는 대기상태에 머문다.
  • 반면 폴링(Polling)의 경우 주기적으로 이벤트를 감시해 처리 루틴을 실행한다:
    • 이렇게 하면 컴퓨팅 자원을 낭비하게 되기 때문에 인터럽트 주도적으로 설계하는 것이다.

Storage Structure

  • 커널은 실행기(Executor)를 통해 프로그램을 실행시킨다:
    • 실행기는 기억장치(Storage)에서 exe파일(Windows의 경우)을 가져오고, 커널이 이것을 메모리에 할당해 실행시킨다.
    • 모든 프로그램은 메인 메모리에 로드되어 실행되며, 메인 메모리는 보통 RAM(Random-Access Memory)이라고 부른다.
  • RAM은 모든 프로그램을 담기엔 너무 작고 비싸며, 전원이 나가면 저장된 데이터가 모두 사라지는 휘발성 장치다.
  • 그래서 비휘발성 보조기억장치가 필요하다:
  • 보조기억장치는 용량이 크고 저렴한 반면, 캐시나 레지스터는 용량이 작고 비싸다.
  • 컴퓨터의 최대절전 모드를 사용하면 메모리의 모든 데이터를 보조기억장치에 덤프한다:
    • 다시 절전모드 빠져나오면 덤프해둔 데이터를 불러와 그대로 작업을 수행한다.
    • 이를 하이버네이트(Hibernate)라고 한다.

I/O Structure

  • 컴퓨터는 다양한 입출력 장치를 가지고 있으며, 입출력 컨트롤러는 각각 다른 장치를 담당한다.
  • 이 컨트롤러 덕분에 다양한 장치를 사용할 수 있다.
  • 운영체제는 각 장치 컨트롤러를 제어하기 위한 장치 드라이버(Device driver)를 가지고 있다:
    1. 입출력 명령을 수행하기 위해 장치 드라이버는 장치 컨트롤러의 레지스터를 로드한다.
    2. 장치 컨트롤러는 레지스터에서 '키보드로부터 문자 읽어오기’와 같은 동작을 읽고 장치에서 로컬 버퍼로 데이터를 전송하기 시작한다.
    3. 데이터 전송이 끝나면 장치 컨트롤러는 장치 드라이버에게 인터럽트를 보내 동작이 끝났음을 알린다.
    4. 장치 드라이버는 통제권을 운영체제에게 돌려주며, 이때 입력받은 데이터나 상태 정보를 넘겨주기도 한다.
  • 사용자 프로그램은 커널과 사용자 프로그램을 매개하는 인터페이스인 시스템 콜을 통해 입출력을 요청할 수 있다.

Direct Memory Access Structure

  • 과거에는 장치 데이터를 처리하기 위해 CPU를 거쳐 메모리에 로드하는 방식을 사용했다.
  • 하지만 CPU 자원이 너무 많이 소모되기 때문에 이젠 DMA(Direct Memory Access)를 사용한다:
    • DMA는 장치와 메모리를 직접 연결하는 방식으로, 버스가 지원하는 기능이다.
    • 메모리의 일정 부분은 DMA에 사용될 영역으로 지정되며, DMA를 제어하는 컨트롤러는 DMA 컨트롤러라고 부른다.
  • CPU를 거치는 방식은 PIO(Programmed I/O)라고 부른다.
  • 장치의 데이터는 장치 컨트롤러에 의해 직접 메모리에 전달되며, CPU에서는 데이터 이동이 완료되었다는 인터럽트만 한 번 일어난다:
    • 이렇게 하면 결과적으로 CPU가 하는 일이 줄어드니까 성능이 좋아진다.

Computer-System Architecture

CPU (*N)                                                                        Memory
+------------------------------+-------+<-insruction execution cycle->+--------------+
| thread of execution          | cache |                              |              |
+---+--------------------------+-------+<--------data movement------->|              |
    |           ^        ^                                            |              |
    | I/O       | data   | interrupt                                  | instructions |
    | request   |        |                                            | and data     |
    v           v        |                                            |              |
+------------------------+-------------+                              |              |
| device (*M)                          |<-------------DMA------------>|              |
+--------------------------------------+                              +--------------+
  • 현대 컴퓨터 시스템은 기본적으로 폰 노이만 구조를 따른다.

Single-Processor Systems

  • 과거 대부분의 컴퓨터는 싱글 프로세서를 사용했다.
  • 싱글 프로세서 컴퓨터에는 하나의 메인 CPU만 탑재되며, 장치에 따라 특별한 목적을 가진 프로세서가 들어갔다.
  • 가령 디스크 프로세서는 디스크 연산만 수행하고, 키보드 프로세서는 키보드 연산만 수행하는 식이다.

Multiprocessor Systems

  • 멀티 프로세서 시스템은 이젠 일반적인 컴퓨터 시스템이 되었다.
  • 멀티 프로세서 컴퓨터는 2개 이상의 프로세서를 가지고 있다.
  • 처음에는 서버 컴퓨터에 처음 적용됐는데, 지금은 모바일 기기도 멀티 프로세서 시스템으로 만들어진다.
  • 멀티 프로세서 시스템은 몇가지 장점을 가지고 있다:
    1. 처리량 증가:
    • 프로세서가 늘어나면 더 빠른 시간 안에 연산을 수행할 수 있다.
    • 프로세서를 계속 늘린다고 성능이 한없이 좋아지는 것은 아니며, 증가 비율이 1:1인 것도 아니다.
    1. 규모의 경제:
    • 주변 장치를 공유할 수 있기 때문에 여러 대의 싱글 프로세서 시스템을 구축하는 것보다 돈이 적게 든다.
    1. 신뢰성 증가:
    • 기능을 여러 프로세서에 분산하면 하나의 프로세서가 작동을 멈춰도 전체 시스템은 느려지기만 하고 멈추지는 않는다.
    • 이런 식으로 성능이 나빠지지만 작동은 가능하도록 하는 것을 우아한 성능 저하라고 부른다.
    • 이렇게 성능을 저하함으로써 작업을 계속 유지하는 시스템을 장애 허용 시스템이라고 부른다.
  • 멀티 프로세서 컴퓨터는 2개 이상의 프로세서를 가지고 있다.
  • 멀티 프로세서 시스템은 비대칭 멀티프로세싱과 대칭 멀티프로세싱으로 나뉜다:
    • 비대칭 멀티프로세싱은 관료주의적인 회사다:
      • 보스 프로세서가 시스템을 제어하고, 다른 프로세서들은 보스의 지시를 받게 된다.
      • 이렇게 하면 부하 분산을 효율적으로 할 수 있다.
      • 대신 보스 프로세서가 작동을 멈추면 일꾼 프로세서들도 멈추게 된다.
    • 대칭 멀티프로세싱은 보스가 없는 자유로운 회사다:
      • 모든 프로세서들은 하나의 메모리를 공유하고, 동일한 작업을 병렬적으로 수행한다.
      • 만약 프로세서에 이상이 생겨 작동을 멈춰야 한다면 자신이 수행하던 작업을 다른 프로세서들에게 나눠주고 자신만 재부팅한다.
      • 재부팅 후 문제가 해결된다면 다시 작업을 나눠 받는다.
    • 대부분의 컴퓨터 시스템은 대칭 멀티프로세싱을 사용한다.
  • 멀티 프로세서 시스템의 CPU들은 각자의 레지스터와 캐시를 갖고 있다:
    +---------------+  +---------------+  +---------------+
    | CPU 0         |  | CPU 1         |  | CPU 2         |
    | +-----------+ |  | +-----------+ |  | +-----------+ |
    | | registers | |  | | registers | |  | | registers | |
    | +-----+-----+ |  | +-----+-----+ |  | +-----+-----+ |
    |       |       |  |       |       |  |       |       |
    | +-----+-----+ |  | +-----+-----+ |  | +-----+-----+ |
    | |   cache   | |  | |   cache   | |  | |   cache   | |
    | +-----+-----+ |  | +-----+-----+ |  | +-----+-----+ |
    |       |       |  |       |       |  |       |       |
    +-------+-------+  +-------+-------+  +-------+-------+
            |                  |                  |
            +------------------+------------------+
                               |
                           +---+----+
                           | memory |
                           +--------+
    
    • 만약 CPU가 여러 개라면 돌아가면서 작업을 해야 한다.
    • 그러면 한 CPU가 작업을 하는 동안 다른 CPU들은 놀게 된다.

A Dual-Core Design

+---------------+   +---------------+
| CPU core 0    |   | CPU core 1    |
| +-----------+ |   | +-----------+ |
| | registers | |   | | registers | |
| +-----+-----+ |   | +-----+-----+ |
|       |       |   |       |       |
| +-----+-----+ |   | +-----+-----+ |
| |   cache   | |   | |   cache   | |
| +-----+-----+ |   | +-----+-----+ |
|       |       |   |       |       |
+-------+-------+   +-------+-------+
        |                   |
        +---------+---------+
                  |
              +---+----+
              | memory |
              +--------+
  • CPU가 늘어나면 프로세서간 통신을 하는 데 많은 비용이 들기 때문에 효율이 계속 좋아지지는 않는다.
  • x축을 CPU 수, y축을 성능이라고 하면 그래프는 로그함수 형태로 나타난다.
  • 최근 CPU 설계 트렌드는 하나의 칩에 코어를 늘리는 것이다:
    • 이러한 멀티 프로세서 시스템을 멀티코어(Multicore)라고 부른다.
    • 코어는 동일한 성능의 CPU 여러 개를 1개의 칩 속에 집접한 것이라고 보면 된다.
    • 칩 내부의 통신이 칩 사이의 통신보다 더 빠르기 때문에 여러 개의 칩에 하나의 코어만 두는 시스템보다 더 효율적이다.
    • 뿐만 아니라 하나의 칩에 여러 코어를 담으면 전력을 더 적게 사용한다.
    • 각 코어는 자신만의 레지스터와 로컬 캐시를 가지며, 하나의 캐시를 공유하기도 한다.

Clustered Systems

  • 멀티프로세서 시스템의 일종인 클러스터 시스템은 여러개의 CPU를 모아 놓은 구조다.
  • 클러스터 시스템은 여러개의 개별 시스템(또는 노드)들이 하나로 모여있다는 점에서 멀티프로세서 시스템과는 조금 다르다.
  • 멀티프로세서 시스템은 여러 CPU가 하나의 시스템을 이루지만, 클러스터 시스템은 여러 독립적인 시스템이 모여 하나의 시스템을 이룬다:
    • 이런 시스템을 약결합라고 부르며, 각 노드들은 싱글 프로세서 시스템일 수도 있고, 멀티코어 시스템일 수도 있다.
  • 클러스터의 정의가 딱 명확히 정해져 있지는 않다:
    • 단지 클러스터 컴퓨터들이 하나의 저장소를 공유하고, 이를 LAN과 같은 네트워크로 연결한 시스템을 보통 클러스터 시스템이라고 부른다.
  • 클러스터링은 고가용성 서비스를 제공하기 위해 사용되며, 단일 컴퓨터보다 훨씬 저렴하게 비슷한 성능을 낼 수 있다.
  • 클러스터 시스템은 비대칭 클러스터링과 대칭 클러스터링으로 나뉜다:
    • 비대칭 클러스터링에서 하나의 장비는 상시 대기 모드로 작동한다:
      • 이 노드는 서버를 동작시키고 있는 다른 노드들을 모니터링할 뿐 별도의 작업은 수행하지 않는다.
      • 서버에 문제가 생기면 이 상시 대기 노드가 서버로서 작동하게 된다.
    • 대칭 클러스터링은 두 개 이상의 노드가 작업을 수행하는 동시에 다른 노드들을 모니터링하는 구조다.
    • 이러한 구조는 하드웨어의 자원을 최대로 사용할 수 있어 더 효율적이다.
  • 클러스터 시스템은 여러 컴퓨터 시스템이 네트워크로 연결되어 있는 구조이기 때문에 고성능 컴퓨팅 환경을 제공할 수 있다.
  • 단일 시스템에 비해 유지보수가 힘들고, 시스템의 성능이 네트워크 환경에 많은 영향을 받는다는 단점이 있다.

Operating System Structure

  • 운영체제의 가장 중요한 부분 중 하나는 멀티프로그램 능력이다.
  • 멀티프로그래밍은 여러 프로그램을 메모리에 로드해 두고 한 프로세스가 대기 상태가 되면 다른 프로세스의 작업을 수행하는 시스템이다.
  • 이렇게 하면 CPU의 사용 효율을 높일 수 있다. (디스크에 있는 것은 프로그램, 메인 메모리에 있는 것은 프로세스다.)
  • 여기서 더 확장된 시스템이 시분할(Time sharing) 시스템이다:
    • 다른 말로는 멀티태스킹(Multitasking)이라고도 부른다.
    • 이는 프로세스마다 작업 시간을 정해두고 번갈아가면서 작업하는 방식이다.
    • 프로세스들이 빠르게 번갈아가며 메모리를 사용하면 사용자 입장에서는 마치 동시에 작동하는 것처럼 보이게 된다.
    • 이때는 반응 시간(Response time)을 줄이는 것이 중요하다.
  • 시분할 시스템과 멀티프로그래밍 시스템은 여러 작업들을 동시에 메모리에 올리는 방식이다:
    • 때문에 운영체제는 메모리에 자리가 없는 경우를 고려해 어떤 작업을 먼저 처리할지 정해야한다.
    • 이러한 과정을 작업 스케줄링(Job scheduling), CPU 스케줄링(CPU Scheduling)이라고 한다.
    • 만약 메모리를 너무 많이 사용하게 되는 경우, 반응 시간을 줄이기 위해 가상 메모리(Virtual memory)를 사용한다:
      • 가상 메모리는 보조기억장치의 일부를 메인 메모리처럼 사용하는 기술이다.
      • 실제 물리 메모리(Physical memory)보다 더 큰 프로그램을 구동할 수 있도록 해준다.

Operating-System Operations

  • 운영체제는 인터럽트 주도적이다.
  • 인터럽트가 없다면 시스템은 조용히 인터럽트를 기다린다.
  • 만약 사용자의 프로그램이 멋대로 하드웨어에 접근해 인터럽트를 보낸다면 큰 문제가 생길 것이다.
  • 운영체제와 사용자는 컴퓨터의 하드웨어, 소프트웨어 자원을 공유하기 때문에 사용자 프로그램이 오류를 일으키지 않도록 방지해야 한다.

Dual-Mode and Multimode Operation

  • 운영체제는 사용자 프로그램이 함부로 시스템에 접근하지 못하도록 모드(Mode)를 나눠둔다.
  • 모드는 유저 모드(User mode)와 커널 모드(Kernel mode)로 나뉜다.
  • 하드웨어의 모드 비트(Mode bit)가 0이면 커널 모드, 1이면 유저 모드임을 가리킨다:
    user process
    +-----------------------------------------------------------------------------------------+
    | +------------------------+   +-------------------+          +-------------------------+ |
    | | user process executing +-->| calls system call |          | return from system call | | user mode
    | +------------------------+   +--------------+----+          +-------------------------+ | (mode bit = 1)
    +---------------------------------------------|--------------------^----------------------+
    ==============================================|====================|======================================
    +---------------------------------------------|--------------------|----------------------+
    |                                             | trap               | trap                 |
    |                                             v mode bit = 0       | mode bit = 1         | kernel mode
    |                                         +------------------------+----+                 | (mode bit = 0)
    |                                         |      calls system call      |                 |
    |                                         +-----------------------------+                 |
    +-----------------------------------------------------------------------------------------+
    kernel
    
    • 이러한 이중 모드 방식을 사용하면 나쁜 의도를 가진 사용자로부터 시스템과 사용자를 보호할 수 있다.
    • 하드웨어는 커널 모드일 때만 특권 명령(Privileged instructions)를 실행한다:
      • 유저 모드에서 특권 명령을 실행하려 한다면 하드웨어는 이 동작을 막고 운영체제에게 트랩을 보낸다.
      • 유저 모드에서 합법적으로 커널 모드의 기능을 호출하고 싶다면 시스템 콜 인터페이스를 통해야 한다.

Timer

  • 운영체제는 사용자의 프로그램이 제어권을 운영체제에게 넘겨주지 않는 상황을 방지하기 위해 타이머를 사용한다.
  • 타이머는 운영체제에게 제어권을 보장하기 위해 특정 주기에 인터럽트를 발생시킨다.
  • 운영체제는 카운터를 설정하고, 타이머에 따라 매 틱(Tick)마다 감소시킨다:
    • 카운터가 0에 도달하면 인터럽트가 발생한다.

Process Management

  • 디스크에 있으면 프로그램, 메모리에 로드되면 프로세스다:
    • 프로그램은 하나지만 프로세스는 여러 개일 수 있다.
    • 프로그램은 디스크에 저장되어 있는 수동적 존재인 반면 프로세스는 능동적 존재다.
    • 프로세스는 프로그램이 어디까지 실행되었는지 북마크하는 프로그램 카운터를 가지고 있다.
    • 싱글스레드 프로세스는 하나의 프로그램 카운터를 가지고 있으며, 멀티스레드 프로세스는 여러 프로그램 카운터를 가지고 있다.
  • 운영체제는 프로세스 관리를 위해 다양한 활동을 한다:
    • CPU에게 할당할 프로세스와 스레드 스케줄링
    • 프로세스 생성, 제거
    • 프로세스 일시정지, 재실행
    • 프로세스의 동기화 통신 제공

Memory Management

  • 메인 메모리는 현대 컴퓨터 시스템의 핵심이며, 방대한 바이트의 배열이다:
    • 각 바이트는 그들만의 주소를 가지고 있다.
    • 프로그램이 실행될 때 프로그램은 절대 주소로 매핑되어 메모리에 로드된다.
  • 메모리 관리는 여러 요인을 고려해야 하는 작업이며, 특히 시스템의 하드웨어 설계를 신경써야 한다.
  • 운영체제는 메모리 관리를 위해 메모리의 어떤 부분이 어디에 쓰이는지, 누가 사용하는지 추적한다.
  • 또한 어떤 프로세스와 데이터가 메모리의 안팎으로 옮겨질지 결정하며, 메모리 공간을 할당하고 해제한다.

Storage Management

  • 운영체제는 저장장치의 물리적 속성을 추상화해 파일이라는 논리적 저장 단위로 정의한다.
  • 파일을 물리적 매체에 담거나 저장장치의 파일에 접근하기도 한다.

File-System Management

  • 파일 관리는 운영체제가 하는 일 중 가장 눈에 잘 보이는 요소다.
  • 운영체제는파일을 생성, 제거하며, 당연히 읽기, 쓰기도 한다.

Mass-Storage Management

  • 프로그램은 디스크에 담겨 있으며, 메인 메모리에 로드되어 실행된다.
  • 많은 사용자들이 제3의 저장 장치를 사용한다.
  • 저장 장치들은 WORM(Write-Once, Read-Many-Times)과 RW(Read-Write) 형식에 차이가 있다:
    • NTFS, FAT가 파일 저장 형식이며, 이를 파일 시스템(File system)이라고 부른다.
    • 파일 시스템이 다르면 읽기는 가능하지만 쓰기가 불가능하다.

Caching

  • 캐시는 굉장히 빠르고 작은 저장장치이며, 캐싱은 캐시 메모리를 사용해 컴퓨터의 속도를 높이는 기술이다.
  • 데이터를 디스크에서 직접 가져오는 것은 너무 느리기 때문에 캐시에 자주 사용될 것 같은 데이터를 미리 담아둔다:
    • CPU나 디스크는 캐시의 데이터를 빠르게 참조할 수 있다.
    • 파일의 중복성이 증가하지만, 속도 역시 증가한다.
  • 캐싱은 지역성(Locality) 원리를 사용한다:
    • 지역성은 시간지역성과 공간지역성으로 나뉜다:
      • 시간지역성은 한 번 접근한 데이터에 다시 접근할 확률이 높다는 것이다.
      • 공간지역성은 특정 데이터와 가까운 메모리 주소에 있는 다른 데이터들에도 접근할 가능성이 높다는 것이다.
    • 지역석 원리에 따라 캐시는 한 메모리 주소에 접근했을 때 그 주변의 메모리 주소도 함께 가져온다.

I/O System

  • 운영체제는 모든 입출력장치를 파일로 취급한다.
  • 오직 장치드라이버(Device driver)만이 장치의 자세한 정보를 알고 있다.

Protection and Security

  • 컴퓨터 시스템은 여러 사람들이 사용하기 때문에 보호와 보안도 매우 중요하다.
  • 운영체제는 내외부로부터 컴퓨터를 위험하게 만드는 요소를 막기 위해 다양한 활동을 한다.
  • 권한 확대(Privilege escalation)는 시스템 권한을 여러 층으로 나눠 행동이나 기준에 따라 사용자의 권한을 상승시키는 시스템이다.
  • 권한 확대는 수직 권한 확대와 수평 권한 확대로 나눌 수 있다:
    • 가령 임의의 코드를 실행시켜 더 높은 권한을 얻는 행위는 수직 권한 확대다.
    • 안드로이드 루팅, iOS 탈옥은 수평 권한 확대라고 한다.

Kernel Data Structures

  • 커널 구현에는 기본적인 리스트(List), 스택(Stack), 큐(Queue), 링크드리스트(Linked list) 등의 자료구조가 사용된다.
  • 특히 트리(Tree)는 상당히 효율적인 O(logn)O(\log n)의 시간복잡도를 가질 수 있기 때문에 자주 사용된다.

Computing Environments

  • 모바일 컴퓨팅 환경은 컴퓨터의 접근성을 높였고, 다양한 센서를 통해 사용자와의 인터페이스를 확장시켰다.
  • 분산형 컴퓨팅, 클라이언트-서버 컴퓨팅, P2P 컴퓨팅 등 다양한 컴퓨팅 환경이 있다.
  • 클라우드 컴퓨팅은 AWS를 통해 상당히 잘 알려졌다.
  • 현대 컴퓨팅 환경의 가장 큰 특징을 꼽자면 휴대성, 가상화, 멀티코어가 있다.

Open-Source Operating Systems

  • 세상에는 많은 오픈소스 운영체제들이 있다.
  • 당장 깃허브에서도 리눅스의 코드를 찾아볼 수 있다.
  • 오픈소스 운영체제 개발에는 누구나 참여할 수 있고, 이를 이용해 새로운 운영체제를 만들 수도 있다.

이 문서를 인용한 문서