모든 프로그램은 메모리에 올라와야 실행 할 수 있다.
메모리를 이루는 소자 하나의 크기는 1bit로 0 또는 1이 저장되는데 소자 하나만으로는 데이터를 표현할 수 없어 메모리 주소는 바이트 단위(Byte, 8bit)로 지정되고, 메모리에서 데이터를 읽거나 쓸 때에는 워드 단위로 움직인다.
컴퓨터가 발전함에 따라 많은 종류의 메모리가 개발되었다.
메모리는 읽거나 쓸 수 있는 RAM(Random Access Memory), 읽기만 가능한 ROM(Read Only Memory)로 구분된다.
램은 무작위로 데이터를 읽어도 저장된 위치와 상관없이 같은 속도로 데이터를 읽을 수 있다는 뜻의 이름이다.
램은 전력이 끊기면 데이터가 사라지는 휘발성 메모리와 전력이 끊겨도 데이터를 보관할 수 있는 비휘발성 메모리로 나뉜다.
메인 메모리를 비휘발성 메모리로 만들면 전력이 끊겨도 내용이 남아 편리할 수도 있지만 이러한 특성으로 인해 메모리 내부가 복잡하고 속도가 느리며 가격이 비싸다.
그래서 아직도 메인 메모리는 휘발성 메모리를 사용하고 있다.
램과 달리 롬은 전력이 끊겨도 데이터를 보관하는 것이 장점이지만, 데이터를 한 번 저장하면 바꿀 수 없다. 예로 CD-ROM 은 데이터를 한 번만 저장이 가능하다.
위의 이유로 바이오스(BIOS, Basic Input/Output System)를 롬에 저장한다.
현대의 운영체제는 시분할 기법을 사용하는데 여러 프로그램을 동시에 실행하므로 사용자 영역이 여러 개의 작업 공간으로 나뉘어져 있다.
이러한 상황에서 메모리 보호는 매우 중요한 문제로 보호되지 않을 경우, 어떤 작업이 다른 작업의 영역을 침범하여 프로그램을 파괴하거나 데이터를 지울 수도 있어 최악의 경우, 운영체제 영역을 침범하면 시스템이 멈춘다.
운영체제도 소프트웨어 중 하나라는 사실을 잊지 말아야하며, CPU를 사용하는 작업 중 하나이기 때문에 사용자의 작업이 진행되는 동안에는 운영체제의 작업이 잠시 중단된다.
메모리를 보호하기 위해 CPU는 현재 진행 중인 작업의 메모리 시작 주소를 경계 레지스터(bound register)에 저장한 후 작업한다. 또한 현재 진행 중인 작업이 차지하고 있는 메모리의 크기, 즉 마지막 주소까지의 차이를 한계 레지스터(limit register)에 저장한다.
사용자의 작업이 진행되는 동안 이 두 레지스터의 주소 범위를 벗어나는지 하드웨어적으로 점검함으로써 메모리를 보호한다.
만약 두 레지스터의 값을 벗어난다면 메모리 오류와 관련된 인터럽트가 발생한다. 인터럽트가 발생하면 모든 작업이 중단되고, CPU는 운영체제를 깨워서 인터럽트를 처리하도록 시킨다.(해당 프로그램 강제 종료)