日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Linux0.11內核--idt(中斷描述符表的初始化)he

系統 2018 0

head.s被編譯成system模塊的最前面部分,故而稱為頭部。

這段程序處于地址的絕對0處,首先是加載各個數據段寄存器,重新設置中斷描述符表 idt,共 256 項,并使各個表項均指向一個只報錯誤的啞中斷

程序。然后重新設置全局描述符表 gdt。接著使用物理地址 0 與 1M 開始處的內容相比較的方法,檢測 A20 地址線是否已真的開啟(如果沒有開

啟,則在訪問高于 1Mb 物理內存地址時 CPU 實際只會訪問(IP MOD,如果檢測下來發現沒有開啟,則進入死循環。然后程序測試 PC 機是否含有數

學1Mb)地址處的內容)協處理器芯片(80287、80387 或其兼容芯片),并在控制寄存器 CR0 中設置相應的標志位。接著設置管理內存的分頁處

理機制,將頁目錄表放在絕對物理地址 0 開始處(也是本程序所處的物理內存位置,因此這段程序將被覆蓋掉),緊隨后面放置共可尋址 16MB 內存

的 4 個頁表,并分別設置它們的表項。最后利用返回指令將預先放置在堆棧中的/init/main.c 程序的入口地址彈出,去運行 main()程序。

下面看一下idt表的初始化。
首先設置ds,es,fs,gs選擇符為setup.s中設置的數據段
然后設置系統的堆棧
lss stack_start,%esp #表示_stack_start ss:esp
其中stack_start在/kernel/sched.c中定義了
然后進入setup_idt子程序
idt表項的結構如下圖
這段子程序就是循環設置了256項idt描述符,全部指向ignore_int中斷門,以后使用的時候再重新設置
其中idt標號的地址就是idt表的其實地址 位于head.s的233行
定義如下
其中.align n 偽指令的含義
在x86 ELF格式中,要在8字節處對齊,應該用 .align 8
而在 a.out格式中,要在8字節處對齊,應該用 .align 3 (2^n),現在一般用elf格式。

Linux0.11內核--idt(中斷描述符表的初始化)head.s分析


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 沙河市| 曲沃县| 天水市| 军事| 海门市| 于田县| 和平县| 醴陵市| 西乌| 晋宁县| 临武县| 菏泽市| 山西省| 古田县| 井陉县| 达孜县| 郓城县| 洛隆县| 宁都县| 大关县| 光山县| 木里| 金华市| 旺苍县| 永和县| 和顺县| 江门市| 昌吉市| 大港区| 长丰县| 牟定县| 黄大仙区| 桃江县| 墨竹工卡县| 侯马市| 砚山县| 山东省| 民县| 汝州市| 五大连池市| 界首市|