목록전체 글 (347)
미소를뿌리는감자의 코딩

1. 개요stack의 경우엔, lazy가 아니라 바로 memory와 mapping을 해주어야 한다. 2. 코드/* Create a PAGE of stack at the USER_STACK. Return true on success. *//* 스택의 경우엔 lazy loading이 아니라, 바로 할당 되어야 한다. * arg1, arg2 를 stack에 넣고 (PM) * spt에 해당 VM를 추가하고 * 성공적으로 추가되었다면, sucess = true; * 그게 아니라면, false를 반환.*/static boolsetup_stack (struct intr_frame *if_) { bool success = false; void *stack_bottom = (void *) (((uint8_t *) U..

1. 개요처음 파일에 대한 접근이 들어오면 load_segment가 불리게 된다.load_segment에서 파일의 byte 가 저장될 페이지를 할당한다. 추가적으로, aux를 이용해서 offset과 해당 페이지에서 읽을 byte 에 대한 정보를 포함해서 할당한다.이를 이전에 구현한 vm_alloc_page_with_initializer를 이용해서 UNINIT 페이지를 할당하게 된다. 이후, 해당 virtual memory에 대한 page fault가 들어오게 되면, lazy_load_segment가 호출되게 된다.이전에 저장해두었던 aux에서 읽어야 할 바이트 크기와 offset에 대한 정보를 가지고 온다. file_seek로 파일 시작에서 offset만큼의 위치에서 파일을 읽기 시작한다. page->f..

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..