메모리 주소 유형
1. 논리적 주소
- 프로세스가 독립적으로 가지는 주소 공간
- 0번지부터 시작하는 자신만의 주소 공간을 가짐
- cpu는 이 논리적 주소를 참조함.
- 물리적 주소
- 메모리에 실제로 존재하는 위치, 즉 dram 상의 변하지 않는 실제 주소.
- 기호적 주소
- 프로그래머가 사용하는 변수나 레이블 등 기호적 이름으로 표현된 주소.
주소 바인딩
기호적 주소에서 논리적 주소, 그리고 물리적 주소로의 변환 과정.
- 컴파일 시간 바인딩
- 컴파일 시 정적으로 물리적 주소가 결정
- 컴파일러는 절대 코드를 생성하여, 프로그램이 메모리에 로드되면 주소가 변경되지 않음.
- 로드 시간 바인딩
- 로더가 프로그램이 메모리에 로드될 때 물리적 주소를 부여.
- 재배치 가능한 코드를 생성한 경우, 프로그램의 시작 위치를 변경하더라도 로더가 물리적 주소를 조정할 수 있다.
- 실행 시간 바인딩
- 프로그램이 실행된 이후에도 프로세스의 메모리 상 위치를 옮길 수 있음.
- CPU가 주소를 참조할 때마다 주소 매핑 테이블을 검사하여 실제 메모리 주소를 변환함.
- 하드웨어적인 지원이 필요하고, 주로 MMU(메모리 관리 장치)에 의해 수행된다.
MMU(Memory-Management Unit)
- 논리적 주소를 물리적 주소로 매핑하는 하드웨어 장치.
- 사용자 프로세스가 cpu에서 수행되며 생성하는 모든 주소값에 대해 기준 레지스터의 값을 더한다.
- 컨텍스트 스위치가 발생하면 mmu의 기준 레지스터 값도 변경된다
- 사용자 프로그램은 논리적 주소만을 다무려, 물리적 주소를 알 필요가 없다.
=> 프로그램이 메모리에 어떻게 매핑되는지, 어떻게 cpu에 의해 참조되는지를 결정하는 중요한 역할을 한다. 각 단계는 메모리 관리의 유연성과 효율성을 높이기 위해 설계되었으며, 프로그램의 실행과 메모리 관리를 최적화하기 위한 중요한 기술.