메모리 주소체계는 논리주소와 물리주소로 나뉜다.
논리주소는 실행 중인 프로그램 각각에게 부여된 주소로 X번지 주소는 논리주소 상에서 여러 개 존재할 수 있다.
물리주소는 데이터가 실제로 저장된 하드웨어상(메모리)의 주소로 X번지는 오직 하나만 존재한다.
그러면 동일한 논리주소가 여러개 있는데 어떻게 그 논리주소를 물리주소로 변환하는 걸까?
MMU(메모리 관리 장치)라는 하드웨어가 논리주소를 물리주소로 변환을 해준다.
MMU는 베이스 레지스터(메모리에 프로그램이 저장되어 있는 시작주소)라는 값을 저장하고 있는데 사용자가 논리주소로 100번지의 값을 삭제해 달라고 요청하면 베이스 레지스터로부터 100만큼 떨어진 곳으로 이동하게 된다.
ex) 실행중인 LoL이 메모리에서 15000 ~ 20000 주소까지 사용하고 있다면, 그중에서 15000번지의 주소는 프로그램의 시작주소를 가리키고 15100번지의 주소는 어떠한 아이템을 가리키는 방식이 된다.
실제 메모리 상에 저장되어 있는 해당 프로그램의 시작주소(물리주소)가 MMU의 베이스 레지스터 값에 담겨있는데 그거를 논리주소와 더해서 해당 위치로 이동한다.
만약에 논리 주소를 조작해서 해당 프로그램이 위치하고 있는 물리주소상의 위치를 넘어서 다른 메모리 영역을 침범할 수 있는데 한계(limit) 레지스터가 다른 메모리 영역을 침범하는 것을 막도록 도와준다.
한계 레지스터는 논리 주소의 최대 크기(논리 주소에 베이스 레지스터를 더했을 때 해당 프로그램의 마지막 물리 주소가 될 수 있는 값)를 저장한다.
베이스 레지스터(시작 물리주소) <= 접근할 수 있는 범위 <= 베이스 레지스터 + 한계 레지스터(마지막 물리주소)
베이스 레지스터에 999를 더했을때 해당 프로그램의 마지막 물리주소는 1999가 되므로 한계 레지스터 값은 999가 된다.
메모장의 물리주소는 1000번지 ~ 1999번지에 해당하므로 한계 레지스터는 999의 값을 저장하고, CPU에서 한계 레지스터 값보다 큰 1000번지의 데이터를 삭제하라고 요청하면 한계 레지스터의 값을 넘지 않는지 검사한다.
'ETC' 카테고리의 다른 글
터미널이란? (0) | 2021.10.06 |
---|---|
생활코딩 - 머신러닝의 분류 (0) | 2021.07.02 |
생활코딩 - 심리학 (0) | 2021.07.01 |
생활코딩 - 모델 (0) | 2021.07.01 |
기본 개발용어 (0) | 2021.06.10 |