Project3: 가상 메모리

이제 여러분은 핀토스의 내부 작동 방식에 어느 정도 익숙해졌을 것입니다. 여러분의 OS는 적절한 동기화로 다중 스레드 실행을 제대로 처리할 수 있고, 여러 사용자 프로그램을 동시에 로드할 수 있습니다. 그러나 실행할 수 있는 프로그램의 수와 크기는 머신의 주 메모리 크기에 의해 제한됩니다. 이 과제에서는 무한 메모리의 환상을 구축하여 이러한 제한을 제거할 것입니다.

이 과제는 이전 과제를 기반으로 구축됩니다. 프로젝트 2의 테스트 프로그램들도 프로젝트 3에서 작동해야 합니다. 프로젝트 3 작업을 시작하기 전에 프로젝트 2 제출물의 버그를 수정하는 것이 중요한데, 이는 이러한 버그들이 프로젝트 3에서도 같은 문제를 일으킬 가능성이 높기 때문입니다.

프로젝트 3에서는 편의를 위해 단계별 지침을 제공합니다.

배경

소스 파일

이 프로젝트에서는 vm 디렉토리에서 작업하게 됩니다. Makefile-DVM 설정을 켜도록 업데이트되었습니다. 우리는 엄청난 양의 템플릿 코드를 제공합니다.

주어진 템플릿을 반드시 따라야 합니다. 즉, 주어진 템플릿을 기반으로 하지 않은 코드를 제출하면 0점을 받습니다. 또한 "DO NOT CHANGE"로 표시된 템플릿은 절대 변경해서는 안 됩니다. 여기서는 수정할 각 템플릿 파일에 대한 세부 정보를 제공합니다.

include/vm/vm.h, vm/vm.c 가상 메모리를 위한 일반적인 인터페이스를 제공합니다. 헤더 파일에서 가상 메모리 시스템이 지원해야 하는 다양한 vm_type의 정의와 설명을 볼 수 있습니다 -- VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACHE (지금은 VM_PAGE_CACHE를 무시하세요. 이는 프로젝트 4용입니다). 또한 여기서 보조 페이지 테이블을 구현할 것입니다.

include/vm/uninit.h, vm/uninit.c 초기화되지 않은 페이지(vm_type = VM_UNINIT)에 대한 연산을 제공합니다. 현재 설계에서는 모든 페이지가 처음에 초기화되지 않은 페이지로 설정된 다음, 익명 페이지나 파일 지원 페이지로 변환됩니다.

include/vm/anon.h, vm/anon.c 익명 페이지(vm_type = VM_ANON)에 대한 연산을 제공합니다.

include/vm/file.h, vm/file.c 파일 지원 페이지(vm_type = VM_FILE)에 대한 연산을 제공합니다.

include/vm/inspect.h, vm/inspect.c 채점을 위한 메모리 검사 연산을 포함합니다. 이 파일들을 변경하지 마세요.

이 프로젝트에서 작성할 대부분의 코드는 vm 디렉토리의 파일들과 이전 프로젝트에서 소개된 파일들에 있을 것입니다.

처음 접하는 몇 개의 파일들도 있을 것입니다:

include/devices/block.h, devices/block.c 블록 장치에 대한 섹터 기반 읽기 및 쓰기 액세스를 제공합니다. 이 인터페이스를 사용하여 스왑 파티션을 블록 장치로 액세스할 것입니다.

메모리 용어

메모리와 저장소에 대한 몇 가지 용어부터 시작하겠습니다. 이러한 용어 중 일부는 프로젝트 2에서 익숙할 것이지만, 대부분은 새로운 내용입니다.

페이지