{{위키데이터 속성 추적}}
{{출처 필요|날짜=2010-9-13}}
{{다른 뜻|페이지 매기기}}
'''페이징 기법'''({{lang|en|paging}})은 컴퓨터가 [[기억 장치|메인 메모리]]에서 사용하기 위해 [[기억 장치|2차 기억 장치]]{{Efn|Initially [[드럼 메모리|drums]], and then [[하드 디스크 드라이브|hard disk drive]]s and [[솔리드 스테이트 드라이브|solid-state drive]]s have been used for paging.}}로부터 데이터를 저장하고 검색하는 [[메모리 관리]] 기법이다.<ref name="ostep-1">{{인용|title=Operating Systems: Three Easy Pieces (Chapter: Paging)|url=http://pages.cs.wisc.edu/~remzi/OSTEP/vm-paging.pdf|publisher= Arpaci-Dusseau Books|year = 2014|first1 = Remzi H.|last1 =Arpaci-Dusseau|first2=Andrea C.|last2 = Arpaci-Dusseau}}</ref> 즉 [[가상기억장치]]를 모두 같은 크기의 [[블록 (컴퓨팅)|블록]]으로 편성하여 운용하는 기법이다. 이때의 일정한 크기를 가진 블록을 '''페이지'''(page)라고 한다.
주소공간을 페이지 단위로 나누고 실제기억공간은 페이지 크기와 같은 [[프레임 (컴퓨터 과학)|프레임]]으로 나누어 사용한다.

페이징 기법이 적용된 시스템에서 [[가상주소]]는 [[순서쌍]] <math>(p, d)</math>로 나타낼 수 있다. <math>p</math>는 [[가상기억장치]] 내에서 참조될 항목이 속해 있는 페이지 번호이고, <math>d</math>는 페이지 <math>p</math> 내에서 참조될 항목이 위치하고 있는 곳의 [[변위]]이다.

어떤 프로세스가 현재 참조하고 있는 페이지가 [[주기억장치]] 내에 있다면 그 프로세스는 수행될 수 있다. 반대로 주기억장치 내에 없다면 그 해당 페이지를 보조기억장치로부터 읽어와서 페이지 프레임의 한 블록에 저장한다.

== 역사 ==
최초의 메모리 페이지는 램과 디스크 간에 페이지가 이동하느냐에 관계 없이 컴퓨터 구조의 한 개념이었다.<ref>{{서적 인용
  | first = Harvey M. | last = Deitel
  | title = An Introduction to Operating Systems
  | publisher = Addison-Wesley
  | pages = 181, 187
  | year = 1983
  | isbn = 0-201-14473-5
  | postscript = <!--None--> }}</ref><ref>{{서적 인용
  | contribution = Operating systems
  | title = Encyclopedia of computer science and technology
  | editor1-last = Belzer
  | editor1-first = Jack
  | editor2-last = Holzman
  | editor2-first = Albert G.
  | editor3-last = Kent
  | editor3-first = Allen
  | publisher = CRC Press
  | volume=11
  | page = 433
  | year = 1981
  | url = https://books.google.com/books?id=uTFirmDlSL8C&printsec=frontcover
  | isbn = 0-8247-2261-2
  | postscript = <!--None--> }}</ref>

== 프레임과 페이지 ==
프레임과 페이지는 메모리를 일정한 크기의 공간으로 나누어 관리하는 단위이며, 프레임과 페이지의 크기는 같다.
* 프레임(Frame) : 물리 메모리를 일정한 크기로 나눈 블록이다.
* 페이지(Page) : 가상 메모리를 일정한 크기로 나눈 블록이다.
페이지가 하나의 프레임을 할당 받으면, 물리 메모리에 위치하게 된다. 프레임을 할당 받지 못한 페이지들은 [[외부 저장장치]]에 저장되며, 이때도 프레임과 같은 크기 단위로 관리된다.

== 페이지 테이블 ==
{{본문|페이지 테이블}}
페이지 테이블(Page Table)은 프로세스의 페이지 정보를 저장하고 있으며, 하나의 프로세스는 하나의 페이지 테이블을 가진다.
테이블은 다음과 같이 색인과 내용으로 구성되어 있다.
* 색인 : 페이지 번호.
* 내용 : 해당 페이지에 할당된 물리 메모리(프레임)의 시작 주소. 이 시작 주소와 페이지 주소를 결합하여 [[물리 메모리 주소]]를 알 수 있다.

=== 페이지 테이블 엔트리 ===
'''페이지 테이블 엔트리'''(Page Table Entry, 줄여서 PTE)는 페이지 테이블의 [[레코드]]이다.

PTE의 각 필드에는 일반적으로 다음 내용이 기록된다.
* 페이지 기본주소(Page base address)
* 플래그 비트
** 접근 비트(Accessed bit) : 페이지에 대한 접근이 있었는지를 나타낸다.
** 변경 비트(Dirty bit) : 페이지 내용의 변경이 있었는지를 나타낸다.
** 현재 비트(Present bit) : 현재 페이지에 할당된 [[프레임 (컴퓨터 과학)|프레임]]이 있는지를 나타낸다.
** 읽기/쓰기 비트(Read/Write bit) : 읽기/쓰기에 대한 권한을 표시한다.

== 페이지의 크기 ==
페이지의 크기는 하드웨어에 의해 정의된다. 대개 컴퓨터 구조에 따라 512 Byte에서 16MB 사이이며 2의 제곱으로 증가한다.
만약 논리 주소 공간의 크기가 2의 m승이고, 페이지가 2의 n승이라면 논리주소(logical address)의 상위 m-n Bit는 페이지 번호를 하위 n비트는 페이지 변위(offset)을 나타낸다.
하나의 페이지는 x86과 amd64에서는 4KB, ia64에서는 8KB의 크기를 가진다.

== 동적 주소 변환 ==
페이징 기법에서 동적주소변환 과정은 다음과 같다.
# 수행 중인 프로세스가 가상주소 <math>V(p, d)</math>를 참조한다.
# 페이징 기법을 통해 페이지 <math>p</math>가 페이지 프레임 <math>p'</math>에 있음을 알아낸다.
# 실주소 <math>r = p' + d</math>를 구한다.

== 같이 보기 ==
* [[프레임 (컴퓨터 과학)|프레임]]
* [[페이지 테이블]]
* [[메모리 할당]]
* [[가상 메모리]]
* [[가상 주소 공간]]

== 각주 ==
; 내용주
<references group="lower-alpha" />
; 참조주
{{각주}}

{{메모리 관리}}
{{운영 체제}}

[[분류:운영체제 기술]]