[메모리 관리] 주소 바인딩

프로그램이 실행을 위해 물리 메모리에 적재되면 CPU는 프로세스를 위한 독자적인 주소공간을 생성합니다.

이 주소를 논리적 주소(=가상 주소)라고 하고 각 프로세스마다 독립적으로 할당됩니다.

 

CPU가 기계어 명령을 수행하기 위해서는 논리적 주소에 근거해 매핑된 물리적 메모리 위치를 확인해야 합니다.

메모리에 적재된 프로세스의 논리적 주소를 물리적 주소로 연결시켜주는 작업인 주소 바인딩에 대해 알아보겠습니다.

 

주소 바인딩

프로세스의 논리적 주소를 물리적 메모리 주소로 연결시켜주는 작업을 주소 바인딩이라고 합니다.

프로그램이 적재되는 물리적 메모리의 주소가 언제 결정되느냐에 따라 세 가지로 분류할 수 있습니다.

  • 컴파일 타임 바인딩
  • 로드 타임 바인딩
  • 실행 시간 바인딩

 

컴파일 타임 바인딩

  • 컴파일을 하는 시점에 해당 프로그램이 물리적 메모리의 몇 번지에 위치할 것인지가 결정하는 방식
  • 논리적 주소와 물리적 주소 위치가 같다는 특징을 갖습니다.

 

로드 타임 바인딩

  • 프로그램의 실행이 시작될 때에 물리적 메모리 주소가 결정되는 방식
  • 로더의 책임 하에 물리적 메모리 주소가 부여되며 프로그램이 종료될 때까지 물리적 메모리 상의 위치가 고정됩니다.
  • 컴파일러가 재배치 가능 코드(reloca-table code)를 생성한 경우에 가능한 주소 바인딩입니다.
  • 프로그램 속의 코드 세그먼트를 모두 바꿔줘야 하므로 메모리 로딩할 때 오랜 시간이 소요됩니다.

 

실행 시간 바인딩

  • 프로그램이 실행을 시작한 후에도 그 프로그램이 위치한 물리적 메모리 상의 주소가 변경될 수 있는 방식
  • MMU 하드웨어를 사용하여 논리적 주소에서 물리적 주소로 매핑합니다.
  • 일반적인 OS는 이 방법을 사용합니다.

 

MMU 기법

CPU가 특정 프로세스의 논리적 주소를 참조하려고 할 때

MMU 기법은 그 주소값에 기준 레지스터의 값을 더해 물리적 주소값을 얻습니다.

 

MMU 기법의 기본원리는 다음과 같습니다.

1. CPU가 논리적 주소 123번지에 있는 내용을 요청합니다.

2. 재배치 레지스터에 저장된 값 23000을 더합니다.

3. 물리적 메모리 23123에 저장합니다.

 

여기서 한 가지 더 고려해야할 사항이 있습니다.

다중 프로그래밍 환경에서는 여러 개의 프로세스가 물리적 메모리에 동시에 올라간 경우가 대부분입니다.

위의 MMU 방식을 사용하여 주소 변환을 하였을 때 그 결과가 물리적 메모리 영역을 벗어날 수 있습니다.

 

기준 레지스터와 한계 레지스터에 의한 주소 변환

메모리 주소 영역을 벗어나지 않도록 메모리 보안을 달성하기 위한 방법은 다음과 같습니다.

 

1. CPU가 요청한 프로세스의 논리적 주소 값 < 한계 레지스터 내에 저장된 프로세스의 크키 인지 확인합니다.

2. 크기가 작다면 논리적 주소 값에 재배치 레지스터 값을 더해 물리적 주소를 구하여 메모리 위치를 접근하도록 허락합니다.

3. 논리적 주소 값 > 한계 레지스터 값이면 트랩을 발생시켜 해당 프로세스를 강제 종료시킵니다.

 

 

참고 자료

  • 운영 체제와 정보기술의 원리(반효경 저)

 

 

 

댓글