20. 페이징과 스와핑

개발 99·2025년 4월 15일

공룡책

목록 보기
18/22

Paging

현실적으로 연속적인 프로그램(명령어의 집합)을 할당할 수 없다.

그래서,
물리적인 주소 공간을 연속적이지 않은 것으로 간주

  • 외부 단편화 방지

  • 하나의 압축 파일로 안해도 됨.

Basic Method for paging

  • 물리적인 메모리를 고정된 크기의 block으로 쪼갠다.(frame)

  • 논리적인 주소를 고정된 크기의 block으로 쪼갠다.(pages)
    매핑은 os가 알아서 해서, 연속적일 필요가 없다.

page와 frame을 maping을 한다.

  • page table
    logical address와 physical address가 서로 매핑되어 있다.

  1. page number "p"를 이용해서 page table에서 위치를 찾는다.

  2. page table에서 frame을 가져온다.

  3. page number p -> frame number f로 대체한다.


external은 아닌데 internal fragmentation 발생.

page size 크기는?

hardware에 의존적

  • 반드시 2의 배수여야함. 4KB ~ 1GB

  • 참고로, 페이지와 프레임은 서로 크기가 같으므로, 1:1 매핑이 가능하다.
    ( 매핑 내역은 Page Table에 기록된다.)

  • 현재 프로세스 실행에 요구되는 페이지만 메모리에 올리는 것을 Demanding Paging이라고 한다.
    Page Table에는 Valid bit가 추가되며, 해당 페이지- 프레임의 메모리 상 존재 여부를 나타낸다.
    (만약 현재 페이지가 메모리에 적재 -> 1, 아니면 -> 0)


새로운 프로세스가 들어오면 free-frame list에 위에서부터 순차적으로 매핑을 한다.

Hardware Support

CPU 스케줄러가 실행중인 프로세스를 선택할 때, page table도 context switch가 발생해서 reloaded될 필요가 있다.

PTBR(page-table base register)

CPU의 레지스터인데, page table에 적용되로 포인터로,
context switch는 빠르나, memory access가 느리다.

  • 가상 메모리 접근 + 실제 물리 메모리 접근, 총 2번의 메모리 접근이 발생한다.

Translation Look-aside Buffer(TLB)


page table이 아니라, TLB라는 하드웨어 캐시 메모리를 쓴다.
(TLB miss 시간을 줄일 수 있다.)

Memory Protection with Paging

Shared Pages


libc의 물리적인 공간은 1개이나, 논리적으로 다양한 프로세스가 참조를 한다.

Read-Only라서 데드락없다.


넣고 빼고 할 때, hash가 가장 빠르다.

Swapping

필요할 때만 swap해서 사용한다.

근데 페이지로 swapping은 그나마 싸다.

profile
구구구구구!

0개의 댓글