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

1. 개요ANON type의 페이지가 swap in/out을 다루는 코드를 작성하였다. anon_swap_in의 경우엔 디스크의 swap영역에 있던 데이터를 RAM으로 가져온다.anon_swap_out의 경우엔 RAM에서 쫓겨 나서, swap영역에 데이터를 저장하게 된다. 2. 본문// vm/anon.c/* Swap out the page by writing contents to the swap disk. */static boolanon_swap_out (struct page *page) { /* pseudo code * swap 영역에서 slot 할당 받기 * (slot을 할당 받았다면) 해당 slot에 메모리 넣고, 해당 RAM을 free * (swap disk 초과로 할당 받지 못했다면) 커..

1. 개요Swap In/Out에 대한 코드를 작성하기 위해 위 함수를 재 작성해야 한다. 2. 본문/* Initialize the data for anonymous pages *//* HDD과 연관되지 않는 anon type에 대해, init을 */void vm_anon_init(void) { /* TODO: Set up the swap_disk. */ swap_disk = disk_get(1, 1); // 1:1 (스왑공간)에 해당하는 디스크를 반환. ; 즉, 스왑 디스크 반환 slot_max = disk_size(swap_disk) / SLOT_SIZE; // 디스크 크기와 슬롯 크기를 이용해 사용할 수 있는 스왑 슬롯의 최대 개수를 계산 swap_table = bitmap_cr..

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)를 한다는 건..