setup.s 总结——Linux-0.11 剖析笔记(四)
生活随笔
收集整理的這篇文章主要介紹了
setup.s 总结——Linux-0.11 剖析笔记(四)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇文章 setup.s 解讀——Linux-0.11 剖析筆記(三) 詳細地解釋了 setup.s 的代碼,整個代碼完成的任務有:
- 保存光標的位置
- 獲取從 1M 處開始的擴展內存大小
- 獲取顯示模式
- 檢查顯示方式(EGA/VGA)并獲取參數
- 復制硬盤參數表(包括檢查系統是否有第2個硬盤)
但是,要進入保護模式,上面的有些步驟不是必須的。
進入保護模式的主要步驟有:
需要強調的是,在 setup.s 程序執行結束后,系統模塊 system 被移動到物理地址 0 開始處,從位置 0x90000 開始處則存放內核將會使用的一些參數,示意圖如下圖:
此時臨時全局表中有三個描述符,第一個是 NULL,不使用;另外兩個分別是代碼段描述符和數據段描述符,它們都指向系統模塊的起始處,即物理地址 0 處。這樣當 setup . s 中執行最后一條指令
jmp 0,8就會跳到 head.s 程序的起始位置,這條指令中的 ‘8’ 是段選擇符,即 GDT 中的代碼段描述符。‘0’ 是代碼段中的偏移值。
這里的全局描述符表,是一個臨時表,僅僅是為了進入保護模式。進入保護模式后,會執行 head.s 中的代碼,head.s 會設置真正的全局描述符表。
參考資料
1《Linux內核完全剖析》(趙炯,機械工業出版社,2006)
2《Orange’s:一個操作系統的實現》(于淵)
總結
以上是生活随笔為你收集整理的setup.s 总结——Linux-0.11 剖析笔记(四)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: router vue 动态改变url_v
- 下一篇: head.s 剖析——Linux-0.1