페이징 (Paging)

Woosung Kim·2022년 1월 21일
0

페이징

  • 프로세스를 일정 크기(=페이지)로 잘라서 메모리 프레임에 할당하는 기법
  • 프레임이란 페이지 크기와 동일하게 물리적 메모리를 나눈 블록을 의미한다.
  • 흩어져있는 페이지들의 실행을 위해 MMU는 페이지 테이블 (Page Table)을 사용한다.

주소 변환하기

페이지 크기: 1KB
페이지 테이블: 1 2 5 4 8 3 0 6 일때,
  • 논리주소 3000번지를 물리주소로 변환
3000을 2진수로 변환하면 1011 1011 1000

페이지 크기가 1KB = 2^10 Byte 이므로, 뒤에서부터 10자리가 변위 데이터

페이지 인덱스: 10(이진수) = 2(십진수)

변위(displacement): 11 1011 1000 = 952

페이지 테이블에서 인덱스 2에 해당하는 프레임 넘버는 5이며, 이는 이진수로 101이다.

∴ 물리주소: 1 0111 1011 1000 = 0x17B8
  • 물리주소 0x1A53번지를 논리주소로 변환
0x1A53를 이진수로 변환하면 1 1010 0101 0011

110을 10진수로 변환하면 6

프레임 넘버 6에 해당하는 페이지 테이블 인덱스는 7

7을 이진수로 나타내면 111

∴ 논리주소: 1 1110 0101 0011 = 7763

내부 단편화 문제

프로세스마다 최대 (프레임 크기 - 1) 만큼의 메모리가 낭비될 수 있다.
ex) 프로세스 크기가 15KB이고, 메모리 프레임 크기가 4KB인 경우 15 % 4는 1이므로, 1KB만큼 내부 단편화가 발생하게 된다.

페이지 테이블 만들기

  • CPU레지스터로 만들면

장점: 주소 변환 속도가 빠르다.

단점: 페이지 테이블 크기에 제한이 있다.

  • 메모리로 만들면

장점: 페이지 테이블 크기에 제한이 없다.

단점: 주소 변환으로 인해 속도가 느리다.

  • TLB(Translation Look-aside Buffer)

MMU에 소속된 칩으로, 자주 참조되는 가상주소-물리주소 변환 정보를 저장해놓은 캐시이다.

👉 TLB를 사용하는 이유는?
Page Table을 이용하는 방법으로 레지스터를 이용하는 방법과 메인 메모리를 이용하는 방법을 생각할 수 있는데, 레지스터를 사용하는 방법을 이용하기에는 Page Table이 너무 크고, 메인 메모리에 Page Table을 저장하면 문맥 교환 속도는 빨라지지만 두 번의 메모리 액세스가 필요하므로 메모리 액세스 시간이 느려질 수 있다. 이러한 문제점을 해결하기 위해 TLB를 사용한다.

profile
개발하는 강아지

0개의 댓글