테키테크 TEKITECH

[운영체제] Ch14. 가상 메모리 할당 방식 본문

그리고/스터디

[운영체제] Ch14. 가상 메모리 할당 방식

TEKI 2023. 2. 18. 16:13

운영체제의 가장 핵심적인 역할 두 가지 중 하나인 메모리 관리에 대하여

  1. 스와핑
  2. 메모리 할당 방식 3가지: 최초 적합, 최적 적합, 최악 적합
  3. 연속 메모리 할당과 외부 단편화 문제
  4. 외부 단편화 해결 방안: 압축과 페이징
  5. 페이지 교체 알고리즘
  6. 스래싱과 프레임 할당

 


 

1.  스와핑

입출력장치의 요구로 대기 상태가 된 프로세스, 오랫동안 사용되지 않은 프로세스 등이 메모리 공간을 차지하고 있는 경우가 있다. 이렇게 메모리에 적재된 프로세스 중 현재 실행되지 않는 프로세스를 임시로 보조기억장치 일부 영역으로 쫓아내고, 그 공간에 다른 프로세스를 적재하여 실행하는 방식을 스와핑이라고 한다. 스와핑을 하면 동시에 실행하려는 프로세스들이 필요로 하는 메모리 공간의 총량보다 사용가능한 메모리 용량이 적어도 프로세스들을 동시에 실행할 수 있다.

스와핑하여 확보한 메모리 공간을 스왑 영역이라고 하는데, 유닉스와 리눅스, MacOS에서 'free'나 'top' 명령어를 통해 스왑 영역 정보를 확인할 수 있다.

맥북(M1칩)에서 top 명령어를 실행한 결과

 

2.  메모리 할당 방식 3가지: 최초 적합, 최적 적합, 최악 적합

메모리 내에 빈 공간이 있다면 프로세스를 할당해주어야 한다. 만약 메모리 안에 빈 공간이 여러 개 있다면 어떻게 할당해주어야 할까? 이때 3가지 방법이 있다.

[1] 최초 적합

  • 운영체제가 메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 빈 공간을 발견했을 때, 그 공간에 프로세스를 배치하는 방식
  • 검색 리소스를 최소화하고, 결과적으로 빠른 할당이 가능함

[2] 최적 적합

  • 운영체제가 메모리 내의 빈 공간을 전부 검색한 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식

[3] 최악 적합

  • 운영체제가 메모리 내의 빈 공간을 전부 검색한 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식

 

 

3.  연속 메모리 할당과 외부 단편화 문제

앞에서 다루었던 것과 같이 여러 프로세스를 메모리에 연속적으로 배치하는 것을 연속 메모리 할당이라고 한다. 하지만 이는 외부 단편화 문제를 내포하고 있기 때문에 메모리를 효율적으로 사용하지 못하는 방법이다.

외부 단편화 문제란 여러 프로세스를 할당할 충분한 공간이 메모리 안에 남아있음에도 공간이 단편화되어 흩어져있어서 프로세스를 할당하지 못하는 문제를 말한다.

 

 

4.  외부 단편화 해결 방안: 압축과 페이징

외부 단편화 문제를 해결하기 위한 방법에는 메모리를 압축하는 방법과 페이징 기법을 사용하는 방법이 있다.

[1] 메모리 압축

압축은 여기저기 흩어져 있는 빈 공간들을 하나로 모으는 방식으로, 메모리 내에 저장된 프로세스를 적당히 재배치하여 빈 공간들을 하나의 큰 공간으로 모으는 것을 메모리 압축이라고 한다.

하지만 압축을 진행하는 동안 시스템이 하던 일을 중단해야 하고, 메모리의 내용을 옮기면서 많은 오버헤드를 야기하며, 효율적인 압축 방식을 결정하기가 어렵다는 단점이 있다.

[2] 페이징

메모리 압축 대신 나온 페이징 기법은 오늘날까지도 사용되는 가상 메모리 기법이다. 페이징은 프로세스의 논리 주소 공간을 페이지라는 일정한 단위로 나누고, 메모리의 물리 주소 공간을 프레임이라는 일정한 단위(페이지와 동일)로 나눈 뒤 페이지를 프레임에 할당하는 가상 메모리 관리 기법이다. 이때 프로세스의 페이지 중 필요한 페이지만 메모리에 적재(프레임에 할당)하면 되기 때문에 보다 효율적이다.

그런데 이렇게 하면 프로세스가 다음에 실행할 명령어 위치(다음 페이지 위치)를 알기 어려워진다. 그러므로 메모리 안에서 물리적 위치는 순서대로가 아니더라도 논리적 주소는 순서대로 배치될 수 있도록 페이지 테이블을 사용한다. 페이지 테이블은 페이지 번호와 프레임 번호를 짝지어주는 일종의 이정표로, CPU가 페이지 번호만 보고 해당 페이지가 적재된 프레임을 찾을 수 있게 되어있다.

한빛미디어-「혼자 공부하는 컴퓨터 구조+운영체제」 p.406

페이징은 외부 단편화 문제는 해결했지만 내부 단편화 문제가 생긴다. 내부 단편화 문제는 페이지 크기로 프로세스를 나눌 때, 페이지 크기보다 작은 크기로 메모리가 단편화되어 남는 현상을 말한다. 유닉스 기반의 OS에서는 아래와 같이 getconf 명령어로 페이지 크기를 확인할 수 있다.

 

  PTBR (Page Table Base Register)
→ 프로세스마다 각자의 프로세스 테이블을 가지고 있고, 각 프로세스의 페이지 테이블은 메모리에 적재되어 있다. PTBR(페이지 테이블 베이스 레지스터)는 각 프로세스의 페이지 테이블이 적재된 주소를 가리키고 있다. 그러나 이렇게 페이지 테이블을 메모리에 두면 메모리 접근 시간이 두 배로 늘어난다는 단점이 있다.

  TLB (Translation Lookaside Buffer)
→ CPU 곁에(일반적으로 MMU 내에) TLB라는 페이지 테이블의 캐시 메모리를 두어 페이지 테이블의 일부 내용을 저장한다. (참조 지역성에 근거해 주로 최근에 사용된 페이지 위주로 저장). 논리 주소에 대한 페이지 번호가 TLB에 있으면(TLB 히트) 메모리 접근을 한 번만, 없으면(TLB 미스) PTBR과 같이 메모리 내의 페이지 테이블까지 더해서 메모리 접근을 두 번 하게 된다. 결과적으로 PTBR보다 메모리 접근 시간이 줄어든다는 장점이 있다.

 

5.  페이지 교체 알고리즘

  요구 페이징
→ 프로세스를 메모리에 적재할 때 처음부터 모든 페이지를 적재하지 않고, 필요한 페이지만 메모리에 적재하는 기법. 아무런 페이지도 메모리에 적재하지 않고 실행부터 할 수도 있는데, 이를 순수 요구 페이징이라고 한다.

  페이지 교체 알고리즘
→ 요구 페이징 기법으로 페이지를 적재하다 보면 언젠가 메모리가 가득 찬다. 그러므로 적재된 페이지를 보조기억장치로 내보내야 하는데, 이를 결정하는 방법이 페이지 교체 알고리즘이다.

FIFO 페이지 교체 알고리즘

메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식(First In First Out). 구현은 간단하지만, 프로그램 내내 사용될 내용이 가장 먼저 들어왔다고 쫓아내면 안 되는 것처럼 단점이 있다.

최적 페이지 교체 알고리즘

CPU에 의해 참조되는 횟수를 고려하여 자주 사용될 페이지를 남기고, 사용 빈도가 낮은 페이지를 내쫒는 방식. 하지만 현실적으로 '앞으로 오랫동안 사용되지 않을 페이지'를 예측하는 것이 어려워 실제로 구현하지는 못하고 대신 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 용도로 사용된다. (최적 페이지 교체 알고리즘의 페이지 폴트 횟수를 하한선으로 두고, 이와 비교하여 평가)

LRU 페이지 교체 알고리즘

최근에 사용되지 않은 페이지는 앞으로도 사용되지 않을 것이라고 가정하여 가장 오랫동안 사용되지 않은 페이지를 내쫓는 방식.

 

 

6.  스래싱과 프레임 할당

프로세스가 지나치게 빈번한 페이지 교체로 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제를 스래싱(Thrashing)이라고 한다. 스래싱이 발생하는 근본적인 원인은 각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았기 때문이다. 스래싱 발생 위험을 낮추려면 운영체제는 각 프로세스들이 무리 없이 실행하기 위한 최소한의 프레임 수를 파악하고 프로세스들에 적절한 수만큼 프레임을 할당해 줄 수 있어야 한다. 

[1] 프레임 할당 방식 1. 균등 할당
→ 모든 프로세스에 균등하게 프레임을 제공하는 방식. (정적 할당 방식) 

[2] 프레임 할당 방식 2. 비례 할당
프로세스 크기에 비례하여 프레임을 제공하는 방식. (정적 할당 방식)

[3] 프레임 할당 방식 3. 작업 집합 모델(Working Set Model)을 사용하는 방식
프로세스를 실행하는 과정에서 프로세스가 일정 기간 동안 참조한 페이지 집합(작업 집합)을 기억하여 그 크기만큼 프레임을 제공하는 방식 (동적 할당 방식)

[4] 프레임 할당 방식 4. 페이지 폴트 빈도(PFF: Page-Fault Frequency)를 사용하는 방식
프로세스를 실행하는 과정에서 페이지 폴트 빈도에 따라 프레임을 제공하는 방식. 페이지 폴트가 너무 높으면 프로세스에 프레임이 너무 적고, 페이지 폴트가 너무 낮으면 프로세스에 프레임이 너무 많다는 가정을 따른다. (동적 할당 방식)

 

반응형
Comments