본문 바로가기

CS-Study

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

728x90

📗 논리 주소와 물리 주소

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

왜냐면 메모리에 저장된 값은 시시각각 변하기 때문이다.

 

- 새롭게 실행되는 것 -> 새롭게 적재

- 실행이 끝난 것 -> 메모리에서 삭제

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

 

✔ 왜 시시각각 변하는 걸까?

- 프로그램 런타임에 새로운 코드나 라이브러리가 메모리에 동적으로 할당되기 때문이다.

 

- 보안상의 이유도 존재함. 프로세스의 주소 공간을 매 실행마다 무작위로 배치하여,

같은 코드라도 메모리 주소가 예측하기 어렵게 만들어 악성코드나 공격자가 공격하기

어렵게 만듬 -> 운영체제에서 ASLR 사용 ( Address Space Layout Randomization )

 

- 다수의 프로세스가 동시에 실행되거나, 여러 사용자가 시스템을 사용하는

환경에서 메모리를 효율적으로 관리하고 충돌을 방지하기 위해.

 

 

프로세스가 메모리에 저장되는 주소가 매번 변하는 문제점을 극복하기 위해서

논리주소와 물리주소로 주소체계를 나눈 것.

 

💻 물리주소

정보가 실제로 저장되어있는 하드웨어 상의 장소를 말한다.

겹치는 주소 번지가 없음

 

💻 논리주소

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

동일한 주소 번지가 있을 수 있음

 

 

CPU와 메모리가 상호작용 하려면 논리주소와 물리주소간에 변환작업이 필요하다.

 

 

📗 MMU

MMU : 메모리 관리 하드웨어 장치, CPU와 메모리 사이에 위치한다.

논리주소와 물리주소 사이에 변환을 이루어주는 장치이다. 

MMU에 의해서 논리주소가 물리주소로 혹은 물리주소가 논리주소로 변환된다.

 

 

✔  변환 과정

MMU는 CPU가 생성한 논리주소를 베이스 레지스터(기준주소)에 더해 물리주소로 변환한다.

 

 

 

만약 CPU가 프로그램 A의 100번지 삭제 명령을 내리면

1. 물리주소에 저장되어있는 프로그램 A의 시작 주소를 베이스 레지스터에 저장 (15000번지라고 가정)

2. 기준주소로부터 100번지 떨어져 있는 15100 번지에 저장된 데이터를 삭제시킴

 

 

✔ 다른 프로그램 주소를 침범하는 명령어가 있으면 어떡하나?

 

다른 프로그램 주소를 침범하는 명령어는 있어선 안된다.

프로그램 A에서 내린 명령이 프로그램 B에서 실행되어 문제를 일으킬 수 있기

때문이다. 이를 방지하기 위해 한계 레지스터가 존재한다.

 

 

📗 한계 레지스터

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

- 베이스 레지스터가 프로세스의 시작주소를 저장한다면 한계 레지스터는 

해당 프로세스의 논리주소의 최대크기를 저장한다.

 

CPU가 메모리에 액세스 하기 전에 접근하고자 하는 논리 주소가 한계 레지스터

보다 작은 지를 항상 검사하게 된다.

이는 실행중인 프로그램의 독립적인 실행공간을 확보하고 하나의 프로그램이 

다른 프로그램을 침범하지 못하도록 보호하기 위함이다.

 

만약 CPU가 한계 레지스터가 저장한 값 보다 큰 논리 주소에 접근하려 하면 

메모리 보호 예외가 발생하여 시스템이 이를 감지하고 처리한다.

따라서 CPU는 하나의 프로그램에 대해서

해당 프로그램의 (베이스 레지스터 값 ~ 베이스 레지스터 + 한계 레지스터 값) 까지만 접근이

가능하다고 할 수 있다.

 

 

 

학습 출처 : https://www.youtube.com/watch?v=kFWP6sFKyp0&t=16571s

 

728x90
반응형