![](/img/trans.png)
[英]in 80486 (kernel mode) what does out [dx],al do? ( from exam)
[英]CPU Switches from User mode to Kernel Mode : What exactly does it do? How does it makes this transition?
CPU從用戶模式切換到內核模式:它究竟做了什么? 它是如何實現這種轉變的?
編輯:
即使它依賴於架構,請給我一個答案。 該架構取決於您。 告訴我你所了解的架構。
我想知道所有事情將涉及到什么。
注意:這主要與x86架構相關。 這是一個有點簡化的解釋。
過渡通常是由以下原因之一引起的:
通常發生的是系統檢查中斷描述符表(IDT)。 每個異常(中斷,故障等)都有一個與之關聯的數字,用於索引此表。
從該表中,CPU可以確定要運行的中斷處理程序。
作為轉換的一部分,以下更改(通常)生效:
你現在處於內核模式。
希望有幫助:)
這是系統依賴的,但通常的機制是一些userland操作導致軟件中斷。 該中斷使處理器切換模式並跳轉到內核代碼,然后內核代碼檢查程序嘗試執行的操作(系統調用?),然后執行請求的操作並跳轉回用戶模式代碼。 除了軟件中斷之外的其他機制也可能導致轉換; 例如,在搶占式多任務系統中,定時器中斷可能會觸發調度程序運行。
我的理解是,任何段寄存器具有兩個LSB為零的程序將以內核模式運行,而其段寄存器具有兩個LSB = 1的任何程序將在用戶模式下運行。 實際上,段rgeisters的兩個LSB定義了Priviledge Level(0最高到3最低)
因此,要使prgram在內核模式下運行,您必須將段寄存器設置為0010 hex(我相信)。 我不確定如何在不重寫其他內容的情況下將程序放在該內存空間中 - 換句話說,鏈接器如何確保? 此外,如果要從用戶模式代碼調用內核模式代碼,則必須弄清楚如何傳遞參數 - 它們不使用相同的內存空間,因此無法通過內存引用傳遞數據。 我想你必須把它傳遞給寄存器。
如果任何人都能填補上述空白,我將非常感激。
在Windows中,當您進行系統調用時,庫例程會調用駐留在操作系統地址空間中的內核入口點。 它通過執行特定於此目的的指令(例如sysenter)將CPU帶入管理程序模式。 它的作用主要是在標志寄存器中設置一個位。 這使操作系統能夠使用特權指令。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.