프로그래밍/컴퓨터구조 및 운영체제

메모리의 주소공간 - 물리주소와 논리주소

gameObject 2023. 10. 24. 12:08
728x90

* 메모리를 학습하는데 있어서 주소공간은 굉장히 중요한 개념이다.


메모리내의 주소체계는 크게 2가지가 있다.

1. 물리주소

2. 논리주소

 

CPU와 실행중인 프로그램의 입장에서 바라본 논리주소

실제 하드웨어 주소번지에 해당하는 물리주소

 


CPU는 실행중인 프로그램이 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까?

NO /

메모리에 저장된 값들은 시시각각 변하며

새롭게 실행되는 프로그램은 새롭게 메모리에 적재된다.

실행이 끝난 프로그램은 메모리에서 삭제되고

같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소가 달라지기 때문에

CPU는 실행중인 프로그램이 현재 메모리 몇번지에 어떻게 저장되어있는지 다 알고있지 못한다.

이런 점때문에 논리주소가 생겼다.

 

논리주소

- CPU와 실행중인 프로그램 입장에서 바라본 주소

- 실행중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소이다.

즉, 각각 실행되는 프로그램들 하나하나가 내부적으로 0번부터 시작된다고 생각하면 된다.

사람들 키가 각각 170 180처럼 다른것처럼, 프로그램들도 길이가 정해져있을텐데 그 크기라고 생각하면 좋을것 같다.

 

물리주소

- 메모리 입장에서 바라본 주소

- 정보가 실제로 저장된 메모리 하드웨어상의 주소이다. => 따라서 실행중인 프로그램마다 겹칠 수가 없다.

 


주소변환 (논리주소 <-> 물리주소)

- MMU (메모리 관리 장치)라는 하드웨어에 의해 변환된다.

- MMU는 논리주소와 베이스 레지스터(프로그램의 기준 주소역할을 하는 레지스터)의 값을 더하여 논리 주소를 물리주소로 변환한다.

  * 베이스 레지스터 : 물리 주소상의 프로그램의 시작주소가 담긴다.

  * 논리주소 : 실제로 프로그램상에서 얼마만큼 떨어진 거리인 셈이다.

 

메모리 보호

한계레지스터 (리밋 레지스터 Limit register)

위 레지스터를 두어 다른 프로그램의 메모리 주소영역을 침범하는 명령어가 실행되지 않도록 막는다.

ex) 논리주소가 999까지인 프로그램에서 CPU에 1500번째 논리주소에 명령어를 실행한다면 1500번째에는 다른 프로그램이 실행중일테니 문제가 생길것이다. 이를 방지하기 위함!

 

한계레지스터 설명

- 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막는다.

- 한계 레지스터는 논리 주소의 최대 크기를 저장하고 있다. <=> (베이스 레지스터는 실행할 프로그램의 최소 주소값을 갖고있음)

** 베이스 레지스터 값 <= 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터 값

 

정리

CPU는 메모리에 접근하기 전 접근하고자 하는 논리주소가 한계 레지스터보다 작은지를 항상 검사한다.

실행중인 프로그램의 독립적인 실행 공간을 확보하며 하나의 프로그램이 다른 프로그램을 침범 하지 못하게 보호한다.

 

 

*혼자공부하는 컴퓨터구조 운영체제를 보며 공부한 내용을 정리하였습니다.

728x90