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

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

系統 2020 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條評論
主站蜘蛛池模板: 北安市| 长海县| 隆德县| 铜梁县| 南昌县| 岫岩| 舞阳县| 鄂伦春自治旗| 静乐县| 宿迁市| 阳曲县| 长阳| 梅州市| 萍乡市| 葫芦岛市| 丰台区| 鲁甸县| 长丰县| 临洮县| 曲水县| 汪清县| 阳江市| 商洛市| 安乡县| 洱源县| 上蔡县| 哈密市| 温宿县| 壶关县| 潜江市| 城固县| 盘锦市| 京山县| 新丰县| 西乡县| 礼泉县| 武山县| 个旧市| 固原市| 南阳市| 呼伦贝尔市|