1. 程式人生 > >ucore-lab3 實驗報告

ucore-lab3 實驗報告

練習一:給未被對映的地址對映上物理頁  

1、描述:  

lab2中我們實現並啟動了分頁機制,現在我們需要考慮什麼情況下會產生頁錯誤異常並觸發中斷。顯答案是在指令或資料的虛擬地址所對應的物理頁不在記憶體中,或者訪問許可權不夠的情況下。其具體原因有以下三點:  

①頁表項全為0——虛擬地址與實體地址未建立對映關係或已被撤銷。 

②物理頁面不在記憶體中——需要進行換頁機制。 

③訪問許可權不夠——輸出錯誤資訊,並退出。  

根據以上三點錯誤原因,完成頁錯誤處理函式do_pgfault()。  

2思路:  

do_pgfault()函式從CR2暫存器中獲取頁錯誤異常的虛擬地址,根據error code

來查詢這個虛擬地址是否在某一個VMA的地址範圍內,並且具有正確的許可權。如果滿足上述兩個要求,則需要為分配一個物理頁。 

3、實現

//頁表項非空,可以嘗試換入頁面     
else{           
    if(swap_init_ok) {              
        struct Page *page=NULL;              
        //根據mm結構和addr地址,嘗試將硬碟中的內容換入至page中             
        //此時的page還沒有加入到佇列中             
    if ((ret = swap_in(mm, addr, &page)) != 0) {                 
        cprintf("swap_in in do_pgfault failed\n");                 
         goto failed;             
    }              
//建立虛擬地址和實體地址之間的對應關係             
        page_insert(mm->pgdir, page, addr, perm);             
        //將此頁面設定為可交換的              
        swap_map_swappable(mm, addr, page, 1);        
    }        
    else {             
 	    cprintf("no swap_init_ok but ptep is %x, failed\n",*ptep);            
 	    goto failed; 
    }    
}   



練習二:補充完成基於FIFO()的頁面替換演算法。  

1、描述:    

在上面的練習中,頁錯誤異常發生時,有可能是因為頁面儲存在swap區或者磁碟檔案上造成的,練習二需要利用頁面替換演算法解決這個問題。 

2思路:  

頁面替換主要分為兩個方面,頁面換出和頁面換入。頁面換入主要在vmm.c中的do_pgfault()函式實現;頁面換出主要在swap_fifo.c中的swap_out_vistim()函式實現。    在換入時,需要先檢查產生訪問異常的地址是否屬於某個vma表示的合法虛 擬地址,並且儲存在硬碟的swap檔案中(對應的PTE的高24位不為0)。如果滿足以上亮點,則執行swap_in() 

函式換入頁面。  

換出則相對簡單,當申請空閒頁面時,alloc_pages()函式不能獲得空閒頁,則直接呼叫swap_out()函式換出不常用的頁面。  

3、實現:  

(一)、頁面換入的實現 

//頁表項非空,可以嘗試換入頁面     
else{           
    if(swap_init_ok) {              
        struct Page *page=NULL;              
        //根據mm結構和addr地址,嘗試將硬碟中的內容換入至page中             
        //此時的page還沒有加入到佇列中             
        if ((ret = swap_in(mm, addr, &page)) != 0) {                 
        cprintf("swap_in in do_pgfault failed\n");                 
        goto failed;             
    }              
    //建立虛擬地址和實體地址之間的對應關係             
    page_insert(mm->pgdir, page, addr, perm);             
    //將此頁面設定為可交換的              
    swap_map_swappable(mm, addr, page, 1);        
    }        
    else {             
 	    cprintf("no swap_init_ok but ptep is %x, failed\n",*ptep);            
 	    goto failed; 
    }    
}   




(二)、頁面換出的關鍵程式碼  

FIFO替換演算法會維護一個佇列,佇列按照頁面呼叫的次序排列,越早被載入到記憶體的頁面會越早被換出。下面幾個關鍵函式在swap_out()中被呼叫。    

①_fifo_map_swappable()函式將最近被用到的頁面新增到演算法所維護的次序佇列  

static int  
_fifo_map_swappable(struct mm_struct *mm, uintptr_t addr, struct Page *page, int swap_in) {      
    list_entry_t *head=(list_entry_t*) mm->sm_priv; 
    list_entry_t *entry=&(page->pra_page_link);        
    assert(entry != NULL && head != NULL); 
    //將最近用到的頁面新增到次序隊尾
    list_add(head, entry);     
    return 0; 
} 


②_fifo_swap_out_victim()函式是用來查詢哪個頁面需要被換出。  

static int  
_fifo_swap_out_victim(struct mm_struct *mm, struct Page ** ptr_page, int in_tick) {       
    list_entry_t *head=(list_entry_t*) mm->sm_priv;          
    assert(head != NULL);      
    assert(in_tick==0);
    //用le指示需要被換出的頁         
    list_entry_t *le = head->prev;      
    assert(head!=le);  
    //le2page巨集可以根據連結串列元素獲得對應的Page指標p
    struct Page *p = le2page(le, pra_page_link);      
    //將進來最早的頁面從佇列中刪除      
    list_del(le);      
    assert(p !=NULL);       
    //將這一頁的地址儲存在ptr_page中      
    *ptr_page = p;      
    return 0; 
}




結果部分截圖: 


相關推薦

ucore-lab3 實驗報告

練習一:給未被對映的地址對映上物理頁   1、描述:   在lab2中我們實現並啟動了分頁機制,現在我們需要考慮什麼情況下會產生頁錯誤異常並觸發中斷。顯答案是在指令或資料的虛擬地址所對應的物理頁不在記憶體中,或者訪問許可權不夠的情況下。其具體原因有以下三點:   ①頁表項全

作業系統ucore lab7實驗報告

作業系統lab7實驗報告 lab6完成了使用者程序的排程框架和排程演算法的具體實現,即到lab6位置,ucore系統已經可以同事排程執行多個程式。但是這又引來了一個新的問題,那就是當多個同時執行的程序要協同操作或是訪問共享記憶體的時候,如何解決同步和有序競爭的

作業系統ucore lab5實驗報告

作業系統lab5實驗報告 到實驗四為止,ucore還一直在核心態“打轉”,沒有到使用者態執行。建立使用者程序,讓使用者程序在使用者態執行,且在需要ucore支援時,可通過系統呼叫來讓ucore提供服務。而本實驗將程序的執行空間擴充套件到了使用者態空間,出現了建

20155217 實驗四《Java面向對象程序設計》實驗報告

是我 system oca thead temporary activity 免費 nds 系統文件 20155217 實驗四《Java面向對象程序設計》實驗報告 一、實驗內容 1.基於Android Studio開發簡單的Android應用並部署測試; 2.了解Andro

第三次實驗報告+061+陳小蘭

內容 黑盒測試 測試 實驗 音樂 組合 正交 目的 場景 一、實驗目的 掌握黑盒測試用例設計方法 二、實驗要求 (1)對被測程序進行黑盒測試用例設計 (2)運用等價類、邊界值、決策表、狀態圖法等進行測試用例設計。 (3)對手機上任意一款音樂軟件進行黑盒測試實踐。(作

ros防火墻實驗報告(一)

cnblogs star winxp tp服務器 height 全部 查看 ace blog 1實驗目的 使得Ppptp、l2tp能夠在外網建立客戶端,內網自動分配ip,使得外網能夠訪問內網資源。 2 實驗內容 本次內容包括Ros防火墻配置、winxp客戶端ip配置,物理機

130242014045 林承暉 實驗報告一 軟件設計的網絡支持環境

考試 聯盟 開發項目 進行 日期 應用領域 架構師 文字 mar 實驗報告一 課程 軟件系統設計與體系結構 實驗名稱 軟件設計的網絡支持環境 第 頁 專業___軟件工程_____ 班級_ 2班____ 學號____130242014045__

RandomStr實驗報告(驗證碼實驗

print 計算 mstr random 生成 args 字母 實驗 http 要求根據RandomStr.java:使用類型轉換生成六位驗證字符串,示例程序每次運行時,都會生成不同的字符串。實現上述用戶輸入驗證碼的功能。 信1603 20163548 馬雯秋 一、程

java登陸界面實驗報告

es2017 .com cnblogs plain 消息 登錄名 swing vax img 1.設計思想 首先定義姓名name,用消息框輸入姓名和密碼,然後使用類型轉換生成六位驗證字符串,用消息框輸入驗證碼,然後判斷輸入的驗證碼是否正確,如果正確則顯示驗證成功,如果失敗則

網絡對抗技術—實驗報告

搜索 net log 教師 犯罪嫌疑人 搜索引擎 目標 局域網 圖形 學 號:201421410031 中國人民公安大學 Chinese people’ public security university 網絡對抗技術 實驗報告 實驗一 網絡偵

課程作業03實驗報告

截圖 流程圖 lin () generated 回文字符串 作業 註意 sca 1.程序設計思路 先提示輸出字符串,然後定義huiwen函數,先判斷0和length-1位的字符是否相等,first=0,length-1=last,然後遞推first+1,last-1,直到f

c語言第一次實驗報告

報告 技術分享 沒有 分享 公式 數值 blog 運用 es2017 實驗(1):計算攝氏溫度; 設計思路:(1)首先用fahr和celsius來儲存所定義的值; (2)再利用所給公式計算; (3)輸出所得的值。 碰到的問題和解決辦法:在做題過程中沒有註意到格式問題,導致

C語言第一實驗報告

color 比較大小 思路 clas 格式 分段 設計 不知道 進行 實驗一:整數四則運算 #include<stdio.h> int main (void) { int A,B; scanf ("%d %d",&A,&B); pr

Jdbc連接數據庫實驗報告(1)

javaweb一 實驗目的1熟悉myeclipse的使用。2掌握MySQL的使用。3掌握jdbc連接數據庫。二實驗內容1在MySQL下創建一個數據庫students,並創建表student_info。並且輸入記錄。2將mysql的jdbc的jar包導入myeclipse。3編寫註冊用戶界面的代碼login.j

第三次實驗計算分段函數 第四次計算分段函數和循環NEW 第五次分支+循環加強版 實驗報告

scan amp 函數 寬度 中大 解決方法 sca -1 三次 一.實驗題目,設計思路,實現方法 第四次分支+循環 加強版 (2-2計算個人所得稅,2-7 裝睡,2-8計算天數) 設計思路:2-2 用if-else的語句,與計算分段函數的題類似的做法;2-7 運用for語

Jdbc連接數據庫實驗報告(2)

javaweb登錄界面:find.jsp:<%@page contentType="text/html" import ="java.sql.*" pageEncoding="UTF-8"%><html><head><title>登錄</title>

第三四次pta實驗報告

tdi 檢查 大數 格式 turn har 9.png 找不到 奇怪   在寫這些作業之前,我都已經事先預習過,提交pta時不能一次過關,實在不應該,以後要認真檢查代碼,力爭一次做對,不然這對以後的上機考試和參加競賽都是大大的不利。 在寫這些這些程序方面,目前寫的都是比較短

C語言的第一次實驗報告

看書 超過 std 思路 解決方法 條件 輸出 格式 sel 一 實驗題目,設計思路,實驗方法 4-2-4 三天打魚兩天曬網(15 分) 中國有句俗語叫“三天打魚兩天曬網”。假設某人從某天起,開始“三天打魚兩天曬網”,問這個人在以後的第N天中是“打魚”還是“曬網”?

c語言實驗報告

倒數 %0 問題 blog 程序 otto 心得 inner pro 一.實驗題目,設計思路,實現方法 1 實驗題目 7-7 計算火車運行時間 本題要求根據火車的出發時間和達到時間,編寫程序計算整個旅途所用的時間。 4-7 求平方與倒數序列的部分和 本題要求對

計算機網絡實驗報告

學會 沒有 以及 rarp 局域網 ima ast 並且 顯示 計算機網絡實驗報告三 一、實驗名稱 Windows下網絡命令的理解 二、實驗內容 1.使用netsh命令查看本機的IP地址,並修改本機的靜態或者動態IP地址並截圖顯示 2.使用netstat命令來查看本機的