본문 바로가기

KNU Freshman/컴퓨터학개론

(8) 가상 메모리

가상 메모리 

- 메모리가 실제 메모리보다 많아 보이게 하는 기술로 고안된 메모리 기법이다.

 

<가상메모리의 중요 목표>

가상화

    – 프로세스가 모든 메모리를 소유하고 있는 것처럼 보이게

       • 프로세스마다 자신의 주소 체계를 가짐

   – 프로세스들이 사용하고 있는 모든 메모리의 총합이 컴퓨터가 실제로 가지고 있는 메모리보다 많을 있음

 

보호 의도치 않게 다른 프로세스의 데이터에 접근하지 않도록

   – 시스템(커널)사용하는 데이터에 접근하지 못하도록

 

가상화의 주요 기술

  – 주소 변환

  – 페이징

  – 보호

 

<가상메모리의구현>

주요 가상 메모리 기법

베이스와 바운드(Base and bound)

세그멘테이션(Segmentation)

페이지테이블(Page Table)

멀티 레벨 페이지 테이블(Multi-level page tables)

 

주소 변환

프로세스가 메모리에 접근할 운영체제는 주소를 가상 주소에서 물리 주소변환함

운영체제는 프로세스마다 {가상주소, 물리주소}이루어진 테이블을 가짐

 

1. 베이스와 바운드 방식

아주 간단한 주소 변환 방식으로 구현이 쉽지만 기능이 제한적임

연속된 가상의 주소 영역을 연속된 물리적 주소 영역에 매핑함

하지만, 연속된 주소 영역을 실제 메모리에서 확보하기 어려움

 

주소 변환 예 (program counter) 

명령어 읽어오기(EIP): 0x0023 (가상 주소)+ 0x00FF (base) = 0x0122 (물리 주소)

데이터 읽어오기(ESP): 0x0F76 (가상 주소) + 0x00 FF(base) = 0x1075(물리 주소)

변환된 주소가 프로세스 영역 밖에 있으면 오류 발생

2. 세그멘테이션 방식

프로세스의 영역을 베이스와 바운드 방식으로 메모리 할당

프로세스는 코드와, 스택, 등으로 구성되어 있고, 부분을 베이스와 바운드 방식을 사용함

기존의 베이스와 바운드 방식보다는 유연하지만, 여전히 동일한 문제를 가짐

* 세그멘테이션 오류 (Fault)

프로세스에 할당된 영역을 벗어나서 메모리에 접근하려고 , 운영체제는 오류를 발생시키는데, 이를 세그멘테이션 오류라고

:

char buf[5];

strcpy(buf, “Hello World”);

오늘날 세그멘테이션 방식은 사용되지 않지만, 메모리 영역과 관련된 오류에는 여전히 세그멘테이션 오류라는 말이 사용되고 있음

 

* 메모리단편화 (Fragmentation)

메모리가 작은 조각으로 나누어지는 현상

   – 내부 단편화와 외부 단편화로 구분됨

   – 내부 단편화: 할당 영역(세그멘테이션) 내에서 발생

   – 외부 단편화: 물리적 메모리 공간에서 발생

• 압축(compaction) 을 통해 해결가능, 하지만 비용이 비쌈

세그멘테이션 방식은 베이스와 바운드 방식보다는 유연하지만 여전히 메모리 단편화 문제가 발생함

3. 페이지 테이블 방식

페이지 테이블 방식은 세그멘테이션 방식을 일반화하여 사용되는 연속된 메모리 영역의 크기를 더욱 작게 유지함

메모리는 동일한크기(4KB)나누어져 할당됨

가상 메모리에서 사용되는 영역을 페이지 라고하며, 실제 물리적인 메모리에서 사용되는 영역을 프레임 이라고

운영체제는 가상 페이지: 물리 프레임 간의 매핑을 위한 테이블유지함

페이지 테이블에서는 사용할 있는 최대 메모리의 크기가 제한됨

32비트: 4GB

멀티 레벨 페이지 테이블의 등장(2학년때 배우세요~)

 

 

<페이지 테이블에서의 주소 변환 예>

 

메모리스왑(swap)

개념: 물리 메모리의 공간(프레임)디스크에 저장하고, 디스크에 저장된 데이터를 다시 메모리의 프레임으로 복구

오늘날의 대부분의 운영체제는 메모리 스왑을 지원함