목록정글 일지 (22)
미소를뿌리는감자의 코딩
1. 개요do_munmap의 경우엔 할당된 페이지를 해제하고, 해당 파일을 위해 할당되었던 PM도 해제하는 함수이다. 2. 본문void do_munmap (void *addr) { /* pseudo * va에 대해서 spt 확인을 통해 dirty bit 확인 * (작성된 경우) file에 반영 시키고 반환 * (작성 안된 경우) file에 반영 안하고 반환 */ struct thread *curr = thread_current(); struct page *page; lock_acquire(&filesys_lock); while((page = spt_find_page(&curr->spt, addr))) { if (page) destroy(page); // destory(page)를 한다는 건..

1. 개요do_mmap의 경우엔, file_backed 페이지에 대해서 PM와 mapping을 시켜주는 함수이다.2. 본문mmap함수의 경우엔, do_mmap을 하기 전에 여러 인자들에 대해서 유효성 검사를 하는 것이 주된 목표라고 할 수 있다.주석 처리를 통해 각각의 코드의 의미를 적어보았다.// userprog/syscall.c/** Project 3: Memory Mapped Files - Memory Mapping */void *mmap(void *addr, size_t length, int writable, int fd, off_t offset) { /* addr = 매핑을 시작할 가상 메모리 주소 * offset = 파일의 매핑 시작 위치 */ if (!addr ||..

1. 개요이번에 Stack Growth에 대해서 다루어 보려고 한다.stack은 init으로 1개의 페이지를 먼저 초기화를 하고 시작한다.하지만 1개의 페이지보다 더 많은 stack을 이용하려고 할 시, 어떻게 될 것인가? 이를 다루기 위한 것이 이번 단원의 목표이다.따라서, page_fault가 일어났을 시, 이것이 일반적인 page fault인지 아니면, stack이 초과되어서 나는 page_fault인지 파악해야 한다.만약에 spt에서 page를 찾을 수 없으면, false를 반환했던 것과 달리, 코드를 작성해 주어야 한다. 커널 모드에서 발생한 페이지 fault의 경우 sp가 저장되지 않는다. 따라서, 쓰레기 값이 저장되어 있을 수 있기 때문에 유저 모드에서 커널 모드로 전환 시, sp를 stru..

1. 개요uninit_destory는 UNINIT된 페이지를 어떻게 destory할 것인가에 대한 함수이다.anon_destory는 ANON type의 페이지를 어떻게 해제할 것인가를 다룬다.해당 경우에는, 서로 가리키는 pointer를 null로 바꾸어주고, frame의 경우엔 free 해준다.page는 추후에 caller가 free할 것이므로 free하지 않아도 된다. 2. 본문재밌게도, uninit_destory는 주석에서 답을 주고 있다. 할게 없다면 return 해라... 라고 적혀있고 그대로 하면 된다.// vm/uninit.cstatic voiduninit_destroy (struct page *page) { struct uninit_page *uninit UNUSED = &page->uni..