CS

메모리의 주소공간 - 논리주소, 물리주소, 베이스 레지스터, 한계 레지스터

whyHbr 2024. 2. 24. 20:24
728x90
반응형

https://www.inflearn.com/course/lecture?courseSlug=%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C&unitId=149167

 

학습 페이지

 

www.inflearn.com

논리주소와 물리주소로 나눈 이유

논리주소 물리주소 변환 방법

 

매모리 주소 체계는 논리주소와 물리주소로 나뉜다. 

논리주소?

CPU가 받아들이고 해석하는 모든 주소. cpu와 실행중인 프로그램 입장에서 바라본 주소.

프로그램을 실행하는 cpu와 프로그램들 각각의 입장에서 바라본 주소이다.

모든 프로그램은 0번지부터 시작한다. 실행중인 모든 프로그램에게 0번지를 부여한다.

 

 

물리주소?

실제 하드웨어 주소 번지에 해당. 

실제 하드웨어상의 주소이기 때문에 0번지가 하나뿐이고 겹치는 번지가 없다.

메모리 입장에서바라본 주소이다.

 

Q. cpu는 실행중인 프로그램이 현재 몇번지이고 무엇이 저장되어있는지 다 아나요?

A . 모른다.

이유는, 매번 새롭게 실행되는 프로그램은 새롭게 보조기억장치로부터 메모리로 적재되기도 한다. 

메모리에 저장된 값들은 시시각각 변한다. 새롭게 실행되는 프로그램은 새롭게 매모리에 적재된다.

실행이 끝난 프로그램은 메모리에서 삭제된다. 

같은 프로그램을 실행하더라도 실행할때마다 적재되는 주소는 달라진다. 

이러한 점을 극복하기 위해 주소체계를 물리주소와 논리주소로 나누었다.

 

그렇다면 물리주소와 논리주소 간의 변환은 어떻게 이루어질까..

CPU가 메모리와 상호작용을 하려면, 논리주소를 물리주소로 변환하는 과정이 필요하다.

CPU와 메모리 사이에 있는 MMU (Memory Management Unit, 메모리 관리 장치) 라고 하는 하드웨어에 의해 논리주소는 물리주소로 바뀐다. 

CPU가 이해하고 실행하는 논리주소를 주소버스를 통해 실제 메모리에게 주거나, 메모리로부터 주소 버스를 통해 받아들이는 주소번지를 CPU로 가져올 때는 항상 MMU를 거친다. (어떤 주소든 왔다갔다 할 때는 MMU를 거친다는 말)

주소버스를 통해 메모리로부터 주소를 받아들일 때는 물리주소를 논리주소로 변환

메모리(물리주소)가 CPU에게 주소를 줄 때는MMU 를 통해 물리주소를 논리주소로 변환해 준다

CPU가 주소를 전달할 때도 MMU를 거쳐 논리주소를 물리주소로 변환해 메모리에게 준다. 

 

MMU? 주소간 변환을 이루는 장치

어떻게 변환할까..

MMU는 논리주소와 베이스 레지스터 값을 더 해 논리를 물리로 변환한다.

( 베이스 레지스터? 기준 주소의 역할을 하는 레지스터. 물리 주소상의 프로그램 시작 주소가 담긴다. )

 

논리주소는 어떻게? 실제로 저장되어 있는 그 프로그램으로부터 얼마나 떨어져 있느냐에 해당하는 정보가 논리주소이다. <-이해못함

 

a의 물리주소상의 시작주소가 15000이다. 그럼 베이스 레지스터에는 15000이 담긴다. 

논리주소는 각각의 프로그램에게 0번지를 제공하기 때문에,

논리주소에게 100번지란, 기준주소(물리적주소의 시작주소) 로부터 100만큼 떨어진 것이라고 표현 할 수 있다. 

 

- 설명-

cpu가 a프로그램의 100번지를 삭제해달라고 요청한다. 모든 프로그램의 논리주소 시작번지는 0번지이다. 

물리 주소상 100번지는 , 베이스 레지스터에 저장되어있는 값(물리주소의 시작 번지) 15000 + 100 (cpu의 요청)

해서 전달한다. 그럼 물리주소상 15100번지가 삭제된다.

물리주소 시작번지(베이스 레지스터가 가지고 있음) + cpu요청번지 하면 되는 것.

논리주소 100번지 데이터를 삭제해주세요 == 물리주소 시작주소에 +100한 물리주소를 삭제해주세요.

 

MMU는 어떻게 논리주소와 물리주소의 변환을 이룰까의 답:

논리주소와 베이스레지스터값을 더 해 주소변환을 이룬다. 

 

메모리 보호

 

다른 프로그램의 영역을 침범하는 명령어를 실행하면 안된다.

위의 경우 물리주소상 2500번지를 삭제해야 하는데, 2500번지는 인터넷 브라우저이다. -> 이런 경우가 발생하면 안되기 때문에 메모리를 보호해야 하는 방법이 필요하다 -> 이 방법이 한계 레지스터

 

한계레지스터/limit register

명령어가 다른 프로그램의 영역을 침범하지 않도록 메모리를 보호해준다.

 

어떻게? 논리주소의 최대 크기를 저장함으로써 영역을 침범하는 명령어의 실행을 막는다. 

다시 말해, 베이스 레지스터가 실행중인 프로그램의 가장 작은 물리주소를 저장한다면 (물리주소의 시작값),

한계 레지스터는 논리주소의 최대 크기를 저장한다.

그렇기 때문에 프로그램의 물리주소 범위는 베이스 레지스터 값보다 크거나 같고, 베이스레지스터(물리주소 min)+ 한계 레지스터(논리주소 max) 값보다 작다. 

그렇기 때문에 어떤 명령어가 한계 레지스터 값보다 큰 논리 주소에 접근하려고 하면 그 명령어의 실행을 막아준다. 그럼 그 명령어가 다른 메모리 주소를 침범할 일이 없다. 

 

인터넷 브라우저 논리주소가 0 - 999, 즉 1000. 

한계 레지스터는 1000을 저장하고 있다. ( 논리주소는 0부터니까 )

이 경우 명령어가 3100을 삭제하라고 한다. 이런 경우에 실행을 막는다. 

왜 3100? 인터넷 물리주소의 최소값 2000 + 논리주소 1100 = 3100

 

여기 한계 레지스터에 1000이 저장.

CPU가 1000이 넘어가는 논리주소에 접근 하려고 할 시 명령어의 실행을 막아주고

베이스 레지스터 + 한계 레지스터 미만에 속한 범위 내에만 접근할 수 있도록 해준다.

 

이런걸 막아준다.

 

한계 레지스터는 프로그램 실행의 독립적인 공간을 확보하고 다른 프로그램을 침범하는 일을 막을 수 있다. 

정리:

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

크다면, 다른 프로그램의 주소 공간을 침범한 것이다. -> 인터럽트 발생. 명령어 실행 불가

작다면, 베이스 레지스터와 논리 주소 값을 더 해 물리주소로 변환 -> 실제 메모리에 접근한다

 

한계 레지스터는, 실행중인 프로그램의 독립적은 실행 공간을 확보하고 프로그램이 타 프로그램에 침범하지 않게 메모리를 보호할 수 있다.

728x90