운영체제 Chap.1 - Overview (1)

로두마니·2025년 8월 9일

운영체제

목록 보기
1/3
post-thumbnail

📘 1.1 What Operating Systems Do

✅ 컴퓨터 시스템의 구성 요소
컴퓨터 시스템은 네 가지 주요 구성 요소로 나뉜다:

하드웨어 (Hardware):

CPU, 메모리, I/O 장치 등으로 구성

계산과 처리를 위한 기본 자원을 제공

운영체제 (Operating System):

응용 프로그램들이 하드웨어를 사용할 수 있도록 제어 및 조정

응용 프로그램과 하드웨어 사이의 중개자 역할 수행

응용 프로그램 (Application Programs):

워드 프로세서, 스프레드시트, 컴파일러 등

사용자 작업을 처리하며, 자원을 어떻게 사용할지 결정

사용자 (Users):

시스템과 상호작용하는 개인 또는 그룹

✅ 운영체제의 역할
컴퓨터 자원을 적절하게 사용할 수 있는 실행 환경을 제공

사용자와 시스템 자원 사이에서 인터페이스를 제공

시스템 자원을 효율적이고 공정하게 배분하는 Resource Allocator

입출력 장치 제어 등 시스템의 동작을 관리하는 제어 프로그램 (Control Program)

✅ 운영체제에 대한 관점
사용자 관점

개인용 컴퓨터 (PC):

사용자 중심으로 설계되어 자원을 독점

사용의 편의성이 가장 중요한 목표

자원 효율성은 크게 고려하지 않음

다중 사용자 시스템 (터미널 기반):

여러 사용자가 동일한 시스템을 공유

CPU 시간, 메모리 등을 효율적으로 분배해야 함

자원 이용의 극대화가 설계의 핵심

워크스테이션 + 서버 환경:

각 사용자가 전용 자원을 가지되, 네트워크나 프린터 등 공유 자원 존재

사용의 용이성과 자원 효율성의 균형을 고려한 설계

시스템 관점

리소스 관리자 (Resource Allocator)로서 시스템 자원의 효율적 배분을 담당

제어 프로그램으로서 하드웨어 장치의 동작을 감독하고 제어

✅ 운영체제의 정의
하나의 명확한 정의는 없음

컴퓨터 시스템을 구성하는 과정에서 발생하는 문제들을 해결하기 위한 방법으로 존재

본질적으로는 시스템에서 항상 동작하는 핵심 소프트웨어인 커널(Kernel) 이 운영체제의 핵심

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

✅ 1. 컴퓨터 시스템의 연산 (Computer-System Operation)
현대의 범용 컴퓨터 시스템은 공통 버스(shared bus)를 통해 연결된:

여러 장치 제어기 (Device Controller): 예: 오디오, 비디오 장치

하나 이상의 CPU

그리고 공유 메모리(shared memory) 접근을 제공

🔹 부팅 과정
부트스트랩(Bootstrap) 프로그램:

컴퓨터가 켜질 때 처음 실행되는 프로그램

보통 ROM 또는 EEPROM에 저장되어 있음 (이런 저장 장치는 펌웨어라 불림)

시스템 초기화 (CPU 레지스터, 메모리, I/O 장치 상태 등)

운영체제의 커널(kernel) 을 찾아 메모리에 적재하고 실행 시작

UNIX 시스템에서는:

부팅 후 가장 먼저 실행되는 시스템 프로세스는 init

init 이후 시스템은 완전히 부팅된 상태가 되며, 이벤트(event)를 기다리게 됨

🔹 인터럽트 (Interrupt)
사건 발생 → 하드웨어 또는 소프트웨어가 인터럽트를 통해 CPU에 알림

하드웨어 인터럽트: I/O 장치가 System Bus를 통해 발생시킴

소프트웨어 인터럽트: System Call을 통해 발생

인터럽트 처리 과정:

CPU가 현재 작업을 중단하고, 인터럽트 벡터에 정의된 고정된 주소로 이동

해당 위치에서 인터럽트 서비스 루틴(ISR) 실행

인터럽트 전에 수행 중이던 명령의 주소와 상태를 저장

ISR 종료 후, 저장된 주소를 Program Counter에 복원하고 작업 재개

✅ 2. 저장 장치 구조 (Storage Structure)
CPU는 메모리에서만 명령어를 가져올 수 있음 → 프로그램은 반드시 메모리에 있어야 함

🔹 메모리 종류
주 메모리 (RAM): 읽기/쓰기 가능, 휘발성

ROM/EEPROM: 읽기 전용 또는 제한된 쓰기 가능, 비휘발성 (예: Bootstrap Program 저장)

🔹 메모리 주소 및 명령
모든 메모리는 바이트 단위 배열 구조

각 바이트는 고유 주소를 가짐

CPU와 메모리 간 상호작용은 주로 Load/Store 명령어를 통해 수행:

Load: 메모리 → 레지스터

Store: 레지스터 → 메모리

🔹 주 메모리 한계 및 보조 저장 장치
주 메모리는:

크기가 작음 (모든 프로그램/데이터 저장 불가)

휘발성 (전원 차단 시 데이터 손실)

→ 이를 보완하기 위해 보조 저장 장치(Secondary Storage) 사용

대표 예시: 하드 디스크

요구사항: 대량 데이터의 영구적 저장

🔹 기타 저장 장치
캐시 메모리, SSD, CD-ROM, 자기 테이프 등

각 장치 간의 차이: 속도, 가격, 용량, 휘발성 여부

✅ 3. 입출력 구조 (I/O Structure)
🔹 운영체제와 입출력
장치의 다양성과 시스템 성능에 미치는 영향이 크기 때문에,
운영체제는 입출력 관리 코드에 상당한 비중을 둠

디바이스 드라이버(device driver)를 통해 장치와 OS 간의 상호작용 수행

🔹 인터럽트 기반 I/O
소량 데이터 전송에는 적합하지만,
디스크 I/O와 같은 대량 전송에는 CPU Overhead가 큼

🔹 DMA (Direct Memory Access)
CPU의 개입 없이, 디바이스 ↔ 메모리 간 블록 단위 전송 수행

CPU는 블록 전송이 완료된 후에만 인터럽트를 받음

이 방식은 고속, 대량 데이터 전송 시 성능 향상에 유리

항목요약 설명
부트스트랩시스템 부팅 시 실행되는 초기 프로그램, 운영체제 커널을 메모리에 적재
인터럽트하드웨어/소프트웨어가 CPU에 이벤트 발생을 알리는 메커니즘
주 메모리RAM, 휘발성, 프로그램이 실행되기 위해 반드시 거쳐야 하는 영역
보조 저장장치비휘발성, 데이터의 영구적 저장을 위한 저장 매체
DMACPU 개입 없이 대용량 데이터를 빠르게 전송할 수 있는 방식

📘 1.3 컴퓨터 시스템 구조 (Computer-System Architecture)
✅ 1. 단일 처리기 시스템 (Single-Processor System)
하나의 주 CPU만 사용하여 범용 명령어(instruction)를 수행

보통 시스템에는 CPU 외에도 여러 개의 특수 목적 전용 처리기가 함께 존재

예: 디스크 제어기, 키보드 제어기, 그래픽 제어기 등

또는 데이터 전송을 위한 입출력 처리기 (I/O processor) 형태로 존재

✅ 2. 다중 처리기 시스템 (Multiprocessor System)
하나 이상의 CPU(또는 코어)를 가지며, 보통 버스, 메모리, I/O 장치 등을 공유

장점 3가지:

Throughput 향상 (처리량 증가)
→ 더 많은 작업을 동시에 수행할 수 있음
→ N개의 CPU → N배 성능은 아니며, Overhead 및 자원 경쟁 발생 가능

Economy of Scale (규모의 경제)
→ 여러 CPU가 하드웨어 자원(메모리, 디스크 등)을 공유하므로 비용 절감

Increased Reliability (신뢰성 향상)
→ 일부 CPU가 고장 나도 전체 시스템은 계속 작동 가능

Graceful Degradation: 속도만 느려지며 서비스 유지

Fault Tolerant: 고장에도 시스템이 완전히 문제 없이 동작 가능

✅ 3. 다중 처리기 시스템의 구조적 유형
🔹 1) 대칭형(Symmetric) Multiprocessing - SMP
모든 CPU가 대등한 관계

각 CPU는 자신의 레지스터와 캐시를 가지고 있고, 메모리는 공유

🔹 2) 비대칭형(Asymmetric) Multiprocessing
하나의 CPU가 주 제어 역할, 나머지 CPU는 보조 역할 수행

주로 초기 설계 방식에서 사용됨

✅ 4. 메모리 접근 모델 (Memory Access Models)
모델 설명
UMA (Uniform Memory Access) 모든 CPU가 동일한 시간에 메모리에 접근 가능
NUMA (Non-Uniform Memory Access) 일부 메모리는 CPU에 가깝거나 멀어, 접근 시간이 달라짐

NUMA는 스케일 확장에 유리하지만, 성능 튜닝이 필요

✅ 5. 멀티코어 시스템 (Multicore System)
하나의 칩(SoC) 안에 여러 개의 CPU 코어를 포함

칩 내부 통신은 칩 간 통신보다 훨씬 빠름 → 효율성 증가

✔️ 모든 멀티코어 시스템은 다중처리기 시스템이지만,
모든 다중처리기 시스템이 멀티코어는 아님

✅ 6. 클러스터형 시스템 (Clustered Systems)
여러 대의 독립적인 컴퓨터 시스템(노드)를 네트워크로 연결해 하나의 시스템처럼 동작

노드들은 느슨하게 결합(Loosely Coupled)

각 노드는 단일 처리기 시스템 또는 멀티코어 시스템일 수 있음

🔹 클러스터의 목적: 고가용성(High Availability)
시스템 일부가 고장 나도 전체 서비스는 유지

🔹 클러스터의 구성 방식:
구성 방식 설명
비대칭형 클러스터링 한 노드는 Hot-Standby 상태로 대기 → 다른 노드가 고장 나면 takeover
대칭형 클러스터링 모든 노드가 동시에 작업을 수행하고 서로를 감시 → 리소스 효율성 높음

개념설명
SMPSymmetric Multiprocessing: CPU 간 대등한 관계
NUMACPU에 따라 메모리 접근 시간이 다름
멀티코어하나의 칩에 여러 CPU 코어
Graceful Degradation일부 고장에도 속도만 저하
Fault Tolerant고장에도 시스템 완전 유지
Clustered System여러 독립 시스템을 연결, 고가용성
Hot-Standby대기 상태 노드가 고장 시 takeover

📘 1.4 운영체제 구조 (Operating-System Structure)
✅ 1. 다중 프로그래밍 (Multiprogramming)
목적: CPU 이용률(Utilization) 극대화
→ 단일 사용자는 CPU나 I/O 장치를 항상 100% 활용할 수 없음
→ CPU가 항상 할 일을 가지도록 여러 작업을 메모리에 올려두고 관리

🔹 기본 아이디어
여러 작업(Job)을 메모리에 적재 (작업 풀은 디스크에 존재)

운영체제가 메모리에 있는 작업 중 하나를 선택하여 실행

실행 중 작업이 I/O 대기 상태가 되면 → 다른 준비 상태(ready)의 작업으로 전환

🔹 특징
CPU와 I/O 장치를 동시에 최대한 활용

단일 사용자 환경보다 자원 활용 효율이 높음

✅ 2. 멀티태스킹 (Multitasking, 시분할)
정의: 다중 프로그래밍의 논리적 확장

CPU가 매우 짧은 시간 간격으로 여러 작업을 번갈아 수행

각 사용자나 작업이 동시에 실행되는 것처럼 보이도록 함

🔹 필요 요소
CPU 스케줄링: 실행 준비 상태(ready queue)의 작업 중 누가 CPU를 쓸지 결정

다중 프로그래밍: 여러 작업을 메모리에 유지

✅ 3. 스케줄링 (Scheduling)
장기 스케줄링: 어떤 작업을 메모리로 불러올지 결정

단기 스케줄링(CPU Scheduling): CPU를 다음에 누가 쓸지 결정

✅ 4. 메모리 관리 기법
🔹 1) 스와핑 (Swapping)
메모리 공간 확보를 위해 프로세스 전체를 메모리 ↔ 디스크 간 교체

필요 시 프로세스를 다시 불러와 실행 (swap-in)

🔹 2) 가상 메모리 (Virtual Memory)
프로그램의 일부만 메모리에 올려도 실행 가능

장점:

프로그램 크기가 물리 메모리보다 커도 실행 가능

주 메모리를 크고 균등한 주소 공간으로 추상화

논리 메모리(logical memory)물리 메모리(physical memory)를 분리

개념목적특징
MultiprogrammingCPU 이용률 극대화여러 작업을 메모리에 두고 대기 작업을 실행
Multitasking사용자 상호작용 향상시분할로 여러 작업이 동시에 실행되는 것처럼 보임
Swapping메모리 공간 확보프로세스 전체를 디스크 ↔ 메모리 교체
Virtual Memory메모리 추상화일부만 메모리에 적재, 물리·논리 메모리 분리

1.5 운영체제 연산 (Operating System Operations)
1. Interrupt-driven 동작
현대 운영체제는 interrupt-driven 방식으로 동작.

실행할 프로세스, I/O 서비스, 사용자 요청이 없으면 대기 상태에 들어감.

Trap (Exception)

소프트웨어가 생성하는 인터럽트.

발생 원인:

프로그램 오류 (예: 0으로 나누기, 잘못된 메모리 접근 등)

사용자 프로그램의 운영체제 서비스 요청 (시스템 콜)

  1. 이중 연산 모드 (Dual-mode Operation)
    운영체제의 안정성과 보안을 위해 운영체제 코드와 사용자 코드 실행을 구분.

모드 비트 (Mode bit): 하드웨어가 현재 모드를 식별.

모드 구분

사용자 모드 (User Mode)

사용자 애플리케이션 실행 시.

커널 모드 (Kernel Mode)

운영체제 서비스 실행 시.

모드 전환

사용자 애플리케이션이 OS 서비스를 요청 → 시스템 콜 발생 → 커널 모드로 전환.

Trap 또는 하드웨어 인터럽트 발생 시도 커널 모드로 전환.

부팅 과정

시스템 부팅 시 커널 모드에서 시작 → OS 로드 후 사용자 모드로 전환.

특권 명령 (Privileged Instructions)

커널 모드에서만 실행 가능.

잘못된 사용자 명령으로부터 운영체제와 다른 사용자 보호.

  1. 타이머 (Timer)
    목적: 운영체제가 CPU 제어권(Control)을 유지하도록 보장.

필요성:

사용자 프로그램이 무한 루프에 빠지는 상황 방지.

서비스 호출 실패로 OS 제어 불능 상태 방지.

동작 방식:

지정된 시간 이후 인터럽트 발생하도록 설정.

고정 시간 간격 또는 가변 타이머 사용 가능.

가변 타이머: 클럭이 tick할 때마다 카운터 감소 → 0이 되면 인터럽트 발생.

CPU 스케줄링이나 시분할 시스템에서 시간 제한을 구현하는 핵심 장치.

profile
해적왕이 될 사나이

0개의 댓글