처리기의 효율을 극대화 하기 위해 수행준비된 프로세스들은 주기억 장치로 스왑 인, 또는 스왑 아웃 된다.
스왑 아웃되서 스왑 인 될때, 그 프로세스는 이전과 동일한 주기억장치로 적재되지 않을 수 있다.
따라서 스와핑시에 주기억장치에서 프로그램의 위치가 변경 될 수 있어야 한다.
프로그램 주기억장치에서의 위치가 변경되어도, OS와 처리기 하드웨어는 프로그램 코드의 메모리 참조 부분을 실제 물리주소로 변환할 수 있어야한다.
이 실제 물리주소는 메인 메모리에서의 프로그램의 현재 위치이다.
보호
프로세스는 다른 프로세스에 의한 간섭으로 부터 보호되어야 한다.
따라서 다른 프로세스에 속한 프로그램은 허가없이 다른 프로세스의 메모리를 접근해서는 안된다.
이 것은 재배치에 의해 난이도가 올라간다.
컴파일 타임에 프로세스의 위치를 확정 지을 수 없다.
따라서 프로세스들에 의한 모든 메모리 참조는 런타임에 적절한 메모리 참조인지 확인되어야 한다.
메모리 보호는 처리기에 의해 만족되어야 한다.
OS는 모든 메모리 참조를 예측할 수 없기 때문이다.
따라서 메모리 참조하는 명령이 실행될 때 만이 메모리를 참조할 수 있는지 확인할 수 있다.
이를 위해, 처리기는 이러한 능력을 가져야만 한다.
공유
모든 보호 정책은 몇 개의 특정한 프로세스가 메인메모리의 특정부분에 접근하는 것을 허용해야 한다.
주기억장치 관리 시스템은 필수적인 보호 정책은 유지하면서 공유자원에 대한 제한된 접근은 허용해야 한다.
논리적 구성
주기억장치와 보조기억장치는 바이트의 연속으로 구성되어 선형 구조를 가진다.
이 것은 프로그램들이 구성되는 방식과 대응하지 못한다. 프로그램들은 module로써 구성되기 때문이다.
OS와 하드웨어가 모듈로 구성된 사용자 프로그램들을 효과적으로 처리할 경우, 다음의 이점이 생긴다.
각 모듈의 작성과 컴파일은 독립적으로 이루어 질 수 있으며, 서로 다른 모듈간에 이루어지는 참조는 수행시간에 시스템에 의해 해결된다.
비교적 적은 비용으로, 모듈간의 다른 레벨의 보호정책이 가능하다.
모듈들이 프로세스들 간에 공유되는 메카니즘이 가능해진다. 모듈 레벨로 공유하는 것은 사용자가 프로그램을 바라보는 방식과 상응한다. 따라서 사용자가 원하는 대로 공유를 명시하기가 쉽다.
이러한 요구조건을 만족하는 방식은 세그멘테이션이다.
물리적 구성
주기억 장치와 보조기억 장치간의 데이터 흐름은 중대한 사안이다.
이러한 흐름을 프로그래머에게 맞길 수 있지만 이것은 두 가지 이유에 의해 굉장히 실용적이지 못하다.
메인 메모리는 부족하기에 프로그래머는 overlaying을 해야한다. (overlaying에서 프로그램은 프로그램의 모듈들이 주기억 장치의 같은 공간을 사용할 수 있도록 구성된다. 주 프로그램은 같은 공간을 사용하는 모듈들을 빼고 넣어야 하는 책임이 있다.) overlaying은 프로그래머의 시간을 낭비한다.
다중프로그래밍환경에서, 프로그래머는 어느 공간이 얼마나 허용될지 모른다.
따라서, swap-in, swap-out과 같은 데이터의 흐름은 시스템의 책임이 되어야 한다. 이것은 메모리 관리의 본질이다.