목록미뿌감의 코딩 (348)
미소를뿌리는감자의 코딩
1. 개요페이지와 PF을 연결시키는 함수를 구현해야 한다. 2. 본문// vm/vm.c/* palloc() and get frame. If there is no available page, evict the page * and return it. This always return valid address. That is, if the user pool * memory is full, this function evicts the frame to get the available memory * space. * palloc()을 사용하여 프레임을 할당. 만약 사용할 수 있는 페이지가 없다면, 페이지를 교체하여 프레임을 반환. * 이 함수는 항상 유효한 주소를 반환해야 한다. * if, 사용자 풀 메모리가 가..

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