[OS] Paging

Paging

페이징은 외부 단편화를 방지하는 방법이다. 물리 메모리는 Frame이라 불리는 고정 크기 블록으로 나누고 논리 메모리는 Page라는 프레임과 같은 크기의 블록으로 나누어진다. 또한 물리 주소를 논리 주소로 변환하기 위해 Page Table을 사용하며 페이지 번호페이지 오프셋을 활용해 주소를 변환한다.

Protection

페이지를 사용하는 환경에서 메모리 보호는 각 프레임과 연관된 보호 비트에 의해 이루어진다. 이를 통해 읽기 전용인지 읽기/쓰기 전용인지 확인하고 Invalid Command라면 트랩을 발생시킨다. 또한 Valid / Invalid 비트가 페이지 테이블의 각 엔트리에 존재하며 이를 통해 해당 페이지가 합법적인지 비합법적인지 확인할 수 있다.

Hash Page Table

주소 공간이 32비트보다 커지면 가상 주소를 해시값으로 사용하는 해시 페이지 테이블을 사용한다. 해시 페이지 테이블은 각 항목을 연결리스트로 가지고 있다. 각 원소는 가상 페이지 번호, 맵핑되는 페이지 프레임 번호, 연결 리스트 상의 다음 원소를 가리키는 포인터를 가진다.

동작원리

  1. 가상 주소의 가상 페이지 번호를 해싱한다
  2. 해싱한 해시값의 연결리스트의 첫 번째 원소와 가상 페이지 번호를 비교한다
  3. 일치한다면 그에 대응하는 페이지 프레임 번호를 사용해 물리주소를 얻는다.

페이지 교체 알고리즘

페이지를 교체하기 위해 다양한 알고리즘이 존재한다.

  • FIFO
  • LRU
  • LFU
  • SCR

알고리즘 동작 원리는 이 포스팅을 참조하길 바랍니다.

Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/23/OS/Paging/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.