🥕 가상메모리(Virtual Memory)란?
메모리 관리 기법의 하나로, 기계에 실제로 이용 가능한 기억 자원(물리메모리)을 이상적으로 추상화하여
사용자들에게 매우 큰 메모리(가상메모리)로 보이게 만드는 것을 말한다.
가상메모리의 사용 목적
- 메모리의 의존성을 없엔다
- 높은 추상성을 제공 → 보안성⬆️(접근 및 제어가 용이해짐)
- Process 오작동 시 OS가 관련 Memory를 신속히 회수 → 자원 낭비⬇️
32bit 응용 S/W에서의 Memory Space
통상 User Memory Space에 2GB가 할당되나 일부 영역(약 200mb)은 OS파일이 할당되어 있어 실 가용한 Memory Space는 약 1.8GB정도이다.
메모리 관리자(Memory Management)는 Kernel Space에 위치하며 RAM과 Swapd영역을 관리한다.
Process가 Mapping Table에 의해 Virtual Memory가 Physical Memory로 할당됨
- Process마다 각자 고유한 주소를 가리킴 → Virtual Memory Addr가 같다고 Physical Memory Addr이 같지 않다.
Virtual Addr은 RAM상의 Physical Addr에 Mapping되어 Page Table형태로 관리된다.
Page : Vitural Memory의 연속적인 영역
- size는 4096bytes, Page는 Page크기로 균등하게 나눌 수 있는 가상 주소에서 시작해야함 (64bit OS에서 마지막 12bit : page offset)
- 각각의 Process는 User Page의 독립적인 집합을 가지고 있음
- 어떤 Process가 실행되던 상관없이 같은 위치에 남아있음
- Kernel은 User & Kernel Page에 접근하지만 User Process는 오직 자신의 User Page만 접근가능
Frame : Physical Memory의 연속적인 영역
Page처럼 Frame도 Page size로 균등하게 크기를 나누어야 함
- Frame은 Kernel VM을 통해 전달될 수 있다 (Kernel의 첫 페이지 ↔ PM의 첫 Frame, 두번째 Page ↔ 두번째 Frame)
Page Table : VA를 PA로 변환하는데 사용하는 자료구조
PintOS에서는 threads/mmu.c에서 제공함
- Page Table은 Page Number를 Frame Number로 변환하여, 오른쪽 PA를 얻기위해 수정되지 않은 offset과 결합된다
code 영역의 경우 : read/execute만 가능하나 system call로 write 권한비트를 수정 가능하다(이러한 접근을 조심해야 함)
- Data Execution Prevention : OS 수준에서 메모리 접근을 막아 잘못된 접근 시 Page fault발생
Swap Slots : Swap Partition에서 disk공간의 page size 영역
Slot 배치를 결정하는 H/W의 제한이 frame보다 유연해도, Swap Slots는 Page를 정렬해야 함
Process 영역 별 Memory 접근 권한
Virtual Memory 파트는 이론도 알아할 내용들이 많고 정리가 쉽지 않은 것 같다.
차근차근 점진적으로 공부해보자🔥