관련 이전글
- [CS:APP] 컴퓨터 시스템 9장 (~9.5 메모리 보호를 위한 도구로서의 VM) - 가상 메모리
https://velog.io/@takealittletime/CSAPP-컴퓨터-시스템-9장-가상-메모리
Weekly - KeyWord
- Virtual Memory
- Page Table
- Translation Lookaside Buffer (TLB)
- Page Fault
- Page Replacement Policy
- Lazy Loading
- Anonymous Page
- File-Backed Page
- Swap Disk
- Direct Memory Access (DMA)
세 줄 요약
- 더 자세한 내용은 아래 관련글 참고.
- [CS:APP] 컴퓨터 시스템 9장 (~9.5 메모리 보호를 위한 도구로서의 VM) - 가상 메모리
https://velog.io/@takealittletime/CSAPP-컴퓨터-시스템-9장-가상-메모리
CPU가 가상 주소 (Virtual Address) 를 생성한다.
가상 주소를 페이지 테이블(Page Table)을 통해 관리한다.
주소 참조가 필요할 때, 가상 주소를 물리 주소로 변환 해 참조한다.
왜? 이렇게 할까? 🤔
- 각 프로세스마다 물리 메모리 용량에 구애받지 않고 각자의 메모리를 무한히 쓰고있다는 느낌을 받도록 하기 위해서.
가상 메모리 시스템 (VM System)에서 가상 주소 (Virtual Address)와 물리 주소 (Physical Address)를 매핑하는데 사용되는 자료 구조.
페이지 테이블 엔트리 (PTE : Page Table Entry) 의 집합으로 구성.
PTE는 보통 아래와 같은 정보들을 포함 한다.
유효 비트 (Valid bit): 해당 페이지가 물리 메모리에 존재하는지 유무
(1은 존재, 0은 없음)
프레임 번호: 가상 페이지가 매핑된 물리 페이지의 프레임 번호.
보호 비트: 페이지의 접근 권한
(읽기,쓰기,실행 가능 여부)
사용 비트: 페이지가 최근에 참조 되었는지.
(LRU 등 교체 정책에 사용)
수정 비트: 페이지가 수정되었는지를 나타냄.
(수정된 File Bakced Page라면 Swap-out 이전에 디스크에 이를 기록 해야 함.)
캐시 비트: 해당 페이지가 캐싱 가능한지 여부
TLB의 장점
- 빠른 주소 변환
→ TLB는 하드웨어적으로 레지스터 또는 SRAM에 저장되며, 접근 속도가 매우 빠름.
- 페이지 테이블 접근 감소
→ 페이지 테이블 조회 시간을 절약 해 시스템 성능 향상.
- 효율적인 메모리 사용
→ 자주 참조되는 페이지 정보를 캐싱 해 주소 변환 효율을 극대화.
(물론, 지역성에 의거)
이번 주차 학습에 DMA keyword가 있는 이유? 💡
- 바로 이 때 (디스크에서 페이지를 메모리로 올릴 때), DMA 개념이 사용된다!
- CPU: 나는 안그래도 할 일들이 많으니까, 디스크에 데이터를 로드하는 정도의 일들은 너희들이 알아서 해!
- 갱신된 페이지 (Dirty Page)의 고려: 운영체제가 교체 대상을 선택할 때, 해당 페이지가 메모리에 할당된 후 변경되었는지를 판단.
( Modified Bit/Dirty Bit를 확인하고, 이를 디스크에 변경 내용 기록 )
- 쓰래싱 (Thrashing): 프로세스가 요구하는 메모리 용량 > 가용 물리 메모리 용량인 경우, 시스템은 '끊임없이' 페이징 (Swap-in, Swap-out 발생) 함.
- 메모리 페이징 하느라 다른 작업을 못하게 되어 문제!
0. Optimal
- 사실, 미래를 알고 있다면 단순하게 앞으로 가장 사용되지 않을 페이지를 교체하면 된다.
- 장점: 이론적으로 가장 적은 Page Fault를 보장.
- 단점: 미래의 접근 패턴을 알고 있어야 하기 때문에 실질적으로 구현이 어렵다.
1. FIFO (First-In, First-Out)
- 정책 설명: 가장 오래된 페이지를 교체.
- 장점: 구현이 간단.
- 단점: 오래된 페이지가 자주 사용되는 페이지라면 오히려 성능 저하.
2. LRU (Least Recently Used)
- 정책 설명: '과거의 기록을 보고' → 가장 오래 전에 사용된 페이지를 교체.
- 장점: 최대한 자주 사용되는 페이지를 유지하려하므로, 실제 환경에서 좋은 성능이 나온다.
- 단점: 구현이 복잡하고, 시간 및 공간의 오버헤드가 크다.
2-1. Clock (Second Chance)
- LRU는 실제 구현이 가능하지만, 연산량의 관점에서 LRU를 '근사'하는 식으로 더 쉽게 구현한다.
- 정책 설명: 시스템의 페이지에 사용 비트(use bit)를 부여하고, 이 페이지들이 환형 리스트를 이루고 있다고 가정
→ 페이지를 교체해야 할 때, 현재 clock pointer가 가리키고 있는 페이지 P의 use bit가 0인지 1인지를 검사.
→ 1이라면 0으로 설정하고, use bit가 0으로 설정되어 있는 페이지를 찾을 때까지 pointer를 +1 연산하며 이동한다.
* 페이지 P의 use bit가 1 이라는 것은 최근에 사용된 페이지라는 뜻이며, 이는 바람직한 교체 대상이 아니라는 것을 뜻하므로.
→ use bit가 0인 페이지를 희생자 페이지로 교체한다.
- 장점: FIFO보다 효율적이고, LRU보다 구현이 간단.
- 단점: 최악의 경우 페이지를 전부 돌며 use bit를 0으로 설정해야 할 수도.
왜? 이렇게 할까? 🤔
- 현재 작업의 지연 시간을 줄일 수 있게 되어 응답성을 개선
- 즉, 응답 시간이 짧아짐.
- 경우에 따라 작업을 해야 할 필요 자체를 제거할 수도.
- 파일이 지워질 때까지 쓰기를 지연하면 쓰기 자체가 필요가 없어진다.
파일 시스템에 연결되지 않고, 메모리만 사용하는 가송 메모리 페이지.
mmap()
으로 생성된 익명 메모리 영역 등.운영체제는 Anonymous Page의 초기 내용을 0으로 초기화 한다.
왜? 이렇게 할까? 🤔
- Anonymous Page가 이전에 다른 프로세스에 의해 사용된 경우, 이전 프로세스의 데이터가 그대로 남아있으면 새로운 프로세스가 이 데이터에 접근할 수 있는 보안 취약점이 발생할 수 있다.
디스크의 특정 파일에 매핑된 가상 메모리 페이지.
Swap-Out 발생 시, modified-bit
(또는 dirty-bit
)를 확인하고 디스크에 수정 내용을 반영해주는 작업 필요.
특징 | File-Backed Page | Anonymous Page |
---|---|---|
파일 연관성 | 파일 시스템의 특정 파일과 연결 | 파일과 연결되지 않음 |
초기화 | 파일의 내용으로 초기화 | 0 으로 초기화 |
스왑 공간 사용 | 파일로 직접 기록 가능 | 스왑 공간에만 저장 |
사용 사례 | 실행 파일, 라이브러리, 메모리 매핑 I/O | 힙, 스택, 공유 메모리 |
왜? 이렇게 할까? 🤔
- 물리 메모리는 디스크에 비해 용량이 훨씬 한정적 → 물리 메모리 크기를 초과하는 작업을 Swap Space를 통해 지원한다.
- 물리 메모리를 추가로 설치하지 않고도 메모리 확장 효과를 제공한다!
- 여러 프로세스가 동시에 실행될 수 있도록 지원한다.