1 minute read

32비트 시스템에서 프로세스 생성 시 4G바이트 메모리를 할당받을 수 있다.

그러나 메인 메모리의 크기는 여기에 턱없이 부족하다.

따라서 4G바이트는 실제 존재하지 않는 가상의 주소라는 결론을 내릴 수 있다.

이렇게 가상의 주소를 지정하는 것을 가리켜 가상 주소 지정(Virtual Addressing)이라 한다.

하드디스크에 할당 ?

문제 1. 선 할당으로 인한 부담

프로세스 생성할 때마다 4G바이트씩 하드디스크 할당해 줄 것인가?

문제 2. 느린 속도의 개선 필요성

가상 메모리 시스템

위의 두가지 문제를 해결하기 위해 가상 메모리 시스템을 이해해보자

대부분의 시스템에서 페이징(Paging)이라는 기법을 사용한다.

시스템의 사양 가정

가정 1. 16비트 시스템. 따라서 0부터 64k-1 까지 주소 지정 가능 (이를 바탕으로 32비트, 64비트 시스템으로 이해를 확장 가능하다)

가정 2. 프로세스별로 64k바이트 메모리 할당, 물론 가상 메모리 할당

가정 3. 메인 메모리 16k바이트, 즉 램 용량이 16k바이트

문제 상황

실제 메모리는 16k바이트가 전부인데, 프로세스를 생성할 때마다 64k바이트를 할당하고자 하니 문제,

특히 16k 번지 이상의 메모리는 접근조차 불가능

이 문제를 해결하기 위해 다음과 같은 구조를 생각, 프로그램이 실제로 64k바이트를 전부 사용하지 않을 확률이 꽤 높다는 데 힌트가 있다.

MMU(Memory Management Unit)

이것의 역할은 16k바이트밖에 존재하지 않는 메모리를 64k바이트가 존재하는 것처럼 CPU가 느끼도록 컨트롤 하는 역할을 한다.

(물론 32비트 시스템에서는 4G바이트의 메모리가 존재하는 것처럼 느끼게 한다)

MMU를 CPU와 독립적인 하드웨어로 표현되지만, 실제로는 CPU와 함께 패키징(Packaging)되는 장치이다.

MMU 의 역할

  1. CPU가 메모리로 직접 접근하지 않고 MMU를 통해서 요청한다

    “MMU야, 1K번지를 시작으로 20바이트를 할당하려고 한다”

  2. 이런 요청을 받은 MMU는 메인 메모리에서 아직 사용되지 않는 메모리 블록 하나를 골라서 할당을 한다.

  3. 만약 4K바이트로 메인 메모리를 나눴는데 이는 무엇을 의미하는가?

  4. 그리고 1K 번지부터 20바이트만 요청하였는데, 메인메모리 4K바이트 블록의 용도(0번지에서 4K번지로 가상 주소 지정)가 모두 지정되면, 무슨 이유인가?

메모리 할당의 단위가 4K바이트인 셈이다.

0K-4K, 4K-8K, 8K-12K, 12K-16K, 16K-20K …

  1. 12K-13K까지만 필요한데.. 나머지 13K-16K번지는 필요없는데 너무 비효율적인거 아닌가?

    나머지 13K-16K번지도 조만간 사용하게 될 것

  2. 임의로 정했던 4K바이트는 시스템에 따라 수백 바이트에서 64K바이트까지 크기가 다양하다.

이러한 블록을 하드웨어 입장에서 페이지 프레임(Page Frame)이라고 하고, 소프트웨어 입장에서는 페이지(Page)라고 한다.

즉 페이지 프레임은 실제 메인 메모리 블록을 의미한다.

페이지는 가상 메모리 블록을 의미한다.

출처: https://popcorntree.tistory.com/68 [어떤 프로그래머]

Categories:

Updated: