일반적으로 운영체제는 하나의 프로세스를 실행하게 되면 이 프로세스를 세그먼트(Segment) 단위로 메모리에 저장한다. 이 세그먼트는 다시 세 영역으로 구분되어, 컴파일러(Compiler)에 의해 기계어 코드로 변환된 명령어 집합이 저장되는 코드 세그먼트(Code Segment), 프로그램이 참조하는 데이터(주로 전역(global) 변수들)가 저장되는 스택 세그먼트(Stack Segment)로 나뉜다. 이 때 메모리에 저장되는 위치는 보통 실행 시간(Run Time, 실행되는 순간)에 정해지기 때문에, 컴파일 과정에서 각 명령어의 정확한 위치를 지정해 줄 수 없다. 따라서 각 세그먼트는 가상 주소인 논리적 주소(Logical Address)를 사용하여 상대적인 위치를 지정한 후, 실행 시간에 정해지는 자..