본문 바로가기
Computer Architecture/Basic

Logical Address 와 Physical Address

by FastBench 2023. 4. 9.

초안 :  2023.04.07

 

프로그램이 메모리에 올라가면 CPU는 프로그램이 올라간 특정 주소를 W/R 하며 실행을 한다.

그런데 만약 프로그램 여러개를 실행중이라면 메모리에도 여러개의 프로그램이 올라가있을텐데,

CPU는 각각의 프로그램 주소가 어디서 부터 시작하고 어디서 끝나는지 알아야 하는 것일까?

 

 

이를 이해하기 위해 메모리의 주소에는 Logical Address, Physical Address 두가지가 있다는 것을 알아야 한다.

logical address 는 실행중인 프로그램 각각에게 부여된 0번지 부터 시작하는 주소를 의미하고, physical address는 정보가 저장된 메모리 하드웨어 자체의 주소이다.

메모리에 저장되는 정보는 계속 바뀐다. 실행이 끝나면 삭제되고, 새로운 프로그램이 실행되면 새로운 정보가 메모리에 올라간다. 같은 프로그램이라도 킬때마다 새로운 주소에 올라간다. cpu 입장에서는 메모리의 어떤 주소에 어떤 정보가 있는지 알기 힘들다.  그리고 프로그램 입장에서는 다른 프로그램이 몇번지에 위치해있는지 알 필요가 없다.따라서 CPU 는 프로그램을 실행할 때 현재 프로그램을 기준으로 0번지 부터 시작하는 Logical address 를 사용한다. 

 

 

 

MMU (Memory Management Unit)

그런데 CPU가 아무리 logical address를 사용한다고 해도 실제 메모리와 상호작용을 하려면 결국 logical address와 physical address간의 변환이 이루어 져야 한다.  이 과정은 CPU 와 Address bus 사이에 위치한 MMU (Memory Management Unit) 이란 하드웨어에 의해 수행된다. (현대 아키텍쳐에서  MMU는 별도의 하드웨어라기 보다 대부분 Chip 내에 프로세서와 함께 회로로 탑재되어있다.)

 

CPU입장에서는 logical address 만 사용하여 메모리에 접근을 하겠지만

아래 그림과 같이, 실제로 MMU를 거치게 되는데, 프로그램의 첫 physical address 가 저장된 base register 값과 logical address값을 더해서 메모리에 접근하게 된다.

메모리 보호

아래의 상황을 가정해보자. 프로그램에 버그가 발생하여 Logical address가 잘못되었다. 그 결과 타 프로그램의 주소에 접근하는 상황이 발생하게 된다. 이는 큰 오류를 발생시킬 수 있으므로 절대 이루어져서는 안된다.

 

이를 방지하기위해 limit register 가 존재한다.

limit register (한계 레지스터)는 프로그램 logical address의 최대 크기를 저장하게되고, CPU는 메모리에 접근하기전에 logical address와 limit register 보다 작은지 검사한다. 만약 logical address가 더 크다면 타 프로그램에 접근하게 된다는 뜻이므로 인터럽트 (trap)을 발생시켜 실행을 중단한다.

 

 

추가로 페이징, 페이지테이블과 같은 추가적인 설명이 필요하나, 해당 내용은 추후 운영체제 게시판에 포스팅 할 예정이다.

 

 

Reference

  • 혼자 공부하는 컴퓨터 구조 + 운영체제, 한빛미디어, 강민철

댓글