Jos-lab5 (下)

Exercise 4. Change duppage in lib/fork.c to follow the new convention. If the page table entry has thePTE_SHARE bit set, just copy the mapping directly. (You should use PTE_SYSCALL, not 0xfff, to mask out the relevant bits from the page table entry.0xfff picks up the accessed and dirty bits as well.)

Likewise, implement copy_shared_pages inlib/spawn.c. It should loop through all page tableentries in the current process (just likeforkdid), copying any page mappings that have thePTE_SHARE bit set into the child process.

@@ -69,7 +69,11 @@ duppage(envid_t envid, unsigned pn)
        void *addr = (void *)(pn * PGSIZE);
        pte_t pte = uvpt[PGNUM(addr)];
 
-       if ((pte & PTE_W) > 0 || (pte & PTE_COW) > 0) {
+       // LAB 5: Jacky 140223
+       if ((pte & PTE_SHARE) > 0) {
+               if ((r = sys_page_map(0, addr, envid, addr, (pte & PTE_SYSCALL))) < 0)
+                       panic("%s,%d failed: %e\n",__func__,__LINE__,r);
+       } else if ((pte & PTE_W) > 0 || (pte & PTE_COW) > 0) {

 copy_shared_pages(envid_t child)
 {
        // LAB 5: Your code here.
+       struct Env *env;
+       int r, i;
+//     if ((r = envid2env(child, &env, 1)) < 0)
+//             panic("%s() %d failed: %e\n",__func__,__LINE__,r);
+       for (i = 0; i < UTOP; i += PGSIZE) {
+               if ((uvpd[PDX(i)] & PTE_P) && (uvpt[PGNUM(i)] & PTE_P) && ((uvpt[PGNUM(i)
+                       if ((r = sys_page_map(0, (void *)i, child, (void *)i, (uvpt[PGNUM
+                               return r;
+               }
+       }

Exercise 5. In your kern/trap.c, call kbd_intr to handle trap IRQ_OFFSET+IRQ_KBD and serial_intr to handle trapIRQ_OFFSET+IRQ_SERIAL.

+       // Handle keyboard and serial interrupts.
+       // LAB 5: Your code here.
+               case IRQ_OFFSET + IRQ_KBD:
+                       kbd_intr();
+                       return;
+               case IRQ_OFFSET + IRQ_SERIAL:
+                       serial_intr();
+                       return;


發佈了44 篇原創文章 · 獲贊 44 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章