PintOS - project3 : virtual memory (anon page swaping 과정)

binda·2024년 5월 27일

pintOS

목록 보기
4/4

전체적인 swaping 과정

운영체제가 메모리 부족을 감지하고, 메모리 할당 요청을 받는다.

운영체제는 스왑 디스크로 내보낼 페이지(evict)를 선택한다.

선택된 페이지의 정확한 메모리 상태가 스왑 디스크에 복사 된다. (swap out)

이후 해당 페이지에 접근하려 할 때, 운영체제는 스왑 디스크에서 페이지 내용을 다시 메모리로 읽어온다.


🤔 스왑 디스크가 왜 필요함 ?

모든 프로세스가 실행되기에 물리 메모리는 부족하다.

따라서 추가적인 메모리 공간을 확보할 수 있게 하는 것이 스왑 디스크 영역.

프로세스가 계속 실행될 수 있도록 하기위해


일반적으로 swap disk는 물리 메모리의 2~4배 정도로 설정

(그림은 위 사항을 고려해서 참고)

anon page 의 swaping 과정 설명

vm_anon_init()

한 페이지(4096바이트)는 보통 8개의 섹터(4KB / 512바이트)를 차지

ex) swap disk 에 페이지 단위로 스왑 slot의 예시 - page 5개인 경우

만약 물리 메모리가 모두 꽉찬 상황이라면, 프로세스는 실행할 수 없게 된다.

→ 물리 메모리가 존재하지 않는 페이지에 접근하면서 page fault 발생

→ 커널은 페이지 폴트 핸들러의 제어권을 받게 되고, 페이지와 물리 메모리를 매핑하기 위해서

vm_do_claim_page 함수 호출

프레임을 얻기 위해 vm_get_frame 함수를 호출

palloc_get_page(PAR_USER)로 물리 메모리를 할당함(kernel pool 영역에)

물리 메모리가 없으면, 쫓겨날 프레임을 선택

→  FIFO(First-In-First-Out)로, 프레임 테이블의 맨 앞에 있는 프레임을 선택하여 스왑 아웃합니다.

  • frame table 구조 : 제일 앞에 있는 frame을 pop해서 쫓아냄
장점: 구현이 간단하고, 공정성이 있으며, 메모리 사용량이 많은 프로세스에 유리

단점: 최근에 사용된 프레임도 교체될 수 있어 성능이 저하

anon_swap_out

  • 페이지를 swap disk로 내보내는 역할
  • disk에 올라가면, swap table의 slot bit를 1로 변경하고.
  • 물리 메모리와 매핑을 해제 present bit 0 으로 설정
  • anon page 의 구조체에 swap_idx에 사용한 slot no 을 저장해서 데이터의 위치를 추적할 수 있도록

이제, 물리 메모리에 가용 frame이 생성되어 page와 매핑 가능한 상태가 됨

→ swap_in 실행

anon_swap_in

  • swap disk에서 page를 읽어와서 메모리에 적재
profile
🍤

0개의 댓글