. 9.1 물리 및 가상주소 방식
본문 바로가기
프로그래밍 공부/CSPP

9.1 물리 및 가상주소 방식

by 불냥이_ 2021. 1. 15.

메인 메모리는 M개의 연속적인 바이트 크기의 셀의 배열로 구성된다.

* 셀이라는 것은 메모리의 공간 기본단위인가?

 

각 바이트는 0, 1, 2, 3 ... 등의 물리주소(Physical Address)를 가지고, CPU는 이런 주소를 통해 메모리에 접근가능하다.

이런 방식을 물리 주소 방식이라고 부른다.

 

물리 주소 방식

 

현재의 프로세스들은 다음과 같은 가상주소 방식을 사용한다.

가상 주소 방식

초기의 컴퓨터들은 직접 물리주소 방식을 사용했다고 하는데, 왜 가상 주소 방식을 사용하는 것인가?

이것이 가상메모리와 연관이 있는 것일까?

 

( 가상 메모리 - 나무위키 (namu.wiki) )

「현대의 CPU는 전부 MMU라는 메모리 관리 유닛을 별도로 내장하고 있다.

 

각 프로세스가 동립된 가상주소를가지면, A 프로세스에서 0x1000 라는 주소를 가질 수도 있고 동시에 B 프로세스에서도 0x1000 이라는 주소를 가질 수도 있다. 이 두 프로세스에서 각자 0x1000 이라는 주소에 접근하는 명령을 실행할 경우, CPU 는 프로세스(컨텍스트)마다 별도로 가지고 있는 페이지 테이블이라는 대상을 참조한다.

 

이 페이지 테이블은 한 마디로 가상 주소와 실제 주소를 연결시켜주는 테이블이다. 가령 A 프로세스의 페이지 테이블에서, 0x1000 주소에 대응되는 실제 주소는 0x300000 으로 나오고, B 프로세스의 페이지 테이블에서는 0x1000 주소에 대응되는 실제 주소가 0x400000 인 것이다. 이렇게 되면 두 프로세스는 동일한 0x1000 이라는 주소를 참조했지만, 실제로는 MMU 가 이 페이지 테이블을 참조해서 실제 물리 메모리 주소를 얻고 그 위치를 참조해서 값을 가져오게 된다. 이렇게 되면 두 프로세스의 주소 공간이 겹치지 않고 독립적으로 실행될 수 있으며 프로그래머는 다른 프로세스의 주소 공간을 생각할 필요가 없어진다.」

 

즉, 두 프로세스가 동일한 주소를 참조해도 실제로는 다른 주소로 가게 된다는 뜻인 것 같다.

 

*왜 동일한 주소를 참조하는지는 정확히는 모르겠지만, 아마 A, B 프로세스가 독립적인 프로세스라면 서로 어떠한 주소를 참조하는 지 모를 것이다. 그리고 처음부터 다른 프로세스들이 어떻게 참조하는 지 신경쓰려면 엄청나게 복잡해질 것 같다. 그 때문에 그냥 같은 주소를 참조해도 MMU가 다른 주소를 찾아가게 관리함으로써, 프로그래머가 주소공간에 대해 신경쓰지 않도록 하는 것이 목적아닐까?

 

 

CPU는 가상주소지정으로 가상주소(VA)를 생성해서 메인 메모리에 접근한다. 그리고 MMU가 이것을 적절히 번역하여 실제 주소 (물리주소)로 찾아가게한다. 

 

 

요약 : 

초기 컴퓨터들은 CPU가 직접적인 메인 메모리의 물리주소를 찾아갔다. 그러나 컴퓨터가 발달하고 CPU가 여러가지 독립적인 프로세스를 사용하게 됨으로서 서로 다른 물리주소를 참조하기는 불가능에 가까워졌다.

 

그래서 가상 주소를 사용하여, 프로세스가 가상주소로 메인 메모리에 접근하려고 하면 MMU가 이를 직접 주소로 바꿔주어 메인메모리에 접근하도록한다. 

댓글