150 likes | 198 Views
This project assignment involves implementing virtual memory in the Nachos operating system, running two test programs concurrently under round-robin scheduling, using swap space for memory management, and creating a virtual memory manager.
E N D
Nachos Project Assignment 3 Virtual Memory TA:吳哲榮
Assignment • Test case • /test/matmult.c • /test/sort.c • Both test programs are greater than whole memory. • Goal– run this two programs concurrently, and get the correct result. • Under RR scheduling.
Hints • File system – swap space • Add some table to help you record all the information. • PageTable • FrameTable • SwapTable • Catch PageFaultException • Construct your Virtual Memory Manager
Hints • swap = new SynchDisk • All headers you need to see are in/filesys/ • Use this disk to be the swap space
Hints • PageTable • one pagetable per process • FrameTable • Record every physical pageinformation • SwapTable • Record every sector’s information in swap.
Hints • PageTable • decide your virtual page number • TranslationEntry{ unsigned int virtualPage; unsigned int physicalPage; bool valid; //whether in physical memory bool readOnly; bool use; //whether beenreferenced or modified bool dirty; //whether been modified }
Hints • FrameTable • Each frame represent one physical page • FrameInfoEntry { bool valid; bool lock; unsigned int vpn; //which virtual page is in this frame AddrSpace *addrSpace; //which process is using this frame };
Hints • SwapTable • The number of entries in swapTable is the same as swap sectors. • Each entry represent one frame in the disk. • FrameInfoEntry { bool valid; //whether entry been used bool lock; unsigned int vpn; //which virtual page is in this entry AddrSpace *addrSpace;//which process is using this entry }; • Access virtual memory in the disk by kernel->swap->WriteSectorand kernel->swap->ReadSector.
Hints • Virtual Address Map to Physical Address • Physical Address = pageTable[(virtual address / PageSize)].physicalPage * PageSize + (virtual address % PageSize)
Hints • Modify Addrspace::Load(char *fileName) • loadone page once • 1.acquire one page • When all physical memoryframes are occupied, please design a page replacement method to get a frame. • 2.Map virtual address to physical address • Invoke ‘executable->ReadAt(&(kernel->machine->mainMemory[physical address]), sizeToLoadNow, inFileAddr)’
Virtual Memory Manager • Public: • int TranslateAddr(AddrSpace *space, int virtAddr); // translate virtual addressto physical address • bool AcquirePage(AddrSpace *space, unsigned int vpn); // get a frame • void ReleasePage(AddrSpace *space, unsigned int vpn); // release a page • void PageFaultHandler(void); // manage page fault
PageFaultHandler • PageFaultHandler • Put the pages in swaptable into frametable. • When all physical memory frames are occupied, please design a page replacement method to get a frame.
Assignment Requirements • Assignment Report (1/20 on the class) • How you modified Nachos to make it support virtual memory – important code segments • Test cases and demonstration to show the correctness of your design • Everything you consider important
Hand in your reports. • Please compress following with zip. • source code • Final report • power-point file tar zcvf b99901000.tar.gz • E-mail your code and presentation files(report) to TA (b93901098@ntu.edu.tw). • Deadline: 2011/1/20 23:59
Grading Policy • Correct Result 30% • Report 70%