我嘗試學習Windows操作系統的內部構件。 是SSDT定義爲「所有系統調用地址列表」? 是SSDT還允許捕捉硬件事件的中斷處理機制? 感謝您的回答。所有系統調用都需要Windows上的SSDT?
回答
不,SSDT不是操作系統捕捉硬件事件的方式。如果我們從硬件開始說一個網卡的PCI卡,它會有一個類型中斷的信號,它通過PCI接口進入中斷控制器。在PC中,這將是一個「APIC」(高級可編程中斷控制器),而APIC本身又連接到處理器核心。其他硬件以類似的方式工作,所以我將使用APIC作爲以下示例。
當OS初始化APIC時,它將爲每個硬件中斷提供一個「向量」,它將進入中斷向量表 - 每個中斷向量條目將包含處理器在該中斷處於活動狀態時跳轉到的地址。在x86中,中斷向量表被稱爲「中斷描述符表」,因爲向量不僅僅是一個簡單的地址跳轉到 - 它還包含一些關於如何處理中斷等的額外信息。
所以當我們的網絡適配器接收到一個數據包時,它會「拉」中斷信號。處理器會檢測到中斷,當中斷髮生時,中斷控制器給出要使用的向量。處理器查找向量,保存當前狀態並跳轉到向量中的地址。
在矢量內部,操作系統將執行一些「管理」工作,然後查找哪個設備驅動程序要求瞭解該中斷,以便操作系統找到我們的網絡適配器驅動程序,並將其稱爲中斷處理例程。中斷處理代碼檢查網絡適配器的狀態,發現它是一個「新的數據包已到達」類型的中斷,從緩衝區中讀出數據並可能更新某些信號量或類似信息,以便某些驅動程序函數可以開始執行「我們收到了一個新的數據包」代碼。一旦完成,中斷處理程序返回到操作系統。
從中斷處理代碼返回時,操作系統將檢查是否有任何「新進程被喚醒」,所以等待數據包的進程現在將是「可運行的」,並且可能在此時切換進程,或者只是將其標記爲「未來運行」。
的SSDT時使用的應用程序調用,也就是說,CreateFile
,ReadFile
,WriteFile
和CloseHandle
,以及任何其他系統調用(也有相當多的人)的。基本上,SSDT中有一個用於NtCreateFile
的條目,另一個用於NtReadFile
等等 - 請注意NtCreateFile
與CreateFile
不完全相同 - 它是OS內核中發生的部分。
因此,當中斷被觸發時,所有CPU內核都會捕獲它,即使是沒有等待中斷的任何內核。 – 2014-10-20 00:51:55
CPU不是「等待中斷」(儘管如果沒有任何事情可以「停止」CPU,在這種情況下,它會在收到中斷時停止)。只有一個CPU會中斷。通常,APIC被編程爲將中斷提供給特定的CPU。還有「處理器間中斷」,由一個CPU觸發以「呼叫」另一個CPU,調度程序使用該中斷來喚醒停止的CPU,但CPU也可能在中斷髮生時自行喚醒一塊硬件「它負責」。這是一個複雜的問題... – 2014-10-20 07:28:50
@eryksun:謝謝,更新。 – 2014-10-20 07:31:41
- 1. 所有的系統調用都是非實時安全的嗎?
- 2. Linux中恢復的所有系統調用都在哪裏?
- 3. I/O系統調用需要退出
- 4. 所有類型的進程間/線程間通信都需要系統調用嗎?
- 5. 如果所有重要的Windows更新都是最新的,.NET 3.5 SP1會在XP系統上安裝嗎?
- 6. 是否在每個Windows系統上都有「UTC」時區?
- 7. Windows 7 Service Pack 1和所有適用的更新都需要安裝Python 3.6.1
- 8. 需要更多的見解偵聽系統調用的Linux
- 9. 需要來自java的系統調用的幫助
- 10. 所有的服務器都有操作系統嗎?
- 11. 我需要在android系統
- 12. Git Workflow我讀的所有東西都是我所需要的
- 13. 要在Windows上優化mysql系統變量需要改變什麼?
- 14. Windows系統上的Objective C
- 15. W2K8中的Windows系統調用問題
- 16. Windows程序的系統調用
- 17. 系統調用的問題在Windows
- 18. Windows和Native API中的系統調用?
- 19. 在不需要的系統調用時引發異常
- 20. SharePoint 2010 - 所有用戶都以系統帳戶登錄
- 21. 如何跟蹤Windows Mobile上的Win32調用或Android上的系統調用?
- 22. 在64位系統上未調用Windows缺陷檢查回調
- 23. linux strace:如何過濾系統調用需要一秒以上的時間
- 24. 是否所有的腳本用戶都需要安裝Powershell?
- 25. 每次調用glBindBuffer時都需要glVertexAttribPointer?
- 26. 是否需要在同一個系統上有jenkins和openstack
- 27. 需要mongofiles.exe文件的Windows 32位系統
- 28. XINU - 需要幫助瞭解系統調用 - getstk.c
- 29. 爲什麼系統調用需要切換到內核模式?
- 30. 從10月1日開始,所有Facebook Graph API調用都需要HTTPS嗎?
每個問題一個問題。因爲你只能標記一個正確的答案。 – 2014-10-19 19:51:03
完成了,現在只有一個。 – 2014-10-19 19:58:55