본문 바로가기

OS/Pintos P.J_36

Pintos project3_Swap In/Out Swap In/Out Memorry swapping은 사용가능한 물리 메모리를 최대화 하기위한 교정과정이다. 메인메모리의 frame이 모두 할당되면 시스템은 더이상 유저프로그램이 메모리 할당을 요구해도 들어줄 수 없다. 이러한 문제의 해결책으로 현재 디스크에서 사용하지 않는 memory frame들을 교체하는 것이다. 스와핑은 OS가 하는 일이다. 시스템이 메모리 부족을 감지하고 메모리 할당요구가 들어왔을때 디스크로 방출시킬 페이지를 선택한다. 그러면 방출될 메모리 프레임의 상태가 디스크로 복사된다. 프로세스가 방출된 page에 접근을 재요구하면 OS는 해당 page를 회복시키는데 이때 디스크에 복사해둔 content를 메모리로 돌려놓는다. 방출될 페이지는 anonymous page 이거나 file-ba.. 2022. 1. 25.
Pintos project3_Memory Mapped Files 이제 memory-mapped pages에 다루어 보도록 하자 어나니머스 페이지와 달리 memory-mapped pages는 file-backed mappings이다 즉 페이지 안의 데이터는 실제 존재하는 file 데이터를 미러링한 값들이다. 만약 페이지 폴트가 발생하면 물리 frame이 즉시 할당되고 contents들은 파일에서 메모리로 복사된다. memorry-mapped 페이지들이 unmapped 되거나 swapped out되면 파일에도 이러한 변경사항이 그대로 반영된다. mmap and munmap System Call mmap 과 munmap은 memory mapped files를 위한 systemcalls 이다. 현재 우리의 VM system 에서 페이지는 mmap영역에서 lazily load.. 2022. 1. 22.
Pintos project3_Stack Growth project2까지 스택은 user_stack에서 시작하는 단일 페이지 였으며 프로그램의 실행은 이 크기로 제한되었다. 이제 스택공간이 증가함에 따라 필요한 페이지를 추가해 주도록 하자 추가 페이지의 할당은 오직 스택에 접근하려고 할때 할당한다. 사용자 프로그램은 만약 스택 포인터 아래에 write를 하면 버그가 난다. 이유는 실제 OS는 스택에 있는 데이터를 수정하기 위한 signal 을보내기위해 언제든 process를 interrupt한다 하지만 x86-64 PUSH 명령어는 학하기전 접근이 가능한 stack pointer인지 체크 한다 . 따라서 스택 포인터 아래 8bytes에서 페이지 fault가 발생할 수 있다. 먼저 현재 유저 프로그램의 스택포인터에서 현재 값을 획득해야 한다. 시스템콜 혹은 .. 2022. 1. 21.
Pintos project3_Anonymous Page Anonymous Page 이건 또 뭘까 ... 이번 파트 에서는 anonymous page라고 불리는 non-disk based imge에 대해 구현한다고 한다. 어떠한 명명된 파일소스도 없기 때문에 어나니머스라고 불리며 어나니머스 매핑은 백업파일이나 장치가 없다. 어나니머스페이지는 스택이나 힙과 같은 실행파일에 사용된다고한다. Page Initialization with Lazy Loading Lazy loading 이란 메모리 로딩이 필요한 시점까지 지연되도록 디자인된것을 말한다. 페이지가 할당되어 해당 페이지 구조가 있으나 물리적 프레임이 없고 페이지의 실제 내용이 아직 로드되지 않은 상태로 contents가 실제로 필요한 경우 page fault 시그널을 받아 로드 된다. pintos에는 3가지.. 2022. 1. 21.
Pintos project3_Memory management 가상 메모리 시스템을 지원하려면 가상페이지와 물리적 프레임을 효과적으로 관리해야 한다. 즉 어떤 메모리 영역이 어떠한 목적으로 누구에 의해 사용되고 있는지 등을 추적해야 한다. 핀토스에서 supplemental page table(spt)을 처리한 후 physical frame을 처리할 것이다. 페이지 구조체 /*include/vm/vm.h*/ struct page { const struct page_operations *operations; void *va; /* Address in terms of user space */ struct frame *frame; /* Back reference for frame */ /* Your implementation */ /* Per-type data are bi.. 2022. 1. 19.
[Project 3_Virtual Memory]_Intro 프로젝트 1,2를 통해 muliple thread의 실행과 synchronization, 그리고 여러 프로그램을 한 번에 로드할 수 있게 되었다. 그러나 실행할 수있는 프로그램의 수와 해당 메모리는 각 가상 머신의 메인 메모리 사이즈까지로 제한적이었다. project 3에서 환상 속의 무한의 메모리를 만듦으로써 이 제한을 없애볼 것이다. 백그라운드 소스파일 vm 폴더에서 작업할것이다. 아래 템플릿 파일들을 수정하게 된다. include/vm/vm.h, vm/vm.c 헤더 파일에서는 가상 메모리의 일반적 인터페이스를 제공한다. VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACHE 등은 우리가 구현할 가상 메모리 시스템을 support 하는 vm_type들이며 설명이 적혀있다(vm_p.. 2022. 1. 11.