2) 페이징(Paging)
* 프로세스를 일정한 크기로 잘라서 메모리에 할당한다.
: 프로세스의 일정한 크기 => 페이지(page)
: 메모리의 일정한 크기공간 => 프레임(frame)
* 물리 메모리내에 하나의 프로세스가 연속된 메모리를 할당받을 필요 없이 여러 개의 페이지 조각으로 나누어져서 분산 할당된다.
* 프로세스와 메모리가 동일한 크기로 규격화 됨으로써 외부 단편화가 발생하지 않는다.
* 내부 단편화(Internal Fragmention)가 발생하지만 심각한 수준은 아니다.
내부 단편화
- 메모리 10 kb 프레임에 3 kb 페이지(23 kb 프로세스 였다면 3 kb 짜투리가 남음)가 할당되면 해당 메모리는 7 kb의 내부 단편화가 발생한다.
* 논리 메모리 vs 물리 메모리 변환
< 논리 주소 50은 물리 주소로 몇 번지인가? >
* 페이지 테이블의 크기는 프로세스 크기(160 kb) / 페이지 크기 (16 kb) = 10개
* CPU는 50번지를 요청했지만, 실제 데이타는 98번지에 위치해 있게 된다.
즉, CPU는 실제 메모리 주소는 고려하지 않고 자신이 원하는 주소를 제공하면 MMU (여기서는 Page Table)를 거치면서 자동 변환되어 처리된다.
* CPU는 프로세스가 메모리에 연속된 주소에 있는 것으로 처리되기 때문에 문제 없이 처리되도록 하고, 실제 메모리는 페이지 단위로 할당해서 외부 단편화 문제를 해결하게 된다.
* 메모리 보호(Protection)
: 모든 주소는 페이지 테이블을 경유하도록 한다.
: 페이지 테이블 엔트리(각 열)마다 r(읽기), w(쓰기), x(시행) 비트를 둔다.
* 메모리 공유(Memory Sharing)
: 같은 프로그램을 쓰는 여러 종류의 프로세스들은 Code를 공유할 수 있다.
(단, pure code = reentrant code = non-selfmodifying code)
즉, 프로세스의 페이지 테이블 코드 영역이 같은 곳을 가리키도록 한다.
* 장점
: 공유 페이지의 이용 가능
: 외부 단편화가 발생하지 않으며, 압축이 불필요.
: 메모리 활용을 통한 다중 처리 프로그래밍 실현.
* 단점
: 내부 단편화 발생 (but 외부 단편화에 비해 무시가능한 수준임)
: 페이징 사상을 위한 하드웨어로 가격 상승과 속도 저하
: 같은 크기의 메모리 프레임에 추가해야하기 때문에 Code와 Data의 경계가 특정 프레임에 함께 들어가는 문제가 있다.
댓글 없음:
댓글 쓰기