我的理解是用戶任務可以同時訪問用戶空間的3G和內核空間的1G。但是內核任務只能訪問其唯一的1G內核空間。但是在task_struct中,它鏈接到指向用戶空間的vm_area_struct,對嗎?如果正確,那麼這意味着內核任務也可以直接訪問用戶空間?內核任務可以訪問它的vm_area_struct嗎?
0
A
回答
0
下面是羅伯特·愛的LKD3:在的mm_struct和內核線程(P309)
內核線程沒有進程的地址空間,因此不具有associ- ated內存descriptor.Thus的MM場內核線程的進程描述符是NULL。 這是內核線程的定義 - 沒有用戶上下文的進程。
這種地址空間的缺失很好,因爲內核線程永遠不會訪問任何用戶空間內存。 (他們將訪問誰?)由於內核線程在用戶空間中沒有任何頁面 ,所以他們不配擁有自己的內存描述符和頁表。 (Page )儘管如此,內核線程還是需要某些 數據(例如頁表),甚至可以訪問內核內存。要提供內核線程所需的數據,而不浪費內存內存描述符和頁表,或者每當內核線程開始運行時,處理器週期切換到新的地址空間,內核線程使用之前運行的任何任務的內存描述符。
無論何時調度進程,都會加載進程的 毫米字段引用的進程地址空間。然後會更新進程描述符中的active_mm字段,以將 引用到新的地址空間。內核線程沒有地址空間,mm是NULL。 因此,當調度內核線程時,內核注意到mm爲NULL並且保持先前進程的地址空間被加載。然後內核更新內核線程的進程描述符的active_mm字段 以參考先前進程的存儲器 描述符然後,內核線程可以根據需要使用先前進程的頁表。 由於內核線程不訪問用戶空間內存,因此它們僅在與內核內存相關的地址空間中使用 信息,這對於所有 進程都是相同的。
0
用戶任務可以訪問用戶空間(映射的區域)中唯一的低3G,內核可以訪問所有3G + 1G空間。內核不直接訪問用戶空間地址,它使用copy_from(to)_user()API。
相關問題
- 1. 哪裏獲得Linux內核,它可以讓我在內核中訪問信息
- 2. 我可以訪問內存中的任何東西嗎?
- 3. Facebook API:它可以訪問「筆記」嗎?
- 4. 我可以使用JNDI訪問文件/它們的內容嗎?
- 5. 任何人都可以分享我訪問TFS服務器嗎?
- 6. 的vm_area_struct的多少實例可以有
- 7. 訪問xtime的可變Linux內核
- 8. 是否可以阻止來自內核空間的任務?
- 9. 單CPU單核處理器可以執行多任務嗎?
- 10. 可以訪問Apple ID嗎?
- 11. 可以訪問SSMS Intellisense嗎?
- 12. 可以重載一個RenderScript內核嗎?
- 13. 當位置服務不允許時,我可以訪問核心位置api嗎?
- 14. 在內核中註冊Ninject內核可以嗎?
- 15. 內核模塊可以使用內核數據結構嗎?
- 16. 我可以從T4內部訪問Entity Framework fluent api的輸出嗎? - 我可以擴展它嗎?
- 17. MSBuild中的SignFile任務:我們可以讓它更快嗎?
- 18. 是否有內核進程的vm_area_struct指針?
- 19. 使用Microsoft Graph可以訪問在outlook.live.com上更新的任務和事件嗎?
- 20. 可以訪問Sonar的責任信息嗎? (sonar-scm-activity)
- 21. 任何人都可以訪問我的PHP源代碼嗎?
- 22. 任何人都可以處理它嗎?
- 23. 任何人都可以糾正它嗎?
- 24. 內核模式 - 是否可以訪問用戶模式?
- 25. 我可以訪問生成的查詢而不執行它嗎?
- 26. WPF轉換器可以訪問它綁定到的控件嗎?
- 27. 如何訪問觸發curation任務(從任務內)的EPerson?
- 28. C++可能訪問內核模式註冊表項訪問?
- 29. 設置CIDR/IP以便任何人都可以從任何IP訪問它?
- 30. 有什麼辦法可以禁用任務內的windows.form.timer嗎?
應該指出,這些限制只適用於32位應用程序... – thkala 2012-07-27 09:09:22
@thkala你是對的,謝謝。 – 2012-07-27 09:22:25
但內核* struct *不直接訪問用戶空間。所以我的問題是它如何處理它應該鏈接到用戶空間的vm_area_struct? – 2012-07-27 11:21:46