지금까지 우리는 핀토스의 내부 작동 원리와 친숙해졌다. 우리의 OS는 적절한 동기화와 함께 다양한 스레드를 다룰 수 있다. 또한, 다양한 유저 프로그램을 동시에 load할 수 있다. 하지만, 작동하는 프로그램의 수와 크기는 기계의 메인 메모리 크기에 의해 제한된다. 이 과제에서는 우리는 무한 메모리의 환상을 설계함으로써 이 제한을 없앨 것이다.
우리는 이전 과제까지의 완성물 위에서 작업을 수행할 것이다. 프로젝트 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는 지금 당장은 무시해라). 우리는 또한 우리의 supplementary page table을 구현한다.
include/vm/uninit.h, vm/uninit.c
얘는 초기화되지 않은 페이지에 대한 조작을 제공한다. (vm_type = VM_UNINIT
지금 상태에서는 모든 페이지는 초기에 초기화되지 않은 페이지로 셋업된다. 이를 anonymous page나 file-backed page로 전환해야 한다.
include/vm/anon.h
, vm/anon.c
anonymous page에 대한 동작을 제공한다(vm_type = VM_ANON)
include/vm/file.h
, vm/file.c