학습 목표
전통적인 컴퓨터 시스템 구조(CPU, 메모리, 버스, 장치)를 설명할 수 있다.
부팅 과정과 인터럽트가 OS에 왜 필요한지 설명할 수 있다.
저장 장치 계층과 DMA의 역할을 설명할 수 있다.
SMP, 멀티태스킹, 유저 모드·커널 모드를 설명할 수 있다.
문제 상황
- 서버를 재부팅하면 30초 뒤 SSH가 열린다
- 그 사이 무엇이 실행되는지 모른다
- 디스크 I/O 중에도 다른 요청을 처리한다
- CPU가 디스크 끝날 때까지 멈춰 있지 않은 이유는?
- M1 맥은 8코어, htop에는 CPU 0~7
- 코어·프로세서·SMP가 어떻게 연결되는지 헷갈린다
- 앱 버그가 커널을 죽이면 전체가 다운된다
- 유저 모드와 커널 모드 구분이 왜 있는지 실감한다
오리엔테이션에서 OS의 역할을 봤다. 이번 편은 OS가 올라가기 전·위의 하드웨어 구조와 OS가 맡는 기본 작업을 정리한다.
1. 컴퓨터 시스템 구조
현대 PC·서버는 대략 이렇게 구성된다.

- CPU — 명령 fetch·실행, 연산
- 메모리(RAM) — 실행 중인 프로그램·데이터
- 장치 컨트롤러 — 디스크, USB, NIC, GPU 등을 CPU·메모리와 연결
- 시스템 버스 — 주소·데이터·제어 신호 전달
| 용어 | 의미 |
| CPU | 명령을 실행하는 연산 장치 |
| Core | CPU 안의 독립 실행 단위 |
| Processor | 코어 하나 이상을 담은 물리 칩 |
| Multicore | 한 칩에 코어 여러 개 (듀얼·쿼드코어) |
| Multiprocessor | 프로세서(칩)가 여러 개 |
- OS는 이 하드웨어 위에서 모든 장치를 통합 관리한다
- 응용은 디스크 컨트롤러 레지스터를 직접 건드리지 않고 OS API만 쓴다
2. 부팅(Booting)
전원을 켜면 OS가 바로 실행되지 않는다.

전원 ON → 펌웨어(UEFI/BIOS) → 부트로더 → 커널 로드 → init/systemd → 서비스·셸
- 부트스트랩(Bootstrap)
- ROM/펌웨어에 있는 첫 프로그램
- 하드웨어 점검, 부트로더 위치 탐색, 커널을 메모리에 적재
- 부트로더 (GRUB 등)
- 커널 이미지·initramfs 로드, 커널에 제어권 넘김
- 커널
- 장치 드라이버 초기화, 스케줄러·메모리 관리자 기동
- 첫 유저 프로세스(보통 init/systemd) 생성
- 클라우드 VM도 동일한 흐름
- 하이퍼바이저가 가상 하드웨어에 커널을 넘겨줄 뿐, 게스트 안에서는 같은 부팅 모델
3. 인터럽트(Interrupt)
CPU는 명령을 순차 실행하지만, 외부 이벤트에 반응해야 한다.

- 인터럽트: 하드웨어·소프트웨어가 CPU에 보내는 비동기 신호
- 디스크 전송 완료, 네트워크 패킷 도착, 타이머 만료, 키보드 입력
- CPU는 현재 작업을 잠시 멈추고 인터럽트 벡터에 등록된 핸들러 실행
- 대부분 커널 코드 — OS가 장치 상태를 갱신하거나 대기 중인 프로세스를 깨움
| 종류 | 발생 주체 | 예 |
| 하드웨어 인터럽트 | 장치 | 디스크 I/O 완료 |
| 타이머 인터럽트 | OS/하드웨어 | 스케줄링 tick |
| 소프트웨어 인터럽트 | 명령어 | 시스템 콜, 예외 |
- 인터럽트 없으면 OS는 디스크를 폴링(polling) 해야 한다
- CPU 낭비 — I/O 대기 동안 다른 프로세스를 돌릴 수 없음
- 인터럽트 + 멀티태스킹이 맞물려 CPU 활용률이 올라간다
4. Fetch-Execute와 OS
CPU의 기본 사이클은 오리엔테이션과 같다. 여기서는 레지스터 관점만 보강한다.

- PC(Program Counter) — 다음 명령 주소
- IR(Instruction Register) — 가져온 명령
- 범용 레지스터 — 연산 피연산자
- 인터럽트 발생 시
- PC·레지스터 등 컨텍스트 저장 → 핸들러 실행 → 복귀
- 프로세스 전환 시에도 같은 컨텍스트 스위칭 개념 (이후 프로세스 편)
5. 저장 장치 계층
속도·용량·비용 트레이드오프. OS는 계층 전체를 관리한다.

| 계층 | 예 | 특징 |
| 레지스터 | CPU 내부 | 가장 빠름, 바이트 단위 |
| 캐시 | L1/L2/L3 | CPU와 메모리 사이 |
| 메인 메모리 | DRAM | 실행 이미지·힙·스택 |
| SSD/HDD | 디스크 | 영속, 느림 |
| 원격 저장 | NAS, S3 | 네트워크 지연 |
- OS 메모리 관리자 — RAM 할당, 스왑, 페이지 캐시
- OS 파일 시스템 — 디스크 블록을 파일·디렉터리로 추상화
- "메모리는 빠르고 작다, 디스크는 크고 느리다" — 캐시·버퍼 설계의 출발점
6. I/O 구조와 DMA
디스크·NIC처럼 느린 장치와의 데이터 이동.

- 프로그램드 I/O: CPU가 레지스터로 장치에 바이트 단위 전송 — 단순하지만 CPU 점유
- DMA(Direct Memory Access)
- DMA 컨트롤러가 메모리 ↔ 장치 전송을 CPU 없이 수행
- 완료 시 인터럽트로 CPU에 알림
- OS 장치 드라이버
- 장치별 명령·버퍼·인터럽트 처리
- 응용에게는 read()/write() 같은 균일한 인터페이스
7. SMP와 멀티코어
요즘 서버·노트북은 대칭 다중 처리(SMP) 가 기본이다.

- SMP(Symmetric Multiprocessing)
- 모든 CPU(코어)가 동일한 메모리·장치에 접근
- 어느 코어든 커널·유저 작업 실행 가능
- 멀티코어
- 한 프로세서 칩 안에 코어 여러 개 — 캐시 공유(L3)로 통신 비용 절감
- OS 역할
- CPU 스케줄링 — 준비된 프로세스를 어느 코어에 올릴지
- 동기화 — 여러 코어가 같은 데이터를 동시에 수정하지 않게 (락, 캐시 일관성)
| 구성 | 특징 |
| 단일 코어 | 스케줄링만으로 멀티태스킹 |
| 멀티코어 SMP | 진짜 병렬 실행 + 스케줄링 |
| NUMA | 코어마다 로컬 메모리 — 원격 접근 느림 (확장 주제) |
8. OS의 핵심 작업
하드웨어 위에서 OS가 매일 하는 일의 뼈대.
멀티프로그래밍(Multiprogramming)
- 메모리에 여러 프로그램을 동시에 올려 둠
- 한 프로세스가 I/O 대기면 CPU가 다른 프로세스 실행
- CPU 사용률 ↑
멀티태스킹(Multitasking)
- 멀티프로그래밍 + 빠른 전환
- 타이머 인터럽트로 시간 할당량(time slice)마다 프로세스 교체
- 사용자 입장에선 동시 실행처럼 보임 (concurrency)
CPU 스케줄링
- 실행 준비(ready) 프로세스가 여러 개일 때 다음 실행 대상 선택
- 알고리즘: FCFS, SJF, Round Robin, 우선순위 등 — 전용 편에서 상세
이중 모드(Dual Mode)
| 유저 모드 | 커널 모드 | |
| 권한 | 제한 — 자기 프로세스 메모리 | 전체 하드웨어·메모리 |
| 진입 | 일반 실행 | 인터럽트, 시스템 콜, 예외 |
| 목적 | 앱 격리·보호 | OS·드라이버 신뢰 경계 |
- 잘못된 유저 코드가 커널 메모리를 건드리면 안 됨
- 하드웨어 보호 링(privilege level)으로 강제
- 시스템 콜·커널 구조는 이어서 다룬다
해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.
'운영체제 따라잡기' 카테고리의 다른 글
| 스레드 (0) | 2026.06.23 |
|---|---|
| 프로세스 생성과 종료 (0) | 2026.06.22 |
| 프로세스란 무엇인가 (0) | 2026.06.21 |
| 운영체제 구조와 시스템 콜 (0) | 2026.06.20 |
| 운영체제 오리엔테이션 (0) | 2026.06.15 |