機器上電自動進入16位實模式,在setup.s中設定機器狀態字cr0的保護模式位元位,然後通過一條段間跳轉,開始執行head.s。所以,從head.s開始,作業系統才執行在保護模式中。
軟體在head.s中設定了頁目錄表和前4個頁表,在設定了cr0的分頁操作位元位後,跳轉入main函式。所以從main函式開始,作業系統才支援分頁。
軟體在main函式開始執行的時候還是以特權級0執行,這時大概可以稱為核心程序。在move_to_user_mode()中,**通過特殊方式載入**段選擇符,eip,和堆疊段選擇符,資料段選擇符,從而以特權級3開始執行。所以從main()函式呼叫完move_to_user_mode()開始,系統就在task0中執行,直到有中斷呼叫切換到核心態。
linux0 11任務切換switch to
define switch to n tmp asm cmpl ecx,current n t je 1f n t movw dx,1 n t xchgl ecx,current n t ljmp 0 n t cmpl ecx,last task used math n t jne 1f n t c...
Linux 0 11 核心筆記
1 任務0的堆疊問題 一直不明白schedule.c裡的task union的stack和user stack是什麼關係,head.s裡就設定了esp指向user stack,卻一直沒有用到task union,直到看到init task才明白,從進入保護模式到跳轉進使用者態都是用的user sta...
linux0 11 記憶體結構
linux0.11,記憶體最多支援16m,其中0 1m是核心區,核心模組大約為520k,即end位址,即實際核心使用是從0 到end,之後到640k是高速緩衝區,從640k開始的區域,分別是視訊記憶體,bios區域,高速緩衝區,高速緩衝區之後是是主記憶體區域。在記憶體核心區域當中,從0開始,首先存放...