본문 바로가기
CS/운영체제

[운영체제 공룡책] Chapter 1. 서론 Introduction

by dingwoon 2024. 11. 27.

※운영체제 공룡책 10판을 간단하게 정리한 내용의 글입니다.※

Part 1. 개관(Overview)

Chapter 1. 서론 Introduction

운영체제는 컴퓨터 하드웨어를 관리하고 이를 프로그램에 할당하는 소프트웨어이다.

운영체제 자체는 유용한 기능을 수행하지 못한다. 운영체제는 단순히 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공한다.

장치 컨트롤러(CPU와 외부 장치 간의 통신을 관리하는 하드웨어 구성 요소)는 인터럽트를 통해 장치 드라이버(운영체제의 일부)에게 입출력 작업을 완료했다는 사실을 알린다.

하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다.

인터럽트는 운영체제와 하드웨어의 상호 작용 방식의 핵심 부분이다.

CPU가 인터럽트 되면 CPU는 하던 일을 중단하고 즉시 고정된 위치로 실행을 옮기고, 인터럽트 서비스 루틴(ISR)이 실행된다. ISR에서는 인터럽트가 발생했을 때 수행되어야 하는 작업이 정의되어 있는 코드입니다.

CPU는 interrupt request line(IRQ)를 통해 인터럽트가 발생한 것과 인터럽트 번호(식별자)를 전달 받는다. 이를 통해 CPU는 적절한 ISR을 수행하게 된다. 이게 line(선)인 이유는 실제로 하드웨어에서 물리적으로 신호를 전달하는 구리 선이기 때문이다.

인터럽트에는 Maskable interrupt와 Non-Maskable interrupt가 있다. Maskable interrupt(IRQ)는 우선 순위를 가지고 특정 조건에서 무시될 수 있다. 이는 인터럽트 컨트롤러 하드웨어에 의해 제공된다. Non-Maskable interrupt(NMI)는 항상 최우선 순위를 가지며 무시될 수 없다. 일반적으로 긴급한 오류를 처리하기 위해 사용된다.


컴퓨터가 시작될 때 부트스트랩 프로세스에 의해 운영체제가 주기억장치에 적재된다. 이것을 부팅(booting)이라 한다.

이 부트스트랩 프로세스는 보통 ROM 또는 특정 메모리 위치에 저장된 펌웨어에 의해 시작된다. 부트스트랩 프로그램은 주로 EEPROM 또는 다른 형태의 펌웨어에 저장된다. EEPROM 또는 플래시 메모리를 사용하여 부트스트랩 프로그램이 영구적으로 보관되며, 컴퓨터의 부팅 과정에서 사용된다.

폰 노이만 구조 시스템에서 실행되는 전형적인 명령-실행 사이클은 먼저 메모리로부터 명령을 인출해서 그 명령을 instruction register에 적재(load)한다.

저장장치는 휘발성 저장장치와 비휘발성 저장장치로 나뉘고, 휘발성 저장장치를 단순히 메모리라고 한다. 비휘발성 저장장치는 전원이 꺼져도 내용을 유지하고, 이를 NVS라고 한다. (SSD도 NVS에 속한다.)

기존 인터럽트 구동 I/O 형태는 NVS I/O와 같은 대량 데이터 이동에 사용될 때 오버헤드가 발생할 수 있다. 그래서 DMA(Direct Memory Access)를 통해 CPU의 개입 없이 메모리와 버퍼 장치 간에 블록 단위로 데이터가 전송된다.


키보드나 디스크 컨트롤러와 같은 외부 장치들은 각자의 마이크로프로세서를 가지고 있다. 하지만 이게 싱글 프로세서 시스템을 멀티 프로세서로 바꿔주는 것은 아니다. 외부 장치의 프로세서와는 별개로 동작한다. 각자의 일을 한다.

컴퓨터 시스템에서 여러 개의 프로세서(또는 코어)가 메모리에 대해 대칭적으로 접근하여 작업을 처리하는 구조를 SMP(Symmetric Multiprocessing)라고 한다.

SMP에는 하나의 칩(프로세서)에 하나의 코어를 가지고 여러 개의 프로세서를 가지는 멀티 프로세서인 경우가 있고, 하나의 칩(프로세서)에 여러 개의 코어를 가지는 멀티 코어인 경우가 있다. 단일 칩에 멀티 코어인 경우가 훨씬 적은 전력을 사용하고, 통신이 효율적이다. 두 경우 모두 메모리를 공유함으로써 작업을 효율적으로 할 수 있다.

프로세서 개수에 비례해서 성능이 좋아지진 않는다. 이는 시스템 버스에 대한 경합이 병목 현상이 되어 성능이 저하되기 때문이다.

그래서 각 프로세서에 로컬 버스와 로컬 메모리를 제공해서 프로세서의 확장성을 높인 NUMA(Non-Uniform Memory Access)라는 것도 있다.


컴퓨터의 전원이 켜질 때 부트스트랩 프로그램은 CPU 레지스터, 장치 컨트롤러, 메모리 등 시스템의 모든 측면을 초기화하고, 운영체제 커널을 디스크에서 찾아서 메모리에 적재한다. 그리고 데몬 프로세스들이 실행되고, 이벤트(인터럽트 포함)를 기다린다.


모드 비트라는 것이 있어서 커널 모드(0)사용자 모드(1)를 구분한다. 시스템 부트 시 또는 트랩(예외)이나 인터럽트, 시스템 콜이 있을 때 하드웨어는 사용자 모드에서 커널 모드로 전환한다. (= 모드 비트를 0으로 변경한다.) 시스템은 사용자 프로그램으로 제어를 넘기기 전에 항상 사용자 모드로 전환한다. (= 모드 비트를 1로 변경한다.)

커널 모드에서만 실행될 수 있는 명령을 특권 명령(privileged instruction)이라고 한다. 이는 시스템 자원에 직접 접근하거나 제어하는 기능을 가지며, 시스템의 안정성와 보안을 유지하기 위해 필요하다.

이를 통해 사용자 프로그램이 시스템 자원을 임의로 변경하거나 하드웨어를 제어하는 것을 방지한다. 대신 사용자 프로그램은 운영체제가 제공하는 인터페이스인 시스템 콜을 통해 활용할 수 있다.

불법적인 명령이나 잘못된 접근에 대해서 운영체제는 비정상적으로 프로그램을 종료시키고, 적절한 오류 메시지를 주고 프로그램의 메모리 덤프를 생성합니다.

타이머를 통해 지정된 시간 후에 컴퓨터를 인터럽트 하도록 설정할 수 있다. 이는 제어가 운영체제로 복귀하지 않는 경우가 없도록 방지하기 위해 필요하다.


보조저장장치는 매우 빈번하고 폭넓게 사용되므로, 효율적으로 사용해야 한다. 컴퓨터의 전체 동작 속도는 보조저장장치 서브시스템과 그것을 조작하는 알고리즘의 속도에 의해 결정될 수 있다.


VMM에는 두 가지 종류가 있다. VMM 자체가 호스트 운영체제의 역할을 해서 하드웨어에서 직접 실행되면서 여러 운영체제를 관리하거나, 호스트 운영체제 위에서 VMM이 돌아가는 두 가지 방식이 있다.