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

正文內(nèi)容

nachos線程通信和調(diào)度分析操作系統(tǒng)課程設(shè)計(jì)-資料下載頁(yè)

2025-06-05 11:02本頁(yè)面
  

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