페이징은 외부 단편화를 방지하는 방법이다. 물리 메모리는 프레임(Frame) 이라 불리는 같은 크기 블록으로 나누어지고, 논리 메모리는 페이지(Page) 라 불리는 같은 크기의 블록으로 나누어 진다.
물리 주소를 논리 주소로 변환하기 위해서 Page Table 을 사용하고 페이지 번호(p)와 페이지 오프셋(d: offset)을 활용해 주소를 변환한다. 페이징 테이블은 Frame 과 Page 를 대응시키기 위한 Page mapping 을 위해서 존재한다.
페이징을 사용함으로써 프로세스의 물리 주소 공간이 연속적이지 않아도 되게 된다. 연속적이지 않은 메모리 공간을 할당할 수 있기 때문에 외부 단편화 문제를 해결할 수 있지만, 메모리를 꽉 채워서 사용하는 것이 아니기 때문에 내부 단편화에 대한 문제가 여전히 존재한다.
e.g)
페이징은 메모리를 같은 크기의 블록으로 나누는 방법이지만, 세그멘테이션은 일정하지 않은 세그먼트(segment)로 메모리를 분할하는 방법이다.
세그먼트를 메모리에 할당할 때는 페이지를 할당할 때와 같지만, 테이블이 조금 다르다. 이를 세그멘테이션 테이블이라고 한다.
세그멘테이션 테이블에는 기준(base)과 한계(limit)를 저장하고, CPU 는 (세그먼트 번호(s) 와 변위(d))를 가지고 테이블에 접근한다. 만약, 세그먼트의 크기를 넘어서는 주소가 들어오면 인터럽트가 발생해 해당 프로세스를 강제 종료시킨다.
e.g)