운영체제 아주 쉬운 세가지 이야기- 1주차 스터디
2025. 9. 2. 15:58ㆍ개념 공부
목차
1) 운영체제는 무엇을 하는가?
프로그램은 기본적으로 명령어를 가져와(fetch) 해석(decode)하고 실행(execute)합니다. 하지만 사용자는 여러 프로그램을 동시에 실행하고, 파일을 읽고/쓰고, 장치를 쉽게 다루고 싶습니다. 이 복잡한 요구를 대신 해결해 주는 소프트웨어가 바로 운영체제(OS)입니다.
- OS는 하드웨어(CPU·메모리·디스크)를 가상화하여, 쓰기에 편한 가상 자원으로 제공합니다.
- 응용 프로그램은 OS가 제공하는 시스템 콜(API)로 실행/메모리/파일 접근을 요청합니다.
핵심: 운영체제 = 가상화 + 병행성 관리 + 영속성 보장을 수행하는 자원 관리자.
2) CPU 가상화 — 하나의 CPU를 여러 프로그램이 나눠 쓰는 법
OS는 스케줄링을 통해 하나(or 소수)의 CPU를 마치 여러 개처럼 보이게 만듭니다.
- 정책(Policy): 지금 누가 CPU를 쓸지 결정 (예: 공정성/응답성/처리량 목표).
- 기법(Mechanism): 실제로 문맥 전환을 수행하여 선택된 프로세스를 실행.
예시 보기 — “줄갈이 출력”
여러 프로그램(A/B/C/D)을 실행하면 각자의 출력이 교차해 보입니다. CPU가 아주 짧은 시간 단위로 번갈아 할당되기 때문입니다. 사용자는 “동시에 도는 것처럼” 느끼죠.
3) 메모리 가상화 — 각 프로세스마다 독립된 주소 공간
여러 프로그램이 동시에 돌아도, 각 프로그램은 자신만의 가상 주소 공간을 갖는 것처럼 동작합니다.
- OS가 가상 주소 → 물리 메모리로 매핑을 관리합니다.
- 서로 다른 프로그램이 같은 “가상 주소(예: 0x00200000)”를 써도, 실제로는 다른 물리 메모리를 사용하므로 간섭하지 않습니다.
- 이 격리 덕분에 보호/안정성이 확보됩니다.
Tip: 실제로는 물리 메모리는 공유 자원이며, OS가 페이지 테이블 등으로 프로세스별 매핑을 관리합니다.
4) 병행성 — 동시에 실행될 때 생기는 문제를 다루는 기술
멀티프로세스/멀티스레드 환경에서 같은 데이터를 함께 다루면 레이스 컨디션이 발생할 수 있습니다.
counter++같은 단순 연산도 내부적으로는 읽기→증가→쓰기의 여러 단계입니다.- 두 스레드가 동시에 수행하면 서로 덮어써서 결과가 틀려질 수 있습니다.
- 락(lock), 원자적 연산, 조건 변수 등 동기화 도구로 해결합니다.
5) 영속성 & 파일 시스템 — 전원이 꺼져도 남게 하기
메모리는 휘발성이므로, 데이터는 디스크/SSD에 영속적으로 저장해야 합니다. 이를 담당하는 것이 파일 시스템입니다.
- 기본 시스템 콜:
open→write→close - 파일 시스템은 어디에 쓸지 배치하고, 메타데이터/자료구조를 갱신하며, 장치 드라이버를 통해 I/O를 수행합니다.
- 신뢰성을 위해 저널링·카피-온-라이트(COW) 등 기법을 사용해 일관성과 성능을 함께 잡습니다.
6) 운영체제 설계 목표
- 추상화: 하드웨어 복잡성을 감추고, 쓰기 쉬운 인터페이스 제공
- 성능: 가상화/보호의 오버헤드를 최소화
- 보호/격리: 프로세스 간·커널/사용자 간 안전한 분리
- 신뢰성: 시스템 전체를 안정적으로 유지
- 기타: 보안, 에너지 효율, 이식성/이동성 등
※ 실제 시스템 설계는 목표 간 절충이 필수입니다(예: 성능 vs. 보호).
7) 아주 짧은 역사 — Unix의 영향
- 초기: 단순한 입출력 보조 수준에서 출발
- 시스템 콜/트랩로 보호 개념 도입, 멀티프로그래밍 확산
- Unix: 작고 강력한 도구들을 조합해 쓰는 철학, C 언어/쉘/파이프를 통해 개발자 친화적 환경 제공
- 현대: 데스크톱·모바일·클라우드 전반에서 보안·동시성·안정성·성능을 균형 있게 추구
8) 한 장 요약 & 핵심 키워드
- 가상화: CPU(스케줄링), 메모리(주소 공간), 디스크(파일 시스템)
- 병행성: 동시에 실행해도 올바른 결과를 보장(락/원자성/조건변수)
- 영속성: 전원이 꺼져도 데이터가 남도록 설계(저널링·COW 등)
- 설계 목표: 추상화 · 성능 · 보호/격리 · 신뢰성 (+ 보안/에너지/이식성)
9) 복습 체크리스트
- CPU 가상화에서 정책과 기법의 차이를 설명할 수 있는가?
- “같은 가상 주소인데도 간섭이 없는 이유”를 한 문장으로 설명할 수 있는가?
counter++가 왜 레이스 컨디션이 되는지 단계별로 말할 수 있는가?- 파일 시스템이
open→write→close를 받았을 때 내부에서 어떤 일이 일어나는지 큰 흐름을 말할 수 있는가? - 추상화·성능·격리·신뢰성 사이의 절충 사례를 하나 떠올릴 수 있는가?
10) 복습 퀴즈
- 운영체제가 가상화를 한다는 말은 무엇을 의미할까?
- CPU 스케줄러의 정책과 기법을 각각 한 문장으로 정의해보자.
- 두 개의 스레드가 동시에
counter++를 실행하면 어떤 문제가 생기며, 왜 그런가? - 가상 메모리에서 서로 다른 프로세스가 같은 가상 주소를 사용해도 안전한 이유는?
- 파일 시스템이 데이터 일관성을 지키기 위해 쓰는 대표적 기법 두 가지는?
정답 보기
- 물리 자원(CPU·메모리·디스크)을 추상화해 사용하기 쉬운 가상 자원처럼 제공하는 것.
- 정책: 누가/언제 CPU를 쓸지 결정하는 원칙. / 기법: 그 결정을 실제로 실행(문맥 전환 등).
- 레이스 컨디션.
counter++는 읽기→증가→쓰기의 여러 단계로 이뤄져, 동시에 수행 시 서로 덮어쓸 수 있음. - OS가 프로세스별로 가상 주소→물리 메모리 매핑을 분리해 관리(페이지 테이블 등)하기 때문.
- 저널링, 카피-온-라이트(COW) 등.
11) 다음 학습 가이드
- CPU 가상화 심화: 스케줄링(FCFS/RR/SJF/멀티레벨 등), 문맥 전환 오버헤드
- 메모리: 페이징, 세그멘테이션, TLB, 페이지 교체 알고리즘(LRU 등)
- 병행성: 락/세마포어/조건변수, 데드락 조건과 회피
- 파일 시스템: 인덱스 노드, 저널링, 디스크 스케줄링, RAID 개념
'개념 공부' 카테고리의 다른 글
| 운영체제 아주 쉬운 세가지 이야기- 3주차 (2) | 2025.09.16 |
|---|---|
| 운영체제 아주 쉬운 세가지 이야기- 2주차 (0) | 2025.09.09 |
| 컴퓨터 네트워킹 & 소켓 인터페이스 (0) | 2025.05.07 |
| 컴퓨터 시스템 8장 시그널 (0) | 2025.04.21 |
| 컴퓨터 시스템 7장-링커(Linking) 1-2 (0) | 2025.04.19 |