#01 운영체제와 컴퓨터
운영체제와 컴퓨터 — CS 공부 첫 번째
CS 공부 시작하면서 제일 먼저 만나는 게 운영체제야. 면접에도 단골로 나오고, 이걸 모르면 "왜 이렇게 동작하지?" 싶은 순간들이 계속 생겨. 내가 이해한 방식대로 정리해봤어.
운영체제가 하는 일
운영체제는 한마디로 하드웨어와 소프트웨어 사이의 중재자야. 프로그램이 CPU, 메모리, 디스크 같은 자원을 직접 건드리지 못하게 하고, 운영체제를 통해서만 접근하게 만들어.
크게 네 가지 역할을 해.
1. CPU 스케줄링과 프로세스 관리
CPU 소유권을 어떤 프로세스에 줄지 결정하고, 프로세스의 생성·삭제·자원 할당 및 반환을 관리해.
스케줄링 알고리즘 종류는 이렇게 있어. (추후에 또 언급할거지만 대표적인거는 알아두고 가자!)
- FIFO(First In First Out): 먼저 온 프로세스를 먼저 처리. 단순하지만 긴 작업이 앞에 있으면 뒤가 다 기다려야 해 (Convoy Effect)
- SJF(Shortest Job First): 실행 시간이 짧은 걸 먼저 처리. 평균 대기 시간이 짧지만 긴 작업은 계속 밀릴 수 있어 (Starvation)
- Round Robin: 각 프로세스에 동일한 시간(Time Quantum)을 줘서 돌아가며 실행. 현대 OS에서 가장 널리 쓰이는 방식이야
- Priority Scheduling: 우선순위가 높은 프로세스를 먼저 처리. SJF처럼 Starvation 문제가 생길 수 있어서 오래 기다린 프로세스 우선순위를 높여주는 Aging 기법을 함께 씀
면접 포인트 ( •̀ ω •́ )✧
"선점형(Preemptive)과 비선점형(Non-preemptive) 스케줄링의 차이는?"
— 선점형은 실행 중인 프로세스를 강제로 중단하고 다른 프로세스에게 CPU를 넘길 수 있어. Round Robin이 대표적. 비선점형은 프로세스가 자발적으로 CPU를 놓아줄 때까지 기다려. FIFO, SJF가 대표적.
2. 메모리 관리
한정된 메모리를 어떤 프로세스에 얼마나 할당할지 관리해. 공룡책에서 강조하는 핵심 개념이 하나 있어 — 메모리 보호. 프로세스 A가 프로세스 B의 메모리 영역을 침범하면 안 되거든. 이걸 막는 게 운영체제의 중요한 역할이야.
나중에 다룰 가상 메모리, 페이징이랑 연결되는 내용이라 일단 여기서는 "OS가 메모리 관리한다"는 것만 기억해둬.
3. 디스크 파일 관리
디스크 파일을 어떻게 보관할지 관리해.
- 파일 생성, 수정, 제거, 공유
- 백업 및 복구
- 주기억장치(RAM)와 보조기억장치(SSD/HDD) 간 파일 전송
4. I/O 디바이스 관리
마우스, 키보드 같은 I/O 디바이스와 컴퓨터 사이에서 데이터를 주고받는 걸 관리해. 디바이스마다 통신 방식이 다른데 운영체제가 이걸 통일된 인터페이스로 추상화해줘.
운영체제 구조
운영체제 구조를 그림으로 보면 이래.

계층 구조로 되어 있고, 보라색으로 표시된 부분이 운영체제야.
참고로 GUI 없이 CUI(텍스트 기반 인터페이스)만 있는 리눅스 서버도 있어. 터미널에서 명령어로만 제어하는 그 환경이 CUI야.
[용어 정리]
GUI(Graphical User Interface): 우리가 흔히 쓰는 창, 버튼, 아이콘 기반의 인터페이스
CUI(Character User Interface): 텍스트 명령어로만 제어하는 인터페이스. CLI(Command Line Interface)라고도 함
시스템콜 (System Call)
운영체제가 커널에 접근하기 위한 인터페이스야. 유저 프로그램이 운영체제 서비스를 받으려면 커널 함수를 직접 호출할 수 없어. 대신 시스템콜을 통해 요청해.
흐름을 따라가 보면 이래.
- 유저 프로그램이 I/O 요청 (파일 읽기, 네트워크 통신 등)
- 트랩(Trap) 발동 — CPU가 유저 모드에서 커널 모드로 전환
- 요청이 올바른지 확인
- 커널이 해당 작업 수행
- 결과 반환 후 다시 유저 모드로 복귀
이 구조 덕분에 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고, 프로그램을 다른 프로그램으로부터 보호할 수 있어.
시스템콜은 추상화 계층이기도 해. 네트워크 통신이나 데이터베이스 같은 낮은 레벨 처리를 운영체제에 맡길 수 있어서, 개발자는 그 구체적인 구현을 몰라도 프로그램을 만들 수 있어.
[용어정리]
I/O 요청: 입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
드라이버: 하드웨어를 제어하기 위한 소프트웨어
트랩(Trap): 소프트웨어가 의도적으로 발생시키는 인터럽트. 시스템콜 호출 시 사용
면접 포인트 ( •̀ ω •́ )✧
"시스템콜이란 무엇이고 왜 필요한가?" — 유저 프로그램이 커널 기능을 안전하게 사용하기 위한 인터페이스야. 직접 접근을 막아 보안과 안정성을 높여줌.
modebit
0 또는 1의 값을 가지는 플래그로 유저 모드(1)와 커널 모드(0)를 구분하는 데 사용해.
- 0 = 커널 모드: 모든 컴퓨터 자원에 접근 가능
- 1 = 유저 모드: 접근 가능한 영역이 제한됨. 컴퓨터 자원에 함부로 접근 못해
I/O 디바이스는 유저 모드 기반으로 작동하면 공격자의 표적이 되기 쉬워. 커널 모드로 작동한다고 100% 막을 수는 없지만, 운영체제를 통해 제어하게 하면 막기가 훨씬 쉬워.
시스템콜이 호출되면 modebit이 1 → 0으로 바뀌고 (유저 → 커널), 작업이 끝나면 다시 0 → 1로 돌아와.
면접 포인트 ( •̀ ω •́ )✧
"유저 모드와 커널 모드의 차이는?" — 접근 가능한 자원의 범위 차이야. 이 두 모드를 분리하는 게 OS 보안의 기본.
컴퓨터의 요소
컴퓨터는 CPU, DMA 컨트롤러, 메모리, 타이머, 디바이스 컨트롤러 등으로 이루어져 있어.
CPU (Central Processing Unit)
: 산술논리연산장치(ALU), 제어장치(CU), 레지스터로 구성된 장치야. 인터럽트에 의해 메모리에 있는 명령어를 해석해서 실행해.
제어장치 (CU, Control Unit)
: 프로세서 조작을 지시하는 CPU의 한 부품이야.
- 입출력장치 간 통신 제어
- 명령어 읽기 및 해석
- 데이터 처리 순서 결정
레지스터 (Register)
: CPU 안에 있는 임시기억장치야. CPU와 직접 연결되어 있어서 연산 속도가 메모리보다 수십~수백 배 빨라.
CPU는 자체적으로 데이터를 저장할 방법이 없어서 레지스터를 통해 데이터를 주고받아.
속도 순서로 보면 이래.
SSD/HDD → RAM → 캐시 → 레지스터
(느림) (빠름)
레지스터에 찾는 데이터가 있으면 hit, 없으면 아래 계층에서 가져와.
[용어 정리]
캐시(Cache): CPU와 RAM 사이에 있는 고속 메모리. 자주 쓰는 데이터를 캐시에 올려두면 RAM까지 안 가도 돼서 속도가 빨라져.
캐시 히트(Cache Hit): 찾는 데이터가 캐시에 있는 경우
캐시 미스(Cache Miss): 찾는 데이터가 캐시에 없어서 하위 계층에서 가져와야 하는 경우
산술논리연산장치 (ALU, Arithmetic Logic Unit)
덧셈, 뺄셈 같은 산술 연산과 AND, OR, XOR 같은 논리 연산을 처리하는 디지털 회로야.
CPU 연산이 어떻게 이루어지는지 보면 이래.
- 제어장치가 메모리에서 계산할 값을 로드
- 제어장치가 레지스터에 있는 값을 ALU에 계산하라고 명령
- ALU가 계산한 결과를 레지스터에 저장
- 제어장치가 그 값을 다시 메모리에 저장
인터럽트 (Interrupt)
어떤 신호가 들어왔을 때 CPU를 잠깐 멈추게 하는 것. 발생 원인은 여러 가지야.
- 키보드, 마우스 등 I/O 디바이스 입력
- 0으로 나누기 같은 산술 오류
- 프로세스 오류
인터럽트가 발생하면 인터럽트 벡터(Interrupt Vector) 로 가서 해당 인터럽트를 처리할 인터럽트 핸들러 함수 를 실행해. 우선순위에 따라 처리 순서가 결정돼.
처리 과정은 이래.
- 기존 작업 처리 중 인터럽트 발생
- 현재 CPU 상태를 저장 (PCB에 저장 — 나중에 다룰 내용)
- 인터럽트 서비스 루틴(ISR) 처리
- 저장해뒀던 이전 작업 상태 복구 후 재개
인터럽트는 두 종류야.
- 하드웨어 인터럽트: I/O 디바이스가 작업 완료 신호를 보낼 때 발생. 인터럽트 라인을 통해 CPU에 전달되고, 운영체제에 시스템콜을 요청해서 해당 디바이스의 로컬 버퍼에 접근해 일을 처리해
- 소프트웨어 인터럽트(트랩, Trap): 프로세스 오류나 시스템콜 호출 시 발생
[용어 정리]
인터럽트 핸들러 함수: 인터럽트 발생 시 처리를 위한 함수. 커널 내부의 IRQ를 통해 호출되며 request_irq()로 등록 가능
인터럽트 벡터: 인터럽트 핸들러 함수들이 모여 있는 테이블
면접 포인트 ( •̀ ω •́ )✧
"인터럽트란 무엇이고 처리 과정은?" — 이 흐름을 순서대로 설명할 수 있으면 충분해. 하드웨어/소프트웨어 인터럽트 구분도 알아두면 좋아.
DMA 컨트롤러 (Direct Memory Access Controller)
I/O 디바이스가 CPU를 거치지 않고 메모리에 직접 접근할 수 있게 해주는 하드웨어 장치야.
원래는 I/O 디바이스가 데이터 전송할 때마다 CPU에 인터럽트를 걸어야 해. 근데 I/O 작업이 많으면 CPU에 인터럽트가 폭주해서 정작 연산을 못하게 돼. DMA 컨트롤러가 그 부하를 대신 받아줘.
하나의 작업을 CPU와 DMA 컨트롤러가 동시에 처리하는 건 방지해. 충돌 나면 안 되니까.
DMA가 없던 시절엔 CPU가 I/O 작업 중에 계속 대기해야 했어 (Busy Waiting). DMA 덕분에 CPU는 I/O 작업을 DMA에 맡기고 다른 연산을 처리할 수 있게 됐어.
메모리 (Memory)
전자회로에서 데이터, 상태, 명령어를 기록하는 장치야. RAM이 여기에 해당해.
역할 분담을 단순하게 보면 이래.
- CPU: 계산 담당
- 메모리: 기억 담당
CPU가 연산에 필요한 데이터는 메모리에서 가져와. 근데 CPU 속도가 메모리보다 훨씬 빠르기 때문에 그 속도 차이를 줄이려고 캐시 계층이 존재하는 거야.
메모리 계층 구조(Memory Hierarchy)는 속도와 용량의 트레이드오프야. 빠를수록 용량이 작고 비싸. 레지스터 → 캐시 → RAM → SSD/HDD 순으로 속도는 줄고 용량은 늘어.
타이머 (Timer)
특정 프로그램이 CPU를 독점하는 걸 막기 위해 시간 제한을 거는 장치야.
무한 루프가 도는 프로그램이 있다고 해봐. 타이머 없으면 그 프로그램이 CPU를 영원히 점유해버려. 타이머가 시간을 재다가 제한 시간 초과 시 인터럽트를 발생시켜서 제어권을 운영체제에 돌려줘.
디바이스 컨트롤러 (Device Controller)
컴퓨터에 연결된 I/O 디바이스들의 작은 CPU야. 각 디바이스마다 자기 로컬 버퍼가 있고 디바이스 컨트롤러가 이걸 관리해.
예를 들어 키보드 입력이 들어오면, 키보드 디바이스 컨트롤러가 그 신호를 받아서 CPU가 이해할 수 있는 형태로 바꿔줘.
정리
Q. 운영체제의 역할 네 가지는?
CPU 스케줄링/프로세스 관리, 메모리 관리, 디스크 파일 관리, I/O 디바이스 관리.
Q. 시스템콜이란 무엇인가?
유저 프로그램이 커널 기능을 사용하기 위한 인터페이스. 직접 접근을 막아 보안과 안정성 확보.
Q. 유저 모드와 커널 모드의 차이는?
유저 모드는 접근 자원이 제한됨. 커널 모드는 모든 자원에 접근 가능. modebit으로 구분.
Q. 인터럽트란?
CPU 실행을 잠시 멈추고 긴급 작업을 처리하게 하는 신호. 하드웨어/소프트웨어 두 종류가 있음.
Q. DMA 컨트롤러가 왜 필요한가?
I/O 작업마다 CPU에 인터럽트가 발생하면 CPU 부하가 커짐. DMA가 직접 메모리 접근을 처리해서 CPU 부하를 분산.
Q. CPU 구성 요소 세 가지는?
ALU(연산), CU(제어), 레지스터(임시 저장).
다음엔 메모리 계층 파트 정리해볼게. 오늘 공부 끝!
'Study > [ OS ]' 카테고리의 다른 글
| #06 시스템콜 System Call (0) | 2026.06.24 |
|---|---|
| #05 인터럽트 Interrupt (0) | 2026.06.23 |
| #04 CPU 스케줄링 알고리즘 (0) | 2026.06.22 |
| #03 프로세스와 스레드 (0) | 2026.06.20 |
| #02 메모리 계층 (0) | 2026.06.18 |
흐이서
Writer공순이 흐이서