Nachos Project Assignment 3 Page Swapping TA HungLeng

  • Slides: 15
Download presentation
Nachos Project Assignment 3 Page Swapping TA: Hung-Leng Chen 2021/6/11 Nachos Project Assignment 3

Nachos Project Assignment 3 Page Swapping TA: Hung-Leng Chen 2021/6/11 Nachos Project Assignment 3 1

Assignment • 實做virtual memory management中的page swapping, 讓test目錄下的matmult和sort可 以同時執行, 並且得到這兩個test file執行後 正確的答案. 2021/6/11 Nachos Project

Assignment • 實做virtual memory management中的page swapping, 讓test目錄下的matmult和sort可 以同時執行, 並且得到這兩個test file執行後 正確的答案. 2021/6/11 Nachos Project Assignment 3 2

Hint • 使用 3個tables • 新增swap = new Synch. Disk來存放在硬碟 的virtual memory • 修改addrspace.

Hint • 使用 3個tables • 新增swap = new Synch. Disk來存放在硬碟 的virtual memory • 修改addrspace. h和addrspace. cc • 修改exception. cc來catch Page. Fault. Exception • 新增一個virtual memory manager 2021/6/11 Nachos Project Assignment 3 3

3 tables • 1. Page. Table • 每個process有一個pagetable • 2. Frame. Table • 整個system一個,

3 tables • 1. Page. Table • 每個process有一個pagetable • 2. Frame. Table • 整個system一個, 紀錄每個physical page的資訊 • 3. Swap. Table • 整個system一個, 紀錄swap內每個sector的資訊 2021/6/11 Nachos Project Assignment 3 4

page. Table • 1. page的數目請自行斟酌(virtual page number) • 2. Translation. Entry{ unsigned int virtual.

page. Table • 1. page的數目請自行斟酌(virtual page number) • 2. Translation. Entry{ unsigned int virtual. Page; unsigned int physical. Page; bool valid; //是否存在於physical memory bool read. Only; bool use; //自從被放到memory中以來, 是否有 被referenced或modified bool dirty; //自從被放到memory中以來, 是否有 被modified } 2021/6/11 Nachos Project Assignment 3 5

frame. Table • 1. 一個frame代表一個physical page • 2. Frame. Info. Entry { bool valid;

frame. Table • 1. 一個frame代表一個physical page • 2. Frame. Info. Entry { bool valid; //此frame目前是否有被使 用 bool lock; unsigned int vpn; //是哪一個virtual page被放 在 這個frame Addr. Space *addr. Space; //目前是哪一個 process 在使用這個 frame }; 2021/6/11 Nachos Project Assignment 3 6

swap. Table • 1. swap. Table內entry的數目為swap sectors的數目 • 2. 一個entry代表一個在硬碟裡面的frame • 3. Frame. Info.

swap. Table • 1. swap. Table內entry的數目為swap sectors的數目 • 2. 一個entry代表一個在硬碟裡面的frame • 3. Frame. Info. Entry { bool valid; //此entry目前是否有被使用 bool lock; unsigned int vpn; //是哪一個virtual page被放在 這個entry Addr. Space *addr. Space; //目前是哪一個process 在使用這個entry }; • 4. 透過kernel->swap->Write. Sector和kernel->swap->Read. Sector來 存取硬碟中的virtual memory (swap為一個Synch. Disk類別) 2021/6/11 Nachos Project Assignment 3 7

Virtual Address Map to Physical Address • Physical Address = page. Table[(virtual address /

Virtual Address Map to Physical Address • Physical Address = page. Table[(virtual address / Page. Size)]. physical. Page * Page. Size + (virtual address % Page. Size) 2021/6/11 Nachos Project Assignment 3 8

Addrspace. cc • 修改Addrspace: : Load(char *file. Name) • 一次load一個page • 1. acquire one

Addrspace. cc • 修改Addrspace: : Load(char *file. Name) • 一次load一個page • 1. acquire one page • 當physical memory的frame都被佔用的時候, 請設計一個 page replacement的方法來取得一個frame. • 2. Map virtual address to physical address • Invoke ‘executable->Read. At(&(kernel->machine>main. Memory[physical address]), size. To. Load. Now, in. File. Addr)’ 2021/6/11 Nachos Project Assignment 3 9

Virtual Memory Manager • Public: • int Translate. Addr(Addr. Space *space, int virt. Addr);

Virtual Memory Manager • Public: • int Translate. Addr(Addr. Space *space, int virt. Addr); //把virtual address轉換成physical address • bool Acquire. Page(Addr. Space *space, unsigned int vpn); // 取得一個frame • void Release. Page(Addr. Space *space, unsigned int vpn); // 釋放一個page • void Page. Fault. Handler(void); // 處理page fault 2021/6/11 Nachos Project Assignment 3 10

Page. Fault. Handler • 1. 把在swaptable中的page抓到frametable中 • 2. 當physical memory的frame都被佔用的時候, 請 設計一個page replacement的方法來取得 一個frame.

Page. Fault. Handler • 1. 把在swaptable中的page抓到frametable中 • 2. 當physical memory的frame都被佔用的時候, 請 設計一個page replacement的方法來取得 一個frame. 2021/6/11 Nachos Project Assignment 3 11

Append: Noff header • • 請參考nachos road map 18頁 #define NOFFMAGIC • • •

Append: Noff header • • 請參考nachos road map 18頁 #define NOFFMAGIC • • • typedef struct segment { int virtual. Addr; space */ int in. File. Addr; int size; } Segment; • • • typedef struct noff. Header { int noff. Magic; Segment code; Segment init. Data; Segment uninit. Data; } Noff. Header; 0 xbadfad //magic number denoting Nachos object code file 2021/6/11 /* location of segment in virt addr /* location of segment in this file */ /* size of segment */ /* should be NOFFMAGIC */ /* executable code segment */ /* initialized data segment */ /* uninitialized data segment -- Nachos Project Assignment 3 12

Deadline • 6月20號 Tue 24: 00 am • 把你寫好的nachos source code 壓縮成 “os學號_p 3.

Deadline • 6月20號 Tue 24: 00 am • 把你寫好的nachos source code 壓縮成 “os學號_p 3. tar. gz”, 連同報告”os學號 _p 3. doc” (學號以某一組員代表即可) email to kidd@arbor. ee. ntu. edu. tw 2021/6/11 Nachos Project Assignment 3 14

Grading Policy • Results of your project 70% • Project 3 progress presentation 10%

Grading Policy • Results of your project 70% • Project 3 progress presentation 10% • Project 3 report 20% • 把matmult和sort放在一起跑, 針對RR scheduling和SJF scheduling都要能work • Test result放在課程網頁上 2021/6/11 Nachos Project Assignment 3 15