프로그램(프로세스)을 같은 크기의 블록(= page)으로 분할하여 관리하는 시스템 => 고정 분할 방식(Fixed Partition Multi-Programming)과 유사
메모리를 같은 크기의 페이지로 분할하는 방식이기에간편하고 효율적인 관리가 가능
프레임단위로 메모리를 할당하기에외부 단편화는 발생하지 않음
프로그램의 크기가 페이지의 크기로 나누어 떨어지지 않는다면 마지막 페이지에서내부 단편화가 발생
프로그램의 논리적 구조를 고려하지 않은 방식이기에 페이지 공유, 페이지 보호 등이 복잡함
페이지(Page)
프로그램의 분할된 블록
프레임(Frame)
메모리가 분할된 블록
Page와 같은 크기를 가짐
프로그램의 page -> 메모리의 frame에 대응
2. 주소 매핑(Address Mapping)
(page number, offset) 의 쌍으로 이루어진 가상 주소를 사용
PMT(Page Map Table)을 사용하여 가상주소를 실제주소에 매핑
PMT에서는 페이지가 메모리에 적재되어있는지 여부를 나타내는residence bit와 swap device 상의 어느 위치에 저장되어있는지를 나타내는secondary storage address(= 실제주소), 메모리상의 어느 프레임에 적재되어있는지를 나타내는page frame number등의 값을 관리한다.
직접 매핑(Direct Mapping)
PMT의 시작 주소가 b 이고 page 번호는 p, offset 이 d 일 때, 먼저 PMT에서 해당 엔트리를 참조 => PMT에서의 해당 엔트리는 b + (entry_size * p)
residenct bit 이 1이라면 page frame number를 참조하여 적재된 메모리 프레임의 주소를 계산 => 메모리에서의 시작 주소는 (page frame number * page_size) + d
만약 residence bit 이 0이라면 메모리에 적재되지 않은 상태이기 때문에page fault가 발생하고 프로그램(프로세스)은 커널에 swap device상의 페이지를 메모리 프레임에 적재하도록 요청한 뒤 요청이 완료될 때 까지 Block 상태가 되어 대기, 요청이 완료되면 다시 Ready 상태가 되어 단기 스케줄러에 의해 프로세서를 할당받으면 다시 작업을 수행하게 된다.
PMT가 커널에 존재하는 방식이기에 PMT 참조를 위해 한 번, 실제로 메모리를 참조하기 위해 한 번 총 두 번의 메모리에 대한 접근이 필요하기 때문에 성능이 저하되며 PMT를 저장해둘 메모리 공간도 별도로 필요하다.
관계 매핑(Associated Mapping)
직접 매핑에서 PMT의 참조 과정을별도의 장비(TLB)에게 맡기는 방식
TLB(Translation Lookaside Buffer)
메모리 접근 횟수에 따른 성능 저하를 막기 위해 사용하는 전용 기억장치
PMT 참조 과정이 병렬 탐색을 통해 매우 빠른 속도로 이루어지도록 설계된 전용 하드웨어
성능만큼이나 가격이 매우 비싸기 때문에 큰 PMT를 다루기엔 어려움이 따름
절충안(Hybrid Direct/Associative Mapping)
직접 매핑과 관계 매핑을 절충하여 비용은 최소화하고 성능은 최대화하는 방식
작은 크기의 TLB를 PMT 전용의 캐시메모리처럼 사용하여 PMT 자체는 커널공간에 저장하고 PMT중 일부 엔트리만을 TLB에 적재하여 성능을 높인다.
물론 기존에 배웠던 캐시메모리와 마찬가지로 최근에 사용된 영역이나 그 인접영역이 또다시 사용될 가능성이 높기 때문에(locality) 최근에 사용된 페이지들에 대한 entry 위주로 TLB에 적재한다.
TLB에 PMT의 엔트리가 적재되어있다면 바로 TLB를 통해 작업을 수행하고(Associative Mapping) 적재되어있지 않다면 Direct Mapping 방식으로 작업을 수행, 해당 엔트리를 TLB에 캐싱한다.
3. 페이징 시스템의 메모리 관리
페이지와 같은 크기로, 즉 프레임(frame) 단위로 메모리를 분할하여 관리하고 사용 => 연속 메모리 할당에서 봤던 고정 분할 방식과 유사
프레임 테이블(Frame Table)
각 프레임을 관리하기 위한 테이블
구성
Page Frame Number
페이지 프레임 번호
메모리상의 몇 번째 프레임인지 나타내는 필드
Allocated/Available
해당 프레임이 할당된 상태인지, 혹은 사용 가능한 상태인지를 나타내는 필드
PID
어느 프로세스가 사용중인지 나타내는 필드
Link
사용 가능한 프레임들에 바로 접근하기 위한 연결리스트
AV(Availabe)
Link의 시작점(head)
페이지 공유(Page Sharing)
여러 프로세스가 특정 page를 공유할 수 있음
연속 메모리할당 방식이 아니기 때문에 가능한 방식
공유 가능한 페이지
프로시저 페이지 => 함수 등 재사용되는 순수 코드
데이터 페이지 => 읽기 전용의 경우 공유 가능, 쓰기도 가능한 경우 병행 제어 기법 필요(동기화 등)
문제점
여러 프로세스가 공유하는 페이지에서 branch(= jump)가 발생하는 경우 jump의 목적지 주소를 어디로 잡아야할지 모호해지는 문제가 발생 => 페이지는 고정된 크기로 분할했을 뿐 논리적인 단위가 아니기 때문
해결책
공유 페이지에 대한 정보는 PMT의 같은 엔트리에 저장하도록 할 수 있음
페이지 보호(Page Protection)
공유되는 페이지에 대한 각 프로세스의 작업 권한을 protection bit를 통해 관리
각 프로세스는 자신의 페이지 테이블을 참조하여 허용된 작업만을 수행할 수 있음
Valid / Read / Write / Execution 의 4비트로 이루어지며 각각 메모리 적재여부, 읽기 가능 여부, 쓰기 가능 여부, 실행 가능 여부를 나타낸다