가상 메모리

홍준식·2024년 5월 26일

Q. 클라우드 환경에서 컴퓨팅 자원의 메모리가 부족하다면 어떻게 해결할 수 있나요?

디스크의 일부 공간을 스왑 메모리로 설정하며 가상 메모리 기법을 사용하여 메모리 부족을 해결할 수 있습니다.
혹은 인스턴스의 사양을 높이는 스케일 업 기법을 사용하거나 인스턴스의 수를 늘리는 스케일 아웃을 사용하는 방법도 존재합니다.

Q. 페이지 테이블, MMU, TLB는 무엇이고 어떻게 관계를 가지나요?

페이지 테이블은 각 프로세스마다 존재하며 메인 메모리에 저장되어 가상 메모리를 실제 물리 공간에 매핑하는 정보를 가지고 있습니다.
MMU는 하드웨어 장치로 각 코어마다 존재하며 가상 주소를 물리 주소로 변환하는 역할과 프로세스 별 메모리 영역을 보호하는 역할을 합니다.
TLB는 MMU 내부에서 사용되는 페이지 테이블을 캐싱하는 메모리 캐시로 현재 실행중인 프로세스의 페이지 테이블을 저장합니다.

Q. 페이징과 세그멘테이션의 차이는 무엇이고 왜 사용하나요?

프로세스에 메모리를 할당할 때에 외부 단편화 문제와 내부 단편화 문제가 존재합니다.
외부 단편화는 메모리가 할당되고 해제될 때에 할당된 메모리와 메모리 사이에 작은 메모리가 생겨나고 이러한 작은 메모리에 큰 프로세스가 할당될 수 없어 발생하는 문제입니다.
내부 단편화는 프로세스가 필요한 메모리보다 더 큰 메모리가 할당되어 메모리 내부에 사용되지 않는 공간이 발생하는 것입니다.

페이징 기법은 각 프로세스를 작은 페이지로 나누고, 메모리를 프레임 단위로 나누어 메모리에 나누어진 프로세스 페이지들을 할당하는 방법입니다. 이를 통해 메모리를 항상 다 사용할 수 있어 외부 단편화 문제를 제거할 수 있습니다. 하지만 프로세스를 페이지 단위로 완전히 나눌 수 없어 여전히 내부 단편화 문제는 존재합니다.
세그멘테이션은 프로세스를 논리적 단위인 세그먼트로 분할하고 메모리를 할당하는 기법입니다. 논리적 단위로 나누기에 잘린 영역의 크기가 모두 다르지만 내부에 빈 공간이 발생하지 않아 내부 단편화를 해결할 수 있습니다.

다른 방법으로는 메모리 풀 방식이 있는데, 이는 고정된 크기의 메모리 블록을 미리 할당해 놓고 프로세스가 필요할 때 마다 사용 및 반납하는 방식입니다. 메모리 풀 방식을 사용하면 내부, 외부 단편화 문제를 해결할 수 있지만 메모리 블록을 미리 할당해야 하기 때문에 메모리 누수 문제가 발생할 수 있습니다.

Q. 메인 메모리에서 페이지 테이블의 크기를 줄이는 방법을 설명해주세요.

단순하게는 페이지의 크기를 키우는 방법이 존재하지만 페이지 자체가 커져서 내부 단편화가 발생할 수 있습니다.
멀티 레벨 페이지 테이블 기법은 단일 페이지 테이블을 여러 계층으로 나누어 메모리에 올라와있는 페이지 테이블만 공간을 할당하는 방법입니다. 메모리를 효율적으로 사용할 수 있어 많은 시스템에서 사용하고 있지만 주소 변환 과정이 복잡해지는 문제점이 존재합니다.

Q. thrashing이란 그리고 해결 방법은?

thrashing은 메모리에 비하여 많은 프로세스가 메모리에 올라와있고 계속 새로운 페이지를 요청하여 페이지 폴트가 계속 발생하고 그로 인해 CPU 이용률이 저하되며 전체 성능이 저하되는 현상입니다.
thrashing을 해결하기 위한 방법으로는 워킹셋 모델을 사용하거나 PFF(Page Fault Frequency)를 제어하는 방법이 있습니다.
워킹셋 모델은 각각 프로세스가 동시에 참조하는 페이지들의 집합인 워킹 셋을 가지게 하고 페이지가 필요할 때에 워킹 셋 크기만큼 메모리를 할당하는 기법입니다. 각 프로세스가 워킹 셋 만큼의 메모리를 할당받을 수 있어 페이지 폴트를 줄일 수 있습니다.
PFF 제어 기법은 페이지 폴트 빈도를 모니터링하다가 임계치를 초과하면 지급하는 프레임 개수를 늘리고, 임계치보다 아래로 내려가면 프레임의 개수를 줄이는 기법입니다.

Q. Demand Paging 방법에서 Page Fault가 발생하게 되면 운영체제는 디스크에서 해당 페이지를 찾아 비어 있는 프레임에 할당합니다. 하지만 비어 있는 프레임이 없는 경우 특정 페이지를 필요한 페이지로 교체해야 합니다. 이때 사용되는 알고리즘을 페이지 교체 알고리즘이라고 합니다.

페이지 교체 알고리즘 중, 현대 운영체제에서 주로 사용되는 LRU 알고리즘에 대해 설명하고 왜 LRU 알고리즘이 현대 운영체제에서 사용되고 있을지 말해보세요.

LRU 알고리즘은 Least Recently Used 알고리즘으로 가장 이전에 사용된 페이지를 교체하는 기법입니다.
코드의 지역성 때문에 가장 최근에 사용된 코드가 다시 사용될 가능성이 높기 때문에 가장 오래 전에 사용된 페이지를 교체합니다.
하지만, 실제로는 LRU는 사용이 불가능합니다. OS에서 page hit에 대한 정보를 기억할 수 없기 때문입니다.
따라서 Clock algorithm이라는 가장 최근에 사용한 페이지가 교체되는것을 막는 알고리즘을 사용합니다.

0개의 댓글