본문 바로가기

CS

[CS] 가상메모리

스와핑

메모리에서 사용되지 않는 프로세스들을 보조기억장치로 내보내고, 실행할 프로세스를 메모리에 적재하여 실행하는 메모리 관리 기법

 

 

메모리 할당

비어 있는 메모리 공간에 프로세스를 연속적으로 할당하는 방식

 

 

최초 적합

메모리 내의 빈 공간을 순서대로 검색하다가 적재할 수 있는 공간을 발견하면 그 공간에 프로세스를 배치하는 방식

방식이므로 검색을 최소화할 수 있고 결과적으로 빠른 할당이 가능

 

최적 적합

운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 작은 공간에 프로세스를 배치하는 방식

 

최악 적합

운영체제가 빈 공간을 모두 검색해 본 후, 프로세스가 적재될 수 있는 공간 중 가장 큰 공간에 프로세스를 배치하는 방식

 

외부 단편화

메모리에 남아있는 공간이 요청한 메모리 공간보다 크지만, 남아있는 공간이 연속적이지 않아 메모리가 낭비되는 현상

 

 

외부 단편화를 해결할 수 있는 방법

메모리 압축 (메모리 조각 모음), 페이징

 

메모리 압축 단점

시스템이 하던 일을 중지해야 함

메모리에 있는 내용을 옮겨야 하기 때문에 많은 오버헤드 야기

 

가상 메모리

실행하고자 하는 프로그램을 일부만 메모리에 적재하여 실제 물리 메모리 크기보다 큰 프로세스를 실행할 수 있게 하는 기술

 

가상 메모리 관리 기법

페이징, 세그멘테이션

 

페이징

프로세스의 논리 주소 공간을 페이지 단위로 자르고, 메모리의 물리 주소 공간을 페이지와 동일한 크기의 프레임 단위로 자른 뒤 각 페이지를 프레임에 할당하는 가상 메모리 관리 기법

 

 

페이지 단위로 스왑 아웃/스왑 인되며, 페이징 시스템에서 스왑 아웃은 페이지 아웃, 스왑 인은 페이지 인이라고 부름

즉, 한 프로세스를 실행하기 위해 프로세스 전체가 메모리에 적재될 필요가 없고, 실행에 필요한 일부 페이지만 메모리에 적재하여 물리 메모리보다 더 큰 프로세스를 실행할 수 있다.

페이지 테이블

프로세스가 메모리에 불연속적으로 배치되어 있다면 CPU가 이를 순차적으로 실행할 수 없는 문제 발생

프로세스가 물리 주소에 불연속적으로 배치되더라도 논리 주소에는 연속적으로 배치되도록, 프로세스의 페이지 정보를 저장하고 있는 테이블

하나의 프로세스는 하나의 페이지 테이블을 가짐

 

 

페이지 테이블들은 메모리에 적재되어 있으며, CPU 내의 페이지 테이블 베이스 레지스터(PTBR)는 각 프로세스의 페이지 테이블이 적재된 주소를 가리킴

 

 

페이지 테이블이 메모리에 있어 발생하는 문제

메모리 접근 시간이 두 배로 늘어남

(메모리에 있는 페이지 테이블에 접근하기 위해, 프레임에 접근하기 위해)

 

위와 같은 문제를 해결하기 위해 MMU(Memory Management Unit)에 TLB(Translation Lookside Buffer)라는 페이지 테이블의 캐시 메모리를 둠

 

 

 

내부 단편화

프로세스가 페이지 크기에 딱 맞게 잘리지 않는 경우, 마지막 페이지는 하나의 페이지 크기보다 작은 크기가 남게 되어 메모리 낭비가 발생하는 현상

 

 

하나의 페이지 크기를 너무 작게 설정하면 그만큼 페이지 테이블 크기가 커지기 때문에 페이지 테이블이 차지하는 공간이 낭비되기 때문에, 내부 단편화를 적당히 방지하면서 너무 크지 않은 페이지 테이블이 만들어지도록 페이지 크기를 설정하는 것이 중요함

 

 

페이지 교체

요구 페이징

실행에 요구되는 페이지만 메모리에 적재하는 기법

 

페이지 교체 알고리즘

메모리가 가득 차있는 경우, 당장 실행에 필요한 페이지를 적재하기 위해 이미 적재된 페이지를 내보내야 하는데, 이때 내보낼 페이지를 결정하는 방법

 

FIFO 페이지 교체 알고리즘

메모리에 가장 먼저 올라온 페이지부터 내쫓는 방식

구현이 간단하지만, 프로그램 실행 내내 사용될 페이지의 경우 페이지 폴트가 자주 발생할 수 있음

 

 

최적 페이지 교체 알고리즘

CPU에 의해 참조되는 횟수를 고려하는 페이지 교체 알고리즘으로, 앞으로 사용 빈도가 가장 낮은 페이지를 교체하는 방식

앞으로 오랫동안 사용되지 않을 페이지를 예측해야 하기 때문에 구현이 어려움

주로 다른 페이지 교체 알고리즘의 이론상 성능을 평가하기 위한 목적으로 사용됨

 

 

LRU 페이지 교체 알고리즘

가장 오랫동안 사용되지 않은 페이지를 교체하는 알고리즘

 

 

스래싱

프로세스가 실제 실행되는 시간보다 페이징에 더 많은 시간을 소요하여 성능이 저해되는 문제

 

 

동시에 실행되는 프로세스 수(멀티프로그래밍 정도)를 늘린다고 해서 CPU 이용률이 비례하여 증가하는 것이 아님

필요 이상으로 늘리면 각 프로세스들이 사용할 수 있는 프레임 수가 적어지기 때문에 페이지 폴트가 빈번히 발생하여 전체적인 성능 저하로 이어짐(이를 스레싱이라 함)

 

스래싱 발생 원인

각 프로세스가 필요로 하는 최소한의 프레임 수가 보장되지 않았기 때문

 

프레임 할당

정적 할당 방식

프로세스의 실행 과정을 고려하지 않고 단순히 프로세스의 크기와 물리 메모리의 크기만을 고려한 방식

(균등 할당, 비례 할당)

 

- 균등 할당

모든 프로세스에 균등하게 프레임을 제공하는 방식

실행되는 프로세스 크기가 다른데 동일한 개수의 프레임을 할당하는 것은 비합리적임

 

- 비례 할당

프로세스의 크기가 크면 프레임을 많이 할당하고 프로세스 크기가 작으면 프레임을 적게 나눠주는 방식

프로세스 크기가 크(작)더라도 막상 실행해 보니 많(적)은 프레임이 필요한 경우도 있음

 

 

동적 할당 방식

프로세스의 실행을 보고 할당할 프레임 수를 결정하는 방식

(작업 집합 모델 기반 프레임 할당, 페이지 폴트 빈도 기반 프레임 할당)

 

- 작업 집합 모델 기반 프레임 할당

프로세스가 일정 시간 동안 참조한 페이지의 집합(작업 집합)을 기억하여 작업 집합의 크기만큼만 프레임을 할당하는 방식

 

- 페이지 폴트 빈도 기반 프레임 할당

페이지 폴트 율에 상한선과 하한선을 정하고, 이 범위 안에서만 프레임을 할당하는 방식

 

 

 

참고

혼자서 공부하는 컴퓨터 구조 + 운영체제

https://steady-coding.tistory.com/524