[컴퓨터 구조] 메모리의 주소 공간

byeol·2023년 3월 16일
0

오늘 CPU와 메모리가 어떻게 명령어와 데이터의 주소를 저장하는지 그 방법에 대해서 배웠다.

주소에는 논리주소와 물리주소가 있는데
CPU는 논리주소로, 메모리는 물리주소로 데이터와 명령어에 접근한다. 그렇다면 이 둘이 어떻게 소통이 가능한 것일까?

오늘도 🏃‍♀️🏃‍♂️🏃

물리주소와 논리주소

CPU와 실행 중인 프로그램은 메모리에 무엇이 저장되어 있는지 다 알지 못한다.

왜냐하면 메모리의 상태는 시시각각 변하기 때문에 이를 다 알고 있을 수 없다.

메모리는 정보가 실제 저장된 하드웨어의 주소(물리 주소)를 알고 있고 CPU와 실행 중인 프로그램은 각각의 프로그램이 0번지로 시작하는 주소(논리 주소)를 알고 있다.

실행중인 프로그램이 카카오톡, 유뷰브, velog라고 했을 때
각각의 프로그램은 서로의 주소를 알고 있을 필요가 없다.
그냥 본인의 프로그램과 관련된 주소만 알고 있으면 된다.
따라서 각각의 프로그램은 0번지로 시작하는 논리주소를 가지고 있다. 모든 프로그램은 0번지의 논리 주소를 가지고 있다.

그럼 CPU와 메모리를 어떻게 소통할까?

논리 주소와 물리 주소와의 변환은 CPU와 주소 버스 사이에 있는 메모리 관리 장치(Memory Management Unit)라는 하드웨어가 담당한다.

나는 앞에 특정 레지스터를 이용한 주소지정방식에서 베이스 레지스터에 대해서 배웠다. 베이스 레이스터는 어떤 명령어가 저장된 주소를 찾을 때 얼마큼 떨어져 있다를 나타내는 오퍼랜드의 기준값을 저장하고 있다고 했다.

이 MMU(메모리 관리 장치-Memory Management Unit)는 베이스 레지스터에 저장된 기준값을 바탕으로 논리주소를 물리주소로 변환한다.

기준값은 무엇일까?
바로 프로그램의 가장 작은 물리 주소가 된다.

베이스 레지스터는 실행중인 프로그램의 가장 작은 물리 주소를 저장하고 있고 MMU는 베이스 레지스터에 저장된 값을 바탕으로 논리주소를 물리주소로 변환하는 역할을 한다.

예를 들어보자.

프로그램C의 가장 작은 물리 주소 : 4500번지
명령어: 프로그램 C의 100번지 데이터 삭제
베이스 레지스터 저장된 값 : 4500번지

MMU : 45100번지로 변환

메모리 보호 기법

문제는 논리 주소를 물리 주소를 변환했는데
그 값이 실제로 실행중인 프로그램의 논리 주소의 범위를 벗어날 수도 있다는 것이다.

예를 들어보자.

프로그램C의 가장 작은 물리 주소 : 4500
프로그램C의 가장 큰 물리 주소 : 4700
명령어: 프로그램 C의 500번지 데이터 삭제
베이스 레지스터 저장된 값 : 4500번지

MMU : 5000번지로 변환

5000번지는 프로그램C의 논리 주소의 범위를 벗어난다!

이를 해결해주는 것이 메모리 보호 기법이다.

메모리 보호 기법은 한계 레지스터라는 곳에 프로그램의 크기를 저장해두고

베이스레지스터 <= 논리주소 + 베이스 레지스터 < 베이스 레지스터 + 한계 레지스터

위와 같은 범위에 있지 않는다면 인터럽트를 발생시켜 실행을 중단한다.

예를 들어보자.

프로그램C의 가장 작은 물리 주소 : 4500
프로그램C의 가장 큰 물리 주소 : 4700
명령어: 프로그램 C의 500번지 데이터 삭제

베이스 레지스터 저장된 값 : 4500번지
한계 레지스터 저장된 값 : 200

MMU : 5000번지로 변환

그러나 한계레지스터+베이스레지스터 값을 넘어서 실행 중단!

profile
꾸준하게 Ready, Set, Go!

0개의 댓글