當前位置:編程學習大全網 - 源碼下載 - 開始指南源代碼

開始指南源代碼

Stack_start在sched.c文件的L72行定義。

長用戶堆棧[PAGE _ SIZE & gt;& gt2];

結構{

長* a;

短b;

} stack _ start = { & amp用戶堆棧[頁面大小& gt& gt2],0x 10 };

它在內核初始化操作時用作內核堆棧,初始化後將用作任務0的用戶態堆棧。它是運行task 0之前的內核代碼棧,然後被用作task 0和1的用戶態棧。下面的結構用於設置堆棧ss:esp(數據段選擇器,指針),見head.s,第23行。Ss設置為內核數據段選擇器(0x10),指針esp指向user_stack數組最後壹項之後。這是因為當英特爾CPU執行堆棧操作時,它首先遞減堆棧指針sp的值,然後將堆棧內容保存在sp指針處。

描述符類型中的e位表示指定段的擴展方向,而不是堆棧的操作推送方向。對於壹般的數據段,它的基址是數據段的開始。對於32位堆棧段(如果定義了堆棧類型段),其基址表示從基址到指定長度限制的內存是不可訪問的,即堆棧段是從長度限制開始到線性地址結束的真實堆棧長度(4G)。這個e位扮演這個角色。

例如,如果內存空間是10。定義段基址=3,長度=4。那麽如果E=0,則分段範圍是3-7。如果動態擴展的長度是6,則範圍是3-9。也就是說,該段的延伸位置在該段的末端。

定義段基址=3,長度=4。如果E=1,則分段範圍為7-10。如果動態擴展名的長度為6,則範圍為9-10。也就是說,段的延伸位置在前端。

可以看出,E位置只決定了段的擴展方向。而不管堆棧的實際操作。

  • 上一篇:鬧鐘的作用和好處
  • 下一篇:求老毛桃pe中的konboot(網上的壹用開機就藍屏)求個可用的
  • copyright 2024編程學習大全網