第一遍看書時不明白,今天偶然又看到了這一點,頓時豁然開朗
linux0.12系統中共用了四種堆棧
1. 系統引導初始化時臨時使用的堆棧,此時我的理解是系統還在實模式
2. 進入保護模式之后提供內核程序初始化使用的堆棧,位于內核代碼地址空間固定位置處,該堆棧也是后來任務0的用戶態堆棧,個人理解任務0比較特殊,它的內核態堆棧還是用戶
態堆棧都在內核中。
3. 每個任務通過系統調用,執行內核程序時使用的堆棧,我們稱之為任務的內核態堆棧,每個人物都有自己的內核態堆棧,內核態堆棧是和任務數據結構一起定義
4.任務在用戶態執行的堆棧,位于任務邏輯地址空間的末端處。
以前有一段時間還懷疑過linux0.12中內核態堆棧和內核堆棧是不是一個東西,現在我可以很自信的說,這兩個是一個東西。
下面說下任務的堆棧,說的都是在linux0.12中的情況
每個任務(除了任務0和任務1)有自己的64M地址空間,當一個任務剛被創建時,它的用戶態堆棧指針被設置在起地址空間的靠近末端(64M頂端)部分。實際上末端部分還要包括執
行程序的參數和環境變量,然后才是用戶的堆棧空間。說到這里的參數和環境變量聯想《自己動手寫操作系統》和《程序員的自我修養》c語言mian函數的執行可看出,main函數
再被調用錢,堆棧上已經壓入了main函數的參數。P181
每個任務的內核態堆棧的初始化為
p->tss.esp0=PAGE_SIZE+(long)p;
p->tss.ss0=0x10;
可見每個任務(任務0和任務1除外)的內核態堆棧是都是用的同一塊地址空間,所以應該不支持內核級的中斷。
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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