먼저 알아야 할 것
- 어셈블리어 (2-1학기) 1~2장의 x86 프로세서 구조가 1장과 겹친다. 아직 개념 문서는 없다.
- 교재: Stallings, Operating Systems: Internals and Design Principles 6판.
1장 · 컴퓨터 시스템 개요
읽기 전에
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 01 | 컴퓨터의 기본 구성 요소 | 프로세서, 주기억장치, 입출력 모듈, 버스의 네 부분 | — | — |
| 02 | 프로세서 레지스터 | 프로세서 안의 빠른 칸. PC, IR, PSW, 조건 코드 | — | — |
| 03 | 명령어 사이클 | 명령어를 가져오고(인출) 실행하기를 되풀이 | impl | — |
| 04 | 인터럽트 | 장치가 끝났다고 알려 프로세서를 끊는 장치. 상태를 저장하고 되살린다 | verify | — |
| 05 | 메모리 계층 | 작고 빠른 메모리부터 크고 느린 메모리까지 층층이 | — | — |
| 06 | 캐시 메모리 | 지역성을 이용해 자주 쓰는 블록을 복사해 두는 작은 메모리 | verify | — |
| 07 | 입출력 기법 | 프로그램 입출력, 인터럽트 구동, DMA | — | — |
떠올려 보기: 노트를 닫고 명령어 사이클 그림에 인터럽트 단계를 넣어 그린 뒤, 입출력 기법 세 가지와 연결해 본다.
2장 · 운영체제 개요
읽기 전에
- 프로그램 하나가 시간의 97%를 입출력을 기다리며 보낸다면, 프로세서를 놀리지 않을 방법은? → 다중 프로그래밍
- 사용자 프로그램이 운영체제의 메모리를 덮어쓰지 못하게 하려면 하드웨어에 무엇이 있어야 할까? → 사용자 모드와 커널 모드
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 08 | 운영체제의 역할 | 응용의 실행을 지휘하고 하드웨어를 대신 관리하는 프로그램 | — | — |
| 09 | 운영체제의 발전 | 직렬 처리 → 단순 배치 → 다중 프로그래밍 배치 → 시분할 | — | — |
| 10 | 사용자 모드와 커널 모드 | 사용자 프로그램은 제한된 모드, 운영체제는 모든 권한 | — | — |
| 11 | 다중 프로그래밍 | 입출력을 기다리는 동안 다른 프로그램을 실행 | fig1 · plot · verify | 예제 사다리 |
| 12 | 시분할 | 프로세서 시간을 잘게 나눠 여러 사용자에게 번갈아 | — | — |
| 13 | 프로세스 | 실행 중인 프로그램. 프로그램, 데이터, 실행 문맥 | — | — |
떠올려 보기: 노트를 닫고 운영체제 발전 네 단계를 쓰고, 단계마다 없앤 낭비와 새로 생긴 문제를 적어 본다.
3장 · 프로세스 설명과 제어
읽기 전에
- 입출력이 끝난 프로세스는 곧바로 다시 실행될까? → 프로세스 상태
- 시스템 호출을 할 때마다 실행 중인 프로세스가 바뀔까? → 프로세스 생성과 전환
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 14 | 프로세스 상태 | 실행·준비·대기와 일시 중단. 사건이 끝나면 준비로 간다 | verify | — |
| 15 | 프로세스 제어 블록 | 프로세스마다 하나인 신상 카드. 식별·프로세서 상태·제어 정보 | — | — |
| 16 | 프로세스 생성과 전환 | 생성 순서, 종료 이유, 모드 전환과 프로세스 전환의 차이 | — | — |
떠올려 보기: 노트를 닫고 7상태 그림을 그린 뒤, 화살표마다 그 전이를 일으키는 사건을 적어 본다.
4장 · 스레드, SMP, 마이크로커널
읽기 전에
- 같은 프로그램 안의 두 실행 흐름은 메모리를 함께 쓸까, 따로 쓸까? → 스레드
- 커널이 스레드의 존재를 모르면, 한 스레드가 디스크를 기다릴 때 나머지는 어떻게 될까? → 사용자 수준 스레드와 커널 수준 스레드
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 17 | 스레드 | 프로세스의 자원을 함께 쓰는 실행 흐름 | verify | — |
| 18 | 사용자 수준 스레드와 커널 수준 스레드 | 스레드를 라이브러리가 관리하나, 커널이 관리하나 | — | — |
| 19 | 대칭형 다중 처리 | 같은 기능의 프로세서 여럿이 메모리를 함께 쓰는 구조 | — | — |
| 20 | 마이크로커널 | 핵심만 커널에, 나머지 서비스는 사용자 모드 서버로 | — | — |
떠올려 보기: 노트를 닫고 프로세스와 스레드가 각각 무엇을 가지는지 표로 쓰고, ULT와 KLT의 차이를 그 표로 설명해 본다.
5장 · 병행성: 상호 배제와 동기화
읽기 전에
- 두 스레드가 같은 변수에 동시에 1을 더하면 결과는 늘 2만큼 늘까? → 경쟁 조건과 임계 구역
- 자리가 없을 때 계속 확인하며 기다리지 않고 잠들게 하려면 무엇이 필요할까? → 세마포어
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 21 | 경쟁 조건과 임계 구역 | 결과가 실행 순서에 달린 상황과, 한 번에 하나만 들어가는 구간 | verify | — |
| 22 | 상호 배제의 하드웨어 지원 | 인터럽트 금지, compare&swap, exchange. 바쁜 대기 | — | — |
| 23 | 세마포어 | 남은 자리를 세는 정수와 대기 줄. semWait·semSignal | impl | — |
| 24 | 생산자-소비자 문제 | 가득 차면 생산자가, 비면 소비자가 기다리는 버퍼 | verify | — |
| 25 | 모니터 | 공유 데이터와 함수를 한 방에. 조건 변수로 기다림 | — | — |
| 26 | 메시지 전달 | send·receive로 데이터를 넘기며 동기화 | — | — |
| 27 | 독자-저자 문제 | 독자는 함께, 저자는 혼자. 누구를 우대하나 | verify | — |
떠올려 보기: 노트를 닫고 유한 버퍼 해법을 세마포어 세 개로 써 본 뒤, semWait 두 개의 순서를 바꾸면 무슨 일이 생기는지 적어 본다.
6장 · 병행성: 교착상태와 기아
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 28 | 교착상태 | 서로 상대의 자원을 기다리며 멈춤. 네 조건 | — | — |
| 29 | 교착상태 예방 | 네 조건 중 하나를 설계로 원천 차단 | — | — |
| 30 | 교착상태 회피 | 요청마다 안전 상태인지 보고 허락. 은행원 알고리즘 | impl | 예제 사다리 |
| 31 | 교착상태 탐지와 복구 | 일단 허락하고 주기적으로 찾아서 푼다 | impl | — |
| 32 | 식사하는 철학자 문제 | 포크 다섯 개, 철학자 다섯 명 | verify | — |
떠올려 보기: 노트를 닫고 교착상태 네 조건을 쓰고, 예방·회피·탐지가 각각 어떤 조건을 어떻게 다루는지 표로 적어 본다.
7장 · 메모리 관리
읽기 전에
- 프로그램이 메모리의 어디에 실릴지 모르는데, 코드 속 주소는 어떻게 맞출까? → 메모리 관리의 요구 사항
- 메모리를 크기가 제각각인 덩어리로 나누면 시간이 지나며 무슨 일이 생길까? → 메모리 분할
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 33 | 메모리 관리의 요구 사항 | 재배치, 보호, 공유, 논리·물리 구성 | — | — |
| 34 | 메모리 분할 | 고정·동적 분할, 단편화, 배치 알고리즘 | verify | — |
| 35 | 버디 시스템 | 2의 거듭제곱 크기로 쪼개고 합치는 할당 | impl | — |
| 36 | 페이징 | 같은 크기의 페이지와 프레임, 페이지 표로 주소 변환 | impl | 예제 사다리 |
| 37 | 세그먼테이션 | 길이가 다른 논리 단위로 나누는 방식 | — | — |
떠올려 보기: 노트를 닫고 고정 분할, 동적 분할, 페이징, 세그먼테이션을 단편화 종류로 비교하는 표를 써 본다.
8장 · 가상 메모리
읽기 전에
- 프로그램 전체가 메모리에 없어도 실행할 수 있을까? 무엇이 있어야 할까? → 가상 메모리
- 메모리가 꽉 찼을 때 어떤 페이지를 내보내야 가장 손해가 적을까? → 페이지 교체 알고리즘
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 38 | 가상 메모리 | 프로세스의 일부만 메모리에 두고 실행. 지역성, 스래싱, 페이지 크기 | verify | — |
| 39 | 페이지 표 구조 | P·M 비트, 다단계 페이지 표, 역 페이지 표 | verify | — |
| 40 | TLB | 최근 페이지 표 항목을 담은 하드웨어 캐시 | fig1 · plot · verify | — |
| 41 | 페이지 교체 알고리즘 | OPT, LRU, FIFO, CLOCK. 무엇을 내보낼까 | fig1 · impl · plot | 예제 사다리 |
| 42 | 상주 집합 관리와 적재 제어 | 반입·배치·상주 집합·정리 정책과 다중 프로그래밍 수준 | — | — |
떠올려 보기: 노트를 닫고 가상 주소 하나가 TLB → 페이지 표 → (부재면) 디스크를 거쳐 실제 주소가 되는 과정을 그려 본다.
9장 · 단일 프로세서 스케줄링
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 43 | 스케줄링의 종류와 기준 | 장기·중기·단기 스케줄링과 평가 기준, 우선순위 | — | — |
| 44 | 스케줄링 알고리즘 | FCFS, RR, SPN, SRT, HRRN, 피드백 | fig1 · plot · impl | 예제 사다리 |
| 45 | 실행 시간 예측 | 지난 실행 시간으로 다음 버스트를 지수 평균으로 짐작 | fig1 · plot · verify | — |
| 46 | 공정 분배와 UNIX 스케줄링 | 사용량을 반씩 잊는 UNIX 우선순위와 그룹 단위 공정 분배 | fig1 · plot · verify | — |
떠올려 보기: 노트를 닫고 다섯 프로세스 예(A~E)를 FCFS와 SRT로 간트 차트를 그려 평균 반환 시간을 비교해 본다.
10장 · 다중 프로세서와 실시간 스케줄링
읽기 전에
- 프로세서가 넷일 때, 서로 결과를 주고받는 스레드 넷은 어떻게 배치해야 빠를까? → 다중 프로세서 스케줄링
- 중요한 작업에 높은 우선순위를 주면 마감을 가장 잘 지킬까? → 실시간 스케줄링
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 47 | 다중 프로세서 스케줄링 | 어느 프로세서에서 돌릴까. 부하 공유, 갱 스케줄링, 전용 배정 | — | — |
| 48 | 실시간 시스템 | 늦으면 틀린 시스템. 경성·연성, 결정성과 응답성 | — | — |
| 49 | 실시간 스케줄링 | 마감이 가장 이른 것 먼저(EDF)와 비율 단조(RMS) | fig1 · impl · plot | 예제 사다리 |
| 50 | 우선순위 역전 | 높은 작업이 낮은 작업을 기다리는 함정과 우선순위 상속 | — | — |
떠올려 보기: 노트를 닫고 A(20, 10)·B(50, 25) 예를 A 우선, B 우선, EDF로 그려 각각 놓친 마감을 적어 본다.
11장 · 입출력 관리와 디스크 스케줄링
읽기 전에
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 51 | 입출력 장치와 입출력 설계 | 장치 종류와 차이, 입출력 기능의 발전, 층 구조 | — | — |
| 52 | 입출력 버퍼링 | 단일·이중·순환 버퍼로 장치와 프로세스의 속도 차이를 흡수 | fig1 · plot · verify | — |
| 53 | 디스크 스케줄링 | FIFO, SSTF, SCAN, C-SCAN. 팔 이동을 줄이는 순서 | fig1 · impl · plot | 예제 사다리 |
| 54 | RAID | 디스크 여러 개를 하나처럼. 스트라이핑, 미러링, 패리티 | verify | — |
| 55 | 디스크 캐시 | 디스크 섹터를 메모리에. LRU, LFU, 빈도 기반 교체 | — | — |
떠올려 보기: 노트를 닫고 헤드 100, 요청 55 58 39 18 90 160 150 38 184를 SSTF와 SCAN으로 처리하는 순서를 써 본다.
12장 · 파일 관리
읽기 전에
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 56 | 파일과 파일 관리 시스템 | 이름 붙은 데이터 묶음과, 그것을 다루는 운영체제 층 | — | — |
| 57 | 파일 조직 | 더미, 순차, 색인 순차, 색인, 직접 파일 | — | — |
| 58 | 디렉터리와 파일 공유 | 이름으로 파일을 찾는 표. 트리 구조와 공유 권한 | — | — |
| 59 | 레코드 블로킹 | 레코드를 블록에 담는 세 방법. 고정, 걸침, 안 걸침 | verify | — |
| 60 | 파일 할당 | 디스크 블록을 파일에. 연속, 연결, 색인 할당 | impl | — |
| 61 | UNIX 아이노드 | 직접·간접 포인터로 작은 파일도 큰 파일도 | verify | 예제 사다리 |
| 62 | 접근 제어 | 누가 무엇에 어떤 일을. 접근 행렬, ACL, 권한 목록 | — | — |
떠올려 보기: 노트를 닫고 연속, 연결, 색인 할당을 단편화와 임의 접근 속도로 비교하는 표를 써 본다.
14장 · 컴퓨터 보안 위협
읽기 전에
- 보안이 지켜야 할 것을 세 단어로 줄인다면 무엇일까? → 보안의 목표와 위협
- 바이러스와 웜은 퍼지는 방식이 어떻게 다를까? → 악성 소프트웨어
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 63 | 보안의 목표와 위협 | 기밀성, 무결성, 가용성과 이를 깨는 공격 | — | — |
| 64 | 악성 소프트웨어 | 바이러스, 웜, 트로이 목마, 봇, 루트킷 | — | — |
떠올려 보기: 노트를 닫고 보안의 세 목표와 그것을 깨는 공격 종류를 짝지어 써 본다.
15장 · 컴퓨터 보안 기법
읽기 전에
- 비밀번호 파일을 통째로 도둑맞아도 비밀번호가 바로 드러나지 않게 하려면? → 사용자 인증
- 함수 안의 배열을 넘치게 쓰면 왜 공격자의 코드가 실행될 수 있을까? → 버퍼 오버플로 방어
| 번호 | 개념 | 한 줄 | 개념 코드 | 연습 |
|---|---|---|---|---|
| 65 | 사용자 인증 | 아는 것, 가진 것, 그 사람 자체. 솔트 친 해시 | verify | — |
| 66 | 침입 탐지 | 평소와 다른 행동, 알려진 수법을 찾아 경보 | — | — |
| 67 | 악성 코드 대응 | 탐지·식별·제거, 에뮬레이터, 행동 차단 | — | — |
| 68 | 버퍼 오버플로 방어 | 넘친 입력이 돌아갈 주소를 덮는 공격을 막기 | — | — |
떠올려 보기: 노트를 닫고 인증, 접근 제어, 침입 탐지, 악성 코드 대응이 각각 어느 단계에서 막는지 순서대로 써 본다.
다른 과목과의 연결
- 모니터 ↔ Mutex ↔ 모니터, 생산자-소비자 문제 (Rust): 모니터의 공유 데이터와 조건 변수가 Rust에서는
Mutex안의 데이터와Condvar가 된다. - 후보: 4-1학기 컴퓨터 통신의 패킷 스위칭(쉬는 시간에 남이 링크를 씀) ↔ 다중 프로그래밍(입출력 대기 동안 남이 프로세서를 씀).
흐름
graph TD
C1["01 컴퓨터의 기본 구성 요소"]
C2["02 프로세서 레지스터"]
C3["03 명령어 사이클"]
C4["04 인터럽트"]
C5["05 메모리 계층"]
C6["06 캐시 메모리"]
C7["07 입출력 기법"]
C8["08 운영체제의 역할"]
C9["09 운영체제의 발전"]
C10["10 사용자 모드와 커널 모드"]
C11["11 다중 프로그래밍"]
C12["12 시분할"]
C13["13 프로세스"]
C14["14 프로세스 상태"]
C15["15 프로세스 제어 블록"]
C16["16 프로세스 생성과 전환"]
C17["17 스레드"]
C18["18 사용자 수준 스레드와 커널 수준 스레드"]
C19["19 대칭형 다중 처리"]
C20["20 마이크로커널"]
C21["21 경쟁 조건과 임계 구역"]
C22["22 상호 배제의 하드웨어 지원"]
C23["23 세마포어"]
C24["24 생산자-소비자 문제"]
C25["25 모니터"]
C26["26 메시지 전달"]
C27["27 독자-저자 문제"]
C28["28 교착상태"]
C29["29 교착상태 예방"]
C30["30 교착상태 회피"]
C31["31 교착상태 탐지와 복구"]
C32["32 식사하는 철학자 문제"]
C33["33 메모리 관리의 요구 사항"]
C34["34 메모리 분할"]
C35["35 버디 시스템"]
C36["36 페이징"]
C37["37 세그먼테이션"]
C38["38 가상 메모리"]
C39["39 페이지 표 구조"]
C40["40 TLB"]
C41["41 페이지 교체 알고리즘"]
C42["42 상주 집합 관리와 적재 제어"]
C43["43 스케줄링의 종류와 기준"]
C44["44 스케줄링 알고리즘"]
C45["45 실행 시간 예측"]
C46["46 공정 분배와 UNIX 스케줄링"]
C47["47 다중 프로세서 스케줄링"]
C48["48 실시간 시스템"]
C49["49 실시간 스케줄링"]
C50["50 우선순위 역전"]
C51["51 입출력 장치와 입출력 설계"]
C52["52 입출력 버퍼링"]
C53["53 디스크 스케줄링"]
C54["54 RAID"]
C55["55 디스크 캐시"]
C56["56 파일과 파일 관리 시스템"]
C57["57 파일 조직"]
C58["58 디렉터리와 파일 공유"]
C59["59 레코드 블로킹"]
C60["60 파일 할당"]
C61["61 UNIX 아이노드"]
C62["62 접근 제어"]
C63["63 보안의 목표와 위협"]
C64["64 악성 소프트웨어"]
C65["65 사용자 인증"]
C66["66 침입 탐지"]
C67["67 악성 코드 대응"]
C68["68 버퍼 오버플로 방어"]
C1 --> C2
C2 --> C3
C3 --> C4
C2 --> C4
C1 --> C5
C5 --> C6
C4 --> C7
C1 --> C8
C8 --> C9
C9 --> C10
C2 --> C10
C9 --> C11
C4 --> C11
C7 --> C11
C11 --> C12
C4 --> C12
C11 --> C13
C2 --> C13
C13 --> C14
C4 --> C14
C14 --> C15
C2 --> C15
C15 --> C16
C10 --> C16
C13 --> C17
C14 --> C17
C17 --> C18
C10 --> C18
C17 --> C19
C11 --> C19
C10 --> C20
C13 --> C20
C17 --> C21
C13 --> C21
C21 --> C22
C4 --> C22
C22 --> C23
C14 --> C23
C23 --> C24
C23 --> C25
C24 --> C25
C21 --> C26
C20 --> C26
C23 --> C27
C21 --> C28
C23 --> C28
C28 --> C29
C28 --> C30
C29 --> C30
C30 --> C31
C28 --> C32
C23 --> C32
C13 --> C33
C5 --> C33
C33 --> C34
C34 --> C35
C34 --> C36
C33 --> C36
C36 --> C37
C5 --> C38
C13 --> C38
C36 --> C38
C37 --> C38
C14 --> C38
C38 --> C39
C39 --> C40
C6 --> C40
C38 --> C41
C6 --> C41
C41 --> C42
C14 --> C43
C42 --> C43
C43 --> C44
C44 --> C45
C44 --> C46
C19 --> C47
C44 --> C47
C44 --> C48
C4 --> C48
C48 --> C49
C49 --> C50
C23 --> C50
C7 --> C51
C8 --> C51
C51 --> C52
C24 --> C52
C51 --> C53
C44 --> C53
C53 --> C54
C52 --> C55
C41 --> C55
C51 --> C56
C56 --> C57
C56 --> C58
C57 --> C59
C34 --> C59
C59 --> C60
C36 --> C60
C60 --> C61
C58 --> C61
C58 --> C62
C62 --> C63
C63 --> C64
C10 --> C64
C63 --> C65
C63 --> C66
C65 --> C66
C64 --> C67
C66 --> C67
C64 --> C68
C38 --> C68