[컴퓨터 구조/운영체제] 메모리의 주소 공간

myungji·2024년 5월 10일

이 글은 한빛미디어 출판사의 '혼자 공부하는 컴퓨터 구조+운영체제(강민철 저)'를 정리한 내용입니다.

물리 주소와 논리 주소

물리 주소: 메모리 하드웨어가 사용하는 주소
논리 주소: CPU와 실행 중인 프로그램이 사용하는 주소

메모리에 저장된 정보들은 시시각각 변하기 때문에 CPU와 실행 중인 프로그램은 몇 번지에 무엇이 저장되어 있는지 모른다. 또한 같은 프로그램이더라도 실행할 때마다 적재되는 주소가 달라질 수 있다.

그렇다면 CPU와 실행중인 프로그램이 이해하는 주소는 무엇일까?

메모리가 사용하는 물리 주소는 말 그대로 정보가 실제로 저장된 하드웨어 상의 주소를 의미한다.

CPU, 실행중인 프로그램이 사용하는 논리 주소는 실행중인 프로그램 각각에게 부여된 0번지부터 시작되는 주소를 의미한다.

예를 들어 현재 메모리에 메모장, 게임, 인터넷 브라우저 프로그램이 적재되어 있다고 해보자. 각각의 프로그램은 다른 프로그램들이 몇 번지에 저장되어 있는지 알 필요가 없다. 따라서 물리 주소가 아닌 0번지부터 시작하는 자신만을 위한 주소인 논리 주소를 가지고 있는 것이다. 프로그램마다 같은 논리 주소는 얼마든지 있을 수 있는 것이다.

즉, 물리 주소는 메모리가 사용하는 하드웨어상의 실제 주소
논리 주소는 CPU와 실행중인 프로그램이 사용하는 각각의 프로그램에 부여된 주소

이런 점에서 CPU가 메모리와 상호작용을 하려면 물리 주소와 논리 주소 간의 변환이 필요하다!

이 변환은 CPU와 주소 버스 사이에 있는 메모리 관리 장치(MMU, Memory Management Unit)라는 하드웨어에 의해 수행된다.

MMU

MMU는 CPU가 발생시킨 논리 주소에 베이스 레지스터 값을 더하여 논리 주소를 물리 주소로 변환한다.

즉, 베이스 레지스터에는 한 프로그램의 가장 작은 물리 주소, 프로그램의 첫 물리 주소가 저장되는 것이고, 논리 주소는 프로그램의 시작점으로부터 떨어진 거리이다.

메모리 보호 기법

프로그램의 논리 주소 영역을 벗어난 데이터에 대한 명령어들은 실행되어서는 안된다. 현재 실행중인 프로그램과 전혀 관련 없는 데이터들이 삭제될 수 있기 때문이다. 이렇게 논리 주소 범위를 벗어나는 명령어 실행을 방지하고, 실행 중인 프로그램이 다른 프로그램에 영향 받지 않도록 보호하는 역할은 한계 레지스터가 담당한다.

한계 레지스터

한계 레지스터는 논리 주소의 최대 크기를 저장하기 때문에, 한 프로그램의 물리 주소 범위는 다음과 같다.

(베이스 레지스터 값) <= 물리 주소 < (베이스 레지스터 값) + (한계 레지스터)

CPU는 메모리에 접근하기 전에 항상 논리 주소가 한계 레지스터보다 작은 지를 검사해야 한다. 한계 레지스터보다 더 큰 논리 주소에 접근하려 한다면 인터럽트(트랩)를 발생시켜 실행을 중단한다.


출처 - '혼자 공부하는 컴퓨터 구조+운영체제(한빛미디어, 강민철 저)'

profile
iOS 초보바리

0개의 댓글