pintos 31

[WEEK13] VM 관련 키워드 정리

Virtual Memory (가상 메모리)개요가상 메모리는 물리 메모리의 추상화된 버전이다. 즉, 프로세스가 실제 물리 주소를 직접 다루지 않고 가상의 주소 공간Virtual Address Space을 통해 메모리에 접근하는 구조이다. 이 방식은 각 프로세스가 자신만의 독립된 주소 공간을 가지는 것처럼 보이게 하며, 메모리 보호 및 효율적인 자원 활용을 가능하게 한다.목적메모리 보호 (Isolation): 서로 다른 프로세스의 메모리 공간이 완전히 분리된다.효율적인 메모리 사용 (Demand Paging): 실제로 사용되는 페이지만 물리 메모리에 올려서 메모리 낭비를 줄인다.스와핑 및 오버커밋 (Swapping & Overcommit): 디스크 공간을 이용해 물리 메모리보다 더 큰 주소 공간을 제공할 수..

[PintOS 5주차] Day 4-5

Swap in/out 구현 이어하기File backed page의 swap in/out을 구현한 뒤에, failed tests의 수가 16개로 늘어나는 문제가 발생했다.static boolfile_backed_swap_out (struct page *page) { struct file_page *file_page UNUSED = &page->file; if (pml4_is_dirty(thread_current()->pml4,page->va)){ file_write_at(file_page->file, page->frame->kva, file_page->read_bytes, file_page->ofs); pml4_set_dirty(thread_current()->pml4, page->va, false);..

[PintOS 5주차] Day 3

Swap In/Out #Memory swapping은 물리 메모리의 사용을 최대화시키기 위한 메모리 reclamation 기법이다.메인 메모리의 프레임이 할당되면, 시스템은 더 이상 유저 프로그램으로부터의 메모리 할당 요청을 다룰 수 없다.한 가지 해결법은 현재 디스크에서 사용되지 않는 메모리 프레임을 swap out하는 것이다.Swapping은 OS에 의해 행해진다.시스템이 메모리의 부족한 상태에서 메모리 할당 요청을 받는다면, swap disk로 내쫓을 하나의 페이지를 고른다.메모리 프레임의 상태를 동일하게 디스크에 복사한다(swap out).프로세스가 swap out된 페이지에 접근하려고 시도할 때, OS는 메모리에 (디스크에 복사했던) 동일한 컨텐츠를 가져옴으로써 페이지를 복구한다.내쫓기기로 결정..

[PintOS 5주차] Day 1

이번 5주차에서는 (지난 3주차와 마찬가지로) 4주차의 팀원들과 프로젝트가 그대로 진행된다.Stack growth 구현static boolvm_stack_growth (void *addr UNUSED) { /* Increases the stack size by allocating one or more anonymous pages * so that addr is no longer a faulted address. Make sure you round down * the addr to PGSIZE when handling the allocation. */ void *upage = pg_round_down(addr); if (vm_alloc_page_with_initializer(VM_ANON, upage,..

[PintOS 4주차] Day 7

함수 수정: spt_find_page()❎ Before: 모든 프로그램이 exit(-1)로 비정상적으로 종료됨struct page *spt_find_page (struct supplemental_page_table *spt UNUSED, void *va UNUSED) { struct page *page = NULL; if(spt == NULL || va == NULL) return NULL; int key = hash_bytes(&va, sizeof(va)) % spt->spt_hash->bucket_cnt; struct list *bucket = &spt->spt_hash->buckets[key]; for (struct list_elem *e = list_begin(bucket); e != list_e..

[PintOS 4주차] Day 6

Memory Management 구현⚠ 아직 작성중인 코드입니다. 🔹 해시 관련 함수struct hash pages;unsigned page_hash (const struct hash_elem *p_, void *aux UNUSED);bool page_less (const struct hash_elem *a_, const struct hash_elem *b_, void *aux UNUSED);struct page *page_lookup (const void *address);/* Returns a hash value for page p. */unsignedpage_hash (const struct hash_elem *p_, void *aux UNUSED) { const struct page *p = h..

[PintOS 4주차] Day 4-5

Stack Growth #더보기지난 프로젝트에서, 스택은 USER_STACK에서 시작하는 단일 페이지였고, 프로그램의 실행은 페이지 크기로 제한되었다. 지금부터는 스택이 현재 크기를 초과하면, 필요에 따라 추가 페이지를 할당한다.스택 접근으로 "보이는" 경우에만 추가 페이지를 할당한다. 스택 접근과 다른 접근을 구별하는 휴리스틱을 고안해야 한다.유저 프로그램이 스택 페인터 아래에 스택에 데이터를 쓸 경우(스택의 top을 넘어서 쓰는 경우) 버그가 발생한다.일반적인 실제 OS는 언제든지 프로세스를 중단시켜 "신호"를 전달하고, 이 신호가 스택의 데이터를 수정하기 때문이다.그러나 x86-64 PUSH 명령어는 스택 포인터를 조정하기 전에 접근 권한을 확인하므로, 스택 포인터 아래 8바이트에서 페이지 폴트가 ..

[PintOS 4주차] Day 3

Anonymous Page #Anonymous page(익명 페이지)는 디스크 기반이 아닌 이미지의 일종이다.Anonymous mapping은 backing 파일이나 장치가 없다.(File-backed 페이지와는 다르게) 이름이 있는 파일 소스를 가지고 있지 않기 때문에 "익명"이라고 부른다.실행 가능 파일에서 스택이나 힙 등에서 사용된다.anon.h에 anonymous page를 나타내는 구조체가 선언되어 있고, vm.h에 선언된 struct page에 struct anon_page anon 필드가 포함되어 있다.더보기Page Initialization with Lazy LoadingLazy loading(지연 로딩)은 필요하게 되는 시점까지 메모리의 로딩을 지연시키는 방법이다.페이지가 할당되었다는 것..