virtualMemory 7

[PintOS] Project 3 : VM - Swap In/out(File-Mapped Page)

파일 기반 페이지란?파일 기반 페이지(File-backed Page)는 mmap() 등을 통해 파일을 메모리에 직접 매핑한 페이지입니다. 일반적인 anonymous 페이지와 달리, 이 페이지들의 백업 저장소는 파일입니다.즉, 페이지를 퇴출(evict)할 때 swap 디스크로 보내는 것이 아니라 파일에 다시 쓰기(write back) 해야 합니다.Swap In / Swap Out 개요함수설명file_backed_swap_in()파일에서 내용을 읽어와 페이지를 메모리로 다시 불러오는 함수file_backed_swap_out()페이지의 내용을 다시 파일에 기록하는 함수(dirty 상태일 때만)전체 Control Flow메모리 부족 ↓vm_get_frame() 호출 → palloc 실패 ↓vm_evict..

[PintOS] Project 3 : VM - Swap In/out(anon)

이번 글에서는 PintOS Project 3의 Swap in/out 파트 중,anon과 관련된 구현 내용을 정리합니다.KAIST 공식 문서의 중 아직 남은 함수들인 다음 네 가지를 중점적으로 다룹니다:vm_anon_init(void)anon_initializer(struct page *page, enum vm_type type, void *kva)anon_swap_out(struct page *page)anon_swap_in(struct page *page, void *kva)Anonymous Page란?Anonymous Page는 특정한 파일에 연결되지 않은 페이지입니다. 예를 들어, 프로그램 실행 중 malloc이나 brk를 통해 동적으로 할당되는 메모리 영역은 Anonymous Page에 해당합니..

[PintOS] Project 3 : VM - Memory Mapped Files - File-Backed 페이지 구성(with lazy loading)

이번 글에서는 PintOS Project 3의 Memory Mapped Files 파트 중,File-Backed 페이지 구성과 관련된 구현 내용을 정리합니다.KAIST 공식 문서의 중 아직 남은 함수들인 다음 세 가지를 중점적으로 다룹니다:void vm_file_init(void)bool file_backed_initializer(struct page *page, enum vm_type type, void *kva)static void file_backed_destroy(struct page *page)File-Backed Control Flow [유저 mmap 호출 (mmap syscall)] │ ▼ do_mmap(start_addr, file, ....

[PintOS] Project 3 : VM - Memory Mapped Files - mmap & munmap 구현(with lazy loading)

PintOS의 Virtual Memory 프로젝트에서 중요한 과제 중 하나는 메모리 매핑 파일(Memory Mapped Files, mmap) 기능을 구현하는 것입니다. 이 포스팅에서는 mmap의 개념, 동작 방식, 그리고 PintOS에서의 구현 흐름과 주요 함수들을 정리합니다Memory Mapped Files란?메모리 매핑 파일(Memory Mapped File)은 말 그대로 파일의 데이터를 메모리 공간에 매핑하는 기술입니다. 일반적으로 파일 입출력은 read()나 write() 시스템 콜을 사용하지만, mmap을 사용하면 파일 데이터를 프로세스의 가상 메모리 공간에 직접 연결할 수 있습니다.이렇게 연결해 놓으면 사용자는 마치 배열처럼 데이터를 접근할 수 있고, 실제 파일 내용은 메모리에서 읽거나 쓸 ..

[PintOS] Project 3 : VM - Memory Management - Frame alloc and Page Mapping

이번 글에서는 PintOS의 Virtual Memory 프로젝트에서 vm_get_frame(), vm_claim_page(), vm_do_claim_page() 함수가 어떤 역할을 수행하는지 정리합니다. Supplement Page Table(SPT)을 구성했다면, 이제 물리 메모리 프레임을 실제로 할당하고, 이 프레임을 페이지에 연결하며, 페이지 테이블(MMU)에 매핑하는 단계입니다.1. vm_get_frame() : 사용자 공간에서 물리 프레임을 하나 할당/* palloc()을 사용하여 프레임을 할당합니다. * 사용 가능한 페이지가 없으면 페이지를 교체(evict)하여 반환합니다. * 이 함수는 항상 유효한 주소를 반환합니다. 즉, 사용자 풀 메모리가 가득 차면, * 이 함수는 프레임을 교체하여 사용..

[PintOS] Project 3 : VM - Memory Management - SPT(Supplemental Page Table) 함수 분석 및 구현 흐름 정리

PintOS의 가상 메모리 프로젝트에서는 사용자 가상 주소와 페이지 정보를 매핑하는 Supplemental Page Table(SPT)를 직접 구현해야 합니다. SPT는 각 프로세스마다 별도로 존재하며, lazy loading, swap, mmap 등 다양한 기능의 기반이 됩니다.이번 글에서는 SPT를 구성하는 주요 함수 3가지를 정리하고, 각 함수가 어떻게 동작하는지 코드 분석과 함께 흐름도를 이용해 설명하겠습니다.1. supplemental_page_table_init()1.1 목적새로운 프로세스가 시작되거나 fork() 시점에 SPT를 초기화하는 함수입니다. 내부적으로는 hash_init()을 이용하여 SPT용 해시 테이블을 초기화합니다.1.2 구현 코드void supplemental_page_ta..

[PintOS] Proejct 3 : VM Memory Management - frame, page, SPT, frame table

PintOS의 Project 3(Virtual Memory)에서는 메모리 관리 구조체들을 직접 설계해야 합니다. 이 과정에서 저희 팀은 계층적인(hierarchy) 구조를 이용하여 page, frame, SPT(Supplemental Page Table), frame table 등 다양한 구조체를 설계하고, 서로 연결해 효율적으로 메모리를 관리합니다.이 포스팅에서는 vm.h를 기준으로 구조체들이 어떻게 설계되어 있고, 어떤 의미를 가지며, 이러한 계층적 구조가 가지는 장점은 무엇인지에 대해 정리해 보겠습니다.전체 구조 개요저희 팀의 PintOS의 가상 메모리 구조입니다. [Supplemental Page Table (SPT)] └── 여러 개의 SPT Entry (key: va, value..