오늘의 질문 - 가상 기억장치와 메모리 관리 개념
📚 ChatGPT 오늘의 질문 & 정리 모음
❓ 단편화에 대해서 설명해줘
✅ 요약
- 내부 단편화: 고정 크기 블록을 할당했을 때 일부가 사용되지 않고 낭비됨
- 외부 단편화: 연속되지 않은 빈 공간들이 흩어져 있어 필요한 메모리를 할당하지 못하는 현상
- 해결책: 압축(compaction), 페이징, 가변 크기 할당
❓ A: 0~10KB, B: 10~18KB로 연속 배치하면 빈 공간이 뒤로 몰리지 않나?
✅ 요약
- 이론적으로는 맞음: 연속된 공간에 넣으면 단편화가 줄어듦
- 하지만 현실에서는 실행 중인 프로세스는 이동 불가하고,
주소 참조 문제가 있어 OS가 임의로 위치를 조정하지 못함 - 그래서 압축(compaction) 같은 비용이 큰 작업이 필요함
❓ X가 먼저 16KB 쓰고 종료해서 빈공간이 생겼고, A가 그 자리에 10KB 들어가서 6KB 남은 거라고 이해해도 돼?
✅ 요약
- ✅ 정확한 이해!
- 이 흐름은 외부 단편화가 발생하는 실제 원인을 설명하는 이상적인 시나리오
- A는 D가 쓰던 자리에 들어가며 6KB가 남게 되고, 그 공간은 조각난 채로 남아 있게 됨
- 이후 필요한 연속 공간이 부족하면 페이지 교체 or 압축 필요
❓ 가상 기억장치는 뭐야?
✅ 요약
- 실제 RAM보다 큰 메모리처럼 보이게 하는 OS 기능
- 필요한 페이지만 RAM에 올리고 나머지는 디스크(swap)에 둠
- 장점: 확장성, 보호, 효율성
❓ 어떤 페이지가 필요한지 OS는 어떻게 알아?
✅ 요약
- CPU가 접근 시도 → RAM에 없으면 페이지 폴트 발생
- 그 순간 디스크에서 해당 페이지를 로딩 → 요구 페이징(Demand Paging)
❓ 페이지 단위는 누가 정해?
✅ 요약
- CPU + OS가 결정 (보통 4KB 고정)
- 프로그램은 이 단위로 나뉘어 올라감
- 빈공간이 있어도 페이지 단위에 못 미치면 사용 불가
❓ 가상 기억장치 크기는 고정이야? 유동이야?
✅ 요약
- 가상 주소 공간: CPU 구조에 따라 고정됨 (예: 32bit → 4GB)
- 스왑 공간(디스크): OS 정책에 따라 유동적으로 설정 가능
❓ 프로그램이 종료되면 메모리는 다 회수돼?
✅ 요약
- 종료 시 OS가 가상 주소 공간, 물리 메모리(RAM, swap) 모두 회수함
- 종료하지 않으면 메모리는 계속 점유된 상태로 유지됨
❓ 세그먼테이션 기법이 뭐야?
✅ 요약
- 프로그램을 의미 단위(코드, 데이터, 스택 등)로 나눔
- 각 세그먼트는 가변 크기
- 단점: 외부 단편화 발생 가능
❓ 세그먼트 안에서 다시 페이지로 나눠?
✅ 요약
- 맞음. 세그먼트를 다시 페이지로 나누는 구조도 있음
- 이걸 세그먼트 기반 페이징이라 하며, 실무에서 많이 쓰임
❓ 워킹셋은 자주 사용하는 페이지 집합이라던데, ‘자주’의 기준은?
✅ 요약
- 일정 시간(Δ) 동안 접근된 페이지들
- 이 시간 창(Δ)은 OS가 정책적으로 정함
- 워킹셋만 메모리에 유지하면 스래싱 방지 가능
❓ 벨레이디의 모순이 뭐야?
✅ 요약
- FIFO처럼 단순한 페이지 교체 알고리즘에서
프레임 수가 늘었는데도 페이지 폴트가 증가하는 현상 - LRU, Optimal 등 스택 알고리즘에서는 발생하지 않음
❓ Not Used Recently란?
✅ 요약
- 최근에 접근되지 않은 페이지 (R 비트 = 0)
- NRU 알고리즘 등에서 교체 후보로 사용됨
❓ 수정되었다는 건 무슨 뜻이야?
✅ 요약
- 해당 페이지에 CPU가
write
연산을 수행했는가? - 수정됨(M 비트 = 1)이면 디스크에 저장 후 교체 필요 → 비용 큼
- 수정되지 않았으면 그냥 제거 가능