본문 바로가기

Windows/_System Programming

가상 메모리(Virtual Memory)

개념 :

(가정 : 16비트 시스템(0 ~ 64K -1 주소), 프로세스별로 64KB의 가상 메모리 할당, 메인 메모리 16KB)


MMU(Memory Management Unit) : 실제로 존재하는 메모리 크기를 가상 메모리 크기만큼 존재하는 것처럼
CPU가 느끼도록 컨트롤 한다.(ex. 1GB 램의 메모리를 4GB의 메모리가 존재하는 것처럼 CPU가 느끼도록 한다)
가상 메모리 구성에 필요한 시스템의 기본 기능(메모리 할당 및 변환)을 제공한다.
(CPU와 함께 하나로 패키징(Packaging) 되있다)

CPU                 - >                     MMU : 메인 메모리에서 사용되지 않는 메모리 블록 하나를 골라서 할당
       (1K부터 20바이트 할당요청)

20바이트를 할당 요청했음에도 메모리 블록은 4K 바이트 단위라서 4 K 를 할당받게 된다.
(참고 : 비록 4K - 20 바이트 만큼의 메모리가 낭비되지만 MMU가 간단한 연산만 수행해도 되서 속도가 향상된다.
          그리고 프로그램의 스페셜 로컬리티 특성에 의해 나머지 공간도 채워질 가능성이 높다)


페이지 테이블 :

메모리 블록의 크기는 시스템에 따라서 다양하며 실제 메인 메모리 블록을 페이지 프레임(Page Frame),

가상 메모리 블록을 페이지(Page)라 한다. (페이지 프레임 크기 = 페이지의 크기)


가상 메모리와 실제 메모리의 매핑(Mapping) 모습이다.

0K - 4K 페이지는 제일 위쪽 페이지 프레임에 매핑되있다.

CPU가 0K - 4K 사이에 존재하는 데이터를 요구할 경우 MMU는 매핑된 물리 메모리를 참조해서 데이터를 전송한다.

위와 같은 구조를 MMU는 내부적으로 페이지 테이블을 만들어 키와 값으로 구성하여 관리한다.

(ex. 페이지 테이블
 페이지 14  메인 메모리 0 - 4K
    1      1     1      0     0      0      0      0      0      0     0      0      0      0      0      1
<-----------------------> <--------------------------------------------------------------------------->
   페이지 프레임 결정(번호)                                        페이지 프레임 내의 위치 결정


스왑(Swap) :


메인 메모리에 여유 공간이 없는 상황에서 새로운 메모리를 할당하고자 할때

특정 메모리 블록(사용될 확률이 가장 낮은 블록)을 하드디스크에 저장하고 나서 그 영역을 새롭게 할당한다.

만약 저장한 영역에 대해 접근이 요청되면 다시 특정 블록을 하드디스크에 저장하고 요청된 영역을

메인 메모리에 로드한다.

(참고 : 램과 하드디스크 사이에 데이터 이동 단위는 페이지 프레임(페이지)의 크기와 같다)

프로세스 A 가 실행을 멈추고 프로세스 B를 실행한다.

램(RAM)에는 프로세스 A를 실행시키기 위한 데이터가 존재한다. 하지만 프로세스 B를 실행해야 하므로

프로세스 A의 실행을 위한 데이터를 프로세스 A의 스왑파일에 저장한다. 그리고 프로세스 B의 스왑파일을

램에 로드한다.

이러한 스왑으로 인해 두 프로세스가 각각 4GB의 메모리를 할당한다.

'Windows > _System Programming' 카테고리의 다른 글

디렉터리 컨트롤  (0) 2010.03.08
파일 I/O  (2) 2010.03.08
쓰레드(Thread) 동기화 예제 소스  (0) 2010.03.06
쓰레드(Thread) 동기화 개념  (0) 2010.03.04
쓰레드(Thread) 실행순서 동기화  (0) 2010.03.04