크래프톤 정글/TIL

PintOS 프로젝트 3주차 키워드 정리 ( Virtual Memory, Page Table, TLB, Page Fault, Lazy Loading, PRP, DMA )

양선규 2024. 6. 3. 15:39
728x90
반응형

Virtual Memory

물리적 메모리(RAM)의 제한을 극복하고 효율적인 메모리 관리 및 프로세스 격리를 위해 사용되는 중요한 개념

 

Virtual Memory 개념

- 각 프로세스는 독립적인 가상 주소 공간을 갖는다. 이는 프로세스가 자신의 메모리 공간을 다른 프로세스와 공유하지 않고, 독립적으로 사용할 수 있도록 한다.

- 가상 메모리와 물리 메모리는 모두 고정된 크기의 블록으로 나뉜다. 가상 메모리 블록을 "페이지" 라고 하고, 물리 메모리 블록을 "페이지 프레임" 이라고 한다.

 

 

 

Page Table

가상 메모리를 물리 메모리로 매핑하는 데 사용되는 데이터 구조. 각 프로세스는 독립적인 가상 주소 공간을 가지며, 페이지 테이블은 이 가상 주소를 물리 주소로 변환(매핑)하는 역할을 한다.

 

Page Table 개념

- 가상 메모리는 고정 크기의 블록인 "페이지"로 나누어진다.

- 물리 메모리는 고정 크기의 블록인 "프레임"으로 나누어진다.

- 페이지 테이블 엔트리(PTE) : 페이지 테이블을 통해 페이지들을 관리하며, 각 페이지는 해당 페이지가 매핑된 물리 프레임을 가리킨다. 여기서 페이지 하나하나를 PTE 라고 한다.

 

Page Table 구조

- 가상 주소의 상위 비트는 "페이지 번호"를 나타낸다.

- 가상 주소의 하위 비트는 "페이지 내의 특정 위치"를 나타낸다.

- 각 페이지 번호에 대해 하나의 PTE가 존재한다.

 

 

페이지, 페이지 테이블, 물리 메모리

 

 

 

TLB(Translation Lookaside Buffer)

가상 메모리 시스템에서 가장 중요한 캐시 중 하나이다. 페이지 테이블의 일부 엔트리에 빠르게 접근할 수 있도록 메모리 내에 캐싱하여, 가상 주소를 물리 주소로 변환하는 과정을 가속화한다. Cache에 이용되는 프로그램의 특징인 지역성(Locality)원리를 이용하며, 메모리에 효율적이고 빠르게 접근할 수 있다

 

TLB Hit와 TLB Miss

TLB Hit : TLB에 가상 주소와 매핑된 물리 메모리가 있어서 CPU가 바로 접근하는 경우.

TLB Miss : TLB에 가상 주소와 매핑된 물리 메모리가 없어서 CPU가 페이지 테이블을 확인하는 경우. 이 때 매핑된 주소 정보를 후에 빠르게 접근할 수 있도록 TLB에 저장한다.

 

 

 

Page Fault

프로세스가 접근하려는 가상 메모리 페이지가 물리 메모리에 없는 경우(매핑되어있지 않을 경우) 발생하는 interrupt 이다. 페이지 폴트가 발생하면, OS는 해당 페이지를 디스크에서 읽어와 메모리에 로드한다.

 

Page Fault  처리 과정

1. CPU는 페이지 테이블의 페이지가 물리 메모리에 없음을 확인한다.

2. Page Fault 인터럽트를 발생시켜 OS에게 알린다.

3. 제어가 인터럽트 핸들러로 옮겨지고, OS는 페이지가 스왑 영역or디스크에 있는지 확인한다. 이 때 필요하다면( RAM이 꽉 찼다면 ) 물리 메모리 공간을 확보한다.

4. 필요한 페이지를 스왑 영역or디스크에서 물리 메모리로 로드한다.

5. 페이지 테이블을 업데이트하고 프로세스를 이어서 실행한다.

 

-> 스왑 영역or디스크 라고 표현한 이유는 Anonymous Page와 File-Backed Page의 차이점 때문이다. 후술.

 

 

 

Lazy Loading

컴퓨터 프로그래밍에서 자원을 효율적으로 사용하기 위한 전략이다. 데이터나 객체가 실제로 필요한 그 순간까지 로딩을 지연시켰다가 실제로 사용될 때 로드하여, 결과적으로 시스템 성능을 향상시키고 리소스 사용을 최적화한다. 게임을 예로 들면 플레이어가 바라보는 쪽만 로드하고 아닌 쪽은 로드하지 않는다.

 

Lazy Loading의 장점

시작 시간 단축 : 애플리케이션 시작 시 필요하지 않은 리소스를 로드하지 않기 때문에 시작 시간이 단축된다.

메모리 사용 최적화 : 실제로 필요한 시점에만 데이터를 메모리에 로드하기 때문에 불필요한 메모리 사용을 줄이고 효율을 개선할 수 있다.

대역폭 사용 최소화 : 사용자가 실제로 보는 부분만을 로딩함으로써, 네트워크 대역폭 사용을 최소화할 수 있다.

 

Lazy Loading의 단점

첫 접근 시 지연 : 데이터나 객체에 처음 접근할 때 로딩이 이루어지기 때문에 약간의 지연이 발생한다. ( 시작 시점에 로드되지 않은 것들을 매번 로드할 때마다 약간의 지연이 발생할 수 있음 )

복잡성 증가 : 로딩 시점을 관리해야 하기 때문에 프로그램 복잡성이 증가할 수 있다.

 

운영체제에서의 Lazy Loading : 가상 메모리와 페이지 폴트 처리

- CPU가 가상 메모리 페이지에 접근하려고 할 때(실제로 사용할 때) 매핑된 물리 메모리를 찾게 되고, 없다면 페이지 폴트를 일으켜 필요한 페이지를 디스크에서 메모리로 로드한다.

- 즉 가상 메모리 페이지들은 실제로 사용되기 전엔 물리 메모리를 매핑시키지 않는다.

- 이는 대표적인 Lazy Loading의 한 예이며, Demand Paging 이라고 한다.

 

 

 

Page Replacement Policy(PRP, 페이지 교체 정책)

가상 메모리 시스템에서 Page Fault가 발생했을 때, 새로운 페이지를 로드하기 위해 어떤 것을 교체할지(메모리에서 내릴 지)를 결정하는 알고리즘

PRP를 통해 교체될 페이지를 고르는 건, "프레임 테이블" 즉 메모리를 보고 이루어진다. 오랫동안 사용되지 않거나(LRU) 가장 먼저 프레임에 들어온(FIFO) 페이지를 프레임 테이블에서 골라서, 프레임과 매핑된 페이지를 내리고 지금 필요한 다른 페이지를 프레임에 올린다.

 

FIFO(First-In, First-Out)

- 선입선출. 가장 먼저 메모리에 로드된 페이지를 가장 먼저 교체하는 방식

- 구현이 간단하다.

- 메모리에 오래 머무르는 페이지가 자주 사용되더라도 교체 되상이 될 수 있기 때문에, Belady's Anomaly가 발생할 수 있다.

Belady's Anomaly -> 물리 메모리 프레임을 늘릴 경우 page fault의 수가 감소해야 하지만 실제로는 증가하는 비정상적인 현상. FIFO에서 발생할 가능성이 높다.

 

LRU(Least Recently Used)

- 가장 오랫동안 사용되지 않은 페이지를 교체하는 방식

- 자주 사용되는 페이지가 메모리에 남게 되어 효율적이다.

- 구현이 복잡하고, 최근 사용 기록을 유지하는 데 추가적인 메모리와 시간이 소요된다.

 

LFU(Least Frequently Used)

- 가장 적게 사용된 페이지를 교체한다

- 자주 사용되지 않은 페이지를 교체하므로 이론적으론 효율적이다.

- 페이지 사용 횟수를 관리하는 데 오버헤드가 발생하며, 최근에 자주 사용된 페이지가 교체될 수 있다. (최근에 자주 사용되었더라도 사용된 절댓값이 낮을 수 있다 )

 

Second Chance(Clock) Algorithm

- FIFO와 비슷하지만, 각 페이지에 두 번째 기회를 주는 방식

- 페이지가 교체 대상이 될 때 사용 비트가 설정되어 있다면 이를 초기화하고 다음 페이지를 검사한다.

- FIFO의 단점을 보완하고, 자주 사용되는 페이지가 교체되지 않을 수 있다.

- 다만 구현이 FIFO보다 복잡하다.

- FIFO의 간단함과 LRU의 효율성을 적절히 조합한 형태이며, 많은 시스템에서 사용된다.

 

Second Chance(Clock) Algorithm 동작방식

- 페이지가 메모리에 처음 로드될 때, 각 페이지마다 초기 사용 비트 값 0을 받는다.

- 페이지가 참조되면 해당 페이지의 사용 비트가 1로 설정된다. (1 증가가 아니라 1로 설정 )

- 페이지를 교체할 때, 포인터는 페이지 프레임들을 원형 큐 모양으로 순회하며 사용 비트가 0인 페이지를 찾아 교체한다.

- 이 과정에서 1인 페이지를 만나면 값을 0으로 바꾼 후 다른 0을 찾으러 간다.

 

-> 자주 사용되는 프레임은 0이 되었더라도 포인터가 다시 돌아오기 전에 1이 되어있을 것이다. 이런 방식으로 자주 사용되는 프레임이 교체되지 않을 수 있다.

 

 

 

Anonymous Page vs File-Backed Page

Virtual Memory System에서 사용되는 주요 페이지 유형. OS가 프로세스의 메모리 관리를 수행하는 방식을 결정하는 데 중요한 역할을 한다.

 

Anonymous Page 

- 디스크 상의 파일과 직접적으로 연결되지 않은 메모리 페이지

- 주로 Heap이나 Stack 영역에서 발견된다. 프로그램이 동적 메모리 할당을 할 때 (malloc, new 등) 할당되는 페이지는 Anonymous Page 이다.

- Anonymous Page는 Swap space 또는 Swap file에 백업될 수 있다. 페이지 폴트가 발생하여 페이지가 메모리에서 내려갈 때 디스크의 스왑 영역으로 옮겨지게 된다.

 

File-Backed Page

- 디스크 상의 특정 파일과 직접적으로 연결된 메모리 페이지

- 실행 파일, 라이브러리 등 프로그램 코드를 담고 있는 파일이나 명시적으로 메모리에 맵핑된 파일에서 발견된다.

- 필요할 때 파일로부터 메모리로 직접 로드될 수 있고, 페이지 수정 시 해당 파일로 쓰여질 수 있다.

- 즉 메모리와 디스크 간의 동기화가 가능해지고, 파일 기반 데이터를 효율적으로 처리할 수 있음

 

-> Anonymous Page는 page fault로 인해 교체될 때 디스크의 스왑 영역으로 이동한다. 그러나 File-Backed Page는 이미 디스크에 있는 파일을 로드한 것이기 때문에 스왑 영역으로 따로 이동하지 않고 메모리에서 해제될 뿐이다.

 

 

 

Swap Disk( = Swap Space )

OS에서 Virtual Memory 관리를 위해 사용되는 디스크 공간. 주로 물리적 메모리(RAM)가 부족할 때 사용된다. 이를 통해 시스템이 마치 더 많은 메모리를 사용하는 것 처럼 동작할 수 있게 된다.

 

Swap Disk의 역할

1. 메모리 확장 : 물리적 메모리(RAM)가 부족할 때, 사용하지 않는 메모리 페이지를 스왑 디스크로 옮겨서 RAM을 확보한다. 이렇게 하면 시스템은 제한된 물리적 메모리를 초과하여 더 많은 프로그램을 실행할 수 있다.

-> 어떤 프로그램에게 요구되는 리소스를 모두 동시에 사용하진 않기 때문에, 현재 사용하고 있지 않은 페이지를 일시적으로 디스크로 내림으로써 가능해진다.

2. 페이지 교체 : page fault가 발생하면, OS는 당장 필요 없는 페이지를 RAM에서 스왑 디스크로 옮기고 필요한 페이지를 스왑 디스크에서 RAM으로 옮긴다. 어떤 페이지를 메모리에서 내릴지는 PRP(페이지 교체 정책)에 의해 정해진다.

-> 위에 적어 놓았지만, Anonymous page만 스왑 영역을 이용한다. File-Backed page는 메모리에서 해제될 뿐이다.

 

Swap-in과 Swap-out

Swap-in : 스왑 영역에 저장된 페이지를 다시 RAM으로 로드하는 과정

Swap-out : 사용되지 않는 메모리 페이지를 스왑 영역으로 옮겨 RAM을 확보하는 과정

 

-> File-Backed page가 메모리에 로드되거나 교체되는 과정은 Swap-in, out이라고 표현하지 않는다.

-> 스왑 영역을 직접 사용하는 Anonymous page에만 적용되는 표현이다.

 

 

 

 

Direct Memory Access(DMA)

CPU를 거치지 않고 주변 장치가 메모리에 직접 접근하여 데이터를 읽거나 쓰는 기술. DMA를 사용하면 데이터 전송 속도를 높이고 CPU의 부담을 줄일 수 있으며, 전반적인 시스템 성능이 향상된다.

주변 장치

- CPU, 메모리 이외의 장치 : I/O Device, 디스크, USB, LAN카드, 사운드카드, 스캐너 등등....

 

DMA Controller

- DMA 작업을 관리하는 "하드웨어 장치"

- 여러 채널을 가지며, 각 채널은 특정 장치와 메모리 간의 데이터 전송을 처리한다.

 

DMA 채널

- DMA 컨트롤러 내에서 개별적인 데이터 전송 작업을 담당하는 논리적 경로

- 각 주변장치는 하나 이상의  DMA채널을 통해 메모리에 접근한다.

 

DMA 작동 방식

- DMA는 CPU가 설정해 둔 source, destination, size 등등 정보를 바탕으로 데이터 전송을 한다. CPU는 이 과정에서 다른 작업을 수행할 수 있다. 개별적이다.

- 데이터 전송이 완료되면 DMA 컨트롤러는 인터럽트를 발생시켜 CPU에게 전송 완료를 알린다.

- CPU는 인터럽트를 처리하고 후속 작업을 수행한다.

728x90
반응형