《30天自製作業系統》第五天學習筆記

2021-10-09 18:05:45 字數 2438 閱讀 2658

這一章主要講的是顯示字元和gdt、idt

字元的顯示其實就是畫出來,就是根據字的形狀進行編碼,比如:

;}系統所用的字型檔是由hankaku.txt的檔案構成的,這麼檔案會被連線到系統檔案裡面,在makefile中可以看到該通過工具與程式檔案向連線,並且以_hankaku作為彙編的語言的表示,在外部呼叫這個字型檔的話只需要宣告 extern char hankaku[4096];即可

hankaku.bin : hankaku.txt makefile

$(makefont) hankaku.txt hankaku.bin

hankaku.obj : hankaku.bin makefile

$(bin2obj) hankaku.bin hankaku.obj _hankaku

bootpack.bim : bootpack.obj naskfunc.obj hankaku.obj makefile

$(obj2bim) @$(rulefile) out:bootpack.bim stack:

3136k map:bootpack.map \

bootpack.obj naskfunc.obj hankaku.obj

gdt

(全域性描述符表gdt(global descriptor table)在整個系統中,全域性描述符表gdt只有一張(乙個處理器對應乙個gdt),gdt可以被放在記憶體的任何位置,但cpu必須知道gdt的入口,也就是基位址放在**,intel的設計者門提供了乙個暫存器gdtr用來存放gdt的入口位址,程式設計師將gdt設定在記憶體中某個位置之後,可以通過lgdt指令將gdt的入口位址裝入此暫存器,從此以後,cpu就根據此暫存器中的內容作為gdt的入口來訪問gdt了。gdtr中存放的是gdt在記憶體中的基位址和其表長界限。

關於特權級的說明:任務中的每乙個段都有乙個特定的級別。每當乙個程式試圖訪問某乙個段時,就將該程式所擁有的特權級與要訪問的特權級進行比較,以決定能否訪問該段。系統約定,cpu只能訪問同一特權級或級別較低特權級的段。

a. 選擇子sel=21h=0000000000100 0 01b 他代表的意思是:選擇子的index=4即100b選擇gdt中的第4個描述符;ti=0代表選擇子是在gdt選擇;左後的01b代表特權級rpl=1

b. offset=12345678h若此時gdt第四個描述符中描述的段基址(base)為11111111h,則線性位址=11111111h+12345678h=23456789h

由於是13位來對gdt表來進行選擇,所以最大可以查詢2的13次方也就是8192個。

詳細可以參考進行學習

idtidt,interrupt descriptor table,即中斷描述符表,和gdt類似,他記錄了0~255的中斷號和呼叫函式之間的關係

//gdt載入的位址

/* idt初始化 */

for(i =

0; i <

256; i++

)load_idtr

(0x7ff

,0x0026f800);

//idt載入的位址

return

;}

學習第五天

清楚測試用例是什麼 測試用例的重要性 有效性 測試用例是測試人員測試過程中的重要參考依據,準確的測試用例的計畫 執行和跟蹤是 測試的有效性的有力證明 可復用性 設計良好的測試用例可以重複執行,能節約時間,提高測試效率 易組織性 清晰詳細的測試用例能夠便於測試執行的開展 可評估性 測試用例的通過率是檢...

Java學習第五天

當類載入器需要載入某個類時,類載入器會在載入初始化後生成該類的乙個類物件 class 用於描述該類的元資料資訊等。在其後的連線過程中,會初始化該類的靜態成員 變數或靜態初始化器 靜態初始化變數和初始化器按照先後順序執行初始化。例如 static int a 10 static 這樣初始化後a 100...

C 學習第五天

c 中的is和as is可用於任何型別。例如 int a 10 a is object true object o 10 o is int true o person o is int false as右側型別必須為引用型別或可空型別。as操作如果失敗,不丟擲異常,而是返回null 結構 struc...