백엔드 면접 학습 노트 목차

운영체제 — 백엔드 면접 (실제 기출 기반·심화)

한국 백엔드 면접에서 가장 많이 나오는 CS 주제다. "프로세스 vs 스레드", "데드락 4조건", "뮤텍스와 세마포어 차이", "컨텍스트 스위칭이 왜 비싼가", "페이지 폴트 처리 과정", "LRU 구현" — 단골이고, 면접관은 정의 → PCB 유무 → 리눅스 구현 → TLB처럼 계단식으로 파고든다(VSFe 패턴).

면접관이 노리는 함정이 많은 주제다: SRT는 비선점? Belady? 세마포어=뮤텍스? — "흔한 오답" 박스를 곳곳에 둔다.


1. 프로세스 vs 스레드 (★★★ 최다 단골)

실제 질문: "프로그램/프로세스/스레드의 차이를 설명해주세요." · "멀티프로세스 대신 멀티스레드를 쓰는 이유는?" · (꼬리)"스레드는 PCB를 갖고 있나요?" · "리눅스에서 프로세스와 스레드는 각각 어떻게 생성되나요?"(fork vs clone) (VSFe·gyoogle)

  • 프로세스: 실행 중인 프로그램. 독립된 메모리(Code·Data·Heap·Stack)·자원. PCB(Process Control Block)로 관리.
  • 스레드: 프로세스 내 실행 흐름. Code·Data·Heap 공유, Stack·레지스터·PC만 독립.

깊이: 멀티스레드 장점 = 메모리 공유로 통신 쉬움·컨텍스트 스위칭 가벼움·생성 비용↓. 단점 = 한 스레드의 오류가 프로세스 전체를 죽임·동기화 필요. 리눅스는 내부적으로 스레드도 task_struct(경량 프로세스)로 관리 → fork(주소공간 복사) vs clone(자원 공유 플래그)으로 구분.

꼬리질문: "스레드도 PCB를?" → 리눅스는 스레드를 *경량 프로세스(task_struct)*로 보아 각자 관리 구조를 가짐. / "왜 멀티프로세스보다 멀티스레드?" → 공유·경량 / 단 안정성은 멀티프로세스(크롬 탭). / "스레드 안전한 통신은?" → 공유 메모리 + 동기화.

함정: ❌ "스레드는 Stack도 공유한다" → Stack·PC·레지스터는 독립. ❌ "프로세스 간 통신이 더 쉽다" → 스레드가 공유 메모리로 더 쉽다(대신 동기화).


2. 컨텍스트 스위칭 (★★ 단골)

실제 질문: "PCB가 무엇인가요?" · "컨텍스트 스위칭 시 어떤 일이 일어나며 왜 비용이 발생하나요?" · (심화)"TLB 관점에서 무슨 변화가 일어나나요?" (VSFe)

CPU가 실행 중인 프로세스를 바꾸는 것 = 현재 상태(레지스터·PC)를 PCB에 저장 → 다음 PCB 복원.

깊이 — 비용의 정체(★): ① 레지스터 저장/복원 ② 캐시·TLB 무효화(다른 프로세스는 주소 공간이 달라 캐시·TLB 히트가 사라짐 → 콜드 스타트) ③ 파이프라인 비움. 스레드 간 스위칭은 주소 공간이 같아 TLB flush가 없어 더 싸다.

꼬리질문: "TLB flush를 피하려면?" → ASID(주소공간 ID)로 프로세스별 TLB 엔트리 구분 → flush 회피. / "언제 일어나나?" → 타임슬라이스 만료·인터럽트·I/O 대기·더 높은 우선순위.

함정: ❌ "프로세스든 스레드든 스위칭 비용이 같다" → 스레드는 주소 공간 공유라 더 쌈(TLB).


3. 동기화 — 뮤텍스·세마포어·스핀락 (★★★ 단골)

실제 질문: "뮤텍스와 세마포어의 차이는?" · "이진 세마포어와 뮤텍스의 차이는?" · "Race Condition이 무엇이고 Thread-safe를 어떻게 보장하나요?" · (심화)"Spin Lock의 장단점과 개선책은?" (전 소스)

  • Race Condition: 둘 이상이 공유 자원을 동시에 접근·수정 → 결과가 실행 순서에 의존. **임계 구역(critical section)**을 상호배제로 보호.
  • 뮤텍스(Mutex): 1개 자원의 잠금. 소유권 있음(잠근 스레드만 해제).
  • 세마포어(Semaphore): 카운터(N개 자원·예: 커넥션 풀·생산자-소비자처럼 동일 자원 N개 동시 접근 제한). 소유권 없음(다른 스레드가 signal 가능). 이진 세마포어(0/1)는 뮤텍스와 비슷하나 소유권이 없다.
  • 스핀락(Spin Lock): 락 풀릴 때까지 바쁜 대기(CPU 점유) → 락 보유가 매우 짧을 때 컨텍스트 스위칭 비용보다 유리. 길면 낭비.

깊이 — 변별점은 소유권: "세마포어는 뮤텍스가 될 수 있지만 뮤텍스는 세마포어가 될 수 없다"(소유권 때문). 뮤텍스는 우선순위 상속 등 소유권 기반 기능 가능.

꼬리질문: "뮤텍스/세마포어는 락 시 시스템 콜이 필요한데 개선책은?" → futex(경합 없을 땐 유저공간 CAS, 경합 시만 커널 — 시스템 콜은 유저↔커널 모드 전환 비용이 커서 fast-path를 유저공간에). / "락 없이 thread-safe?" → CAS·원자 연산·불변 객체·ThreadLocal. / "스핀락 단점 해결?" → 적응형 락(잠깐 스핀 후 블록).

함정: ❌ "이진 세마포어 = 뮤텍스" → 소유권이 다르다. ❌ "스핀락이 항상 빠르다" → 락 보유가 길면 CPU 낭비.


4. 데드락 (★★ 단골)

실제 질문: "Deadlock과 발생 4조건을 설명하라." · (꼬리)"3가지만 충족하면 왜 데드락이 안 생기나요?" · (심화)"왜 현대 OS는 데드락을 적극적으로 처리하지 않나요?" (전 소스)

4조건(모두 필요조건): ① 상호배제점유와 대기비선점순환대기. 하나라도 깨면 데드락 없음.

  • 예방(prevention): 4조건 중 하나를 원천 차단(가장 단순·자원 효율↓). 회피(avoidance): 안전 상태 유지(은행원 알고리즘). 탐지·회복: 주기적 탐지 후 victim 롤백.

깊이 — 왜 OS는 무시하나(★ ostrich): 데드락은 드물고 예방/회피의 오버헤드가 크다 → 범용 OS(Linux/Windows)는 대개 무시하고 발생 시 재부팅에 맡긴다(타조 알고리즘). DB는 탐지 후 victim 롤백을 쓴다.

꼬리질문: "3조건만이면 왜 안 생기나?" → 4개가 모두 필요조건이라 하나만 빠져도 불가. / "DB의 데드락 처리?" → 주기적 탐지 → victim 트랜잭션 롤백(DB 편).

함정: ❌ "데드락 예방이 항상 최선" → 자원 효율·처리량 저하 → 실무는 탐지/무시.


5. CPU 스케줄링 (★ 단골)

실제 질문: "FCFS, SJF, SRT, 우선순위, Round Robin의 차이는?" · "RR의 Time Slice에 따른 trade-off는?" · "단/중/장기 스케줄러를 설명하라." (전 소스)

기법방식특징
FCFS도착 순단순·convoy effect(긴 작업이 막음)
SJF최단 작업 우선평균 대기 최소·기아·예측 어려움
SRTSJF의 선점형더 짧은 게 오면 뺏음
우선순위우선순위 순기아 → 에이징
RR타임슬라이스 순환응답성↑·슬라이스 길이가 관건

깊이 — RR 타임슬라이스(★): 너무 길면 FCFS처럼 됨(응답성↓), 너무 짧으면 컨텍스트 스위칭 폭증(오버헤드↑). MLFQ(다단계 피드백 큐)는 짧은 작업을 우선하면서 기아를 방지.

꼬리질문: "단/중/장기?" → 장기(메모리 적재 결정)·중기(스왑)·단기(CPU 할당·가장 빈번). / "유저 스레드 vs 커널 스레드 스케줄링?" → 커널 스레드만 OS가 직접 스케줄.

함정: ❌ "SRT는 비선점이다" → SRT(SRTF)는 선점형이다(SJF의 선점 버전).


6. 가상 메모리·페이징 (★★ 단골)

실제 질문: "가상 메모리란? 가능한 이유는?" · "Page Fault 발생 시 처리 순서를 설명하라." · "내부/외부 단편화 차이는?" · (계산)"32비트, 페이지 1KB일 때 페이지 테이블 엔트리 최대 개수는?" (전 소스)

가상 메모리: 물리 메모리보다 큰 주소 공간을 디스크를 보조로 제공·프로세스별 독립 공간. 변환 단위 페이지(↔물리 프레임), PTE(유효비트·프레임번호·보호비트).

페이지 폴트 처리 순서(★): ① MMU가 PTE 유효비트=0 확인 → 트랩 ② OS가 유효 접근인지 검사 ③ 빈 프레임 확보(없으면 교체) ④ 디스크에서 페이지 로드 ⑤ PTE 갱신 ⑥ 명령 재실행.

  • 내부 단편화(페이징·할당 단위보다 작게 써서 낭비) vs 외부 단편화(세그먼테이션·빈 공간이 흩어져 큰 블록 못 잡음).
  • 계산: 32비트 주소·페이지 1KB(2¹⁰) → 페이지 수 = 2³²/2¹⁰ = 2²²개 엔트리.
  • Thrashing: 페이지 폴트가 폭증해 실행보다 스왑에 시간을 다 씀Working Set·PFF로 완화·멀티프로그래밍 정도 조절.

꼬리질문: "TLB?" → 가상→물리 변환 캐시(매 접근 페이지 워크 회피). / "세그먼테이션 vs 페이징?" → 가변(외부 단편화·논리 단위) vs 고정(내부 단편화). / "Segmentation Fault는?" → 허용 안 된 메모리 접근(페이징 보호 위반).

함정: ❌ "세그먼테이션은 단편화가 없다" → 외부 단편화 존재. ❌ "MMU = TLB" → MMU는 변환 담당, TLB는 그 캐시.


7. 페이지 교체 (★ 단골·LRU 구현)

실제 질문: "페이지 교체 알고리즘을 설명하라." · "LRU는 어떤 특성을 이용하나요?" · "LRU를 어떻게 구현하나요?" (VSFe·min9288 후기)

  • FIFO(먼저 들어온 것·간단·Belady 이상) · LRU(가장 오래 안 쓴 것·시간 지역성) · LFU(가장 적게 쓴 것·빈도) · Optimal(미래에 가장 늦게 쓸 것·구현 불가·이론 하한).
  • LRU 구현(★ 코테 직결): 해시맵 + 이중 연결 리스트 → get/put O(1)(최근 쓴 것을 head로, 꼬리에서 evict).

꼬리질문: "Belady 이상이 뭔가?" → FIFO에서 프레임을 늘렸는데 페이지 폴트가 오히려 증가하는 역설(LRU·Optimal은 stack 알고리즘이라 면역). / "Optimal을 구현 못 하는 이유?" → 미래 참조 정보가 필요. / "LRU 단점·대안?" → 매 접근 갱신 비용 → Clock(2nd chance) 근사. / "LFU 단점?" → 과거 집중 참조 페이지가 안 빠지는 cache pollution.

함정: ❌ "프레임을 늘리면 페이지 폴트는 항상 준다" → Belady 이상(FIFO). ❌ "Optimal을 실제로 쓴다" → 불가(하한 기준).


흔한 오답·함정 정리

  • SRT는 비선점선점형(SJF 선점 버전).
  • 이진 세마포어 = 뮤텍스 → 소유권이 다르다.
  • 스레드는 Stack도 공유 → Stack·PC·레지스터는 독립.
  • 세그먼테이션은 단편화 없음 → 외부 단편화 있음.
  • 프레임↑ → 폴트↓ 항상 → Belady 이상(FIFO).
  • Blocking = 동기 → 직교 개념(제어권 vs 결과 처리 시점).

한국 면접 단골 Q&A (답변 골격)

질문핵심 답
프로세스 vs 스레드독립 메모리·PCB vs Code/Data/Heap 공유·Stack 독립
멀티스레드 이유공유·경량·생성↓ / 안정성은 멀티프로세스
컨텍스트 스위칭 비용레지스터+캐시/TLB 무효화·스레드는 TLB flush 없음
뮤텍스 vs 세마포어소유권 있음(1) vs 카운터(N·소유권 없음)
Race·thread-safe임계구역 보호·락/CAS/불변
데드락 4조건상호배제·점유대기·비선점·순환대기(모두 필요)
CPU 스케줄링FCFS/SJF/SRT(선점)/RR(슬라이스)/우선순위
페이지 폴트 처리유효검사→프레임→디스크 로드→PTE→재실행
단편화내부(페이징) vs 외부(세그먼테이션)
페이지 교체·LRUFIFO/LRU(지역성)/LFU/Optimal·LRU=해시맵+이중연결

꼬리질문 대비 (상 난이도)

  • "컨텍스트 스위칭 TLB?" → 프로세스 전환 시 flush·ASID로 회피·스레드는 불필요.
  • "락 시스템 콜 줄이기?" → futex(경합 없으면 유저공간 CAS).
  • "현대 OS가 데드락을 무시?" → 드물고 비싸서(ostrich)·DB는 탐지 후 롤백.
  • "Belady 이상?" → FIFO 프레임↑인데 폴트↑·LRU/Optimal엔 없음(스택 알고리즘).
  • "32bit/1KB PTE 수?" → 2²²개.

한 줄 요약 — 프로세스(독립·PCB)↔스레드(Code/Data/Heap 공유·Stack 독립). 컨텍스트 스위칭 비용=레지스터+캐시/TLB 무효화(스레드는 flush 없음). 동기화=뮤텍스(소유권)/세마포어(카운터)/스핀락·이진 세마포어≠뮤텍스(소유권). 데드락 4조건(모두 필요·OS는 ostrich). 스케줄링 FCFS/SJF/SRT(선점)/RR(슬라이스). 가상메모리=페이지 폴트(유효→로드→PTE→재실행)·내부/외부 단편화·thrashing. 교체 FIFO(Belady)/LRU(지역성·해시맵+이중연결)/Optimal(불가).

(출처 — 한국 면접 기출·교차검증 2026-06: VSFe/Tech-Interview — 운영체제·gyoogle — Process vs Thread·ksundong/backend-interview-question·min9288 OS 면접 함정 · OSTEP(가상메모리·스케줄링·동시성) 교차검증.)

자료구조·알고리즘 — 복잡도·해시·정렬·그래프네트워크 — TCP/UDP·핸드셰이크·HTTP·HTTPS