Project3를 시작하기에 앞서 기본 개념에 대해 생각하고, 정리 후 진행하려고 한다.
가상 메모리에 전반적인 개념과 페이지 테이블에 대해 한 번 알아보도록 하자.
페이지 테이블
- 페이징?
주소 영역을 연속적으로 할당하지 않고, 페이지라는 단위로 쪼개어 사용하는 것으로 가상 주소와 물리 주소를 같은 크기의 페이지로 쪼갠 후 페이지 테이블에서 이 둘을 맵핑하는 형식으로 사용된다.
- 페이지 테이블이란?
페이지에 대한 정보를 관리하는 공간으로 가상 주소와 물리 주소가 맵핑되어 있다. Page Table은 OS로부터 관리되고, MMU가 접근해서 해당 테이블을 맵핑하고 읽어준다. 이때, 각 Page Table 원소 하나를 Page Table Entry(PTE)라고 한다.
- Valid Bit : 해당 페이지의 유효성을 나타내 주는 공간으로 페이지가 위치해 있는 공간을 나타낸다.
- Reference Bit : 페이지가 참조된 적이 있는지 나타낸다.
- Modify bit : 페이지가 사용된 적이 있는지 나타낸다.
- Protection Bit : 페이지의 권한
- Page Frame Number : 물리 프레임 주소 번호
하지만 사용할 때마다 가상 주소를 물리 주소로 하면 굉장히 많은 시간이 필요하고, 더 빨리 메모리 변환을 하기 위해 생긴 것이 TLB 방식이다.
- TLB 방식
하드웨어에 TLB라는 테이블 내에 가상주소와 물리주소에 대한 정보를 맵핑시켜 놓고, Page Table을 확인하지 않아도 가상 주소가 TLB에 있다면 해당 물리 주소를 알 수 있다는 것이다.
!!) 물리 메모리 용어
페이지 : 가상 메모리를 사용하는 최소 크기 단위
프레임 : 물리 메모리를 사용하는 최소 크기 단위
가상 메모리
- 가상메모리란?
가상 메모리는 RAM을 관리하는 방법 중 하나로, 각 응용 프로그램에 실제 물리 메모리 주소가 아닌 가상의 메모리 주소를 할당하는 것을 의미한다. (RAM의 부족한 용량을 보완하기 위해 사용)
윈도우 운영체제는 가동되고 있는 페이지 중 가장 사용하지 않는 페이지를 찾아 하드 디스크의 공간에 옮겨 놓는다.(스왑 아웃)
프로세스가 동작하는 중 RAM에 필요한 데이터(=페이지)가 없다면 Page Fault를 발생시키고 disk의 하드웨어 영역 중 스왑 영역에서 해당 데이터를 다시 RAM 공간에 옮겨 놓는다.(스왑인) 하지만 이 과정에서 하드 디스크는 RAM보다 느리기 때문에 해당 데이터를 로드하는데 더 많은 시간이 걸리게 된다.
스왑 아웃 : RAM에 있는 가상 메모리를 하드 디스크 공간에 옮긴다.
스왑 인 : 프로세스에 필요에 의해 하드 디스크 공간에 있는 메모리를 RAM에 옮긴다.
- Page Fault
만약 물리 메모리에 CPU가 요청한 페이지가 없다면 Page Fault가 발생하게 되는데 이 경우 스왑영역에서 페이지를 찾아 물리 메모리에 로드한다 Page Fault는 3가지로 분류할 수 있다.
1. Major Page Fault
요청한 페이지가 물리 메모리로부터 스왑아웃되어 존재하지 않는 경우 발생하는 것으로 보조 기억장치에 있는 가상 메모리를 물리 메모리로 스왑인하여 Disk I/O가 발생하는 페이지 폴트이다.
2. Minor Page Fault
물리 메모리에는 로드되어 있지만 MMU에는 로드되어 있지 않다고 표시된 경우 발생하는 것으로 한 쓰레드가 어떤 페이지를 사용하고 있을 때, 다른 쓰레드가 그 페이지를 요청하는 경우에 발생하는데 이 경우 MMU는 이미 사용 중인 페이지를 가리키면 된다. (스왑인 발생 X)
3. Invalid Page Fault
요청한 페이지가 스왑영역의 밖을 참조하거나, 페이지를 쓰기 불가능한 영역에 쓰려고 할 때 발생하는 페이지 폴트이다.
페이지 폴트 발생 시 해당 페이지를 가상 메모리 공간에서 찾아야 하는데 페이지 폴트를 해결하기 위한 과정을 요구 페이징이라고 한다.
- Page Fault 해결 과정
우선 운영체제는 페이지 테이블로 가상메모리를 관리하는데 테이블 내 한 부분에 페이지 테이블 엔트리 항목이 존재한다.
페이지 테이블 엔트리는 64-bit의 경우 아래와 같은 정보를 담고 있는데 Valid bit로 해당 페이지가 어느 공간에 위치해 있는지 표시되어 운영체제는 쉽게 메모리에서 페이지를 찾을 수 있다.
63 48 47 39 38 30 29 21 20 12 11 0
+-------------+----------------+----------------+----------------+-------------+------------+
| Sign Extend | Page-Map | Page-Directory | Page-directory | Page-Table | Physical |
| | Level-4 Offset | Pointer | Offset | Offset | Offset |
+-------------+----------------+----------------+----------------+-------------+------------+
| | | | | |
+------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+
Virtual Address
- 요구 페이징 수행 과정
1. CPU는 물리 메모리(RAM)를 확인하여 페이지가 없으면 trap을 발생시켜 운영체제에게 알린다.
2. 운영체제는 CPU 동작을 잠시 멈춘다.
3. 페이지 테이블을 확인하여 가상 메모리가 물리 메모리 내에 위치하는지 확인하고 없다면 프로세스를 중단한다.
4. 물리 메모리 내 위치하지 않아 페이지 폴트 발생시 현재 물리 메모리에 비어있는 프레임이 있는지 찾고,
5-1. 비어있는 프레임이 있는 경우 해당 페이지를 로드하고, 페이지 테이블 최신화 한다.
5-2. 비어있는 프레임이 없는 경우 희생 프레임을 골라서 가상 메모리에 저장 후 페이지를 희생 프레임에 로드한다.
6. 중단되었던 CPU를 다시 실행한다.
Page Replacement Algorithm
기존 물리 메모리에 위치한 가상 메모리를 교체하기 위한 알고리즘으로 FIFO, LRU, Optimal 등이 존재한다.
- MMU의 동작 원리
페이지가 사용하고 있는 가상주소를 물리주소로 번역해 주는 역할을 하는 장치로 PT 내 PTE를 확인하여 물리주소를 알아낸다.
커널은 프로세스별로 페이지 테이블을 구성해 놓고, 각 프로세스가 실행될 때마다 CR3 레지스터에 해당 페이지 테이블 주소를 적어줘서 MMU가 작업할 수 있게 해준다.
작업의 의미는 페이지 테이블의 엔트리를 타고 들어가서 최하위 페이지 테이블의 물리적인 시작 주소를 확인하는 것이다.(MMU는 가상 주소 개념을 알지 못한다.)
- 4단계 페이징 방식
4단계 방식을 사용하는 페이지 테이블을 PML4라고 하는데 아래와 같은 방식을 사용하여 PTE를 나타낸다.
'sw 사관학교 정글 > TIL' 카테고리의 다른 글
[정글 78일차] Project3 : Anonymous Page (0) | 2023.05.16 |
---|---|
[정글 72일차] Project2 발표 및 Project3 발제 (0) | 2023.05.09 |
[정글 63일차] Project2 : Argument Passing 구현 및 확인 (0) | 2023.04.30 |
[정글 62일차] Project2 : Argument Parsing 호출 순서 및 코드 실행 방법 (0) | 2023.04.29 |
[정글 60일차] Project2 발제 (0) | 2023.04.29 |