Post

[Lecture - OS] 01. Intro

[Lecture - OS] Intro

학교에서 배운 운영체제의 기초(Introduction to OS) 강의를 정리한 페이지입니다.


Why Study OS?

OS는 여러 CS 분야의 지식을 이용한다.

  • Data Structure, Algorithms
  • Programming Languages, Compilers
  • Computer Hardware, Architecture

Course Goals

  • 주요 OS 특징에 대한 이론을 배우고 실습한다.
  • OS 전반의 동작을 이해한다.
  • 더 좋은 software나 새로운 OS를 개발하기 위한 지식을 제공한다.

Agenda

[[#I. Evolution of OS]]

[[#II. Functions of OS]]


I. Evolution of OS

Three Phases of OS History

  • Why Study OS Evolution?
    • Operation System을 정의하는 것을 어렵다.
      • 문제 해결 과정에서 쌓인 규범이 많다.
      • 옛날에는 hardware resources를 적절히 관리하는 것에 이용했다.
      • 최근에는 사용자가 hardware를 쉽게 이용할 수 있는 도구로 본다. 제 3자가 개발한 application을 자신의 hardware에 적용해 작동.
  • Three Phases of OS History
    • Phase I: early '50s - mid '60s
    • Phase II: mid '60s - mid '90s
    • Phase III: mid '90s - present

Phase I. Up to Bench Monitor

  • Key Observation
    • 기계(Hardware) 값은 싸고 인건비는 비쌌다.
  • Goal
    • 기계의 가동률을 올리는 것.
      • 기계 값이 비싸고, 인건비는 쌌으므로 기계의 이용률을 더 높이는 것이자!
  • Phase 1-1: Operator as OS
    • OS는 공유된 subroutine library였다.
      • Card decks in cabinet (함수 카드를 사람이 직접 뚫어 모아서 덱을 구성했다.)
    • 사용자 개인이 console에서 일했다.
    • 디버깅이 쌍방향으로 일어났다.
    • job-to-job 전환이 느렸다.
  • Phase 1-2: (1) Simple Betch Monitor
    • OS가 로드된 후 사용자 작업을 수행하고 결과를 내보냄 (Job을 Queue로 만들어 처리)
      • Simultaneous Peripheral Operations Online (SPOOL)
        • I/O machine(IBM 1401)이 “a Batch of Jobs”(cards deck)를 tape으로 읽는다.
        • Main machine(IBM 7094)이 “a job from the batch”(tape)를 tape으로 불러오고, 계산 결과를 tape으로 내보낸다.
        • I/O machine이 tape에서 output을 출력한다.

    Phase1-2_SimpleBetchMonitor

    • Debugging이 회사에서 끝났다.
    • Resolved limitaions
      • CPU가 card reader보다 I/O device와 일 하는 것이 더 빨라졌다. (CPU가 카드를 읽기보단 읽은 데이터를 담은 tape를 읽고 쓰는 것이 가능해짐.)
      • job-to-job 전환을 batch를 이용해 더 빠르게 할 수 있어졌다. (각 job에 대해 빠르게 임무 수행이 가능해짐.)
    • Unresolved issue
      • I/O와 계산이 따로 이루어진다.
  • Phase 1-3: (2) Batch Monitor
    • Jobs spooled on “DISK” or “DRUM”
      • jobs를 cards에서 disk로 읽을 때, 하나를 메모리에 올린 뒤 출력을 위해 disk에 queued output을 보냈다.
      • SPOOLing의 발전으로 비싼 I/O machine이 필요 없어졌다.
    • “Buffering” and “Interrupt Handling” added to OS
      • Asynchronous I/O와 Computation을 동시에 할 수 있게 됐다.
    • Still single job, so utilization often bad
      • 하나의 job만 수행할 수 있으므로 여전히 utilization이 낮았다.

      Phase1-3_BatchMonitor

  • Aside: Two types of I/O Methods
    • Asynchronous I/O (비동기 I/O)
      • I/O가 시작한 후, I/O가 완료되기 전 컨트롤이 유저 프로그램에 돌아가는 것.
    • Synchronous I/O (동기 I/O)
      • I/O가 시작한 후, I/O가 끝난 후 컨트롤이 유저 프로그램에 돌아가는 것.
        • 다음 interrupt가 발생하기 전까지 CPU는 대기.
        • Wait loop
      • 최대 하나의 I/O 요청이 미완료 상태.

    Asyn_Syn_IO

    history_of_os_phase1

    • OS로써 Human Operator
      • job-to-job의 느린 전환 (Batch Processing)
      • 느린 I/O로 인한 CPU 성능 저하 (SPOOLing via External Machine)
    • 간단한 Batch Monitor
      • SPOOLing을 위한 추가 machine (Integrated SPOOLing)
      • CPU-I/O의 동화가 없음 (I/O Channel/Interrupt)
    • 향상된 SPOOLing과 Batch OS
      • Sync I/O 동안 CPU-I/O의 동화가 없음 (Multiprogramming)
    • Multiprogrammed Batch OS

Phase I. Multiprogrammed Batch Monitor

  • Phase 1-4: (3) Multiprogrammed Batch Monitor
    • 몇몇 사용자들이 시스템을 공유한다.
      • Degree of Multiprogramming >= 1
      • 여러 job을 수행하므로 높은 utilization을 가진다.
      • Concurrent programming이 중요해진다.
    • 공유하는 것에 있어 사람들은 예상하지 못한 문제에 부딪힘.
    • OS가 공부 대상이 되기 시작했다.
      • “Memory Protection”과 “Relocation”이 OS에 추가됨.
        • 두 문제를 해결하기 위해 base/bound registers를 사용함!
      • Concurrency 제어를 위한 “Synchronization”
  • Memory Protection
    • 각 Job은 접근할 수 있는 주소가 정해져 있다.
      • 자신의 주소가 아닌 다른 주소에 접근하려 할 때 발생하는 문제!

    memory_protection

  • Relocation
    • 각 program을 모아 적절한 메모리에 배치해야 한다.

    memory_relocation

  • Base/Bound Registers
    • MMU(Memory Management Unit)이 원시 형태
    • Base Register
      • 해당 Job이 시작하는 메모리 값을 가지고 있어 프로그램 상에서 사용하는 메모리에 더해져 적절한 메모리를 사용할 수 있게 한다.
    • Bound Register
      • 해당 Job이 사용할 수 있는 최대 메모리 값을 가지고 있어 만일 해당 값 넘어 접근하려 한다면 강제로 종료할 수 있다.

      base_bound_registers

      MMU

  • Concurrency and Synchronization

    ATM_ex


II. Functions of OS

Charicteristic of current OS

  • Large
    • 과거부터 쌓인 코드의 크기가 매우 커졌다!
  • Complex
    • Asynchronous한 동작
    • 하드웨어의 특징
    • 사용자와 퍼포먼스 목표의 동작이 다르다
  • Poorly Understand
    • 위 두 가지 특징에 더해 원래 타인이 짠 코드 자체는 이해하기 어렵다…

OS의 동작

  • Coordinator
    • 작업이 효과적이고 공정하게 진행되도록 한다.
    • 가장 중요하다!
  • Illusion Generator
    • Cleaner와 high-level interface를 하드웨어에게 전달한다.
  • Standard Library
    • 모두가 필요로 하는 기반 시설을 제공한다.

OS as Coordinator

  • Make Many Things Work Well Together!!

  • Concurrency : Process의 개념
    • 여러 사용자가 동시에 작업을 할 수 있다.
    • 한 명의 사용자가 많은 것들을 동시에 할 수 있다.
  • I/O devices : I/O devices가 CPU와 동시에 동작한다.
    • Devices는 동작이 끝나면 CPU에 interrupt를 발생한다.
    • Interrupt 진행은 OS를 이해하기 어렵게 한다…
  • Memory : 각 process는 동작하기 위해 memory를 필요로 한다.
    • OS는 memory 사용을 조율해야 한다.
    • Memory와 disk의 정보를 교환한다.
  • Files : 각 사용자는 files의 collection을 가지고 있다.
    • OS는 어떻게 공간을 할당할지 조율해야 한다.
    • File에 대한 공유 엑세스 제어
  • Network : 컴퓨터 그룹이 동시에 작업하는 것을 허용한다.

OS as Illusion Generator

  • OS presents an illusion : “Cleaner abstraction”
    • 복잡한 요소들을 깔끔한 abstraction layer로 표현한다.
  • OS presents an illusion : “Multiple Processors”
    • 모든 사용자(또는 processor)에게 abstraction layer를 제공한다.
This post is licensed under CC BY 4.0 by the author.