포스트

CS — context switching followup

Context Switching 모의면접 직후 나온 후속 질문 5개 — 인터럽트·PCB·레지스터·캐시 히트율·메모리 계층을 결론→근거→예시 순으로 정리한 노트

CS — context switching followup

Context Switching 모의면접 꼬리질문 정리

21번 Context Switching 모의면접 직후 나온 후속 질문 5개를 1:1로 정리한 노트. 본문은 21번 원본의 해당 섹션을 가리키고, 여기서는 답변만 짧게 결론 → 근거 → 코드/예 순으로 압축한다.


목차

  1. interrupt가 뭘까
  2. PCB의 역할
  3. 레지스터는 메모리일까요?
  4. 컨텍스트 스위칭 과정중 캐시 히트율 때문에 프로세스보다 스레드가 빠르다
  5. RAM과 레지스터 사이의 저장공간

1. interrupt가 뭘까

한 줄 결론 — Interrupt(인터럽트)는 CPU의 현재 실행 흐름을 강제로 중단시키고, IDT(Interrupt Descriptor Table)에 등록된 핸들러로 점프시키는 하드웨어 메커니즘이다. 컨텍스트 스위칭의 주요 발화점(타이머 인터럽트)이자, 모드 스위치의 본체 트리거이기도 하다.

1-1. 흐름

1
2
3
4
5
6
7
8
9
10
11
[CPU가 명령 N 실행 중]
       ↓
[인터럽트 신호 도착 — 타이머·키보드·NIC 등]
       ↓
[CPU가 현재 PC·플래그를 자동 저장 → 커널 스택으로]
       ↓
[IDT[인터럽트 번호] → 핸들러 주소 점프]
       ↓
[핸들러 실행 (커널 모드)]
       ↓
[iret 명령 → 원래 PC 복원 → 사용자 모드 복귀]

1-2. 세 종류

종류발생 원천
하드웨어 인터럽트 (IRQ)외부 장치 신호타이머(스케줄러 발화점), 키보드 입력, NIC 패킷 수신, 디스크 I/O 완료
소프트웨어 인터럽트 / Trap명시적 명령어 (int 0x80·syscall·sysenter)시스템 콜 호출 — 사용자 코드가 의도적으로 커널 진입
예외 (Exception)CPU 내부 오류Page Fault, Divide-by-Zero, Invalid Opcode, General Protection Fault

1-3. 컨텍스트 스위칭과의 관계

  • 타이머 인터럽트 가 만료되면 → 커널 진입 → 스케줄러 실행 → 다른 스레드로 갈아끼우면 컨텍스트 스위치 발생.
  • 모든 모드 스위치가 컨텍스트 스위치를 일으키는 건 아님 — 시스템 콜이 즉시 끝나면 같은 스레드가 사용자 모드로 복귀할 뿐 스위칭은 없음.
  • 인터럽트 ≠ 컨텍스트 스위치 — 인터럽트는 트리거, 컨텍스트 스위치는 결과 중 하나.

21번 본문 §”컨텍스트 스위칭이 일어나는 경우” 첫 항목(타이머 인터럽트 만료) 참조.


2. PCB의 역할

한 줄 결론 — PCB(Process Control Block, 프로세스 제어 블록)는 OS가 한 프로세스의 모든 상태를 보관하는 커널 자료구조다. 식별·격리·자원·스케줄링·컨텍스트 저장 다섯 역할이 한 구조체 안에 모인다.

2-1. 다섯 역할

역할보관 내용
① 식별 (Identification)PID, 부모 PID, 사용자 ID, 프로세스 그룹
② 주소 공간 격리 (Isolation)페이지 테이블 베이스 주소(x86 CR3 값). 프로세스 전환 시 이 값이 CR3 레지스터로 적재되면서 가상 주소 공간이 통째로 바뀜
③ 자원 관리 (Resource)열린 파일 디스크립터 테이블, 핸들 테이블, 시그널 핸들러, 메모리 맵 영역(VMA), 작업 디렉토리
④ 스케줄링 상태 (Scheduling)Ready / Running / Wait 상태, 우선순위, 누적 CPU 시간, time slice 잔량
⑤ 컨텍스트 저장 매체 (Context Storage)프로세스 단위 컨텍스트(레지스터 스냅샷은 보통 TCB에 들어가지만, 단일 스레드 프로세스나 옛 시스템에선 PCB에 직접 보관)

2-2. OS별 실체

OSPCB 구조체위치
Linuxtask_struct<linux/sched.h> — 5,000+ 줄 거대 구조체. 스레드도 같은 구조 (NPTL: 1:1 스레드 모델)
WindowsEPROCESS커널 객체. 그 안에 KPROCESS(스케줄러용)와 별도로 ETHREAD/KTHREAD(스레드별)가 연결
xv6 (교육용)struct procproc.h — 한 페이지 안에 들어가는 단순 버전, 컨텍스트·페이지 디렉토리·파일 테이블만 보관

2-3. 컨텍스트 스위치 시 PCB의 흐름

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[현재 실행 중인 스레드 T_old]
       ↓
[1] T_old의 레지스터 → T_old의 TCB로 저장
       ↓
[2] PCB 비교: T_old의 PCB == T_new의 PCB?
       ├─ YES (같은 프로세스 내 스레드 전환)
       │   └─ CR3 그대로, TLB 보존, 캐시 보존 → 빠름
       └─ NO  (프로세스 전환)
           └─ T_new의 PCB.CR3 값을 CR3 레지스터에 적재
              → TLB flush (PCID 없으면)
              → 캐시 콜드 → 느림
       ↓
[3] T_new의 TCB에서 레지스터 복원
       ↓
[T_new 실행 시작]

2-4. 면접에서 강조 포인트

  • “PCB는 프로세스 단위, TCB는 스레드 단위” — 둘이 분리돼 있어야 같은 프로세스의 스레드끼리 PCB를 공유해 전환 비용을 줄일 수 있음.
  • CR3가 PCB에 들어 있다는 점이 주소 공간 격리의 물리적 구현 — 프로세스마다 다른 페이지 테이블을 가리키게 만드는 한 줄.

21번 본문 §”핵심 개념” → PCB 행 참조. 22번 IPC 본문도 PCB·페이지 테이블·핸들 테이블이 IPC 비용의 출발점이라고 짚음.


3. 레지스터는 메모리일까요?

한 줄 결론일반적으로 “메모리”라 부르지 않는다. 둘 다 데이터 저장 공간이지만 위치·속도·접근 방식이 다르고, 운영체제·컴퓨터 구조 교과서에서도 레지스터는 메모리 계층(memory hierarchy)의 최상위 단으로 분류하되 “메모리”라는 용어와는 구분한다.

3-1. 차이를 한 표로

항목레지스터메인 메모리 (RAM)
위치CPU 코어 내부CPU 외부, 메인보드의 메모리 슬롯
접근 속도~0.3 ns~100 ns (300배)
용량64bit × 수십 개 (수백 바이트)수 GB
접근 방식이름으로 (rax, rbx, xmm0…)주소로 (MOV [0x1000], rax)
명령어 인코딩opcode 안에 레지스터 번호가 직접 들어감opcode + 주소 계산
공유컨텍스트 스위치 시 저장·복원 필요 (스레드마다 논리적으로 별개)같은 프로세스 내 스레드끼리 공유
재료SRAM (트랜지스터 6개/bit)DRAM (트랜지스터+커패시터 1쌍/bit)

3-2. 왜 “메모리”라 안 부르나

  • 언어 관습 — “메모리에 쓴다”는 보통 RAM에 store 명령(MOV [addr], r)을 보낸다는 뜻. 레지스터는 “레지스터에 둔다”고 따로 표현.
  • 주소 공간 분리 — 메모리는 가상 주소 공간 안에서 주소를 가지지만, 레지스터는 주소 공간 밖. &register 같은 게 불가능(C/C++에서 register 키워드 변수에 & 못 씀이 이 때문).
  • MMU 적용 안 됨 — 페이지 테이블·TLB는 메모리 접근에만 적용. 레지스터는 MMU 통과 안 함.
  • 캐시 계층 외부 — L1/L2/L3 캐시는 “메모리 계층의 일부”로 자주 묶이지만, 레지스터는 그 위에 별도로 놓임.

3-3. 그런데 왜 헷갈리나

  • 메모리 계층(memory hierarchy) 다이어그램에선 레지스터를 맨 위에 그림. → “포함된다”고 오해 가능.
  • 일부 ISA(Itanium 등)에선 레지스터 윈도우·메모리 매핑 레지스터 같은 모호한 케이스 존재.
  • 임베디드·하드웨어에선 “메모리 매핑 I/O(MMIO) 레지스터”라는 표현 씀 → 이건 메모리 주소처럼 접근하는 디바이스 제어용 레지스터, CPU 범용 레지스터와 별개.

3-4. 면접 답변 한 줄

“레지스터는 메모리 계층의 최상위 단으로 분류되긴 하지만, 일반적으로 ‘메모리’라고 부르진 않습니다. CPU 코어 내부에 있고, 이름으로 접근하며, MMU·페이지 테이블이 적용되지 않는다는 점에서 RAM과 분명히 구분됩니다.”

21번 본문 §”핵심 개념” → “레지스터 vs 메모리” 행 참조.


4. 컨텍스트 스위칭 과정중 캐시 히트율 때문에 프로세스보다 스레드가 빠르다

한 줄 결론 — 스레드 전환은 같은 프로세스의 코드·힙·전역 데이터가 L1/L2/L3 캐시에 그대로 남아 있어 캐시 히트율을 유지하고, 프로세스 전환은 가상 주소 공간이 바뀌면서 TLB flush + 캐시 콜드(cache cold) 가 발생해 미스가 누적된다. 이게 “스레드 전환이 프로세스 전환보다 5~10배 빠르다”는 말의 핵심 근거.

4-1. 비용 비교 표

비용 항목스레드 전환 (같은 프로세스 내)프로세스 전환
레지스터 저장·복원발생 (~수백 ns)발생 (동일)
커널 진입 (모드 스위치)발생발생
페이지 테이블 베이스 (CR3) 교체없음발생
TLB flush없음 (PCID 없어도 안 일어남)발생 (PCID 없으면 전체 flush)
L1/L2 캐시 콜드없음 — 같은 코드·전역·힙이 그대로 살아있음발생 — 새 프로세스 데이터 채워야 함
L3 캐시 콜드없음부분 발생 (코어 공유라 일부 보존)
분기 예측기 / 파이프라인약간 무효화더 크게 무효화
전체 비용 (대략)1~3 μs5~15 μs (스레드의 5~10배)

4-2. 왜 같은 프로세스 스레드는 캐시가 살아있나

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
프로세스 P 안에 스레드 T1, T2가 있다고 하자.
T1이 코드 X 실행 → X의 명령어가 L1i, 데이터가 L1d/L2/L3에 캐시됨.

T1 → T2 컨텍스트 스위치:
  - 둘 다 같은 P의 가상 주소 공간 공유
  - 같은 페이지 테이블, 같은 가상→물리 매핑
  - X의 코드/데이터는 같은 물리 주소에 그대로 있고,
    캐시는 물리 주소로 인덱싱(보통 VIPT/PIPT)되므로 유효
  - T2가 같은 코드 영역이나 전역 변수를 만지면 즉시 캐시 히트

T1 → T3 (다른 프로세스 Q의 스레드) 컨텍스트 스위치:
  - 가상 주소 공간 자체가 바뀜 (CR3 교체)
  - L1/L2의 데이터는 물리적으론 남아있지만, T3가 만질 주소들은
    Q의 코드·힙·전역 → 캐시에 거의 없음
  - 줄줄이 miss → DRAM 접근(~100ns) 반복 → 느려짐

4-3. TLB flush가 추가로 얹는 비용

  • TLB(Translation Lookaside Buffer)는 가상→물리 주소 매핑을 캐싱하는 MMU 내부 캐시 (보통 64~1024 엔트리).
  • 프로세스 전환 시 가상 주소 공간이 바뀌므로 TLB 엔트리가 무의미 → flush 필요.
  • flush 이후 처음 메모리 접근들은 페이지 테이블 워크(page table walk) 를 다시 수행 → 4단계 페이징 시 메모리 4번 추가 접근.
  • 현대 CPU의 PCID(Process Context ID, x86) / ASID(ARM) 는 TLB 엔트리를 프로세스별로 태깅해 전체 flush를 회피. 그래도 캐시 콜드는 막을 수 없음.

4-4. 면접에서 강조 포인트

  • “5~10배 차이는 레지스터 저장량 차이가 아니라 TLB flush + 캐시 콜드의 간접 비용 차이입니다.” — 직접 비용은 거의 같음.
  • “그래서 같은 프로세스 안에서 스레드를 쓰는 게 OS 차원에서 권장되는 동시성 모델입니다 (CPU 캐시 활용도 측면).”
  • “단, 공유 메모리 경쟁으로 false sharing 같은 캐시 라인 오염이 일어나면 이 이점이 무효화될 수 있어요.” (멀티스레드 캐시 이슈로 꼬리 가능)

21번 본문 §”비용 요소” → “캐시 콜드”·”TLB flush” 행, §”비교” → “캐시 히트율로 본 스레드 우위” 행 참조.


5. RAM과 레지스터 사이의 저장공간

한 줄 결론L1 / L2 / L3 캐시 (SRAM 기반) 가 그 자리에 있다. 메모리 계층은 위로 갈수록 빠르고 작고 비싸며, 컨텍스트 스위칭 비용 분석에서 캐시 콜드가 결정적이라는 이야기가 바로 이 계층 때문이다.

5-1. 메모리 계층 한 표

단계위치용량접근 시간재료특징
레지스터 (Register)CPU 코어 내부64bit × 수십 개~0.3 nsSRAM이름으로 접근, MMU 미적용
L1 캐시코어 전용32~64 KB (i-cache + d-cache 분리)~1 ns (4 cycle)SRAM명령(L1i) / 데이터(L1d) 분리. 가장 빠른 캐시
L2 캐시코어 전용256 KB ~ 1 MB~3 ns (12 cycle)SRAML1 miss 시 다음 단계
L3 캐시 (LLC)여러 코어 공유4 MB ~ 수십 MB~10 ns (40 cycle)SRAM코어 간 공유 → 캐시 일관성(MESI) 프로토콜 동작 지점
RAM (메인 메모리)CPU 밖, 메모리 슬롯8 ~ 128 GB~100 nsDRAM가상 주소 → MMU/TLB → 페이지 테이블 → 물리 주소
SSD/HDDI/O 버스수백 GB ~ 수 TB~100 μs (SSD) / ~10 ms (HDD)NAND / 자기페이지 폴트 시 스왑/메모리 맵 파일

5-2. SRAM vs DRAM — 왜 캐시는 빠르고 RAM은 느린가

항목SRAM (캐시·레지스터)DRAM (메인 메모리)
1 bit 구성트랜지스터 6개트랜지스터 1개 + 커패시터 1개
속도빠름 (~ns)느림 (~10 ns + 행 활성화)
밀도낮음 (셀 크기 큼)높음 (작은 셀 → 대용량)
단가매우 비쌈
리프레시불필요주기적 리프레시 필요 (커패시터 누설)
휘발성휘발성휘발성

→ “그래서 캐시는 비싸서 작고, RAM은 싸서 큰” 트레이드오프.

5-3. 캐시 라인과 캐시 미스

  • 캐시는 바이트 단위가 아니라 캐시 라인(cache line, 보통 64 byte) 단위로 RAM과 주고받음.
  • 캐시 미스 시 64 byte 한 묶음을 통째로 끌어옴 → 인접 데이터는 자동으로 따라옴(공간 지역성).
  • 컨텍스트 스위치 직후 “캐시 콜드”는 결국 새 스레드의 워킹셋(working set)이 캐시에 채워질 때까지의 미스 누적.

5-4. TLB는 이 계층 어디인가

  • TLB(Translation Lookaside Buffer)도 캐시의 일종이지만 데이터 캐시(L1/L2/L3)와 별개.
  • 위치: MMU 안 (CPU 코어 내부의 한 모듈).
  • 캐싱 대상: 가상 → 물리 주소 매핑 (페이지 테이블 엔트리).
  • 보통 L1 TLB(~64 엔트리) + L2 TLB(~1024 엔트리) 2단 구성.
  • 프로세스 전환 시 PCID/ASID 없으면 flush → 이후 페이지 테이블 워크 누적 (RAM 접근 4번까지).

5-5. 컨텍스트 스위칭 비용의 출처를 이 계층으로 분해

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
컨텍스트 스위치 직후 새 스레드 한 줄 실행:

[CPU가 명령 fetch]
  ↓ PC 가상 주소 → MMU → TLB lookup
       ├ TLB hit → 물리 주소 즉시 (~1 ns)
       └ TLB miss → 페이지 테이블 워크 (~수십 ns + DRAM 4번)
  ↓ 물리 주소 → 캐시 lookup
       ├ L1i hit (~1 ns)
       ├ L2 hit (~3 ns)
       ├ L3 hit (~10 ns)
       └ 미스 모두 → DRAM (~100 ns)
  ↓ 명령 디코드 → 실행

같은 프로세스 스레드 전환:
  - TLB 보존, 캐시 보존 → 대부분 hit → 빠름

다른 프로세스 전환:
  - TLB flush, 캐시 콜드 → 첫 수백~수천 명령 동안 miss 폭주 → 느림

5-6. 면접 답변 한 줄

“RAM과 레지스터 사이에는 L1 / L2 / L3 캐시가 있고, 모두 SRAM 기반이라 DRAM인 RAM보다 빠릅니다. L1·L2는 코어 전용, L3는 코어 공유라 캐시 일관성 프로토콜이 동작합니다. 컨텍스트 스위칭 비용 이야기에서 ‘캐시 콜드’가 결정적이라는 게 바로 이 계층이 비어 있을 때의 미스 누적을 가리킵니다.”

21번 본문 §”핵심 개념” → “메모리 계층”·”L1/L2/L3 캐시”·”SRAM vs DRAM” 행 참조.


회귀 매트릭스 — 이 5개 질문이 어떻게 연결되나

1
2
3
4
5
6
7
8
9
10
interrupt (1)
   ↓ 타이머 인터럽트가 스케줄러 호출 → 컨텍스트 스위치 발화점
PCB (2)
   ↓ 교체 여부가 스레드 vs 프로세스 전환을 결정
캐시 히트율 (4)
   ↑ PCB 교체 시 CR3 변경 → TLB flush + 캐시 콜드
레지스터 ≠ 메모리 (3)
   ↑ 컨텍스트 = 레지스터 스냅샷. 메모리(RAM)와 구분되는 별도 저장소
RAM ↔ 레지스터 사이 (5)
   ↑ L1/L2/L3 캐시. 캐시 콜드의 무대

한 줄 요약: 인터럽트 → PCB 교체 → CR3 변경 → TLB flush → 캐시 콜드 → 미스 누적 → 프로세스 전환이 스레드 전환보다 느림. 다섯 질문이 이 한 줄을 다섯 각도로 파고든 것.

핵심 요약 — 모의면접 꼬리질문 다섯 개가 결국 한 줄로 이어진다는 것. 인터럽트가 스케줄러를 깨우고, PCB 교체 여부가 프로세스/스레드 전환을 가르고, CR3 변경이 TLB flush와 캐시 콜드를 부르고, 그 미스 누적이 프로세스 전환을 느리게 만든다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.