PE Notes · CA/OS
가상 메모리
프로세스가 가상 주소를 쓰고 MMU가 물리로 옮기는 구조를 페이징·세그멘테이션, 내부·외부 단편화, TLB와 요구 페이징으로 정리합니다.
물리 DRAM보다 넓은 주소를 프로세스마다 나눠 주는 기법이 입니다. 프로그램은 가상 주소만 봅니다. 가 페이지 테이블을 읽어 프레임으로 옮깁니다. 남 프로세스의 칸은 보이지 않습니다. 디스크 일부가 메모리처럼 돕니다.
고정 조각, 논리 조각
은 같은 크기 페이지와 프레임으로 자릅니다. 주소는 페이지 번호와 오프셋입니다. 은 코드·데이터·스택처럼 논리 덩어리를 가변 길이로 둡니다. 주소는 세그먼트 번호와 오프셋입니다. 요즘 커널은 페이징이 본선이고, 세그먼트는 보호 힌트 정도로 남습니다.
| 비교축 | 페이징 | 세그멘테이션 |
|---|---|---|
| 자르는 단위 | 고정 페이지 | 가변 논리 구간 |
| 주소 | 페이지 + 오프셋 | 세그먼트 + 오프셋 |
| 단편화 | 내부 | 외부 |
| 표 | 페이지 테이블 | 세그먼트 테이블 |
내부 단편화는 마지막 페이지에 빈 칸이 남는 낭비입니다. 외부 단편화는 총량은 충분한데 연속 구간이 없어 할당이 거절되는 상태입니다. 가변 분할과 세그먼트에서 잦습니다.
없을 때, 바꿀 때
유효 비트가 0이면 입니다. 커널이 디스크에서 페이지를 올리고 테이블을 고칩니다. 잘못된 주소를 밟으면 세그폴트 노트의 예외가 됩니다. 자리가 없으면 누구를 내보낼지 고릅니다. 가 실무 기준이고, Clock은 참조 비트로 LRU를 흉내 냅니다. FIFO는 먼저 들어온 쪽, LFU는 횟수, OPT는 이론 상한입니다.
작업 집합보다 프레임이 모자라면 폴트가 폭주합니다. 그 상태가 스레싱입니다. 스레싱 노트가 그 칸입니다.
TLB와 늦게 올리기
페이지 테이블은 메모리에 있어, 매 접근마다 한 번 더 읽을 수 있습니다. 는 최근 변환을 캐시합니다. 히트면 한 사이클 감각이고, 미스면 테이블을 걷습니다. 문맥 교환 때 TLB를 비우면 비용이 납니다. ASID가 있으면 프로세스 태그를 남겨 비우기를 줄입니다.
요구 페이징은 시작할 때 전부가 아니라, 실제로 밟힌 페이지만 올립니다. 초기 적재는 줄고 폴트는 늘어납니다. 프로세스 안 배치(코드·힙·스택)는 메모리 4대 영역 노트입니다. 답안은 페이징·세그먼트 표, 두 단편화, 교체, TLB·요구 페이징을 한 장에 닫습니다.