HIT軟體學院第五次OS實驗

2021-06-02 05:16:10 字數 872 閱讀 4224

繼之前的實驗的各種衰,今天終於把實驗五搞得略懂略懂。

本次實驗的基本內容是:

1.用bochs除錯工具跟蹤linux 0.11的位址翻譯(位址對映)過程,了解ia-32和linux 0.11的記憶體管理機制;

2.在ubuntu上編寫多程序的生產者—消費者程式,用共享記憶體做緩衝區;

3.在訊號量實驗的基礎上,為linux 0.11增加共享記憶體功能,並將生產者—消費者程式移植到linux 0.11。

實驗指導書書上有說,第乙個實驗內容不需要耗費太多的腦細胞,其實還是要消耗一些的,你要記住這些過程,最好知道這些過程是幹什麼的。

第乙個實驗內容指導書的表述順序不是很合理,很容易把人搞蒙,下面我簡要介紹一下第乙個實驗內容的操作順序以及基本原理。

那麼接下來的問題是,我們說查詢ldt,到**去找ldt呢?我們可以通過sreg命令看到ldtr的值,這個值就是ldt在gdt中的描述符的索引。gdt的位置已經由gdtr明確給出,可以通過命令檢視。這樣,知道了gdt的位置和我們要找的ldt描述符在gdt中的索引值,就可以找到我們要找的ldt在gdt中的描述符了,在根據gdt中描述符每位的含義,就能根據這個描述符知道我們要找的ldt表的實體地址(就是該描述符某幾位數字的組合),找到了ldt表的實體地址,就可以通過命令檢視ldt表的內容了。

接下來要做的事情從32位線性位址中分析出實體地址。我們從32位線性位址中可以得到頁目錄號、頁表號和頁內偏移,它們分別對應了32位線性位址的10位+10位+12位,所以0x10003004的頁目錄號是64,頁號是3,頁內偏移是4。

後面的記憶體共享,要用到兩個很重要的函式:put_page( )和get_free_page( )。在編寫相應的系統呼叫之前建議大家先研讀趙炯博士的書,了解一下乙個程序在記憶體中是如何存放的,會很有幫助。

第五次實驗

一 問題及 檔名稱 陣列素數排序.cpp 作 者 周玉傑 完成日期 2017 年 4 月 24 日 版 本 號 v1.0 對任務及求解方法的描述部分 輸入描述 無 問題描述 程式輸出 問題分析 使用函式來分工 演算法設計 無 include include using namespace std c...

第五次實驗

一 問題及 檔名稱 ex5 1 作 者 謝萍 完成日期 2017年 5月 5 日 版 本 號 v1.0 輸入描述 十個整數 問題描述 從鍵盤中輸入10個數放在陣列a中,將該陣列中奇數放到陣列b,偶數放到陣列c中後分別輸出。程式輸出 陣列中的奇數和偶數 問題分析 先輸入陣列,在進行判斷,最後輸出 演算...

第五次實驗

1.include include include using namespace std 函式宣告 void output1 vector void output2 vector intmain 函式實現 以下標方式輸出vector陣列物件v的元素值 void output1 vector v 補...