首先,malloc的從用戶空間的緩衝區,並與所有的「A」
填充緩衝區然後,通過緩衝到內核的指針,使用的網絡連接套接字,
最後,我可以閱讀和使用直接從用戶空間傳遞的原始指針寫入緩衝區。
爲什麼?
爲什麼直接從內核直接訪問用戶空間內存是允許的?內核不能直接操作未映射到內核地址空間的內存。內核讀取/寫入用戶空間內存
1
A
回答
0
的一點是,訪問用戶直接在內核中只涉及有時工作。
只要您嘗試在分配它的同一進程的上下文中訪問用戶地址,並且該進程已將其故障並且正在使用具有3:1內存映射的內核(而不是有時使用4:4映射),並且內核沒有換出分配的頁面 - 訪問將起作用。
的問題是,所有這些條件並非總是如此,他們可以從程序到另一個的運行時間甚至改變。因此,內核驅動程序編寫者不需要能夠訪問用戶地址。
可能發生的最糟糕的事情是你認爲它的工作原理,有它一直在實驗室工作,有它在客戶現場,每隔一段時間崩潰。這是書籍聲明的原因。
0
在這本書 - 詞「的內核不能直接操作沒有映射到內核的地址空間記憶」是關於物理內存。換句話說 - 內核只有800-900 MB(在x86上)可以一次映射到物理內存。要訪問整個物理內存內核需要不斷重映射此區域。
Netlink根本不處理物理內存 - 它被設計用於用戶空間< - >用戶空間或用戶空間< - > kernelspace之間的雙向通信。
相關問題
- 1. 使用inpout32讀取和寫入內核空間
- 2. 內存分配內核空間和用戶空間進程
- 3. 在OpenCL內核的全局內存中讀取/寫入
- 4. Linux內核寫入()和讀取()函數
- 5. 如何使用內核模塊將內核空間中的結構寫入用戶空間中的文件?
- 6. 從內核線程爲用戶空間分配內存
- 7. 取在內核空間
- 8. 是否術語「用戶空間」和「內核空間」指的是物理內存?
- 9. Linux內核:從內核空間調用用戶空間的回調函數
- 10. C++ - 直接寫入內存(內核)
- 11. 讀取內核內存無需驅動
- 12. bsd內核用戶空間事件kqueue
- 13. 在內存中讀取/寫入位
- 14. msn加腳本讀取/寫入內存
- 15. Nodejs:讀取和寫入內存地址
- 16. sqlalchemy,從mysql讀取並寫入內存
- 17. Linux內核代碼空間寫保護
- 18. a.out內核空間
- 19. Linux內核 - 獲取最後寫入的內存塊
- 20. 用戶空間和內核空間崩潰之間的區別
- 21. 攔截內核中的數據包並傳入用戶空間
- 22. 如何從用戶空間訪問內核空間?
- 23. 內核空間和用戶空間佈局
- 24. 從內核空間繞過數據包到用戶空間
- 25. 在用戶空間和內核空間上執行進程
- 26. 將用戶空間代碼移植到內核空間
- 27. 用戶空間vs內核空間驅動程序
- 28. Netlink用戶空間和內核空間通信
- 29. 在內核空間和用戶空間中工作
- 30. 從用戶級空間訪問內核空間中的變量
@BaliC Linux設備驅動程序,第三版,第15章,內存映射 和DMA,高位和低位內存部分表示內核不能直接操作未映射到內核地址空間的內存。 – Ali 2012-01-17 09:45:54
對不起我的錯誤,它看起來像功課! :) – 2012-01-17 09:46:45