. [PintOS, Project3] Memory Mapped Files
본문 바로가기
Pintos Project/Project 3

[PintOS, Project3] Memory Mapped Files

by 불냥이_ 2021. 2. 25.

MMP (Memory Mapped Files)

 - mmp는 file_backed mapping이다.
 - 만약 page fault가 일어나면, phy frame은 즉시 할당되고, content는 file에서 memory로 간다. mmp가 unmap되거나 swap out되면 content 변경 사항은 file에 반영되어야한다.


mmap / munmap system call


mmap
 - fd로 연 파일을 offset부터 length만큼 mapping한다. 
 - addr부터 전체 파일이 연속적으로 va에 mapping된다.
 - 파일 크기가 PGSIZE의 배수가 아니면 몇 바이트들이 파일 너머로 튀어나오게 된다.
 - page fault가 났을 때, 이 바이트들을 zero로 하고, disk로 write-back할 때 버린다.
 - 만약 성공적이라면, 파일이 map 된 곳에 va를 반환한다.
 - 실패 시에는 null을 반드시 반환해야한다.
 
 
 - 크기가 없는 파일을 fd로 열 때 mmap은 실패할 것이다.
 - addr 이 page-alinged되지 않았거나 mapped page의 범위가 (executable load time에 된 map이나 stack을 포함한) 이미 존재하는 mapped page에 걸친다면 반드시 fail되어야한다.
 - 핀토스에서 va가 0이라면 mmap이 실패할 것이다. (va는 mapped 이 아니라고 가정하기 때문)
 - length가 0여도 실패할 것이다.
 - map이 가능하지 않으면 fd는 입력과 출력을 보여줄 것이다.
 - memory-mapped page도 anony page와 같이 lazy 방식으로 할당될 것이다. 
 - alloc_page_with_init()이나 vm_alloc_page를 사용할 수 있다.


unmap()
 - 모든 mapping은 process가 exit할 경우 (exit()으로 나가지 않는 경우를 포함하여) unmapp 되어야한다.
 - process에 의해 쓰여진 page들은 file로 write-back을 한다.
 - page들은 virtual page의 process list에서 제거한다.
 
 - closing되거나 removing된 file은 unmap하지 않는다. 
 - 한번 만들어지면, mapping은 munmap 되거나, prcoess exit이 되기 전까지는 계속 유효하다.
 - 한 file의? 각각의 mapping에 대해 독립적이고 별개적인 참조를 위해 file_reopen 을 실행한다.

 - 한 file에 여러 process가 map하고 있을 때, 같은 data를 바라보지 않아도 된다. mmap system은 사용자가 page를 공유할 것인지를 묻는 argument를 가진다. 


vm_file_init ()
 - file-backed page subsystem을 초기화한다.
 - file-backed page와 관련된 것을 setup할 수 있다.

file_backed_initializer ()
 - file-backed page를 초기화한다.
 - file-backed page를 위해 page->operation 안의 handler를 setup한다.
 - page struc의 정보를 업데이트 할 수 있다. 

file_backed_destroy()
 - 연관 file을 닫음으로 file backed page를 지울 수 있다.
 - 만약 content가 변질되었다면, file로 write-back을 해야한다.
 - 이 함수에서 page를 free할 필요는 없다. (file_backed_destroy의 caller가 이를 수행한다.)

'Pintos Project > Project 3' 카테고리의 다른 글

[PintOS, Project 3] Anonymous Page  (2) 2021.02.23
[PintOS, Project 3] Stack Growth  (0) 2021.02.23
[PintOS, Project 3] Hash Table  (0) 2021.02.19

댓글0