7 분 소요

본 글은 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)에서는 둘 이상의 호스트들이 응용 프로그램을 실행하고 서로를 감시한다.
    • 가용한 하드웨어를 모두 사용하기 때문에 대칭형 구성이 더 효율적이다.





References

댓글남기기