15 분 소요

본 글은 Operating System Concepts 10th (운영체제) 책을 보며 내용을 개인 공부에 목적으로 정리했습니다.
이전에 운영체제 관련 강의들을 들으면서 정리한 시리즈 글들이 있는데,
지식을 습득하는 데 있어 가장 느리지만 가장 빠른 방법이 원본책을 자세히 보는 것이라 생각됩니다.
따라서 책 내용들을 최대한 이해하기 위해 거의 모든 내용을 담고 있습니다.

책 pdf 링크 : Operating System Concepts 10th Edition by Abraham Silberschatz Peter B Galvin Greg Gagne pdf free download
연습 문제 정답지 : Solutions of Practice Exercises, Tenth Edition of Operating System Concepts, AVI SILBERSCHATZ


Introduction

  • 운영체제(operating system) : 컴퓨터 하드웨어를 관리하는 소프트웨어
    • 응용 프로그램을 위한 기반을 제공하며 사용자와 하드웨어 사이에서 중재자 역할을 한다.
  • 운영체제는 CPU, 메모리 및 입출력 장치와 저장장치 등 이러한 자원들을 프로그램에 할당해야 하는 책임이 있다.


  • 목표
    1. 컴퓨터 시스템의 일반적인 구성과 인터럽트의 역할을 기술한다.
    2. 현대 멀티 프로세서 컴퓨터 시스템의 구성요소에 관해 기술한다.
    3. 사용자 모드에서 커널 모드로의 전환에 대해 설명한다.
    4. 다양한 컴퓨팅 환경에서 운영체제가 어떻게 사용되는지 논의한다.
    5. 무료 및 공개 소스 운영체제의 예를 제공한다.


1.1 What Operating Systems Do

image

  • 컴퓨터 시스템은 하드웨어(hardware), 운영체제(operating system), 응용 프로그램(application) 및 사용자(user) 네 가지 구성요소로 구분할 수 있다.
    • 하드웨어는 CPU, 메모리 및 I/O 장치로 구성되어 기본 계산용 자원을 제공한다.
    • 응용 프로그램은 사용자의 계산 문제를 해결하기 위해 응용 프로그램 자원이 어떻게 사용될지를 정의한다.
    • 운영체제는 다양한 사용자를 위해 다양한 응용 프로그램 간의 하드웨어 사용을 제어하고 조정한다.
  • 운영체제는 단순히 다른 프로그램이 유용한 작업을 할 수 있는 환경(environment)을 제공한다.


1.1.1 User View

  • 컴퓨터에 대한 사용자의 관점은 사용되는 인터페이스에 따라 달라진다.
  • 이러한 시스템은 한 사용자가 자원(resource)을 독점하도록 설계되었으며, 사용자가 수행하는 작업을 최대화하는 것이다.
  • 이러한 경우 운영체제는 사용의 용이성(ease of use)을 위해 설계되고, 자원의 이용(resource utilization)은 신경쓰지 않는다.


1.1.2 System View

  • 컴퓨터의 관점에서 운영체제는 하드웨어와 가장 밀접하게 연관된 프로그램이다.
  • 따라서 운영체제를 자원 할당자(resource allocator)로 볼 수 있다.
    • 컴퓨터 시스템은 문제를 해결하기 위해 CPU 시간, 메모리 공간, 저장장치 공간, 입출력 장치 등을 가진다.
  • 다른 관점으로 운영체제는 제어 프로그램(control program)이다.
    • 제어 프로그램은 컴퓨터의 부적절한 사용을 방지하기 위해 사용자 프로그램의 수행을 제어한다.
    • 제어(control) : 어떤 목적에 적합하도록 제어 대상에 필요한 조작을 가하는 것


1.1.3 Defining Operating Systems

  • 컴퓨터 시스템의 기본 목표는 프로그램을 실행하고 사용자 문제를 더욱 쉽게 해결할 수 있게 하는 것이다.
  • 운영체제에는 항상 실행 중인 커널, 응용 프로그램 개발을 쉽게 하고 기능을 제공하는 미들웨어 프레임 워크 및 시스템 실행 중에 시스템을 관리하는 데 도움이 되는 시스템 프로그램이 포함된다.
    • 커널(kernel) : 컴퓨터에서 항상 실행되는 프로그램
    • 미들웨어(middleware) : 응용 프로그램 개발자에게 추가 서비스를 제공하는 일련의 소프트웨어 프레임워크
    • 응용프로그램(application) : 기술, 시스템 및 제품 등을 사용하는 것을 말한다. 또 어떤 경우에는 다른 응용 프로그램에게, 특정한 기능을 직접 수행하도록 설계된 프로그램이다. 1

1.2 Computer-System Organization

image

  • 현대의 범용 컴퓨터 시스템은 하나 이상의 CPU와 구성요소(component)와 공유 메모리(shared memory) 사이의 액세스(access)를 제공하는 공통 버스(bus)를 통해 연결된 여러 장치 컨트롤러(device controller)로 구성된다.
    • 장치 컨트롤러(device controller) : 일부 로컬 버퍼(buffer) 저장소와 특수 목적 레지스터 집합을 유지 관리한다.


image
이미지출처 2

  • 장치 컨트롤러는 제어하는 주변 장치와 로컬 버퍼 저장소 간에 데이터를 이동한다.
    • 입력(input) : 컴퓨터 내부로 데이터가 들어오는 것
    • 출력(output) : 컴퓨터 외부 장치로 데이터가 나가는 것
    • 주변 장치(peripheral device) : 모니터, 프린터, 마우스, 키보드, USB 등등을 말한다.
    • 로컬 버퍼(local buffer) : 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리 2
    • 디스크나 키보드 등에서 데이터를 읽어오는 경우, 로컬 버퍼에 데이터가 임시 저장된 후 메모리에 전달된다.
    • 이 때, 장치에서 로컬 버퍼로 읽어오는 일을 컨트롤러가 담당한다.
    • 데이터를 다 읽어오면 컨트롤러가 인터럽트를 발생시켜 CPU에 보고한다. 3
  • 일반적으로 운영체제에는 각 장치 컨트롤러마다 장치 드라이버(device driver)가 있다.
    • 장치 드라이버(device driver) : 특정 하드웨어나 장치를 제어하기 위한 커널의 일부분으로 동작하는 프로그램 4
  • 장치 드라이버는 장치 컨트롤러의 작동을 잘 알고 있고 나머지 운영체제에 장치에 대한 일관된 인터페이스를 제공한다.


1.2.1 Interrupts

  • 입출력 작업을 시작하기 위해 장치 드라이버는 장치 컨트롤러의 적절한 레지스터(register)에 값을 적재한다.
    • 레지스터(register) : 프로세서의 일부로 포함되어 있는 작은 크기의 고속 저장장치 5
      • 레지스터는 메모리 계층의 최상위에 위치하며, 가장 빠른 속도로 접근 가능한 메모리이다.
    • 입출력 장치의 데이터는 반드시 입출력 레지스터를 거쳐 CPU로 전달된다.
  • 그런 다음 장치 컨트롤러는 이러한 레지스터의 내용을 검사하여 수행할 작업을 결정한다.
  • 컨트롤러는 장치에서 로컬 버퍼로 데이터 전송을 시작한다.
  • 데이터 전송이 완료되면 장치 컨트롤러는 장치 드라이버에게 작업이 완료되었음을 알린다.
  • 그런 다음 장치 드라이버는 읽기 요청이면 데이터에 대한 포인터를 반환하며 운영체제의 다른 부분에 제어를 넘긴다.
    • 다른 작업의 경우 장치 드라이버는 “쓰기 완료” 또는 “장치 사용 중”과 같은 상태 정보를 반환한다.
    • 포인터(pointer) : 메모리의 주소값을 저장하는 변수 6
  • 컨트롤러는 장치 드라이버에게 인터럽트(interrupt)를 통해 작업을 완료했다는 사실을 알린다.
    • 인터럽트(interrupt) : CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것 7


1.2.1.1 Overview

  • 하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다.
  • CPU가 인터럽트 되면 CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮긴다.
    • 이러한 고정된 위치는 일반적으로 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가지고 있다.
  • 그리고 인터럽트 서비스 루틴(interrupt service routine)이 실행된다.

    • 인터럽트 서비스 루틴(interrupt service routine) or 인터럽트 핸들러(interrupt handler) : 인터럽트 접수에 의해 발생되는 인터럽트에 대응하여 특정 기능을 처리하는 기계어 코드 루틴 (커널에 존재) 8
  • 인터럽트 서비스 루틴의 실행이 완료되면, CPU는 인터럽트 되었던 연산을 재개한다.


  • 인터럽트는 적절한 서비스 루틴으로 제어를 전달한다.
  • 그 후 인터럽트 고유의 핸들러(handler)를 호출하지만, 인터럽트는 매우 빈번하게 발생하기 때문에 빠르게 처리하기 위해, 인터럽트 루틴에 대한 포인터들의 테이블을 대신 이용한다.
    • 이 경우 중간 루틴을 둘 필요 없이, 테이블을 통하여 간접적으로 인터럽트 루틴이 호출될 수 있다.
  • 일반적으로, 포인터들의 테이블은 하위 메모리에 저장된다.
    • 이들 위치에는 여러 장치에 대한 인터럽트 서비스 루틴의 주소가 들어 있다.
  • 인터럽트가 요청되면, 인터럽트를 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공하기 위해 인터럽트 벡터(interrupt vector)가 인터럽트 요청과 함께 주어진 고유의 유일한 장치 번호로 index된다.
    • 인터럽트 벡터(interrupt vector) : 인터럽드 발생시 처리해야 할 인터럽트 핸들러의 주소를 인터럽트 별로 보관하고 있는 테이블 9

image


1.2.1.2 Implementation

  • CPU 하드웨어에는 인터럽트 요청 라인(interrupt request line)이라는 선이 있는데, 하나의 명령어의 실행을 완료할때 마다 CPU가 이 선을 감지한다.
  • CPU가 컨트롤러가 인터럽트 요청 라인에 신호를 보내 것을 감지하면, 인터럽트 번호를 읽고 이 번호를 인터럽트 벡터의 인덱스로 사용하여 인터럽트 핸들러 루틴(interrupt-handler routine)으로 점프한다.
  • 그런 다음 해당 인덱스와 관련된 주소에서 실행을 시작한다.
  • 인터럽트 핸들러는 작업 중에 변경될 상태를 저장하고, 인터럽트 원인을 확인하고, 필요한 처리를 수행하고, 상태 복원을 수행하고, return_from_interrupt 명령어를 실행하여 CPU를 인터럽트 전 실행 상태로 되돌린다.

image


  • 장치 컨트롤러가 인터럽트 요청 라인에 신호를 선언하여 인터럽트를 발생(raise)시키고 CPU는 인터럽트를 포착(catch)하여 인터럽트 핸들러로 디스패치(dispatch)하고 핸들러는 장치를 서비스하여 인터럽트를 지운다(clear).
    • 디스패치(dispatch) : 준비(ready) 상태에서 실행(running) 상태로 전이되는 과정을 말하며, 이는 작업 스케줄러가 해당 프로세스를 선택하여 실행되어지는 것으로 이때 실행된 프로세스가 CPU를 점유하게 된다. 10


image


  • 대부분의 CPU에는 2개의 인터럽트 요청 라인이 있다.
    • 마스크 불가능 인터럽트(nonmaskable interrupt) : 회복 불가능한 메모리 에러와 같은 이벤트를 위해 사용
    • 마스크 가능 인터럽트(maskable interrupt) : 필요 시 인터럽트 기능을 잠시 중단시켜 놓을 수 있는 기능으로 장치 컨트롤러가 서비스를 요청하기 위해 사용한다.
  • 인터럽트 기법 중 인터럽트 우선순위 레벨(interrupt priority level)을 구현했는데, 이것을 통해 CPU는 모든 인터럽트를 마스킹하지 않고도 우선순위가 낮은 인터럽트 처리를 연기할 수 있고, 우선순위가 높은 인터럽트가 우선순위가 낮은 인터럽트의 실행을 선점할 수 있다.


1.2.2 Storage Structure

  • CPU는 메모리에서만 명령(instruction)을 적재할 수 있기 때문에 실행(execution)하려면 프로그램을 먼저 메모리에 적재해야 한다.
  • 컴퓨터는 프로그램 대부분을 메인 메모리(random-access memory, RAM)라 불리는 재기록 가능한 메모리에서 가져온다.
    • 메인 메모리(random-access memory, RAM) : 컴퓨터가 빠른 액세스를 하기 위해 데이터를 단기간 저장하는 구성 요소 11
      • Random Access라는 의미는 메인 메모리의 어느 주소(랜덤한 곳)이든지 동일한 접근 속도로 데이터를 사용할 수 있다는 의미이다.
      • 메인 메모리는 전원이 공급되지 않으면 그 내용을 잃어버리는 휘발성 저장장치이다.
  • 메인 메모리는 dynamic random-access memory(DRAM)라 불리는 반도체 기술로 구현된다.
  • 모든 형태의 메모리는 바이트의 배열을 제공한다.
    • 각 바이트는 자신의 주소를 가지고 있다.


  • 다음은 저장 용량과 액세스 시간에 따라 계층 구조로 구성한 그림이다.

image


1.2.3 I/O Structure

  • 1.2.1절에 설명된 인터럽트 구동 I/O의 형태는 소량의 데이터를 이동하는 데는 좋지만 대량 데이터 이동에 사용될 때 높은 오버헤드를 유발할 수 있다.
  • 이 문제를 해결하기 위해 직접 메모리 액세스(direct memory access;DMA)가 사용된다.
    • 직접 메모리 액세스(direct memory access;DMA) : 주변 장치들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능 (CPU 개입 X) 12
  • 장치에 대한 버퍼 및 포인터, 입출력 카운트를 세팅한 후 장치 컨토롤러는 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송한다.
  • 블록 전체가 완료될 때마다 인터럽트가 발생한다.

image


1.3 Computer-System Architecture

1.3.1 Single-Processor Systems

  • 컴퓨터 시스템 구성요소의 정의
    • CPU(Central Processing Unit) : 명령을 실행하는 하드웨어
    • 프로세서(processor) : 하나 이상의 CPU를 포함하는 물리적 칩
    • 코어(core) : CPU의 기본 계산 단위
      • 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 구성요소
    • 멀티코어(multicore) : 동일한 CPU에 여러 컴퓨팅 코어를 포함함
    • 멀티프로세서(multiprocessor) : 여러 프로세서를 포함함
  • 현대 컴퓨터 시스템은 싱글 프로세서 시스템이 거의 없다.


1.3.2 Multiprocessor Systems

  • 멀티프로세서 시스템에는 각각 싱글 코어 CPU가 2개 이상의 프로세서(processor)를 가지고 있다.
    • 프로세서는 컴퓨터 버스 및 클록, 메모리 및 주변 장치를 공유한다.
  • 가장 일반적인 멀티프로세서 시스템은 각 피어 CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업을 수행하는 SMP(symmetric multiprocessing)를 사용한다.
  • 각 CPU 프로세서에는 로컬 캐시뿐만 아니라 자체 레지스터 세트가 있다.
    • 모든 프로세서는 시스템 버스를 통해 물리 메모리를 공유한다.
  • Pros
    • 많은 프로세스를 동시에 실행할 수 있다.
  • Cons
    • CPU가 독립적이기 때문에 하나는 유휴 상태이고 다른 하나는 과부하가 걸려 비효율적일 수 있다.

image


  • 다음 그림에서는 같은 프로세서 칩에 두 개의 코어를 가지는 이중 코어(dual-core) 설계를 보여준다.

image

  • 각 코어에는 자체 레지스터 세트와 레벨 1(L1) 캐시라고 하는 자체 로컬 캐시가 있다.
  • 레벨 2(L2) 캐시는 칩에 국한되지만 두 처리 코어에서 공유한다.
  • 아키텍처 대부분은 로컬 및 공유 캐시를 결합한 이 접근 방식을 채택한다.

L1 캐시는 일반적으로 CPU 칩안에 내장되어 데이터 사용/참조에 가장 먼저 사용된다. L1 캐시는 보통 8~64KB 정도의 용량으로 CPU가 가장 빠르게 접근하게 되며, 여기서 데이터를 찾지 못하면, 이제 L2 캐시 메모리로 넘어간다.
L2 캐시 메모리는 용도와 역할은 L1 캐시와 비슷하지만 속도는 그보다 느리다. 일반적으로 64KB~4MB 정도가 사용된다. L2 캐시는 CPU 회로판에 별도의 칩으로 내장된다. 13


  • 다음 그림은 모든 CPU가 공유 시스템 연결(shared system interconnect)로 연결되어 모든 CPU가 하나의 물리 주소 공간을 공유하는 NUMA(non-uniform memory access) 시스템 구조이다.
  • Pros
    • CPU가 로컬 메모리에 액세스 할 때 빠를 뿐만 아니라 시스템 상호 연결에 대한 경합도 없다.
    • 따라서 NUMA 시스템은 더 많은 프로세서가 추가될수록 더 효과적으로 확장할 수 있다.
  • Cons
    • CPU가 시스템 상호 연결을 통해 원격 메모리에 액세스해야 할 때 지연 시간(latency)이 증가하여 성능 저하가 발생할 수 있다.

image


1.3.3 Clustered Systems

  • 클러스터 컴퓨터는 저장장치를 공유하고 근거리 통신망(local area network, LAN)같은 고속의 상호 연결망(interconnect)으로 연결된다.
  • 클러스터링은 높은 가용성(availability)을 제공하기 위해 사용된다.
    • 클러스터 내 하나 이상의 컴퓨터 시스템이 고장 나더라도 서비스는 계속 제공된다.
  • 높은 가용성은 시스템에 중복 기능을 추가함으로써 얻어진다.
  • 클러스터 소프트웨어 중 한 층이 클러스터 노드에서 실행된다.
  • 각 노드는 하나 이상의 다른 노드들을 감시한다.
  • 만일 감시받던 노드가 고장 나면 감시하던 노드가 고장 난 노드의 저장장치에 대한 소유권을 넘겨받고, 그 노드에서 실행 중이던 응용 프로그램을 다시 시작한다.
  • 사용자와 응용 프로그램의 클라이언트는 잠깐의 서비스 중단만을 경험하게 된다.
  • 높은 가용성은 안정성을 향상해 많은 응용 프로그램에서 중요하다.
    • 우아한 성능 저하(graceful degradation) : 남아 있는 하드웨어 수준에 비례하여 서비스를 계속 제공하는 기능
    • 장애 허용(fault tolerance) : 정상적인 성능 저하를 넘어 싱글 구성요소에 오류가 발생하여도 계속 작동할 수 있게 하는 것
      • 장애 허용에는 장애를 감지, 진단 및 가능한 경우 수정할 수 있는 기법이 필요하다.


image

  • 비대칭형 클러스터링(asymmetric clustering)에서는 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 긴급 대기(hot-standby) 모드를 유지한다.
    • 서버가 고장 난다면 긴급 대기 모드의 호스트가 활성 서버가 된다.
  • 대칭형 클러스터링(symmetric clustering)에서는 둘 이상의 호스트들이 응용 프로그램을 실행하고 서로를 감시한다.
    • 가용한 하드웨어를 모두 사용하기 때문에 대칭형 구성이 더 효율적이다.

1.4 Operating-System Operations

  • 운영체제는 프로그램이 실행되는 환경을 제공한다.
  • 컴퓨터를 실행하려면 부트스트랩 프로그램을 실행해야 한다.
    • 일반적으로 컴퓨터 하드웨어 내에 펌웨어로 저장된다.
    • CPU 레지스터에서 장치 컨트롤러, 메모리 내용에 이르기까지 시스템의 모든 측면을 초기화한다.
  • 부트스트랩 프로그램은 운영체제 커널을 찾아 메모리에 적재해야 한다.
  • 커널이 적재되어 실행되면 시스템과 사용자에게 서비스를 제공할 수 있다.
  • 이 단계가 완료되면 시스템이 완전히 부팅되고 시스템은 어떤 이벤트가 발생할 때까지 기다린다.
  • 이벤트는 인터럽트를 발생시켜 신호를 보낸다.
    • 트랩(trap or exception) : 오류 또는 사용자 프로그램의 특정 요청 때문에 발생하는 소프트웨어 생성 인터럽트
    • 이 특정 요청은 시스템 콜(system call)이라는 특수 연산을 실행하여 요청되고 운영체제가 제공하는 서비스가 수행될 것을 요구한다.
    • 시스템 콜(system call) : 시스템 콜은 운영 체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스 2


1.4.1 multiprogramming and multitasking

  • 용어 정리
    • 프로세스(process) : 실제 메모리에 적재되어 프로세서에 의해 실행되고 있는 프로그램
    • 멀티 프로그래밍(multi programming) : 하나의 프로세서가 하나의 프로세스를 수행하는 동안 다른 프로세스에 접근할 수 있도록 하는 방법 3
    • 태스크(task) : 작업 단위의 실행 단위 (프로세스, 스레드…) 4
    • 멀티태스킹(multi-tasking) : 다수의 태스크를 운영체제의 스케줄링에 의해 번갈아 가며 수행되도록 해주는 것을 의미한다. 3
  • 운영체제는 여러 프로세스를 동시에 메모리에 유지한다.
  • 운영체제는 이러한 프로세스 중 하나를 선택하여 실행하기 시작한다.

image

  • 멀티 프로그래밍은 CPU가 항상 한 개는 실행할 수 있도록 프로그램을 구성하여 CPU 이용률을 높이고 사용자 만족도를 높인다.
  • 멀티프로그래밍 시스템에서 운영체제는 다른 프로세스로 전환하여 실행한다.
  • 해당 프로세스가 대기해야 하는 경우 CPU는 다른 프로세스로 전환한다.
  • 첫번째 프로세스는 대기를 마치고 CPU를 다시 돌려받는다.
  • 즉, 하나 이상의 프로세스를 실행해야 하는 한 CPU는 유후 상태가 아니다.
  • 멀티 태스킹은 멀티 프로그래밍의 논리적 확장이다.
  • 멀티 태스킹 시스템에서 CPU는 여러 프로세스를 전환하며 프로세스를 실행하지만 전환이 자주 발생하여 사용자에게 빠른 응답 시간을 제공한다.
  • 멀티 태스킹 시스템에서 운영체제는 적절한 응답 시간(response time)을 고려해야 한다.
  • 이에 가상 메모리(virtual memory)가 있는데, 일부만 메모리에 적재된 프로세스의 실행을 허용하는 기법이다.
    • 이점은 프로그램이 물리 메모리의 크기보다 더 커도 된다는 것이다.
    • 그리고 가상 메모리는 메인 메모리를 크고 균등한 저장장치의 배열로 추상화하여 사용자에게 보이는 논리 메모리를 물리 메모리부터 분리시킨다.


1.4.2 Dual-Mode and Multimode Operation

  • 시스템을 올바르게 실행하려면 운영체제 코드 실행과 사용자-정의 코드 실행을 구분할 수 있어야 한다.
  • 대부분의 컴퓨터 시스템이 취하는 접근 방식은 다양한 실행 모드를 차별화 할 수 있는 하드웨어 지원을 제공하는 것이다.
  • 적어도 두 개의 독립된 연산 모드, 즉 사용자 모드(user mode)와 커널 모드(kernel mode)를 필요로 한다.
    • 커널 모드는 특권 모드(privileged mode)로도 불린다.
  • 모드 비트(mode bit)라고 하는 하나의 비트가 현재의 모드를 나타내기 위해 컴퓨터의 하드웨어에 추가되었다.
    • 이 비트는 커널 모드(0) 또는 사용자 모드(1)을 나타낸다.

image

  • 시스템 부트 시, 하드웨어는 커널 모드에서 시작한다. 이어 운영체제가 적재되고, 사용자 모드에서 사용자 프로세스가 시작된다.
  • 트랩이나 인터럽트가 발생할 때마다 하드웨어는 사용자 모드에서 커널 모드로 전환한다.


  • 동작의 듀얼모드는 잘못된 사용자로부터 운영체제를, 그리고 잘못된 사용자 서로를 보호하는 방법을 우리에게 제공한다.
  • 사용자는 악영향을 끼칠 수 있는 일부 명령을 특권 명령으로 지정함으로써 이러한 보호를 달성한다.
  • 하드웨어는 특권 명령이 커널 모드에서만 수행되도록 허용한다.
  • 사용자 모드에서 특권 명령을 수행하려고 시도하면, 하드웨어는 이를 실행하지 않고, 불법적인 명령으로 간주해 운영체제로 트랩을 건다.
  • 가상화를 지원하는 CPU는 VMM(virtual machine manager)이 시스템을 제어하는 시점을 표시하기 위한 별도의 모드를 가진다.
    • 이 모드에서 VMM은 사용자 프로세스보다 많은 권한을 가지지만 커널보다는 적은 권한을 가진다.
    • 가상 머신을 생성 및 관리할 수 있으려면 이 레벨의 권한이 필요하고 CPU 상태를 변경하여 해당 작업을 할 수 있다.


  • 시스템 콜은 사용자 프로그램이 자신을 대신하여 운영체제가 수행하도록 지정되어 있는 작업을 운영체제에 요청할 수 있는 방법을 제공한다.
  • 시스템 콜이 수행될 때, 시스템 콜은 하드웨어에 의해 하나의 소프트웨어 인터럽트로 취급된다.
  • 제어가 인터럽트 벡터를 통해 운영체제 내의 서비스 루틴으로 전달되고, 모든 비트가 커널 모드로 설정된다.
  • 커널은 인터럽트를 발생시킨 명령을 검사하여 어떤 시스템 콜이 발생했는지를 결정한다.


1.4.3 Timer

  • 사용자는 사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패하여, 제어(control)가 운영체제로 복귀하지 않는 경우가 없도록 반드시 방지해야 한다.
  • 이러한 목적을 달성하기 위해, 타이머(timer)를 사용할 수 있다.
  • 사용자에게 제어를 양도하기 전에, 운영체제는 타이머가 인터럽트를 할 수 있도록 설정되었는지를 확인한다.
  • 만약 타이머가 인터럽트를 발생하면 제어는 자동으로 운영체제에 넘어가며, 운영체제는 인터럽트를 치명적인 오류로 취급하거나, 프로그램에게 더 많은 시간을 줄 수 있다.


1.5 Resource Management

  • 운영체제는 리소스 관리자이다.
  • 시스템의 CPU, 메모리 공간, 파일-저장 공간 및 I/O 장치는 운영체제가 관리해야 하는 자원에 속한다.


1.5.1 Process Management

  • 프로세스는 자기 일을 수행하기 위해 CPU 시간, 메모리, 파일, 그리고 입출력 장치를 포함한 여러 가지 자원을 필요로 한다.
    • 이러한 자원은 보통 실행되는 동안 할당된다.
    • 하나의 프로그램은 디스크에 저장된 파일의 내용고 같이 수동적(passive) 개체지만 프로세스는 다음 수행할 명령을 지정하는 프로그램 카운터(program counter)를 가진 능동적(active)인 개체이다.
  • CPU는 그 프로세스가 끝날 때까지 그 프로세스의 명령들을 차례대로 수행한다.


1.5.2 Memory Management

  • 메인 메모리(main memory)는 CPU와 입출력 장치에 의하여 공유되는, 빠른 접근이 가능한 데이터의 저장소이다.
    • 메모리는 크기가 수십 만에서 수십 억까지의 범위를 갖는 바이트의 대용량 배열이다.
    • 각 바이트는 자신의 주소를 가진다.
  • 또한 메인 메모리는 일반적으로 CPU가 직접 주소를 지정할 수 있고, 그리고 직접 접근할 수 있는 유일한 대량 메모리이다.
  • 프로그램이 수행되기 위해서는 반드시 절대 주소로 매핑(mapping)되고 메모리에 적재되어야 한다.
  • 프로그램을 수행하면서, 이러한 절대 주소를 생성하여 메모리의 프로그램 명령어와 데이터에 접근한다.


1.5.3 File-System Management

  • 운영체제는 저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위인 파일을 정의한다.
    • 파일(file) : 파일 생성자에 의해 정의된 관련 정보의 집합체
  • 운영체제는 파일을 물리적 매체로 매핑하며, 저장장치를 통해 파일에 접근한다.
  • 운영체제는 파일 관리를 위해 다음과 같은 일을 담당한다.
    • 파일의 생성 및 제거
    • 디렉토리 생성 및 제거
    • 파일과 디렉토리를 조작하기 위한 primitive 제공
    • 파일을 보조저장장치로 매핑
    • 안정적인(비휘발성) 저장 매체에 파일을 백업


1.5.4 Mass-Storage Management

  • 컴퓨터 시스템은 메인 메모리를 백업하기 위해 보조저장장치를 제공해야 한다.
  • 운영체제는 보조저장장치 관리와 관련하여 다음 활동을 담당한다.
    • 마운팅과 언마운팅
    • 사용 가능 공간의 관리
    • 저장장소 할당
    • 디스크 스케줄링
    • 저장장치 분할
    • 보호


1.5.5 Cache Management

  • 정보는 어떤 저장장치(ex. 메인메모리)에 보관된다.
  • 정보가 사용됨에 따라, 더 빠른 장치인 캐시에 일시적으로 복사된다.
  • 그러므로, 우리가 특정 정보가 필요할 경우, 먼저 캐시에 그 정보가 있는지를 조사해 본다.
  • 만약 캐시에 있으면 우리는 그 정보를 캐시로부터 직접 사용하지만, 만일 캐시에 없다면 메인 메모리 시스템으로부터 그 정보를 가져와서 사용해야 하며, 이 때 이 정보가 다음에 곧 사용될 확률이 높다는 가정하에 캐시에 넣는다.
  • CPU 내부의 프로그램 가능한 레시스터들은 메인 메모리를 위한 고속의 캐시로 볼 수 있다.
  • 컴파일러는 어느 정보를 메인 메모리에 두고, 어느 정보를 레지스터에 둘 것인지를 결정하는 레지스터 할당 정책과 교체 알고리즘을 구현한다.
  • 캐시로부터 CPU 및 레지스터로의 데이터 전송은 운영체제의 간섭 없이 하드웨어적으로 이루어진다.
  • 디스크와 메모리 간의 데이터 전송은 운영체제에 의해 제어된다.

image

캐시(cache)는 레지스터 다음으로 CPU 코어 가까이에 위치해 있지만, 프로그램에서 직접 읽거나 쓸 수 없고, 하드웨어 메모리 관리 시스템에서 내부적으로 제어한다. 데이터 지역성(locality)을 활용하여 메인 메모리에 있는 데이터를 캐시 메모리에 불러와 두고 CPU가 상대적으로 접근 시간이 느린 메인 메모리 대신 캐시 메모리에 우선적으로 접근하게 하면 성능 향상을 기대할 수 있다. 7


  • 메모리의 계층 구조에서, 동일한 데이터가 서로 다른 수준의 저장장치 시스템에 나타나게 된다.
  • 그림과 같이 A의 복사본이 여러 곳에 존재하게 되는데, 내부 레지스터에서 변형이 일어나면, A의 값은 여러 저장장치 시스템에서 서로 달라진다.
  • A의 값은 자기 디스크에 새로운 A의 값이 다시 기록된 이후에야 비로소 같아진다.

image


1.5.6 I/O Systems Management

  • 입출력 시스템은 1) 일반적인 장치 드라이버 인터페이스, 2) 특정 하드웨어 장치들을 위한 드라이버 같이 구성되어 있다.


1.6 Security and Protection

  • 만일 컴퓨터 시스템이 다수의 사용자를 가지며 다수 프로세스의 동시 수행을 허용한다면, 데이터에 대한 접근은 반드시 규제되어야 한다.
  • 이를 위해 파일, 메모리 세그먼트, CPU 및 다른 자원들에 대해 운영체제로부터 적절한 허가를 획득한 프로세스만이 작업할 수 있도록 보장하는 기법이 필요하다.
  • 보호는 구성요소 서브시스템 간의 인터페이스에서 잠재적인 오류를 검출함으로써 시스템의 신뢰성을 증가시킬 수 있다.
    • 보호(protection) : 컴퓨터 시스템이 정의한 자원에 대해 프로그램, 프로세스, 또는 사용자들의 접근을 제어하는 기법


1.7 Virtualization

  • 가상화는 특정 CPU를 위해 컴파일된 운영체제가 동일 CPU용의 다른 운영체제 내에서 수행된다.
    • 가상화(virtualization) : 단일 컴퓨터(CPU, 메모리, 디스크 드라이브, 네트워크 인터페이스 카드 등)의 하드웨어를 여러 가지 실행 환경으로 추상화하여 개별 환경이 자신만의 컴퓨터에서 실행되고 있다는 illusion을 만들 수 있는 기술
    • 가상 머신(virtual machine)의 사용자는 단일 운영체제에서 동시에 실행되는 다양한 프로세스 간에 전환할 수 있는 것과 동일한 방식으로 다양한 운영체제 간에 전환할 수 있다.
    • 컴파일(compile) : 인간이 이해할 수 있는 언어로 작성된 소스 코드를 CPU가 이해할 수 있는 언어로 번역(변환)하는 작업 5
  • Windows는 호스트(host) 운영체제이고 VMware 응용은 가상 머신 관리자(virtual machine manager; VMM)이다.
    • VMM은 게스트 운영체제를 수행하고 그들의 자원 이용을 관리하며 각 게스트를 서로로부터 보호한다.

image


1.8 Distributed Systems

  • 분산 시스템의 컴퓨터들은 사용자가 시스템 내의 다양한 자원들을 접근할 수 있도록 네트워크로 연결되어 있다.
    • 분산 시스템(distributed systems)은 물리적으로 떨어져 있는 이기종(heterogeneous) 컴퓨터들의 집합이다.
  • 분산 시스템의 많은 기능은 네트워킹에 의존하고 있다.
    • 네트워크(network) : 두 개 이상 시스템 간의 통신 경로
    • 네트워크는 사용되는 프로토콜, 노드 간의 거리, 그리고 전송 매체에 따라 다르다.
    • TCP/IP가 가장 일반적인 네트워크 프로토콜로 인터넷의 기본 구조를 제공한다.
    • TCP/IP(Transmission Control Protocol/Internet Protocol) : 컴퓨터 사이의 통신 표준 및 네트워크의 라우팅 및 상호연결에 대한 자세한 규칙을 지정하는 프로토콜 스위트 6
  • 네트워크는 노드 간의 거리에 의해 유형이 결정된다. 근거리 통신망(LAN; local area network), 광역 통신망(WAN; wide area network), 도시권 통신망(MAN; metropolitan area network), 단거리 통신망(PAN; personal area network) 등이 있다.


1.9 Kernel Data Structures

  • 이번 챕터에서는 시스템에서 데이터가 구조화되는 방법을 다룬다.

1.9.1 Lists, Stacks, and Queues

  • 배열(array)은 직접 접근될 수 있는 단순한 자료 구조이다.
  • 배열의 각 항은 직접 접근할 수 있으나 리스트의 항들은 특성 순서로 접근해야 한다.
  • 리스트(list)는 데이터 값들의 집단을 하나의 시퀀스로 표시한다.
  • 이 구조를 구현하는 가장 일반적인 방법이 연결 리스트(linked list)이다.
    • 연결 리스트에서는 각 항이 다른 하나에 연결되어 있다.
  • 연결 리스트
  • Pros
    • 가변 수의 항들을 수용하며 항의 삭제와 삽입이 쉽다.
  • Cons
    • 길이가 n인 리스트에서 특정 항을 인출할 때의 성능이 선형, 즉 O(n)이라는 점이다.

image

  • 단일 연결 리스트(singly linked list)에서는 각 항은 후속항을 가리킨다. (Figure 1.17)

image

  • 이중 연결 리스트(doubly linked list)에서는 한 항은 자신의 앞 항이나 뒤 항을 가리킨다. (Figure 1.18)

image

  • 원형 연결 리스트(circularly linked list)에서는 리스트의 마지막 항이 널(null)이 아니라 첫 항을 가리킨다. (Figure 1.19)


  • 스택(stack)은 순차적 순서를 가진 자료구조로 항을 넣거나 거내는 데 LIFO(last in first out)을 사용한다.
    • 스택에 마지막에 삽입된 항이 먼저 인출된다.
    • 스택에 항을 삽입하거나 인출하는 일을 푸쉬(push)또는 팝(pop)이라 부른다.
  • 큐(queue)는 순차 순서의 자료구조로 FIFO(first in first out)을 사용한다.
    • 각 항은 삽입된 순서대로 큐로부터 제거된다.


1.9.2 Trees

  • 트리(tree)는 데이터의 서열을 표시하는 데 사용 가능한 자료구조이다.
  • 트리 구조에서 데이터 값들은 부모-자식 관계로 연결된다.
  • 일반 트리(general tree)에서 부모는 임의의 수의 자식을 가질 수 있지만, 이진 트리(binary tree)에서 부모는 최대 두 개의 자식을 가질 수 있다.
  • 이진 트리 탐색(binary search tree)는 추가로 부모의 두 자식 사이에 좌측 자식 <= 우측 자식의 순서를 요구한다.

    image


1.9.3 Hash Functions and Maps

  • 해시 함수(hash function)는 데이터를 입력으로 받아 이 데이터에 산술 연산을 수행하여 하나의 수를 반환한다.
    • 이 수는 그 데이터를 인출하기 위해 테이블의 인덱스로 사용할 수 있다.
  • 해시 맵(hash map)은 해시 함수를 사용하여 [키:값]을 연관(map)시킨다.
    • 일단 매핑이 성립되면 키에 해시 함수를 적용하여 해시맵으로부터 그 값을 얻을 수 있다.

image


1.9.4 Bitmaps

  • 비트맵(bitmap)은 n개의 항의 상태를 나타내는 데 사용 가능한 n개의 이진 비트의 스트링이다.
  • 예를 들어 다수의 지원이 있으면, 각 자원의 가용 여부를 이진 비트의 값으로 표시한다.
    • 0은 자원이 사용 가능함을 표시하고, 1은 사용 불가능함을 표시한다.


1.10 Computing Environments

1.10.1 Traditional Computing

  • 네트워크 컴퓨터(network computer)는 실질적으로 웹 기반 컴퓨팅을 이해하는 터미널을 말하며, 이들은 더 높은 보안이나 쉬운 보수가 필요한 경우 전통적 워크스테이션을 대체하여 사용되고 있다.
  • 일부 홈은 홈 계산 환경을 보안 침해로부터 보호하기 위해 방화벽(firewall)을 가지고 있다.
    • 방화벽은 네트워크의 장치간 통신을 제한한다.


1.10.2 Mobile Computing

  • 모바일 컴퓨팅(mobile computing)은 휴대용 스마트폰과 태블릿 컴퓨터의 컴퓨팅 환경을 말한다.
    • 이들 장치들은 이동이 가능하고 가볍다는 구별되는 물리적 특징을 공유한다.


1.10.3 Client-Server Computing

  • 현대 네트워크 구조는 서버 시스템(server systems)이 클라이언트 시스템(client systems)이 생성한 요청을 만족시키는 배치를 특징으로 한다.

image

  • 서버 시스템은 계산 서버(compute-server)와 파일 서버(file-server)로 분류될 수 있다.
    • 계산 서버(compute-server) 시스템은 클라이언트가 어떤 작업을 요청을 보낼 수 있는 인터페이스를 제공한다. 그 결과로 서버는 그 작업을 수행하고 결과를 클라이언트에게 돌려보낸다.
    • 파일 서버(file-server) 시스템은 클라이언트가 파일을 생성(create), 갱신(update), 읽기(read) 및 제거(delete)할 수 있는 파일 시스템 인터페이스를 제공한다. 웹 서버가 그 예이다.


1.10.4 Peer-to-Peer Computing

image

  • P2P(peer-to-peer) 시스템에서는 클라이언트와 서버가 서로 구별되지 않는다. 대신 시스템상의 모든 노드가 피어로 간주되고 각 피어는 서비스를 요청하느냐 제공하느냐에 따라 클라이언트 및 서버로 동작한다.
  • 클라이언트 서버 시스템에서는 서버가 병목으로 작용하지만 피어 간 시스템에서는 서비스가 네트워크에 분산된 여러 노드에 의해 제공될 수 있다.
  • 피어 간 시스템에 참여하기 위해서는 노드는 먼저 P2P 네트워크에 참가해야 한다.
  • 네트워크에 참가하게 되면 네트워크의 다른 노드에게 서비스를 제공하거나 서비스를 요청할 수 있다.
  • 다음은 어떤 서비스가 가능한지를 결정하는 방법이다.
    • 노드가 네트워크에 참가할 때 네트워크의 중앙 검색 서비스에 자신이 제공하는 서비스를 등록한다.
    • 특정 서비스를 원하는 노드는 먼저 이 중앙 검색 서비스를 통하여 어떤 노드가 서비스를 제공하는지를 확인하여야 한다.
    • 나머지 통신은 클라이언트와 서비스 제공자 사이에서만 발생하게 된다.


1.10.5 Cloud Computing

image

  • 클라우드 컴퓨팅(cloud computing)은 계산, 저장장치는 물론 응용 조차도 네트워크를 통한 서비스로 제공하는 컴퓨팅 유형이다.
  • 어떤 면에서 클라우드 컴퓨팅은 가상화를 그 기능의 기반으로 사용하기 때문에 가상화의 논리적 확장이다.
  • 관련 용어들을 정리하면 다음과 같다.
    • public cloud : 서비스를 위해 지불 가능한 사람은 누구나 인터넷을 통해 사용 가능한 클라우드
    • private cloud : 한 회사가 사용하기 위해 운영하는 클라우드
    • hybrid cloud : public과 private 부분을 모두 포함하는 클라우드
    • (SaaS)software as a service : 인터넷을 통해 사용 가능한 하나 이상의 애플리케이션(ex. 워드 프로세서나 스프레트시트)
    • (PaaS) platform as a service : 인터넷을 통해 사용하도록 애플리케이션에 맞게 준비된 소프트웨어 스택(ex. 데이터베이스 서버)
    • (IaaS) infrastructure as a service : 인터넷을 통해 사용 가능한 서버나 저장장치(ex. 생산 데이터의 백업 복사본을 만들기 위한 저장장치)


1.10.6 Real-Time Embedded Systems

  • 이 장치는 아주 특정한 작업만을 수행하는 경향이 있다.
  • 이 장치들이 수행되는 시스템은 매우 원시적이며, 운영체제도 제한된 기능만을 제공한다.
  • 임베디드 시스템은 거의 언제나 실시간 운영체제를 수행한다.
    • 실시간 시스템은 프로세서의 작동이나 데이터의 흐름에 엄격한 시간 제약이 있을 때 사용된다.
    • 따라서, 실시간 시스템은 종종 전용 애플리케이션에서 제어 장치로 사용된다.


References

댓글남기기