RAM[Addressing]
Addressing
주소에는 2가지의 종류가 존재합니다.
먼저 주소에 대해 알아보기전에 왜 주소가 2가지로 나뉘게 됬는지 간략하게 알아보겠습니다.
CPU와 메모리에 저장되어 실행중인 프로그램은 메모리 몆 번지에 무엇이 저장되어 있는지 알 수가 없습니다.
그 이유는 메로리에 저장된 정보는 시시각각 변하기 때문입니다.
메모리에는 새롭게 실행되는 프로그램이 시시때떄로 적재되고, 실행이 종료된 프로그램은 삭제가 됩니다.
게다가 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 달라질 수 있습니다.
예를 들어서 200번지에 적대되었던 프로그램을 다시 실행하면 300번지, 다시 실행하면 150번지에 적재될 수 있습니다.
이로인해 CPU와 실행 중인 프로그램이 현재 메모리 몆 번지에 무엇이 저장되어 있는지 알기란 어렵습니다.
이로인해 주소는 물리주소, 논리주소로 나뉘게 되었습니다.
물리주소
정보가 실제로 저장된 하드웨어상의 주소를 의미합니다.
논리주소
실행중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소입니다.
즉, 메모리가 사용하는 주소는 하드웨어상의 실제 주소인 물리주소 이고, CPU와 실행 중인 프로그램이 사용하는 주소는 각가의 프로그램에 부여된 논리주소 입니다.
MMU
[ 사진 ] MMU는 CPU와 주소 버스 사이에 위치한 메모리 관리 장치입니다.
CPU와 메모리간의 상호작용을 위해 논리주소를 물리주소로 변환시켜주는 하드웨어 장치입니다.
예를 들어서 CPU가 100번지의 데이터를 삭제하라고 하면, MMU안에 있던 베이스 레지스터[15000]와 CPU가 발생시킨 논리주소를 더해서, 15100이라는 물리주소로 변환됩니다.
그럼 이제 이렇게 변환된 물리주소에 맞는 메모리 번지의 프로그램이 삭제가 됩니다.
여기서 베이스 레지스터는 프로그램의 첫 물리 주소를 저장하고, 논리주소는 프로그램의 시작점으로부터 떨어진 거리입니다.
메모리 보호 기법
[사진] 메모리 보호 기법은 다른 프로그램의 영역을 침범할 수 있는 명령어는 위험하기 때문에 논리 주소 범위를 벗어나는 명령어 실행을 방지하고 실행 중인 프로그램이 다른 프로그램에 영향을 받지 않도록 보호하는 방법입니다.
이는 한계 레지스터라는 레지스터가 담당합니다.
베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리주소의 최대 크기를 저장합니다.
즉, 프로그램의 물리 주소 범위는 베이스 레지스터 + 한계 레지스터 값 미만이면 됩니다.
또한 CPU는 메모리에 접근하기 전에 항상 논리주소가 한계 레지스터 보다 작은지를 검사합니다.
만약 CPU가 한계 레지스터보다 높은 논리주소에 접근하려고하면 인터럽트를 발생시켜 실행을 중단합니다.
예를 들어서 실행중인 A프로그램이 100번지부터 300번지까지 이고, 베이스 레지스터에 100, 한계 레지스터에 200이 있다고 가정하겠습니다.
근데 만약에 A프로그램 500번지를 삭제하라는 명령어가 들어오게 된다면 이는 한계 레지스터보다 높은 논리주소에 접근하려고 합니다.
이런 경우에 인터럽트를 발생시켜 실행을 중단합니다.
이러한 메모리 보호 기법으로 실행 중인 프로그램의 독립적인 실행 공간을 확보하고 하나의 프로그램이 다른 프로그램을 침범하지 못하게 보호할 수 있습니다.