. 'Pintos Project/Project 3' 카테고리의 글 목록
본문 바로가기

Pintos Project/Project 34

[PintOS, Project3] Memory Mapped Files 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할 때.. 2021. 2. 25.
[PintOS, Project 3] Anonymous Page spt spt copy - src에서 dst로 spt 복사 - fork()할 때 사용한다. - Iteration 사용 - uninit page를 만들고 즉시 claim까지 해야한다. -> 기존의 (lazy안하고 남아있던) uninit을 복사하는 것인가? 아니면 새 프로세스가 가져야할 전체 page를 하는 것인가? spt kill - spt가 들고있는 모든 자원을 free한다. - process_exit()할 때, 이 함수가 호출된다. - pag entry를 itration으로 destroy한다. - pml4랑 물리 메모리는 고려안해도 된다. Page Cleanup uninit_destory랑 anon_destroy를 시행한다. uninit 페이지가 다른 page obj로 변했더라도, type은 unini.. 2021. 2. 23.
[PintOS, Project 3] Stack Growth Stack Growth - 스택에 접근하려고 할 때, 추가 페이지를 할당한다. - 스택포인터를 조정하기 전에 접근 허가를 체크할 것이고, 이는 현 스택 포인터 8byte 아래에 페이지 폴트를 야기할 것이다. - 현 유저 프로그램의 스택 포인터의 현재 값을 획득해야한다. - 유저 프로그램이 페이지 폴트를 발생시키거나, 시스템콜을 호출할 때, if에서 rsp를 획득해서 시스콜이나 페이지폴트에 전달할 수 있다. - 페이지 폴트시에 invalid memory access 를 탐지하고 싶다면, page fault가 kernel에서 일어나고 있는지도 체크해야한다. - 프로세서는 exception이 user mode에서 kernenl mode로 바꿀 때만 스택 포인터를 저장하고 있기 때문에, if밖에서 rsp를 읽어.. 2021. 2. 23.
[PintOS, Project 3] Hash Table Data Types Hash Table은 struct hash로 나타내어진다. struct hash; hash table을 의미한다. struct hash에는 직접 접근할 수 없기 때문에 필요시에는 hash table function과 macro를 사용한다. hash table은 struct hash_elem을 리스트의 인자로 가진다. struct hash_elem; hash table에 관련된 함수들은 hash elem을 인자로 가지거나 반환한다. hash table의 real elemnt가 주어졌을 때, hash elem을 가리키는 포인터를 획득하기 위해서는 & (비트연산자)를 사용해야한다. 다른 방향으로 가고 싶으면 hash_entry()를 사용하라. #define hash_entry (elem, .. 2021. 2. 19.