운영체제(Operating System) - 1. 개관

@inup· April 05, 2025 · 31 min read

본 포스팅은 Abraham Silberschatz 저 『Operating System Concepts』(9th Edition)의 내용을 개인 학습 목적으로 요약·정리한 글입니다.

1.1 운영체제가 하는 일

  • Computer System은 하드웨어, 운영체제, 응용 프로그램, 사용자로 구분된다.

    1. 하드웨어(Hardware) : CPU, Memory, I/O로 구성되어 기본 계산용 자원을 제공
    2. 운영체제(OS) : Application 간의 하드웨어 사용을 제어한다.
    3. 응용 프로그램(Application)
  • Computer System은 HW, SW, Data로 구성되었다고 볼 수 있다.
  • 운영체제(OS)는 컴퓨터 시스템이 동작할 때, 이들 자원을 적절하게 사용할 수 있는 방법을 제공한다.
  • 운영체제는 government와 유사하다. 즉, 다른 프로그램이 유용하게 사용할 수 있는 '환경'을 제공한다.

User 관점 🧑

Computer 사용자의 관점은 사용되는 Interface에 따라 달라진다.

1. Personal Computer의 경우

  • 보통 컴퓨터 사용자들은 키보드, 마우스, System Unit으로 구성된 PC 앞에서 작업을 한다.
  • 이 System은 한 사용자가 자원을 독점하도록 설계되었으며, 사용자가 수행하는 작업을 최대화하는 게 목표이다.
  • 이 경우, '사용의 용이성'을 위해 설계되고, '자원의 이용'의 효율성에는 전혀 신경을 쓰지 않는다.

2. 대형 컴퓨터 혹은 미니컴퓨터에 연결된 터미널에 앉아 있는 경우

  • 다른 사용자들은 동일한 컴퓨터에 대해 다른 Terminal을 접근하고 있다.
  • 이들 사용자들은 자원을 공유하며, 정보를 교환할 수 있다.
  • 따라서, 이 경우 OS는 '자원의 이용'을 극대화하도록 설계되어 있어, CPU 시간, 메모리 등이 효율적으로 사용된다.

3. WorkStation과 Server의 Network에 연결된 Workstation과 관계된 경우

  • 이 경우, 사용자들은 자유롭게 사용할 수 있는 전용 자원을 가지게 된다.
  • 그러나, 네트워킹과 프린트 서버 등을 공유하므로, '사용의 용이성'과 '자원의 이용'이 조화가 이루도록 설계된다.

System 관점 🖥️

  • 운영체제는 하드웨어와 가장 밀접한 프로그램이며, 운영체제를 Resource Allocator(자원 할당자)로 볼 수 있다.

    • 운영체제는 CPU Time, Memory 등을 효율적으로 사용하기 위한 자원의 관리자 역할을 수행한다.
  • 운영체제는 '제어 프로그램(Control Program)'으로, 입출력 장치의 제어와 작동에 깊이 관여한다.

운영체제의 정의(Definition of OS)

  • 운영체제의 완벽한 정의는 없다.
  • 운영체제가 존재하는 이유 = 운영체제가 유용한 컴퓨터 시스템을 만드는 과정에서 발생하는 문제점을 해결하기 위한 적절한 방법
  • 컴퓨터 시스템의 근본 목적은 사용자 프로그램을 실행하고, 사용자 문제의 해결을 보다 쉽게 해주는 데 있다.
  • 이 목적을 달성하기 위해 컴퓨터 하드웨어가 제작되며, 순수 하드웨어만으로는 해결되지 않아 응용 프로그램이 개발되었다. 다양한 프로그램들은 입출력 장치의 통제와 같이 공통적인 연산을 필요로 한다.
  • 여기에 자원을 할당하고 제어하는 공통 기능을 하나의 소프트웨어로 통합한 것이 운영체제이다.
  • 보다 일반적인 정의로, 운영체제는 컴퓨터에서 항상 수행되는 프로그램으로 커널(Kernel)이라고 불린다.

1.2 컴퓨터 시스템의 구성(Organization)

image

  • 컴퓨터 시스템의 작동 과정
  • 현대의 범용 컴퓨터 시스템은 공통 버스를 통해 공유 메모리에 접근할 수 있도록 연결된 여러 개의 장치 제어기(Device Controller)하나 이상의 CPU로 구성되어 있다.

    • 장치 제어기 : 오디오 장치, 비디오 디스플레이 등

컴퓨터의 시작 과정

  • 컴퓨터 구동 시 수행할 초기 프로그램 = 부트스트랩(BootStrap) 프로그램

    • 부트스트랩은 ROM/EEPROM 내에 저장된 펌웨어(Firmware)의 일종
    • ROM(공장에서 고정됨) vs. EEPROM(느리지만 전기적 방식으로 고치기 가능)
    • CPU, Device Controller, Memory 등을 포함한 모든 시스템 초기화
    • Bootstrap은 운영체제를 메모리에 적재하고 실행한다.

  1. 파워로부터 각 장치들에 전력 공급(CPU/RAM/ROM 등)
  2. CPU가 ROM(Read-only Memory)에 저장된 BIOS(펌웨어)를 실행한다.

    • BIOS = Basic Input-Output System = 기본 입출력 시스템
    • BIOS는 POST 검사 과정을 수행 (메모리, IO, 디스크 등 작동 점검)

      • POST = Power-On Self Test = 하드웨어들 상태 괜찮니?
  3. BIOS가 부트스트랩(Bootstrap) 과정을 시작

    • MBR 영역(하드디스크 0번 섹터)의 부트로더를 메모리로 올림
  4. 메모리에 올라간 부트로더가 디스크(Disk)에 있는 운영체제 커널(OS Kernel) 코드를 복사해서 메모리에 붙여넣어 운영체제를 실행한다.
  5. (제어권을 넘겨받은) OS는 첫 번째 프로세스(Daemon, 데몬)을 실행하고, 이벤트를 기다린다.

    • 이벤트는 보통 HW나 SW의 인터럽트 신호를 말한다.

인터럽트 (Interrupt)

  • 이후, 시스템은 이벤트(Event)가 발생하기를 기다린다.
  • 사건이 발생하면, Hardware 또는 Software로부터 발생한 인터럽트(interrupt)에 의해 신호가 보내진다.

    • Hardware는 어느 순간이든(=비동기적으로) System Bus를 통해 CPU에 신호를 보내고, 인터럽트를 발생시킬 수 있다.
    • Software는 System Call 호출Trap 인터럽트를 발생시킬 수 있다. (System Call ⊂ Trap)

🔁 인터럽트 처리 과정

  1. 인터럽트 발생

    • CPU가 어떤 작업을 수행 중일 때, 외부 장치나 소프트웨어가 인터럽트 신호를 보내면 → CPU는 하던 일을 잠시 멈춘다.
  2. 인터럽트 서비스 루틴(ISR)으로 이동

    • CPU는 미리 정해진 위치(주소)로 이동해서 인터럽트를 처리하는 코드(인터럽트 서비스 루틴, ISR)를 실행한다.
  3. 현재 상태 저장

    • CPU는 다시 원래 작업으로 돌아오기 위해, 현재 실행 중이던 명령의 주소(Program Counter)와 레지스터 값들을 저장해둔다.
  4. 인터럽트 작업 수행

    • 인터럽트 서비스 루틴에서 필요한 작업(예: 키 입력 처리, I/O 완료 처리 등)을 수행한다.
  5. 저장된 상태 복원 후 복귀

    • 인터럽트 처리가 끝나면, 저장해둔 주소와 상태를 복원한 뒤, 중단되었던 원래 작업을 이어서 수행한다. image1

img1 daumcdn

  • CPU와 I/O장치 간 타이밍 차이 발생 이유

    • I/O request : CPU가 I/O 요청을 전송 (키보드에서 “A” 키를 누름을 알림)
    • transferring : I/O 장치가 데이터를 처리중 (’A 누름’ 명령어 처리)
    • interrupt signaled : I/O 장치가 ‘다 했다’고 CPU에게 알림 (A 입력 완료)
    • interrupt handled: CPU가 그 알림을 받고 실제 처리 (

image2

저장장치 구조

image3

  • nonvolatile = 비휘발성 (HDD, SSD 등)
  • 일반적인 명령어 실행 주기

    • Load Program(불러오기) → Fetch Instruction (명령어 가져오기) → Decode (명령어 해독) → Fetch Operands(피연산자 가져오기) → Execute (명령어 실행) → Store (결과 저장)

image4

  • CPU는 오직 메모리에서만 명령어를 로드할 수 있으므로 실행할 프로그램은 반드시 메모리(Memory, RAM)에 저장되어야 한다.
  • 주메모리(RAM)는 모든 필요한 프로그램과 데이터를 영구적으로 저장하기에는 작다
  • 주 메모리는 휘발성 저장 장치로, 전원이 꺼지거나 다른 이유로 전원이 끊기면 내용을 잃게 된다.
  • 주 메모리의 확장이 필요함 → 보조저장장치 사용

입출력장치(I/O) 구조

  • 시스템의 신뢰성과 성능에 미치는 영향 때문에 OS 코드의 많은 부분은 입출력 관리에 쓰임

    img1 daumcdn1

  • I/O 장치CPU는 동시에 실행할 수 있다.
  • 각 장치는 장치 컨트롤러(Device Controller)가 존재하며, 로컬 버퍼를 가진다.

    • 장치 컨트롤러는 OS 내부에 존재하는 장치 드라이버가 제어한다.
  • CPU는 데이터를 장치 컨트롤러의 로컬 버퍼에서 이동시킨다
  • I/O는 장치에서 장치 컨트롤러의 로컬 버퍼로 이루어진다
  • 장치 컨트롤러는 작업을 완료했음을 CPU에 인터럽트를 발생시켜 알린다

image5

🚀 DMA (Direct Memory Access)

  • 인터럽트 기반 I/O는 높은 오버헤드로 인해 대량 데이터 이동에는 적합하지 않을 수 있다.

    • 오버헤드(Overhead) : 어떤 작업을 수행하기 위해 필요한 부수적 자원.
    • 어떤 작업을 가능하게 하기 위해 오버헤드를 피할 수는 없지만, 최소화해야 성능 향상에 도움이 됨
  • 만약 한 글자 입력 당 한 번의 인터럽트가 발생한다면?

    • 1,000자 입력을 위해서는 1천 번의 인터럽트를 발생시켜야 한다.

image6

  • DMA (Direct Memory Access)

    • 장치 컨트롤러가 CPU의 개입 없이 데이터를 전체 블록 단위로 로컬 버퍼에서 메모리로 직접 전송
    • 즉 하드웨어(HDD, VGA 등)들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능
    • 한 블록당 하나의 인터럽트만 생성되어 오버헤드 감소

    image7

image8


1.3 컴퓨터 시스템의 구조 (Architecture)

image9

컴퓨터 시스템 부품들의 정의

image10

ALU,CU = 레지스터 / TIMER, ADC = 주변장치(페리페럴)

  • CPU : 명령어들을 실행시키는 하드웨어, 프로세서의 종류 중 하나
  • Processor : CPU의 일부분으로서 CPU의 핵심 기능을 수행하는 실제 칩(chip)을 가리킴
  • Core : 코어는 CPU 내부의 실행 엔진으로 실제로 명령어를 처리하고 연산을 수행함. 코어들은 CPU 내부에 위치하여 독립적으로 작동하거나 병렬적으로 수행할 수 있다

1️⃣ SMP (대칭형 멀티프로세싱) 아키텍처

img1 daumcdn2

  • 여러개의 프로세서 또는 코어가 동일한 메모리와 시스템 버스에 접근하여 작동하는 아키텍처
  • SMP 시스템에서는 각 프로세서가 독립적으로 작동하지만 모든 프로세서가 공유된 메모리에 접근 가능

    • 버스/메모리 병목 현상이 발생

2️⃣ 듀얼 코어(Dual Core) 디자인

image11

  • 하나의 CPU 내 코어가 여러 개 존재하고, 각 코어 내에 자신만의 L1 캐시를 가지는 구조
  • L2/L3 캐시는 공유가 가능하여 협업/자원공유 및 병렬 처리 가능.

    • 싱글코어 대비 성능 ↑. 멀티스레딩 성능 향상됨
    • 단일 CPU 패키지 내에서 동작하므로, 전력 효율적
  • 결국 두 개의 코어가 하나의 주메모리(RAM) 대역폭을 공유하는 구조. 병목 발생 가능

3️⃣ NUMA 구조

image12

  • 다수의 프로세서가 존재하며, 각 프로세서가 자신만의 지역 메모리(Local Memory)를 가짐
  • 필요할 경우 다른 프로세서의 메모리에도 접근할 수 있음.

    • CPU가 자신의 지역(Local) 메모리에 접근할 때는 빠르고, 다른 노드(Node)의 메모리에 접근할 때는 상대적으로 느림
    • 대형 시스템에서 메모리 병목 현상을 완화할 수 있음.
    • 메모리를 CPU 가까이에 배치하여 메모리 접근 속도를 최적화.
  • OS 및 소프트웨어가 NUMA-aware(메모리 배치 최적화 지원) 되어야 최대 성능을 발휘함
  • 원격 메모리 접근 비용이 높아질 수 있음 → 프로세스가 잘못된 메모리 배치를 사용하면 성능 저하 발생

1.4 운영체제의 동작 과정 (Operations)

  • 운영 체제는 인터럽트 기반으로 동작한다.

    • HW 인터럽트
    • SW 인터럽트 (=Trap)
  • 운영 체제와 사용자가 컴퓨터의 하드웨어 및 소프트웨어 자원을 공유하므로, 사용자 프로그램의 오류가 다른 프로그램에 영향을 미치지 않도록 해야한다.

    • 예: 무한 루프, 프로세스가 서로 또는 운영 체제를 수정하는 문제 등
    • 잘못된(악성) 프로그램에 대한 적절한 보호가 필요하다

      • 이중 모드 실행 / 타이머

멀티 프로그래밍

  • 메모리에 여러 개의 응용 프로그램을 적재하는 것 (효율성을 위해)
  • 메모리에 여러개의 프로그램을 올려두어서 CPU가 하나의 프로그램이 대기중일때 다른 프로그램을 수행시켜 효율을 극대화

    img1 daumcdn3

  • 단일 사용자는 CPU와 I/O 장치를 항상 바쁘게 유지할 수 없음
  • 다중 프로그래밍은 작업(코드 및 데이터)을 조직하여 CPU가 항상 실행할 작업을 갖도록 함
  • 시스템 내의 전체 작업 중 일부는 메모리에 보관됨
  • 작업이 대기해야 할 때(예: I/O 대기), 운영 체제는 다른 작업으로 전환

타임 쉐어링 (멀티태스킹)

  • 시분할(Time Sharing)은 멀티프로그래밍(Multiprogramming)의 논리적 확장

    • CPU는 작업을 매우 자주 전환하여 사용자가 각 작업과 상호작용할 수 있도록 하며, 이를 통해 상호작용형 컴퓨팅을 생성 (= 사용자 응답성을 고려한 탄생)
  • Job Scheduling : 어떤 프로그램을 주메모리(RAM)로 올려줄까에 대한 스케줄링 (Job Queue → Memory)
  • CPU Scheduling : 어떤 프로세스를 CPU로 올려줄까에 대한 스케줄링 (Ready Queue → CPU)
  • Swapping : 메인 메모리에 올리려고 할 때, Memory가 부족하면 일 안하는 프로세스를 보조공간으로 내보낸 후 메모리에 올림 (스와핑)

    • Swap In ↔ Swap Out (단, 할 때마다 Context Switching 이 발생해서 Overhead가 많아짐)
    • 가상 메모리 : 물리적 메모리 크기의 한계를 극복하기 위해 가상 메모리 사용

→ 멀티프로그래밍과 같이 동시에 메모리에 할당/올라가지만, 타임쉐어링은 맥시멈 시간이 한정되어 있음. 그 시간 안에 해결 못하면 CPU 뺏어서 다른 친구에게 던짐.

듀얼 모드

img1 daumcdn4

  1. 유저 모드 (user mode)

    • 사용자가 접근할 수 있는 영역을 제한적으로 두고, 프로그램의 자원에 함부로 침범하지 못하는 모드
    • 유저 모드에서 코드를 작성하고, 프로세스를 실행하는 등의 행동을 할 수 있음
  2. 커널 모드 (kernel mode)

    • 커널 모드란 잘못된 프로그램으로 인해 다른 프로그램이 잘못 실행되지 않도록 하기 위해 사용되는 모드이다.
    • 커널 모드는 모든 자원(드라이버, 메모리, CPU 등)에 접근, 명령을 할 수 있음
  3. 듀얼 모드를 이용한 실행가능 기능 구분

    • 타이머 값 설정 (사용자/커널)
    • 시계 읽기 (사용자/커널)
    • 인터럽트 끄기 (사용자/커널)
    • I/O 장치 접근 (사용자/커널)
    • 트랩 명령어 발행 (사용자/커널)

모드 비트 - ARM

image13

타이머

  • 무한 루프나 프로세스가 자원을 과다하게 사용하는 것을 방지하기 위한 타이머

    • 타이머는 일정 시간 후에 컴퓨터를 인터럽트하도록 설정된다.
    • 물리적 시계에 의해 카운터가 감소된다.
    • 운영 체제가 카운터를 설정한다 (특권 명령어).
    • 카운터가 0이 되면 인터럽트가 발생한다.
    • 프로세스 스케줄링 전에 설정되어, 할당된 시간을 초과한 프로그램을 제어하거나 종료한다.
  • 운영체제가 CPU에 대한 Control을 유지할 수 있도록 보장해야 한다.
  • 즉, 사용자 프로그램이 무한 루프에 빠지거나 서비스 호출에 실패하여, 운영체제가 Control 하지 못하는 상황이 생기는 상황을 방지해야 한다. 이러한 목적을 달성하기 위해 타이머(Timer)를 사용할 수 있다.
  • 타이머(Timer)는 지정된 시간 이후 컴퓨터를 인터럽트 하도록 설정할 수 있다.
  • 고정 시간마다, 혹은 가변 타이머를 사용하여 클락이 tick할 때마다 counter가 감소하게 되며, counter가 0이 되면, 인터럽트가 발생하게 된다.

운영 체제가 하는 일

  • 운영 체제는 컴퓨터 하드웨어를 관리하고, 애플리케이션 프로그램이 실행될 수 있는 환경을 제공한다.

    • 프로세스 관리
    • 메모리 관리
    • 저장 장치 관리
    • 보호 및 보안

1.6 프로세스 관리

  • 실행 중인 프로그램(program in execution) = 프로세스(Process)
  • 프로그램은 passive(수동적)인 개체, 프로세스는 프로그램 카운터를 가진 active(능동적) 개체
  • 프로그램은 해당 instruction이 CPU에 의해 수행되지 않으면, 아무 일도 할 수 없다.
  • 프로세스는 자신의 일을 수행하기 위해 CPU 시간, 메모리, 파일, 그리고 입출력 장치를 포함한 여러 가지 장치를 필요로 한다.
  • 한 프로세스는 한 시스템 내의 작업의 단위이다. 이러한 시스템은 프로세스의 집합으로 구성되는데, 프로세스들 중 일부는 운영체제 프로세스들(시스템 코드 수행)이며, 나머지는 사용자 프로세스들(사용자 코드 수행)이다.
  • 프로세스는 작업을 수행하기 위해 자원이 필요하다.

    • CPU, 메모리, I/O, 파일
    • 초기화 데이터
  • 프로세스 종료 시, 재사용 가능한 자원을 회수해야 한다.
  • 단일 스레드 프로세스하나의 프로그램 카운터를 가지며, 다음 실행할 명령어의 위치를 지정한다.

    • 프로세스는 명령어를 순차적으로 하나씩 실행하여 완료된다.
  • 다중 스레드 프로세스는 각 스레드마다 하나의 프로그램 카운터를 가진다.

    • 프로그램 카운터(Program Counter, 줄여서 PC)는 CPU 내부에 있는 중요한 레지스터 중 하나로, “다음에 실행할 명령어의 주소"를 저장.
  • 시스템에는 여러 프로세스가 있으며, 일부는 사용자 프로세스이고, 일부는 운영 체제 프로세스이다. 이들은 하나 이상의 CPU에서 동시에 실행된다.

    • CPU를 프로세스/스레드 간에 다중화하여 동시 실행을 구현한다.

프로세스 관리 활동

  • 운영체제는 프로세스 관리와 관련해 다음과 같은 활동에 대한 책임을 진다.
  • CPU에 Process와 thread를 Schedule 하기.
  • 사용자 및 시스템 프로세스의 생성 및 삭제
  • 프로세스 일시 정지 및 재개
  • Process Synchronization(프로세스 동기화)를 위한 기법 제공
  • Process Communication(프로세스 통신)을 위한 기법 제공
  • 교착 상태 처리 등..

1.7 메모리 관리

  • 주 메모리(Main Memory)는 일반적으로 CPU가 직접 주소를 지정할 수 있고, 그리고 직접 접근할 수 있는 유일한 대량 메모리이다.
  • 예를 들어, CPU가 디스크에서 가져온 데이터를 처리하려면, 이들 데이터는 CPU가 생성된 입출력 호출에 의해 먼저 주 메모리로 전송되어야 한다. 마찬가지로 CPU가 명령을 수행하기 위해서는 명령이 주 메모리 내에 있어야 한다.

    • 모든 명령어는 실행을 위해 메모리(RAM)에 있어야 한다.
    • 모든 데이터는 처리 전후에 메모리(RAM)에 존재해야 한다.
    • 여러 프로그램을 메모리에 보관하여 CPU 사용률을 최적화하고, 컴퓨터가 사용자에게 빠르게 반응하도록 한다.
    • 메모리 관리는 무엇을 언제 메모리에 올릴지 결정한다.
  • 메모리 관리를 위한 몇 가지 활동

    • 현재 메모리가 어떤 부분이 사용 중인지, 누가 사용하는지 추적한다.
    • 어떤 프로세스(혹은 그 일부)와 데이터를 메모리로 이동시킬지 또는 메모리에서 이동시킬지 결정한다.
    • 필요에 따라 메모리 공간을 할당하고 해제한다.

저장 장치 관리

  • 운영 체제는 정보 저장소에 대한 일관된 논리적 뷰를 제공한다.

    • 저장 장치의 물리적 속성을 추상화하여 논리적 저장 단위인 파일로 제공한다.
    • 운영 체제는 파일을 물리적 매체에 매핑하고, 저장 장치를 통해 파일에 접근한다.
  • 저장장치 관리를 위한 몇 가지 활동

    • 파일 시스템 관리
    • 대용량 저장 장치 관리
    • 캐싱
    • I/O 서브시스템

보호 및 보안

  • 보호

    • 운영 체제가 정의한 자원에 대한 프로세스나 사용자의 접근을 제어하는 메커니즘
    • 파일 접근 제어 – 사용자 ID, 그룹 ID
  • 보안

    • 시스템을 내부 및 외부 공격으로부터 방어
    • 사용자 인증 (사용자 이름/비밀번호)
@inup
언제나 감사합니다 👨‍💻