

paging : 프로세스를 일정 크기인 페이지로 잘라서 메모리에 적재. (프로세스를 일정 단위로 잘라서 적재.) =>메모리의 효율적 관리가 목표 (external fragmentation 해결)
/ 프로세스 뿐 아니라 hole도 작은 조각으로 나눠서 메모리에 할당 가능.
frame : 메모리를 나눈 조각 (페이지를 프레임에 할당)
page table : 페이지를 관리하는 MMU (페이지 테이블 안의 페이지 개수는 프로세스를 몇 페이지로 페이징 할지에 따라서 결정됨)

Logical address : CPU에서 내보내는 주소 (2진수로 표현). 하위 n 비트는 offset(d:displacement) & 상위 m-n비트는 페이지의 번호에 해당. (n = d, m-n = p)
Physical address : Logical address가 페이지 테이블을 통해 바뀐 주소 (메모리에서 이 주소를 찾음)
ex1)

ex2)

Page size = 16bytes
Page Table: 5, 3, 2, 8, 1, 4
logical address 50번지의 physical address는??
d는 페이지 크기에 따라 달라짐. 현재 페이지 크기는 16byte이다. 이는 2^4 => d = 4
p는 d를 제외한 나머지 크기.
현재 logical address는 50이고, 이진수로 나타내면 110010. 먼저 d는 4이므로 이 이진수의 뒤에서 4칸이 d. d를 제외한 나머지 2칸이 p.
50 = 110010
p = 11
d = 0010
p는 이진수로 11, 십진수로 3. 즉, 페이지 테이블의 페이지 번호 3번을 가리키는 것. 페이지 3번에 해당하는 프레임 번호는 8번이므로, physical address를 구성하는 f값은 8이 라고 할 수 있음. 따라서 이를 2진수로 나타내면,
f = 1000
d = 0010
physical address = 10000010
최종적으로 physical address는 f와 d로 구성되어 있으므로 physical address는 이진수로 10000010 이 되고, 십진수로 130 번지가 됨.
또, d가 2이므로 8번째 프레임의 시작주소는 128번지(16 * 8).
but paging은 internal fragmentation이 발생할 수 있다는 문제가 존재.





참고
https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-13.-%ED%8E%98%EC%9D%B4%EC%A7%95