在用戶空間中,如果我嘗試訪問內核空間中的虛擬地址,那麼保護髮生在何處?在Linux中,用戶空間如何不能訪問內核空間?
回答
用戶進程和內核在完全不同的地址空間上工作(除了內核在處理用戶進程的系統調用時必須使用的區域之外),假定可以「嘗試訪問內核空間中的虛擬地址」是無效的。
我的意思是虛擬地址空間。我們知道用戶進程佔用虛擬地址空間0G-3G,而內核佔用3G-4G。也就是說,在我們自己的應用中,我們試圖直接調用內核空間中的函數而不是系統調用,會發生什麼? – davenkin
@davenkin你是正確的,用戶進程只佔用前3GB,但這不是因爲內核共享相同的地址空間。每當用戶進程嘗試訪問虛擬內存中的某個位置時,內存管理器將只**查看特定於該進程的頁表。 – JosephH
另一方面,內核代碼可以查找它想要的任何內存位置。例如,當內核想要在進程A中查找0x400000中的值時,它將使用進程A的頁表從內核訪問該地址。現在,如果它想要在過程B中查找0x400000中的值,它將使用過程B的頁表來訪問該地址。該用戶進程只佔用前3GB的原因是爲了避免每當內核爲每個進程切換頁表時都移動內核的位置。我希望現在更清楚。 – JosephH
- 1. Linux內核空間和用戶空間
- 2. 如何從Linux內核訪問用戶空間內存?
- 3. 如何從用戶空間訪問內核空間?
- 4. 從用戶級空間訪問內核空間中的變量
- 5. 從內核空間訪問用戶空間 - get_user_pages
- 6. linux內核和用戶地址空間
- 7. Linux用戶空間和內核空間調度
- 8. Linux內核:從內核空間調用用戶空間的回調函數
- 9. 如何在Linux內核空間打印用戶空間堆棧跟蹤
- 10. 如何從Linux內核空間訪問UEFI SMBIOS表?
- 11. 在內核空間如何訪問內核參數
- 12. Linux ioctl命令在用戶空間和內核空間之間變化
- 13. 如何使用指針訪問Linux內核空間中的內存頁面
- 14. 如何回調從用戶空間保持到內核空間
- 15. 在內核空間和用戶空間中工作
- 16. 如何從Linux內核空間獲取用戶名
- 17. 如何將Linux內核緩衝區映射到用戶空間?
- 18. 對於arm Linux,用戶空間中的線程是否可以訪問內核空間的虛擬地址?
- 19. 從內核空間進行GPIO訪問
- 20. 從插座讀而不從內核空間到用戶空間
- 21. 在Linux內核空間執行程序
- 22. 在用戶空間與內核空間中實現協議 - 性能隱含
- 23. 內核空間和用戶空間的時間差
- 24. 用戶空間和內核空間崩潰之間的區別
- 25. 內存分配內核空間和用戶空間進程
- 26. 從用戶空間訪問NOR內存
- 27. copy_from_user()在用戶空間或內核空間運行?
- 28. 在用戶空間和內核空間上執行進程
- 29. 如何從Linux內核空間訪問系統中的所有管道
- 30. 在linux內核(內核空間)中檢索會話Id
你是怎麼得到這個虛擬地址的? –