메모리 할당 방식 중 불연속 메모리 할당의 고정 (크기) 분할 방식 중 하나로, 작업을 크기가 동일한 페이지로 나누어서 처리하는 방법을 페이징이라고 한다.
페이지란?
가상 메모리 전체 주소 공간의 고정된 크기 블록(4KB)를 페이지라고 한다.
물리 메모리는 페이지가 아닌프레임단위를 사용한다.
불연속 메모리 할당 기법 중 하나로, 동일한 크기의 페이지를 물리 메모리의 빈 프레임에 각각 저장한다.
각 프로세스마다 페이지 테이블을 만들고 유지해 페이징을 지원한다.
페이지 테이블의 물리 주소는 PCB에 저장되어, CPU 스케줄러가 프로세스 실행 시 PTBR을 함께 로드한다.
페이지 테이블 구현은 크게 두 방식으로 구분 할 수 있다.
페이지 번호와 프레임 번호의 매핑을 캐싱하는 소형 기억장치다.
Hit시 즉시 프레임 번호를 획득해 메인 메모리 해당 부분에 접근한다.Miss시 페이지 테이블에서 프레임 번호를 획득하고, 그 쌍을 TLB에 추가 후 메인 메모리 해당 부분에 접근한다.유효-무효 비트를 통해 논리 주소 공간에 속하지 않는 페이지 접근을 무효 처리하거나, 페이지 테이블 엔트리마다 보호 비트를 두고 권한 위반 시 H/W 트랩을 발생시켜 보호할 수있다.
재진입 가능한 코드만 물리 메모리의 같은 페이지를 공유해 메모리 효율을 높일 수 있다.
페이지는 가상 메모리 주소 공간에서 사용하는 고정된 크기의 블록을 의미하고, 프레임은 물리 메모리 주소 공간에서 고정된 크기의 블록을 의미한다.
1) CPU가 생성한 논리 주소의 페이지 번호(p)와 페이지 내 오프셋(d)로 분리시킨다.
2) 분리된 p로 페이지 테이블을 인덱싱해 해당하는 프레임 번호(f)를 읽어온다.
3) (f*프레임 크기) + d 공식을 통해 실제 주소를 찾아낸다.
페이지 테이블 엔트리마다 프로텍트 비트가 존재하는데, 이 비트를 통해 수정 가능 여부를 확인한다.
논리 주소 전체 크기(2^32)를 페이지 크기(2^10)으로 나눈 2^22가 페이지 최대 크기가 된다.
32비트 논리 주소 전체 크기는 2^32 즉 4G이다. 페이징에서 논리 주소의 상위 32비트가 페이지 번호로 쓰이기 때문에 최대 4GB로 사용할 수 있다.
매번 페이지 테이블을 참조하지 않고, TLB Hit 시 바로 메모리에 접근할 수 있기 때문에 빠르다.
MMU(Memeory-Management Unit)는 논리 페이지를 물리 페이지 프레임으로 동적 매핑해주는 역할을 한다.
두 장치 모두 CPU 내부 레지스터와 캐시 사이에 존재하고 있다.
각 코어마다 독립적인 TLB를 가지는데 이는 ASID를 써서 쉽게 해결할 수 있다.
ASID 설명은 본문을 참고하자.
TLB를 전부 비우는 Flsuh()와 ASID를 바꿔서 프로세스 식별자에 맞는 엔트리만 접근할 수 있도록 제어한다.
학습하며 정리한 글이기 때문에 혼용된 표현 또는 잘못된 내용이 있을 수 있습니다.
만약, 발견하신 경우 댓글을 통해 알려주신다면 진심으로 감사드립니다.