Study/OS

[운영체제] 1. Introduction

harchiving 2025. 4. 6. 15:15
반응형
해당 내용은 공룡책(Operating System Concepts 10th Ed. : Abraham Silberschatz, Peter Baer Galvin, Greg Gagne)과 대학 강의를 기반으로 재구성하여 정리한 공부 내용입니다.

공룡책을 읽으며 느낀 점은 두서와 맥락이 없고 내용이 중구난방으로 이어진다는 것이었다... 이상한 번역은 덤

공룡책을 주교재로 진행하는 대학 강의 역시 연속적으로 불연속적인 내용을 던지며 진행되었고, 스스로 이해를 돕고자 이 시리즈를 작성하게 되었다.

큰 목차는 공룡책과 동일하게 나누어 작성하지만, 세부 내용은 이해하기 쉽게 순서를 재구성하고 최대한 현재 내용이 무엇을 설명하는 것인지 파악하기 쉽도록 Theme을 나누어 작성하도록 하였다.

우선적으로 대학 강의에서 커버하는 내용 위주로 정리하여 업로드한 뒤, 추후 빠진 내용들을 추가할 예정이다.

 


 

운영체제가 할 일(What Operating System Do)

운영체제란?

컴퓨터 사용자와 컴퓨터 하드웨어 사이 중계 역할(중간 매개체)을 하면서 프로그램 실행 관리·제어하는 시스템 소프트웨어

컴퓨터가 제대로 동작하도록 하드웨어와 소프트웨어 자원을 효율적으로 관리해주는 핵심 프로그램

프로세스 및 메모리 배분, 파일 시스템 관리, 보안 기능 등을 담당

 

컴퓨터 자원 독점 관리

자원의 종류: ①하드웨어 자원(CPU, 캐시, 키보드 등) ②소프트웨어 자원(응용 프로그램) ③데이터 자원(파일, DB 등)

모든 관리 권한을 독점하는 관리자 역할: 자원 할당과 공유, 액세스, 입출력 등

 

운영체제 = 소프트웨어

핵심 기능:

커널(kernel)이라 불리는 핵심 코드 → 컴퓨터에서 항상 running인 프로그램

도구 프로그램들(UI, 작업 관리자, 제어판 등)

디바이스 드라이버들(장치 제어)

 

구성 요소:

커널: CPU 스케줄링, 메모리 관리, 프로세스/스레드 관리 등 핵심 자원 관리

시스템 프로그램: 시스템 관리에 관여하는 핵심 기능 제공(UI, 설정 프로그램 등)

응용 프로그램: 시스템 작동과 관련되지 않은 모든 프로그램(워드와 같은 사용자 어플리케이션)

+ 미들웨어: 응용 프로그램 개발자에게 추가 서비스를 제공하는 일련의 소프트웨어 프레임워크. OS와 응용 프로그램 중개

 

컴퓨터 시스템(Computer System Structure)

4가지 구성 요소로 구분

① 하드웨어

CPU와 메모리 및 입출력 장치로 구성 → 기본 컴퓨팅 자원 제공

② 운영체제

다양한 응용 프로그램 간의 하드웨어 사용을 제어·조정

③ 응용 프로그램

컴퓨터 자원으로 사용자의 컴퓨팅 문제를 해결하는 방법을 정의(워드 프로세서, 컴파일러, 웹 브라우저, DB 시스템 등)

④ 사용자

사람, 기계, 다른 컴퓨터들

 

운영체제의 역할

사용자 관점에서:

자원의 이용은 신경쓰지 않고 사용자의 사용 용이성을 우선적으로 고려한다.

 

시스템 관점에서:

자원 할당자(resource allocator): 여러 요청이 자원에 대해 상충할 수 있으므로 효율적으로 자원 할당을 결정

제어 프로그램(control program): 부적절한 사용(접근) 방지를 위한 사용자 프로그램 수행 제어


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

하나 이상의 CPU, 이와 Common bus로 연결된 여러 장치 컨트롤러, 공유된 메모리로 구성

 

device controller

- 연결된 장치 제어

- 장치 드라이버가 각 장치 컨트롤러 작동을 관여: 상태 정보 반환하고 장치에 대한 인터페이스 제공

- 각각 local buffer를 가짐 → CPU가 메인 메모리와 local buffer 간 데이터 이동을 명령

- CPU에 인터럽트로 인한 작동 중지/종료 정보를 전달

 

adapter

: 서로 다른 규격, 신호 방식, 인터페이스를 가진 두 개 이상의 장치 또는 연결하고 호환될 수 있도록 중간에서 매개체 역할을 하는 하드웨어 장치

 

인터럽트(Interrupt)

: 하드웨어에서 발생하는 비동기적 이벤트

하드웨어가 시스템 버스를 통해 CPU에 신호를 보내 인터럽트 발생시킴

→ CPU가 인터럽트되어 하던 일을 중단하고 인터럽트 벡터로 전달된 인터럽트 서비스 루틴의 시작 주소로 이동·인터럽트 핸들러에 제어권 전달·인터럽트 서비스 루틴 실행

→ 인터럽트가 처리되면 모든 현재 상태를 저장하고 상태를 복원함(운영체제가 레지스터와 프로그램 카운터에 저장된 복귀 주소에 따라 CPU 이전 상태 유지, 중단된 작업 재개)

 

+ Trap(or exception): 소프트웨어 인터럽트. 오류(나눗셈 에러, 잘못된 메모리 접근), 사용자의 프로그램의 특정 요청으로 발생 → 시스템 콜이라는 특수 연산을 실행하여 요청되고 운영체제가 제공하는 서비스 수행을 요구함

 

입출력 구조(I/O Structure)

Synchronous I/O

I/O 시작 후 완료될 때 제어권을 사용자 프로그램에 전달함

다음 인터럽트까지 Wait 명령 → CPU idle 상태

I/O 요청은 한 번에 하나만 가능하며, I/O 처리 동시에 불가함

Asynchronous I/O

I/O 시작 후 기다리지 않고 제어권을 사용자 프로그램에 전달함

System call: I/O 완료를 기다리도록 OS에 요청

Device-status table: 각 I/O 장치의 유형·주소·상태 정보 가짐 OS 인덱스가 인터럽트 포함하여 테이블 항목 수정

 

DMA(Direct Memory Access)

인터럽트 구동 I/O의 형태가 소량 데이터 이동에는 좋지만, NVS I/O같은 대량 데이터 이동에는 높은 오버헤드 발생 문제

DMA 사용으로 해결

Device Controller는 CPU의 개입 없이 메모리와 자신의 buffer storage 간 데이터 블록 전체를 전송

블록 단위로 전송·인터럽트 발생   Device Controller가 전송 작업 수행하는 동안 CPU는 다른 작업 수행 가능

CPU 효율 향상

 

저장장치 구조(Storage Structure)

  • load(적재): 메인 메모리에서 레지스터로 한 바이트 또는 한 워드를 옮기는 것
  • store(저장): 레지스터에서 메인 메모리로 한 바이트 또는 한 워드를 옮기는 것
  • 저장 용량: 아래로 갈 수록 큼
  • 속도(접근 시간): 아래로 갈 수록 느림
  • 휘발성 저장 장치: 레지스터, 캐시, 메인 메모리
  • 비휘발성 저장 장치: 비휘발성 메모리(solid-state disk), 하드 디스크 드라이브(magnetic disk), 광학 디스크(optical disk), 자기 테이프(magnetic tapes)
  • 1차 저장 장치: 레지스터, 캐시, 메인 메모리
  • 2차 저장 장치: 비휘발성 메모리, 하드 디스크 드라이브
  • 3차 저장 장치: 광학 디스크, 자기 테이프

 

메인 메모리(RAM)

CPU가 직접 접근 가능한 유일한 대규모 저장 매체

데이터에 랜덤 엑세스

프로그램 대부분이 저장됨

DRAM(Dynamic Random Access Memory)로 구현됨

휘발성(volatile): 전원 꺼지면 데이터 손실 가능

부트스트랩 프로그램 유지 용도로 사용 불가능함

 

* bootstrap program

부팅 시 로드되어 시스템을 초기화하는 프로그램

ROM이나 EEPROM(읽기 전용 메모리)에 firmware로 저장

커널을 로드 및 실행한다.

일반적으로 하드웨어를 초기화하고 제어하기 위한 저수준 소프트웨어를 포괄하는 개념

 

보조 저장 장치(Secondary storage)

메인 메모리의 확장을 위해 제공 - 2차 저장 장치

대량의 데이터를 영구히 보존하는 목적(비휘발성)

대표적으로 HDD(하드 디스크 드라이브)와 비휘발성 메모리(NVM) 장치 - 프로그램과 데이터 저장소 제공

 

비휘발성 메모리(Solid-state disk)

반도체 메모리(전기적 저장장치). 하드 디스크보다 빠르다. 일반적으로 플래시 메모리, SSD...

 

하드 디스크(Magnetic disk)

기계적 저장장치. HDD...

자기 기록 내용을 저장

논리적으로 트랙으로 나뉘고, 트랙은 다시 섹터로 나뉨

 

3차 저장 장치

다른 장치에 저장된 자료의 백업 사본을 저장하기 위해 사용하는 매우 느리고 용량이 큰 장치

데이터 저장, 유지

광학 디스크, 자기 테이프 등 기계적 저장장치

기계적 저장장치가 비교적 용량이 크고 비용이 저렴하며 느리다.


컴퓨터 시스템 구조(Computer System Architecture)

Single-Processor Systems

단일 처리 코어, 하나의 CPU를 가진 프로세서

* 코어: 명령을 실행하고 로컬로 데이터를 저장하기 위한 레지스터를 포함하는 컴포넌트. CPU 기본 계산 단위.

대부분 특수 목적 프로세서; 장치별 프로세서 형태로 제공됨 ex. 디스크, 키보드 및 그래픽 컨트롤러 프로세서

 

Multiprocessor Systems

:= parallel systems, tightly-coupled systems

단일 코어 CPU가 있는 두 개 이상의 프로세서

프로세서끼리 bus나 cluck, 메모리 및 주변 장치를 공유하기도 함

장점: 처리량 증가, 규모의 경제, 신뢰성 향상

일반적으로 SMP(symmetric multiprocessing) 사용

 

SMP

각 CPU 프로세서가 운영체제 기능 및 사용자 프로세스를 포함한 모든 작업 수행

각 프로세서에 로컬 캐시, 자체 레지스터도 존재

프로세서끼리는 시스템 버스를 통해 메모리 공유

많은 프로세스 동시 실행 가능, but 각 CPU가 독립적이므로 비효율적일 수 있음

→ 다중 코어 시스템 사용

 

Dual-Core Design

프로세서가 특정 자료구조를 공유해 자원을 프로세서 간에 동적 공유, 비효율성 회피, 작업 부하 분산 낮춤

단일 칩에 여러 개의 코어 존재 → 칩 내 통신으로 여러 개의 단일 칩보다 훨씬 적은 전력 사용, 효율적

 

NUMA(non-uniform memory access)

각 CPU에 작고 빠른 로컬 버스로 액세스되는 자체 로컬 메모리 제공

모든 CPU가 공유 시스템 연결로 연결되어 하나의 물리 주소 공간 공유

→ CPU가 로컬 메모리에 빠르게  액세스, 시스템 상호 연결에 대한 경합 없음

→ 더 많은 프로세서가 추가될수록 효과적, but 시스템 상호 연결을 통해 원격 메모리 액세스 시 지연 시간 증가

→ 신중한 CPU 스케줄링 및 메모리 관리를 통해 단점 최소화 가능

 

블레이드 서버

다수의 프로세서 보드 및 입출력 보드, 네트워킹 보드들이 하나의 chassis 안에 장착되는 형태

여러 독립적인 멀티프로세서 시스템을 하나의 섀시 안에 구성

 

Clustered Systems

둘 이상의 다중 코어 시스템을 약결합(loosely coupled)한 시스템

하나 이상의 시스템이 고장나도 서비스가 지속됨 → 높은 가용성(high-availability)을 제공하기 위해 사용

우아한 성능 저하(graceful degaradation): 남아 있는 소프트웨어 수준에 비례하여 서비스를 계속 제공하는 기능

일부 시스템은 정상적인 성능 저하를 넘어 단일 구성요소에 오류가 발생해도 계속 작동 - 결함허용 시스템

고성능 계산 환경, HPC(high performance computing)를 제공하도록 사용될 수 있음 → 응용 프로그램을 병렬(parallelization) 수행할 수 있기 때문

  • 비대칭형 클러스터링: 다른 컴퓨터들이 응용 프로그램을 실행하는 동안 한 컴퓨터는 긴급 대기(hot-standby) 모드 상태 유지 - 활성 서버 감시 작업
  • 대칭형 클러스터링: 둘 이상의 호스트들이 응용 프로그램 실행, 서로 감시 → 더 효율적(∵가용한 하드웨어 모두 사용)

DLM(distributed lock manager): 데이터에 대한 공유 접근을 지원하기 위해 시스템 상 접근 간의 충돌이 발생하지 않도록 접근 제어와 잠금 방식을 제공하는 클러스터 기술

SAN(storage-area network): 여러 호스트를 여러 저장장치에 부착할 수 있게 하여, 클러스터 소프트웨어가 SAN에 연결된 임의의 호스트에서 수행되도록 배정하고, 호스트가 잘못되어도 다른 호스트가 넘겨받을 수 있게 함 → 성능과 신뢰도 증가


운영체제의 작동(Operating System Operations)

다중 프로그래밍과 다중 태스킹(multiprogramming and multitasking)

  • 다중 프로그래밍(multiprogramming): 여러 프로세스를 동시에 메모리에 유지해두고, CPU가 유휴(idle) 상태 없이 항상 한 개는 실행할 수 있도록 대기 발생 시 다른 프로세스로 전환 실행하며 프로그램을 구성 → CPU 이용률과 사용자 만족도를 높인다.
  • 프로세스(process): 멀티 프로그래밍 시스템에서 실행 중인 프로그램
  • 다중 태스킹(multitasking): Timesharing. 다중 프로그래밍의 논리적 확장. CPU가 여러 프로세스를 빈번하게 전환하며 프로세스를 실행 → 빠른 응답 시간(1초 미만) 제공, 대화형 컴퓨팅을 생성
  • CPU 스케줄링: 여러 프로세스가 동시에 실행할 준비가 되어있을 때 다음에 실행할 프로세스를 결정하는 방식
  • 가상 메모리(Virtual memory): 일부만 메모리에 적재된 프로세스의 실행을 허용하는 기법. 메인 메모리를 크고 균등한 저장장치의 배열로 추상화하여 사용자에게 보이는 논리 메모리를 물리 메모리로부터 분리시켜 물리 메모리의 크기보다 더 큰 프로그램이 허용됨. 메모리 저장장치의 한계로부터 자유롭게 함.

 

이중 모드와 다중 모드 운용(Dual-Mode and Multimode Operation)

이중 모드(Dual-Mode)

사용자 모드: 사용자를 위해 실행되는 작업

커널 모드(=수퍼바이저 모드=시스템 모드=특권 모드): 운영체제를 위해 실행되는 작업

mode bit가 현재 모드를 나타냄(커널 모드=0, 사용자 모드=1)

시스템 부트 시 하드웨어는 커널 모드에서 시작하고, 운영체제가 로드되면 사용자 모드에서 사용자 프로세스가 실행된다.

트랩이나 인터럽트 발생 시 운영체제에 서비스를 요청(시스템 콜) → 하드웨어가 커널 모드로 전환(모드 비트를 0으로 변경) → 운영체제가 컴퓨터 제어를 얻음

일부 명령을 특권 명령(privileged instruction)으로 지정하여 커널 모드에서만 수행되도록 허용 → 사용자와 OS를 보호

 

다중 모드(multimode)

가상화를 지원하는 CPU에서는 VMM(virtual machine manager)이 시스템을 제어하는 시점을 표시하기 위한 별도의 모드를 가지기도 한다.

Intel 프로세서에는 4개의 분리된 보호 링이, ARMv8 시스템에는 7가지 모드가 있다.

 

타이머(Timer)

지정된 시간(고정/가변 시간) 후 컴퓨터를 인터럽트 하도록 설정하여 자동으로 운영체제에 제어를 넘긴다.

→ 사용자 프로그램이 무한 루프에 빠지거나 시스템 서비스 호출에 실패해 제어가 운영체제로 복귀하지 않는 경우를 방지

→ 과도한 리소스 독점을 막음


자원 관리(Resource Management)

프로세스 관리(Process Management)

프로그램 ≠ 프로세스

프로그램은 수동적(passive) 개체이고, 프로세스는 다음 수행할 명령을 지정하는 PC를 가진 능동적(active) 개체이다.

프로세스는 테스크를 수행하기 위해 여러 자원(resources)을 필요로 한다.

 - 실행 중에 할당되는 CPU 시간, 메모리, 파일, I/O 장치를 포함한 물리적 논리적 자원

- 초기화 데이터(입력)

프로세스가 종료되면 운영체제는 재사용 가능한 자원을 회수한다.

 

CPU는 한 프로세스가 끝날 때까지 그 프로세스의 명령들을 반드시 순차적으로 수행한다.

다중 스레드 프로세스는 스레드 당 하나의 프로그램 카운터(PC)를 갖고 각 카운터는 각 스레드가 실행할 다음 명령어를 가리킨다.

한 프로세스는 한 시스템 내 작업의 단위, 시스템은 프로세스의 집합으로 구성

프로세스 중 일부는 운영체제 프로세스이며, 나머지는 사용자 프로세스이다.

모든 프로세스는 단일 CPU 코어에서 멀티플렉싱하거나, 여러 CPU 코어에서 병렬로 병행 실행된다.

 

운영체제의 프로세스 관리 역할

  • 사용자 프로세스와 시스템 프로세스의 생성과 제거
  • CPU에 프로세스와 스레드 스케줄링 - 교착 상태(dealock) 핸들링 기법 제공
  • 프로세스의 일시 중지와 재수행
  • 프로세스 동기화를 위한 기법 제공
  • 프로세스 통신을 위한 기법 제공

 

메모리 관리(Memory Management)

메모리에 여러 개의 프로그램 유지하기 위한 메모리 관리 기법 필요

CPU 이용률과 사용자에 대한 컴퓨터 응답 속도 개선

시스템의 하드웨어 설계에 따라 메모리 관리 알고리즘을 선택할 수 있음(효율이 좌우됨)

 

운영체제의 메모리 관리 역할

  • 메모리의 어느 부분이, 어느 프로세스에 의해 현재 사용되고 있는지 추적
  • 필요에 따라 메모리 공간 할당 및 회수
  • 어떤 프로세스를 메모리에 로드하고 제거할지 결정

 

파일 시스템 관리(File-System Management)

운영체제는 정보 저장장치에 대한 균일한 논리적 관점을 제공한다.

저장장치의 물리적 특성을 추상화하여 논리적인 저장 단위로 파일 정의

각 매체는 자신의 특성과 물리적 구성을 가짐

대부분의 매체는 장치에 의해 제어되며, 각 장치들도 특성을 가짐(접근 속도, 용량, 데이터 전송률, 접근 방식 등)

 

파일: 파일 생성자에 의해 정의된 관련 정보의 집합체. 일반적으로 프로그램과 데이터.

파일은 사용하기 쉽도록 디렉터리들로 구성되고, 대부분의 시스템에서는 누구에 의해 어떤 방법으로 접근되어야 하는지 결정되어 접근이 통제된다.

 

운영체제의 파일 시스템 관리 역할

  • 파일, 디렉토리 생성 및 제거
  • 파일과 디렉터리 조작 위한 기본 동작 제공
  • 파일을 보조저장장치로 매핑
  • 안정적인(비휘발성) 저장 매체에 파일 백업

 

대용량 저장장치 관리(Mass-Storage Management)

디스크에는 메인 메모리에 적합하지 않거나 오랜 기간 적재해야 할 때 주로 데이터를 저장한다.

매우 빈번하고 폭 넓게 사용되므로 효율적인 사용이 중요하다.

컴퓨터의 전체 동작 속도는 디스크 서브시스템과 해당 알고리즘 속도에 의해 결정될 수 있다.

 

보조저장장치보다 저속도, 저비용, 대용량 장치가 필요한 경우:

디스크 데이터 백업, 가끔 쓰이는 데이터 또는 장기간 보존이 필요한 데이터를 저장해야 하는 경우

  3차 저장 장치(자기 테이프, 광학 디스크 등) 활용

→ 운영체제에 의해 관리 필수적. WORM(write-once, read-many-times), RW(read-write) 등 다양함.

 

운영체제의 보조저장장치 관리 역할

  • 마운팅과 언마운팅
  • 사용 가능 공간(free-space)의 관리
  • 저장장소 할당
  • 디스크 스케줄링
  • 저장장치 분할
  • 보호

 

캐시 관리(Cache Management)

캐싱(Caching): 사용 중인 정보를 일시적으로 더 빠른 스토리지인 cache에 저장

→ 특정 정보가 필요할 때 cache를 먼저 조사

→ 캐시에 이미 있으면 직접 캐시에서 사용하고, 없으면 메인 메모리로부터 데이터를 캐시에 복사하여 사용한다.

단, 캐시 크기가 매우 작기 때문에 캐시 관리(캐시 설계 문제와 교체 정책)가 중요하다.

→ 교체 정책을 신중하게 선택하면 성능이 크게 향상될 수 있다.

 

저장장치의 계층 구조에서 각 수준 간의 정보 이동은 하드웨어 설계나 제어하는 OS에 따라 명시적 또는 묵시적으로 이루어진다.

또한 동일한 데이터가 서로 다른 수준의 저장장치 시스템에 나타나게 되어, 순차적으로 복사하여 이동하게 된다.

캐시 일관성 문제:

멀티 태스킹 환경에서는 여러 개의 프로세스가 어떤 값에 접근하기 원할 경우 각 프로세스가 가장 최근에 갱신된 값을 얻을 수 있도록 보장해야 한다.

특히 멀티 프로그래밍 환경의 경우 한 로컬 캐시에서 값이 갱신될 경우 해당 값이 존재하는 모든 캐시에 즉각적으로 반영되어야만 한다.

분산 환경에서는 동일 파일의 여러 사본을 다른 컴퓨터에 보관할 수 있어, 여러 복제본을 가능한 빨리 최신 상태로 보장해야 한다.

 

입출력 시스템 관리(I/O Systems Management)

운영체제의 목적 중 하나는 사용자에게 특정 하드웨어 장치의 특성을 숨기는 것이다.

 

입출력 시스템의 구성

  • buffering(데이터가 전송되는 동안 임시 저장), caching(성능을 위해 데이터를 더 빠른 저장소에 일부 저장), spooling(한 작업의 출력과 다른 작업의 입력이 겹치는 경우)을 포함한 입출력 메모리 관리 구성요소
  • 일반적인 장치 드라이버 인터페이스(소프트웨어 개발자가 다양한 장치에 대해 일관된 방식으로 프로그래밍할 수 있고, 새로운 하드웨어가 시장에 출시되어도 기존 시스템과의 호환성을 유지할 수 있게 함)
  • 특정 하드웨어 장치들을 위한 드라이버 → 장치 드라이버만 지정된 특정 장치 특성을 알고 있음

  • 보안과 보호(Security and Protection)
  • 가상화(Virtualization)
  • 분산 시스템(Distributed Systems)
  • 커널 자료구조(Kernel Data Structures)
  • 계산 환경(Computing Environments)
  • 무료 및 공개 소스 운영체제(Free and Open-Source Operating Systems)
반응형