가상 메모리의 연속적인 영역, page는 page 크기로 나누어 떨어지는 가상 주소에서 시작해야하며 이를 페이지 정렬이라고 한다.
64비트 환경에서 가장 주소 마지막 12비트는 page offset을 의미하고, 상위 페이지는 페이지 테이블의 인덱스를 나타내는데 사용한다.
63 48 47 39 38 30 29 21 20 12 11 0
+-------------+----------------+----------------+----------------+-------------+------------+
| Sign Extend | Page-Map | Page-Directory | Page-directory | Page-Table | Page |
| | Level-4 Offset | Pointer | Offset | Offset | Offset |
+-------------+----------------+----------------+----------------+-------------+------------+
| | | | | |
+------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+
Virtual Address
각 영역에 대한 설명
1. Sign Extend (비트 63~48)
2. Page-Map Level-4 Offset (비트 47~39)
3. Page-Directory Pointer Offset (비트 38~30)
4. Page-Directory Offset (비트 29~21)
5. Page-Table Offset (비트 20~12)
6. Page Offset (비트 11~0)
물리적인 프레임(페이지). 연속적인 물리 메모리 영역. 프레임의 크기도 페이지와 마찬가지로 페이지 크기만큼 정렬되어야한다.
물리 메모리의 하위 12비트는 Offset을 나타내고, 상위 비트는 프레임 번호를 나타낸다.
예를 들어, 0x12345ABCDEF
라는 물리 주소가 있을 때, 하위 12비트 (DEF
)는 오프셋이고, 상위 비트 (12345ABC
)는 프레임 번호.
12 11 0
+-----------------------+-----------+
| Frame Number | Offset |
+-----------------------+-----------+
Physical Address
x86-64 아키텍처에서는 물리 주소에서 직접 메모리에 접근하는 기능을 제공하지 않는다. PintOS에서는 커널의 가상 메모리를 물리 메모리에 직접 매핑한다. 커널 가상 메모리의 첫번째 페이지는 물리 메모리의 첫번째 프레임에 매핑되고 두번째 페이지는 두번째 프레임에 매핑.
PintOS에서는…
프레임은 물리 메모리의 연속된 블록이며, 가상 메모리 시스템에서 중요한 역할을 합니다. x86-64 아키텍처에서는 물리 주소에 직접 접근할 수 없으므로, Pintos는 커널 가상 메모리를 물리 메모리에 매핑하여 이 문제를 해결합니다. 이를 통해 물리 주소와 커널 가상 주소 간의 변환이 가능해지며, 커널이 물리 메모리의 특정 위치에 접근할 수 있게 됩니다.
Offset은 페이지와 프레임의 특정 위치를 지정하는데 사용됩니다. 다음과 같은 역할을 합니다:
페이지/프레임 내의 위치 지정:
주소 변환 과정:
0x12345ABCDEF
에서 0xDEF
는 페이지 오프셋으로, 나머지 상위 비트 0x12345ABC
는 페이지 번호로 사용됩니다. 페이지 테이블을 통해 0x12345ABC
에 해당하는 프레임 번호가 결정되면, 오프셋 0xDEF
는 그대로 물리 주소의 하위 12비트로 사용됩니다. 물리 주소가 0x987654
라면 최종 물리 주소는 0x987654DEF
이다.효율적인 메모리 접근:
+----------+
.--------------->|Page Table|-----------.
/ +----------+ |
| 12 11 0 V 12 11 0
+---------+----+ +---------+----+
| Page Nr | Ofs| |Frame Nr | Ofs|
+---------+----+ +---------+----+
Virt Addr | Phys Addr ^
\_______________________________________/
가상 주소 (Virtual Address):
페이지 테이블 (Page Table):
페이지 테이블은 페이지 번호(가상)를 프레임 번호(물리)로 변환합니다. 이는 페이지 테이블이 가상 주소의 페이지 번호를 받아들이고, 해당 페이지가 물리 메모리 내에서 어떤 프레임에 위치하는지 정보를 제공합니다.
물리 주소 (Physical Address):
프로그램이 메모리에 접근할때 요청한 데이터가 물리 메모리에 존재하지 않아서 발생하는 경우.
이때 운영체제가 해당 데이터를 디스크에서 메모리로 가져와야한다.
→ 현재 PintOS에서는 exit()시스템 콜을 통해 프로세스를 종료시키고 있다. Page Fault Handle을 통해 Page Falut를 해결하고 정상적으로 메모리 참조가 가능하도록 수정해야한다.
프로세스가 실행되기 위해서는 메모리에 반드시 올라가야한다. 메모리가 가득차 옮길 수 없는 현재 메모리에서 다른 저장공간에 잠시 옮겼다가 다시 돌아오는 방식을 Swaping이라고 한다.
주기억 장치에 적재한 하나의 프로세스를 잠시 보조기억장치(Swap Disk)에 적재했다가 피요할 때 다시 꺼내서 메모리를 교체하는 기법.
가상 메모리는 실제 물리적인 RAM이 더 큰 용량을 가진 것 처럼 동작하는 개념. 프로그램이 필요로 하는 메모리 공간이 실제로는 RAM에 존재하지 않더라도, 가상 메모리를 통해 디스크에 있는 데이터를 필요에 따라 불러올 수 있음. Sapping은 이러한 가상 메모리의 구현 방법 중 하나로, 실제로 사용되지 않는 데이터를 옮기고 필요할 때 다시 불러오는 역할을 함.
메모리를 효율적으로 활용하면서 물리적인 RAM의 한계를 극복하는데 중요한 역할을 한다. Swapping 일어나면 I/O 작업이 늘어나고 성능 저하가 발생할 수 있기 때문에 이를 최소화하기 위한 최적화 작업을 수행함.
Context Switching
Swapping