컴퓨터 구조

메모리의 주소 공간

1space 2025. 6. 20. 02:19

혼자공부하는 컴퓨터구조 + 운영체제제책으로 공부한 내용을 정리한 글입니다.

 

메모리에 저장된 정보의 위치는 '주소'로 표현됩니다

컴퓨터의 주기억장치(RAM)는 모든 정보를 바이트 단위로 저장합니다.
이 바이트 하나하나는 고유한 위치를 가지며, 이 고유한 위치를 주소(address) 라고 합니다.
예를 들어, RAM 안에 1000번지, 1001번지, 1002번지…처럼 번호가 붙어있는 셈입니다.

 

주소에는 두 종류가 있습니다

물리 주소(Physical Address) 실제 메모리(RAM) 하드웨어에서 사용되는 주소입니다
논리 주소(Logical Address) CPU나 실행 중인 프로그램이 이해하고 사용하는 주소입니다

즉, 메모리(RAM)는 물리 주소로 접근하지만, 프로그램은 논리 주소만 보고 작업합니다.

 

 

왜 논리 주소와 물리 주소를 나눠서 사용하는가?

실행 중인 프로그램은 현재 메모리 어디에 적재되어 있는지 알지 못합니다.
그 이유는 다음과 같습니다:

  1. 메모리는 계속 변한다
    • 프로그램이 실행되면 메모리에 올라오고, 실행이 끝나면 메모리에서 내려갑니다
    • 같은 프로그램이라도 실행할 때마다 메모리 상에서 올라가는 위치(주소)는 다를 수 있습니다
  2. 프로그램마다 독립된 공간이 필요하다
    • 프로그램끼리 서로 간섭하면 안 됩니다
    • 그래서 각각의 프로그램은 자기만의 주소 체계를 가지고 있어야 합니다

그래서 실제 주소는 숨기고, 프로그램에게는 자기만의 논리 주소(0번지부터 시작하는) 만 보이게 합니다.

 

논리 주소 → 물리 주소 변환은 MMU가 담당합니다

CPU는 논리 주소를 사용하여 명령을 실행합니다.
하지만 메모리는 물리 주소로만 접근할 수 있으므로, 이 둘 사이 변환이 필요합니다.

이 변환은 MMU (Memory Management Unit, 메모리 관리 장치) 라는 하드웨어가 담당합니다.

변환 방법:

물리 주소 = 논리 주소 + 베이스 레지스터 값

  • 베이스 레지스터(Base Register):
    현재 실행 중인 프로그램이 메모리에 올라간 시작 주소(물리 주소)를 저장합니다.
  • 예:
    • 베이스 레지스터 값: 15000
    • 논리 주소: 100
    • 물리 주소 = 15000 + 100 = 15100

이런 방식으로 CPU는 논리 주소만 사용하고, MMU가 이를 물리 주소로 변환하여 실제 메모리에 접근합니다.

 

논리 주소가 무제한으로 접근하면 안 되는 이유

프로그램에게는 0번지부터 시작하는 논리 주소가 부여됩니다.
그렇다면 1000번지, 2000번지, 심지어 1억 번지까지도 접근할 수 있을까요?

안 됩니다. 위험합니다.

그 이유는:

  • 어떤 프로그램이 너무 큰 논리 주소를 사용할 경우,
  • 다른 프로그램의 영역까지 침범할 수 있기 때문입니다.

예시:

메모장 1000~1999
인터넷 브라우저 2000~2999
 

만약 메모장 프로그램이 논리주소 1500번지를 접근하려고 하면:

  • 물리 주소 = 1000(베이스) + 1500 = 2500
  • 이 주소는 브라우저 영역입니다 → 위험! ❌

 

이 문제를 막기 위한 장치: 한계 레지스터

한계 레지스터(Limit Register) 는 프로그램이 사용할 수 있는 최대 논리 주소 범위를 지정합니다.

베이스 레지스터 프로그램의 시작 물리 주소 (예: 1000)
한계 레지스터 프로그램이 사용할 수 있는 논리 주소 크기 (예: 800)
  • CPU는 어떤 논리 주소를 접근하려 할 때,
    → 반드시 논리 주소 < 한계 레지스터인지 검사합니다.

만약 초과하면?

  • 인터럽트 발생 → 프로그램 강제 중단
  • 이를 통해 다른 프로그램 침범을 방지합니다

 

전체 흐름 요약

  1. CPU는 프로그램의 논리 주소 100을 사용하여 메모리에 접근하려고 함
  2. MMU가 베이스 레지스터(예: 1000)와 더해서 물리 주소 1100으로 변환
  3. CPU는 1100번지에 접근함
  4. 그 전에, MMU는 100이 한계 레지스터(예: 800)을 넘는지 검사
    • 넘으면 → 인터럽트
    • 넘지 않으면 → 접근 허용

 

결론

이러한 구조 덕분에 다음이 가능합니다:

✅ 각 프로그램은 자기만의 주소 공간을 갖고
✅ 서로 간섭하지 않고 독립적으로 실행되며
✅ 논리 주소 → 물리 주소 변환은 MMU가 자동으로 처리하며
✅ 잘못된 접근은 한계 레지스터가 막아주기 때문에
✅ 시스템의 안정성과 보안이 보장됩니다

'컴퓨터 구조' 카테고리의 다른 글

다양한 보조기억장치  (0) 2025.06.21
캐시 메모리  (0) 2025.06.20
RAM의 특징과 종류  (0) 2025.06.20
CISC와 RISC  (0) 2025.06.19
명령어 병렬 처리 기법  (0) 2025.06.18