%E2%80%9D%E5%92%8C%E2%80%9Ccopy_to_user()%E2%80%9D%EF%BC%9F.png)
答案1
位址空間映射在某些(不是全部!)架構上是相同的,但即使在它們相同的架構上,保護等級也不同。copy_from_user
等服務於三個主要目的:
- 他們檢查要讀取或寫入的記憶體的權限是否允許在用戶空間中運行的進程讀取或寫入它 - 這確保進程不能欺騙內核存取進程不應該存取的記憶體能夠;
- 它們允許特定的錯誤處理,以便保護錯誤不會使核心崩潰,例如,如果當前未映射所請求的位址(考慮零頁或換出頁);
- 它們確保核心不會超出其自身的保護範圍,例如 界面活性劑或核心特定的位址空間(S/390)。
一些架構使用記憶體佈局,允許這些函數採取捷徑,例如使用實體記憶體的直接映射,但您不能假設情況確實如此,而且它無論如何也不能處理所有情況(換出的頁面不存在於實體記憶體中)。