목록미뿌감의 코딩 (349)
미소를뿌리는감자의 코딩

1. 개요anon_initializer은 UNINIT으로 초기화 되어 있는 페이지 관련 설정을 anon과 관련된 설정으로 바꾸어주는 함수라고 할 수 있다.따로, 추가적으로 이야기할 부분이 없어 바로 본문으로 넘어가려 한다. 2. 본문// vm/anon.c/* Initialize the file mapping */boolanon_initializer (struct page *page, enum vm_type type, void *kva) { // kva; kernel virtual address /* Set up the handler */ /* * 페이지가 지금 UNINIT으로 설정되어 있으니까, 이를 페이지 type에 따라서 다르게 설정해 줌. */ struct uninit_page *uninit =..

1. 개요vm_alloc_page_with_initializer는 페이지 type에 따라, UNINIT 페이지를 초기화 하는 함수이다.Anonymous page 파트에 들어와서, 전체적인 흐름을 한번 정리해 보았다.vm_alloc_page_with_initializer가 실행이 되면서, swap_in 핸들러와, 초기화 함수(initializerFunc)를 설정해 준다. 이후 spt에 해당 페이지를 추가해 주는 과정을 거친다. 이후, 프로그램 실행 중, 페이지 fault가 발생하게 되면 해당 elem을 찾게되고, UNINIT 상태임을 확인하게 되면, 이전에 초기화 시 설정해 두었던 swap_in 핸들러를 통해 initializerFunc에 저장해두었던 함수를 실행하게 된다. 2. 본문boolvm_alloc..

1. 개요이번 함수 구현에 대한 이해는 이전보다 수월했다.// vm/vm.c/* Insert PAGE into spt with validation. */boolspt_insert_page (struct supplemental_page_table *spt UNUSED, struct page *page UNUSED) { /* [Pseudo] spt에 va가 있는 지 확인. (true) -> 페이지 insert가 일어나선 안되겠지 (false) -> spt에 va에 해당하는 페이지 할당 사전 : spt_find_page()를 통해 va로 할당된 페이지 유무를 확인. (있다면) ..? (없다면) page->hash_elem을 통해 해시값을 찾고, 해시값의 위치에 해당되는 supplemental ..

1. 개요spt_find_page를 구현하려고 한다. 이 함수의 목적은 supplemental page table에서 va(virtual address)에 해당하는 페이지를 찾는 것이다.// vm/vm.c/* Find VA from spt and return page. On error, return NULL. */struct page *spt_find_page (struct supplemental_page_table *spt UNUSED, void *va UNUSED) { /* [Pseudo] va에 해당하는 값이 spt에 있는 지 확인. (true) -> 해당 페이지 반환 (false) -> NULL 반환 uint64_t hash_va = hash_bytes(va, sizeof(va)) ->..