freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

nachos線程通信和調度分析操作系統(tǒng)課程設計-資料下載頁

2025-06-05 11:02本頁面
  

【正文】 )的NachOS課程設計 寄存器,同時加上有關 Nachos 系統(tǒng)調試用的 8 個寄存器,以期讓模擬更加真實化并易于調試,對于一些特殊的寄存器說明如下: 寄存器名 編號 描述 StackReg 29 用戶程序 錯誤 !未找到引用源。 的堆棧指針 RetAddrReg 31 存放過程調用的返回地址 HiReg 32 存放乘法結果的高 32位 LoReg 33 存放乘法結果的低 32位 PCReg 34 當前 PC指針 NextPCReg 35 下一條執(zhí)行語句的 PC指針 PrevPCReg 36 上一條執(zhí)行語句的 PC指針(調試用) LoadReg 37 需要延遲載入的寄存器編號 LoadValueReg 38 需要延遲載入的寄存器值 BadAddReg 39 當出錯陷入( Exception)時用戶程序 錯誤 !未找到引用源。 的邏輯地址 Nachos 用宿主機的一塊內存模擬自己的內存。為了簡便起見,每個內存頁的大小同磁盤扇區(qū)的大小相同,而 整個內存的大小遠遠小于模擬磁盤的大小。由于Nachos 是一個教學操作系統(tǒng),在內存分配上和實際的操作系統(tǒng)是有區(qū)別的。事實上, Nachos 的內存只有當需要執(zhí)行用戶程序 錯誤 !未找到引用源。 時用戶程序的一個暫存地,而作為操作系統(tǒng)內部使用的數據結構不存放在 Nachos 的模擬內存中,而是申請 Nachos 所在宿主機的內存。所以 Nachos 的一些重要的數據結構如線程控制結構等的數目可以是無限的,不受 Nachos 模擬內存大小的限制。 這里需要強調的是,此處 Nachos 模擬的寄存器組同 Thread 類(第三章第三節(jié))中的 machineState[]數組表示的寄存器組不同,后者代表的是宿主機的寄存器組,是實際存在的;而前者只是為了運行擁護程序模擬的。 在用戶程序 錯誤 !未找到引用源。 運行過程中,會有很多系統(tǒng)陷入核心的情況。系統(tǒng)陷入有兩大類原因:進行系統(tǒng)調用陷入和系統(tǒng)出錯陷入。系統(tǒng)調用陷入在用NachOS課程設計 戶程序進行系統(tǒng)調用時發(fā)生。系統(tǒng)調用可以看作是軟件指令,它們有效地彌補了機器硬件指令不足;系統(tǒng)出錯陷入在系統(tǒng)發(fā)生錯誤時發(fā)生,比如用戶程序使用了非法指令以及用戶程序邏輯地址同實際的物理地址映射出錯等情況。不同的出錯陷入會有不同的處理,比 如用戶程序邏輯地址映射出錯會引起頁面的重新調入,而用戶程序使用了非法指令則需要向用戶報告等等。 Nachos 處理的陷入有: 需要注意的是,雖然這里的很多方法和屬性規(guī)定為 public的,但是它們只能在系統(tǒng)核心內被調用。定義 Machine 類 錯誤 !未找到引用源。 的目的是為了執(zhí)行用戶程序 錯誤 !未找到引用源。 ,如同許多其它系統(tǒng)一樣,用戶程序不直接使用內存的物理地址,而是使用自己的邏輯地址,在用戶程序邏輯地址和實際物理地址之間,就需要一次轉換,系統(tǒng)提供了兩種轉換方法的接口: 線性頁面地址轉換方法 和 TLB頁面地址轉換方法 。 線性頁面地址轉換是一種較為簡單的方式,即用戶程序 錯誤 !未找到引用源。的邏輯地址同實際物理地址之間的關系是線性的。在作轉換時,給出邏輯地址,計算出其所在的邏輯頁號和頁中偏移量,通過查詢轉換表(實際上在使用線性頁面地址轉換時, TranslationEntry結構中的 virtualPage 是多余的,線性頁面轉換表的下標就是邏輯頁號),即可以得到實際物理頁號和其頁中偏移量。在模擬機上保存有線性頁面轉換表,它記錄的是當前運行用戶程序的頁面轉 換關系;在用戶進程空間中,也需要保存線性頁面轉換表,保存有自己運行用戶程序的頁面轉換 邏輯頁號 n 頁內偏移量 物理頁號 頁內偏移量 n … … … … 線性頁面轉換表 線性頁面轉換機制 NachOS課程設計 關系。當其被切換上模擬處理機上運行時,需要將進程的線性頁面轉換表覆蓋模擬處理機的線性頁面轉換表。線性頁面轉換的過程如圖所示。 TLB頁面轉換則不同, TLB轉換頁表是硬件來實現的,表的大小一般較實際的用戶程序 錯誤 !未找到引用源。 所占的頁面數要小,所以一般 TLB表中只存放一部分邏輯頁到物理頁的轉換關系。這樣就可能出現邏輯地址轉換失敗的現象,會發(fā)生 PageFaultException 異常。在該異常處理程序中,就需要借助用戶 進程空間的線性頁面轉換表來計算出物理頁,同時 TLB表中增加一項。如果 TLB表已滿,就需要對 TLB 表項做 LRU替換。使用 TLB 頁面轉換表處理起來邏輯較線性表為復雜,但是速度要快得多。由于 TLB 轉換頁表是硬件實現的,所以指向TLB 轉換頁表的指針應該是只讀的,所以 Machine 類 錯誤 !未找到引用源。 一旦實例化, TLB指針值不能改動。 在實際的系統(tǒng)中,線性頁面地址轉換和 TLB頁面地址轉換只能二者取一,目前為簡便起見, Nachos 選擇了前者,讀者可以自行完成 TLB頁面地址轉換的實現。 一、用戶程序 錯誤 !未找到引用源。 空間 (文件 , ) Nachos 的用戶進程由兩部分組成:核心部分和用戶程序 錯誤 !未找到引用源。部分。核心部分同一般的系統(tǒng)線程沒有區(qū)別,它共用了 Nachos 的正文段和數據段,運行在宿主機上;而用戶程序部分則有自己的正文段、數據段和棧段,它存儲在 Nachos 的模擬內存中,運行在 Nachos 的模擬機上。在控制結構上, Nachos的用戶進程比系統(tǒng)線程多了以下內容: int userRegisters[NumTotalRegs]。 // 虛擬機 的寄存器組 void SaveUserState()。 // 線程切換時保存虛擬機寄存器組 void RestoreUserState()。 // 線程切換時恢復虛擬機寄存器組 NachOS課程設計 AddrSpace *space。 // 線程運行的用戶程序 錯誤 !未找到引用源。 其中,用戶程序 錯誤 !未找到引用源。 空間有 AddrSpace 類來描述 : class AddrSpace { public: AddrSpace(OpenFile *executable)。 //根據可執(zhí)行文件構成用戶程序 錯誤 !未找到引用源 。 空間 ~AddrSpace()。 //析構方法 void InitRegisters()。 // 初始化模擬機的寄存器組 void SaveState()。 // 保存當前機器頁表狀態(tài) void RestoreState()。 // 恢復機器頁表狀態(tài) private: TranslationEntry *pageTable。 // 用戶程序 錯誤 !未找到引用源。頁表 unsigned int numPages。 // 用戶程序 錯誤 !未找到引用源。的虛頁數 }。 在 Linux系統(tǒng)中,使用 gcc交叉編譯技術將 C程序編譯成 R2/3000錯誤 !未找到引用源。 可以執(zhí)行的目標代碼,通過 Nachos 提供的 coff2noff 工具將其轉換成Nachos 可以識別的可執(zhí)行代碼格式,拷貝到 Nachos 的文件系統(tǒng)中才能執(zhí)行。 生成方法 語法: AddrSpace (OpenFile *executable) 參數: Executable: 需要執(zhí)行代碼 的打開文件結構 功能: 初始化用戶程序 錯誤 !未找到引用源。 空間。 實現: 1. 判斷打開文件是否符合可執(zhí)行代碼的格式,如果不符合,出錯返回 2. 將用戶程序 錯誤 !未找到引用源。 的正文段、數據段以及棧段一起考慮,計算需要空間大小。如果大于整個模擬的物理內存空間,出錯返回。 3. 生成用戶程序 錯誤 !未找到引用源。 線性頁表。 NachOS課程設計 4. 將用戶程序 錯誤 !未找到引用源。 的正文段和數據段依次調入內存,棧段記錄的是用戶程序的運行狀態(tài),它的位置緊接于數據段之后。 返回: 空 目前 Nachos 在運行用戶程序 錯誤 !未找到引用源。 時,有如下的限制: ? 系統(tǒng)一次只能有運行一個用戶程序 錯誤 !未找到引用源。 ,所以目前的線性轉換頁表比較簡單,虛擬頁號同物理頁號完全一樣。當讀者需要加強這部分內容時,需要增加內存分配算法。 ? 系統(tǒng)能夠運行的用戶程序 錯誤 !未找到引用源。 大小是有限制的,必須小于模擬的物理內存空間大小,否則出錯。在虛擬內存 錯誤 !未找到引用源。 實現以后,這部分內容也將做改動。 InitRegisters方法 語法: Void InitRegisters () 參數: 無。 功能: 初始化寄存器,讓用戶程序 錯誤 !未找到引用源。 處于可以運行狀態(tài)。 實現: 設置 PC指針、棧指針的初值,并將其它寄存器的值設置為 0。 返回: 空 SaveState方法 語法: Void SaveState () 參數: 無。 功能: 存儲用戶程序 錯誤 !未找到引用源。 空間的狀態(tài)。 實現: 目前為空。 返回: 空 RestoreState方法 語法: Void RestoreState () 參數: 無。 功能: 恢復處理機用戶程序 錯誤 !未找到引用源。 空間的狀態(tài)。 實現: 賦值實現。 返回: 空 目前系統(tǒng)存儲和恢復用戶程序 錯誤 !未找到引用源。 空間的實現非常簡單,這是因為系統(tǒng)一次只能運行一個用戶程序的局限和使用了線性頁面轉換表而決定NachOS課程設計 的。 當用戶程序 錯誤 !未找到引用源。 空間初始化之后(設由 space 指針指向),真正的啟動運行過程如下: space InitRegisters()。 // 初始化模擬機寄存器組 space RestoreState()。 // 恢復處理機用戶程序 錯誤 !未找到引用源。 空間的狀態(tài) ,是將用戶程 // 序 錯誤 !未找到引用源。 空間的轉換頁表覆蓋模擬機的轉換頁表 machine Run()。 // 運行用戶程序 錯誤 !未找到引用源。 二、系統(tǒng)調用 (文件 , , ) 系統(tǒng)陷入有兩大原因:即系統(tǒng)調用和系統(tǒng)出錯陷入。雖然計算機硬件本身提供了硬件指令,用戶可以通過組織這些硬件指令來開發(fā)所有的系統(tǒng)軟件和應用軟件。但是在軟件開發(fā)過程中我們發(fā)現,有些指令序列需要重復使用,正如在結構化程序開發(fā)中,函數可以被重復調用一樣。我們將 其中一些同硬件或者和操作系統(tǒng)功能有密切聯系的一部分常用指令序列抽取出來,使它們成為操作系統(tǒng)本身的一部分,這就是所謂的系統(tǒng)調用。所以系統(tǒng)調用也被看作軟件指令,它是在用戶態(tài)下運行的程序和操作系統(tǒng)的界面。用戶態(tài)程序可以通過系統(tǒng)調用獲得操作系統(tǒng)提供的各種服務。 一般的 UNIX操作系統(tǒng)提供幾十條甚至上百條系統(tǒng)調用,系統(tǒng)調用的多少取決于操作系統(tǒng)的復雜程度及其主要的適用范圍。只有用戶態(tài)的程序才能進行系統(tǒng)調用,進行系統(tǒng)調用后的狀態(tài)變成系統(tǒng)態(tài),一般程序在系統(tǒng)態(tài)運行會有較高的優(yōu)先級。系統(tǒng)調用作為操作系統(tǒng)的一部分,它們是長駐內存 的。操作系統(tǒng)提供的系統(tǒng)調用太少,會影響用戶程序 錯誤 !未找到引用源。 的執(zhí)行效率和用途;因為不是每種應用都會用到所有的系統(tǒng)調用,系統(tǒng)調用數目太多,則會使得操作系統(tǒng)的NachOS課程設計 核心過于龐大而同樣影響系統(tǒng)的效率。現代的很多操作系統(tǒng)提出了 minikernel甚至 microkernel 的思想,在核心系統(tǒng)調用的選用方面比較謹慎,一般只選用最基本的部分,如網絡、線程管理 錯誤 !未找到引用源。 的與核心密切相關的部分,而將其它部分轉化成開發(fā)系統(tǒng)的一部分,作為開發(fā)系統(tǒng)的標準函數提供,運行在用戶態(tài)下。這樣就可以減輕操作系統(tǒng) 的負擔,增加操作系統(tǒng)的靈活性、可配置性以及分布式應用開發(fā)的簡便性等。 在 Nachos 中,系統(tǒng)調用用其它異常陷入的入口處理函數都是ExceptionHandler 函數,只是陷入的類型為 SyscallException。
點擊復制文檔內容
畢業(yè)設計相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1