Page type / swapping - pintos 시작 전 개념정리

HiroPark·2023년 5월 9일
0

PintOS

목록 보기
6/9

Page type

Uninitialized page - Lazy initialization

Lazy initialization

가상 page만 할당해두었다가, 필요한 page를 요청하면 page fault가 발생.

  • 이때, 해당 page를 type에 맞게 초기화하고, frame과 연결하고, userprogram으로 제어권을 넘김

결국, 해당 메모리가 필요한 시점(fault가 나서 알게됨)이 됐을때, 메모리에 load하는 설계방식을 말함.
"필요한 시점" 이라 함은, 대응되는 페이지 구조체는 생성되었으나, 실제로 이에 대응되는 physical frame이 부여되지는 않은 상태이다.

Lazy loading의 단계는 다음과 같다.

  1. 커널은 새 페이지 request를 받고 제어권을 잡는다
  2. 페이지 구조체를 할당하고, 이에 맞게 적절한 initializer를 세팅하여 새 페이지를 초기화한다.
  3. 다시 유저프로그램으로 제어권을 넘긴다
  4. 유저 프로그램 실행 과정에서 page fault가 발생한다.(페이지와 연결된 물리 메모리가 없기 때문)
  5. fault를 다루는 과정에서 미리 세팅된 initializer(anonymous면 anon_initializer, file-backed면 file_backed_initializer)를 호출한다.

Anonymous Page와 File-backed page를 설명하기 전에, mmap에 대해 짚고 넘어가야 한다. (출처)
mmap에 쓸 수 있는 카테고리는 두가지이다.
1. 첫째는 Shared VS Private
2. 두번째는 File VS Anonymous

따라서 이들을 조합하면 총 네가지의 경우의 수가 나온다.

a. Private File Mapping
b. Shared File Mapping
c. Private Anonymous Mapping
d. Shared Anonymous Mapping

file-backed page - mmap syscall

  • 파일로부터 매핑된 페이지

- File mapping은 디스크 상의 파일을 특정하고, 이는 중 일부는 메모리에 매핑된다.

  • 파일이 Private로 매핑된 경우, 변경사항은 파일에 적용되지 않는다. 얘는 파일이 메모리에 복사된 복사본이다.
  • 파일이 Shared로 매핑된 경우, 변경사항은 커널에 의해 파일에 자동으로 적용된다.

Anonymous page - Stack growth

  • Anonymous mapping 은 파일로부터 매핑되지 않은, 커널로부터 할당된 페이지
  • mmap의 세번째 인자로 MAP_ANONYMOUS가 들어오면, FD를 나타내는 4번째 인자와 offset을 나타내는 5번째 인자는 쓰이지 않는다.
  • 커널로부터 프로세스에게 할당된 페이지
  • 힙을 거치지 않고(힙도 익명 페이지) 할당받은 메모리 공간
  • 파일에 매핑되 있다면 파일 내용을 담고 있을것인데, 그렇지 않으니 0으로 초기화된 값을 담고 있다.
  1. 프로세스는 mmap()으로 커널에게 익명 페이지 할당 요청.
  2. 커널은 프로세스에게 가상 메모리를 부여하고, 부여된 가상 메모리에게 읽기와 쓰기 중 무엇을 하냐에 따라서
    2 - a. 읽기 작업 시, 커널은 zero로 초기화된 메모리 페이지를 제공.
    2 - b. 쓰기 작업 시, 커널은 실제 물리 페이지를 할당하고 write 된 데이터를 보관.
  • 프로세스의 힙과 스택은 private으로 할당된 anonymous page

Swap in/out

swap disk

프로그램의 사이즈가 PC메모리의 사이즈보다 크더라도, 우리는 해당 프로그램을 실행할 수 있다.
이는 프로그램의 일부만 로딩해서 사용하면서, 공간이 다 찼을 경우 swapping을 거치기 때문이다.

그림에서는 전체 프로세스를 swap in/out 하는 것 처럼 보이지만, 이는 로드가 매우 크다.

따라서 페이지 단위로 swap in/out 을 진행한다.

  • 따라서, page in/out을 진행하게 된다.

  • page out : ram에서 HDD로 이동해서 공간을 비워주는 것.

  • page in : HDD에 있던 페이지를 다시 메모리로 옮기는 것.

=> 이를 통해서 HDD와 RAM을 하나의 공간으로 추상화 해서(마치 메모리에 한계가 없는것처럼 느껴진다) 사용할 수 있다.

이때, "필요한 페이지 영역만 물리 메모리에 할당" 하는데, 이를 Demand Paging이라고 한다.

page replacement policy

profile
https://de-vlog.tistory.com/ 이사중입니다

0개의 댓글