운영체제
운영체제(Operating System)는 하드웨어와 소프트웨어 사이에서 자원을 관리하고 사용자에게 인터페이스를 제공하는 시스템 소프트웨어이다. 개발자 면접에서 빠지지 않는 단골 주제이며, 시스템의 동작 원리를 이해하는 데 필수적인 지식이다.
주제별 목록
프로세스와 스레드
프로그램 실행의 기본 단위인 프로세스와 스레드의 차이를 다룬다.
- 프로세스의 메모리 구조 (Code, Data, Heap, Stack)
- 스레드가 Stack만 독립적으로 갖는 이유
- 멀티 프로세스 vs 멀티 스레드 선택 기준
컨텍스트 스위칭
CPU가 실행 중인 프로세스를 전환하는 과정과 그 비용을 다룬다.
- PCB(Process Control Block)에 저장되는 정보
- 프로세스 vs 스레드 컨텍스트 스위칭 비용 차이
- 캐시 무효화와 TLB 플러시
CPU 스케줄링
어떤 프로세스에게 CPU를 할당할지 결정하는 알고리즘을 다룬다.
- FCFS, SJF, Round Robin, Priority 비교
- 선점 vs 비선점 스케줄링
- 기아 현상과 에이징
동기화
여러 프로세스/스레드가 공유 자원에 접근할 때 발생하는 문제와 해결책을 다룬다.
- 경쟁 조건(Race Condition)과 임계 영역
- 뮤텍스 vs 세마포어 vs 모니터
- 스핀락과 슬립락의 트레이드오프
교착상태
두 개 이상의 프로세스가 서로의 자원을 기다리며 무한 대기하는 상황을 다룬다.
- 교착상태 발생 조건 4가지
- 예방, 회피, 탐지, 복구 전략
- 은행원 알고리즘
메모리 관리
물리 메모리와 가상 메모리의 관계, 페이징 기법을 다룬다.
- 가상 메모리와 물리 메모리 매핑
- 페이지 폴트와 스와핑
- 페이지 교체 알고리즘 (LRU, FIFO, LFU)
IPC (프로세스 간 통신)
독립된 메모리 공간을 가진 프로세스들이 데이터를 주고받는 방법을 다룬다.
- 공유 메모리 vs 메시지 패싱
- 파이프, 소켓, 시그널
- 동기 vs 비동기 통신