여러분의 OS는 여러 실행 스레드를 적절한 동기화와 함께 처리할 수 있고, 여러 사용자 프로그램도 동시에 로드할 수 있습니다.
하지만, 실행 가능한 프로그램의 수와 크기는 기계의 주 메모리(메인 메모리) 크기에 의해 제한됩니다.
이 과제에서는, ‘무한한 메모리’라는 환상을 제공함으로써 이런 제한을 없앨 것입니다.
이 과제는 이전 과제를 바탕으로 진행합니다. Project 2에서 사용한 테스트 프로그램은 Project 3에서도 동작해야 합니다.
Project 3을 시작하기 전에, Project 2에서 발생한 버그를 반드시 수정하세요.
그렇지 않으면, 동일한 버그가 Project 3에서도 계속 문제를 일으킬 수 있습니다.
우리는 여러분이 쉽게 진행할 수 있도록 step-by-step(단계별) 지침을 제공합니다.
이번 프로젝트는 vm 디렉토리에서 주로 작업하게 됩니다.
Makefile은 -DVM 설정을 추가하여 빌드 시 자동으로 이 프로젝트가 활성화되게 해 놓았습니다.
우리는 대량의 템플릿 코드를 제공합니다.
반드시 제공된 템플릿을 따라야 합니다.
만약 템플릿에 기반하지 않은 코드를 제출하면 0점 처리됩니다.
또한, 템플릿 내 "DO NOT CHANGE"라고 명시된 부분은 절대 변경하지 마세요.
아래는 여러분이 수정하게 될 각 템플릿 파일에 대한 간략 설명입니다.
include/vm/vm.h, vm/vm.c
가상 메모리(Virtual Memory) 전반에 대한 인터페이스를 제공합니다.
헤더 파일에는 여러 가지 vm_type(VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACHE)에 대한 정의와 설명이 있습니다.
(단, VM_PAGE_CACHE는 Project 4에서 사용할 예정이니 지금은 무시하세요.)
여기에 ‘보조 페이지 테이블’(Supplemental Page Table, 아래 참고) 구현도 해야 합니다.