운영체제
프로세스와 스레드, 스케줄링, 동기화, 메모리 관리, 파일 시스템
- 01
운영체제의 유형
일괄 처리부터 다중 프로그래밍, 시분할, 다중 처리, 실시간, 분산 처리까지 운영체제 유형별 목표와 특징을 정리한다.
- 02
System Call과 Dual Mode
CPU의 사용자 모드와 커널 모드가 나뉜 이유, 시스템 콜의 동작 과정과 유형을 정리한다.
- 03
인터럽트와 폴링
인터럽트의 처리 절차와 저장되는 문맥, 중첩 인터럽트, 폴링과의 차이, 하드웨어·소프트웨어 인터럽트를 정리한다.
- 04
프로세스와 PCB, 프로세스의 상태 변화
프로세스와 PCB의 역할, 생성부터 종료까지의 상태 전이와 스와핑, 리눅스의 프로세스 생성과 좀비·고아·데몬 프로세스를 정리한다.
- 05
프로세스 주소 공간과 Stack이 높은 주소부터 할당되는 이유
Stack·Heap·Data·Text 영역의 역할과 Stack이 Heap보다 빠른 이유, Stack이 높은 주소에서 자라는 이유를 정리한다.
- 06
스레드: 사용자·커널 수준 스레드와 Thread Pool, Fork-Join
스레드의 개념과 TCB, 사용자 수준과 커널 수준 스레드의 차이와 매핑 모델, Thread Pool과 Fork-Join을 정리한다.
- 07
Context Switching
문맥 교환의 과정과 발생 시점, 프로세스와 스레드의 전환 비용 차이, 준비 큐가 길어질 때의 문제와 해결 방안을 정리한다.
- 08
프로세스 스케줄링: 단계와 알고리즘
장기·중기·단기 스케줄러와 선점 여부, FCFS·SJF·SRT·우선순위·RR·HRN·다단계 큐 알고리즘의 특징을 정리한다.
- 09
Thread Scheduling: 경합 범위 PCS와 SCS
스레드 스케줄링의 대상과 LWP의 역할, 경합 범위인 PCS와 SCS의 차이와 장단점을 정리한다.
- 10
경쟁 상태와 상호 배제: Thread Safe, 데커·피터슨 알고리즘
경쟁 상태가 생기는 이유를 생산자-소비자 문제로 살펴보고, Thread Safe 조건과 데커·피터슨 알고리즘, 원자적 연산을 정리한다.
- 11
뮤텍스와 세마포, 모니터
뮤텍스와 세마포의 동작과 차이, 대기 큐로 Busy waiting을 없애는 방법, 모니터의 구조와 Java의 모니터를 정리한다.
- 12
교착 상태: 발생 조건과 해결 방법
교착 상태의 네 가지 발생 조건과 자원 할당 그래프, 예방·회피(은행가 알고리즘)·탐지와 회복의 장단점을 정리한다.
- 13
메모리 계층 구조와 캐시 메모리
메모리 계층 구조와 L1·L2 캐시, 캐시 매핑 방식, 지역성과 배열 탐색 성능, 애플리케이션 캐시의 일관성 문제를 정리한다.
- 14
메모리 관리: 주소 바인딩과 연속 메모리 할당
주소 바인딩 시점, 고정·가변 분할 방식과 단편화, 최초·최적·최악 적합 배치 전략과 통합·압축을 정리한다.
- 15
가상 메모리: Paging과 Segmentation, TLB
가상 주소 매핑의 원리부터 Paging, TLB, Segmentation, 둘을 결합한 Hybrid 방식까지 주소 변환 과정을 비교한다.
- 16
요구 페이징과 페이지 교체 알고리즘, Thrashing
요구 페이징과 Page Fault 처리, FIFO·LRU·LFU·MFU 교체 알고리즘, Thrashing의 발생 과정과 완화 방법을 정리한다.
- 17
File Descriptor와 File System, I-Node
프로세스가 파일을 가리키는 File Descriptor, 파일 시스템의 역할, 파일의 속성과 블록 주소를 담는 I-Node를 정리한다.
- 18
동기/비동기와 블로킹/논블로킹, I/O Multiplexing
동기·비동기와 블로킹·논블로킹이 서로 다른 관점임을 짚고, 네 가지 조합과 select·poll 기반 I/O Multiplexing을 정리한다.