자 이제 우리 핀토스는 멀티 쓰레드를 적적한 동기화를 통해 다룰 수 있어.
그리고 동시에 여러 유저 프로그램도 실행시 킬 수 있지.
하지만 기계의 메인 메모리 사이즈에 제한을 받으며 실행 될 뿐이야.
자! 그래서 이제 이번 과제를 통해 우리는 무한한 메모리의 속임수를 통해 이러한 한계를 없앨 거야.
언제나 그랬듯이 proj3한다고 proj2가 어그러지면 안되고, proj2가 어그러지는 경우가 없게 미리 잘 만든걸로 하자.
자 이제 우리는 vm 디렉토리에서 작업할거야.
Makefile에서 DVM세팅을 켜놓도록 하고.
우리가 진짜 다양한 템플렛 코드를 제공할건데,
그거 무조건 따라야 해. 안따르면 0점임.
그리고 멍청하게 “DO NOT CHANGE” 되어있는거 바꾸지 마.
진짜 멍청하게 굴까봐 우리가 친절하게 각각 템플렛 파일에서 뭐 바꿔야하는지도 알려드림.
include/vm/vm.h
,vm/vm.c
가상메모리를 위한 일반적인 인터페이스를 제공함.
헤더 파일에 vm_type들이 정의 되어 있음.
vm_type : VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACHE( 이 페이지 캐시 이놈은 proj4에서 할거임.)
여기서 너는 너만의 보조페이지 테이블을 하나 구현해야할 것임.
include/vm/uninit.h
,vm/uninit.c
초기화 되지않은 상태의 (vm_type = VM_UNINIT ) 실행을 제공함.
현재 설계상 모든 페이지는 모두 초기화 되지 않은 상태임.
이걸 이제 anonymous pages 혹은 file-backed pages형태로 바꿔줘야함.
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
체점용 파일이야 건들지 마.