목록2024/12 (17)
미소를뿌리는감자의 코딩

1. 개요UNINIT페이지에서 vm_file로 페이지를 할당하는 과정에 대해서 다루는 함수를 알아볼 것이다. 2. 본문우선, vm_file_init은 수정할 것이 없다. 왜냐하면 ANON 페이지와 다르게 디스크에 메모리를 할당 받을 필요가 없다. 다음으로 file_backed_initializer에 대해서 알아보자./* Initialize the file backed page */boolfile_backed_initializer (struct page *page, enum vm_type type, void *kva) { /* Set up the handler */ /* pseudo : * file_backed와 관련된 operation을 설정 * UNINIT에서 FILE_BACKED라는 상태를 명시..
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..