메모리 역시 주소를 통해 접근하는 저장장치이다. 이때의 주소란 서로 다른 위치를 구분하기 위해 사용하는 일련의 숫자로 구성된다. 행정구역을 표시하는 주소에서 '서울시 서대문구 이화여대길'와 유사한 의미이다. 이와같이 메모리를 어떠한 행정구역으로 나누어 관리할 것인지 살펴보고, 프로그램이 물리적 메모리에 어떻게 올라가서 주소를 할당받게 되는지 살펴보도록 하겠다.
프로세스의 논리적 주소를 물리적 메모리 주소로 연결시켜주는 작업
주소 바인딩의 방식은 프로그램이 적재되는 물리적 메모리의 주소가 결정되는 시기에 따라 세 가지로 분류
물리적 메모리 주소가 프로그램을 컴파일 할 때 결정되는 주소 바인딩 방식
프로그램의 실행이 시작될 때 물리적 메모리 주소가 결정되는 주소 바인딩 방식
프로그램이 실행을 시작한 후에도 프로그램이 위치한 물리적 메모리상의 주소가 변경될 수 있는 바인딩 방식
mmu를 사용해 가장 기본적인 방식으로 주소 변환을 수행하는 것에 알아보자.
CPU가 특정 프로세스의 논리적 주소와 기준 레지스터의 값을 더해 물리적 주소값을 얻어낸다.
MMU 기법은 프로그램의 주소 공간이 물리적 메모리의 한 장소에 연속절으로 적재되는 것을 가정으로 한다.
따라서 그 프로그램이 적재되는 물리적 메모리상의 시작 주소만 알면 주소 변환을 쉽게할 수 있다.
재배치 레지스터에는 현재 CPU에서 수행중인 프로세스의 물리적 메모리 시작주소가 저장되어 있다.
CPU가 논리적 주소 123번지에 있는 내용을 요청할 경우 재배치 레지스터에 저장된 23000이라는 값에 이 주소를 더해 물리적 메모리 23123번지에 있는 내용을 참조하게 된다.
물리적 메모리 23123번지에서 CPU가 요청한 정보를 찾게 된다.
만약 주소 공간을 벗어나는 경우가 발생한다면 메모리 보안이 이루어지지 않아 다른 사람이 수행 중인 프로그램 영역을 침범하여 치명적인 결과를 초래할 수 있다.
이를 예방하기 위해 한계 리지서터 라는 또 하나의 레지스터를 사용한다.
프로세스가 자신의 주소 공간을 넘어서는 메모리 참조를 하려고 하는지 체크하는 용도
여러 프로그램이 동시에 메모리에 올라가서 수행되는 다중 프로그래밍 환경에서 메모리 사용의 효율성을 높이기 위해 사용하는 기법 중 하나
프로세스가 시작될 때 그 프로세스의 주소 공간 전체를 메모리에 다 올려 놓는 것이 아니라 메모리를 좀 더 효율적으로 사용하기 위해 해당 부분이 불릴 때 그 부분만을 메모리에 적재하는 방식을 사용한다.
실제로 프로그램의 코드 중 상당 부분은 오류 처리루틴과 같이 아주 특별한 경우에만 가끔씩 사용되는 방어용 코드이다. 따라서 프로세스의 주소 공간 전체를 물리적 메모리에 올리는 경우 자주 발생하지는 않지만 많은 메모리를 사용하는 이러한 오류 처리 코드가 메모리 공간의 상당 부분을 차지하게 되어 메모리의 낭비가 초래된다.
컴파일을 통해 생성된 목적 파일과 라이브러리 파일 사이의 연결을 프로그램의 실행 시점까지 지연시키는 기법
운영체제의 상주 영역