2024. 5. 17. 15:19ㆍCS/컴퓨터구조
주소에는 물리 주소와 논리 주소가 있다.
- logical = virtual ➡ 가상 메모리 주소
- physical ➡ 실제 메모리 주소
왜 두 개의 주소로 분리를 했을까? 이유는 CPU와 실행 중인 프로그램이 현재 메모리 몇 번지에 무엇이 저장되어있는지 전부 알지 못하기 때문이다. 같은 프로그램을 실행하더라도 실행할 때마다 실제 메모리에 저장되는 주소는 달라진다. 그리고 프로그램은 매우 짧은 시간에 실행되다가 종료되기도 한다. 이때마다 일일히 현재 메모리에 어떤 것이 저장되었는지 기억하는 것은 매우 어렵다.
그래서 각 프로그램들은 물리 주소가 아닌 0번지부터 시작하는 자신만을 위한 논리 주소를 가지고 있다.
논리 주소는 실행중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소를 의미한다.
물리 주소는 데이터가 실제로 저장된 하드웨어상의 주소를 의미한다.
프로그램마다 같은 논리 주소가 얼마든지 있을 수 있다. CPU는 이 논리 주소를 받아들이고 해석하고 연산한다.
CPU가 받아들이고 이해하는 것은 논리 주소이다. 그렇다면 CPU가 어떤 작업을 수행하고 싶을 때는 논리 주소에 접근하게 되는데 만약 위의 그림에서 CPU가 인터넷 브라우저 0번지에 어떤 작업을 수행하고, 게임 0번지에 어떤 작업을 수행하고 싶다고 가정하자.
메모리 입장에서는 0번지라는 것은 하드웨어, 물리적 공간에 하나밖에 존재하지 않는 번지 수이다. 하지만 CPU는 논리주소를 이해하기 때문에 메모리가 이해하는 물리주소의 체계와 차이점이 존재한다. 즉, CPU와 메모리가 서로 이해하기 위해서는 논리주소를 물리주소로 변환하는 과정이 필요하다는 것이다.
이때 MMU(Memory Management Unit)이 등장하여 논리 주소와 물리 주소 간의 변환을 수행한다.
MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.
(가상 메모리 주소를 실제 메모리 주소로 변환한다라는 말과 같은 의미이다.)
위의 그림처럼 베이스 레지스터는 프로그램의 첫 물리 주소를 저장하는 셈이고, 논리 주소는 프로그램의 첫 물리 주소로부터 떨어진 거리인 셈이다.
만약 인터넷 브라우저 프로그램 명령어 중 논리주소 1100번지 데이터를 삭제하라는 명령어가 있으면 어떻게 될까?
위의 명령어가 실행되면 논리주소 1100과 베이스 레지스터의 2000이 더해져서 실제 물리주소 3100번지의 데이터가 삭제된다.
그런데 물리주소 3100번지는 게임 프로그램 영역이다. 따라서 게임 프로그램 영역의 데이터가 삭제되는 불상사가 발생한다.
때문에 메모리 보호 기법이 필요하다. 이는 한계 레지스터라는 레지스터가 담당한다.
베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면 한계 레지스터는 논리 주소의 최대 크기를 저장한다.
프로그램의 물리 주소 범위는 베이스 레지스터 값 이상 ~ 베이스 레지스터 + 한계 레지스터 값 미만이 된다.
오른쪽 그림처럼 프로그램 A의 200번지 데이터를 삭제하라는 명령어가 있다고 가정하자.
이때 논리주소 200은 한계 레지스터 값인 150을 넘는다. 따라서 해당 논리주소의 실제 물리주소는 프로그램 A의 영역이 아닌 것이다.
따라서 CPU는 메모리에 접근하기 전에 접근하고자 하는 논리 주소가 한계 레지스터의 값보다 작은지 항상 검사해야한다.
만약 논리주소가 한계 레지스터 값보다 크다면 인터럽트를 발생시켜 실행을 중단한다.
'CS > 컴퓨터구조' 카테고리의 다른 글
보조기억장치 (0) | 2024.05.17 |
---|---|
메모리와 캐시 메모리 (0) | 2024.05.17 |
CPU 성능 향상 기법 (0) | 2024.05.16 |
명령어 사이클과 인터럽트 (0) | 2024.04.24 |
CPU의 작동원리2️⃣ - 레지스터 (0) | 2024.04.18 |