我知道內核空間是專門用來運行內核的,而用戶空間是用於用戶應用程序。何時將數據從內核空間讀取到用戶空間?
但有關OS我感到困惑的論文之一讀取款之後,
假設我們有手勢識別系統和設計分解系統分爲四個組成部分,作爲單獨的程序,來實現:
- catusb:從連接在USB總線上的攝像頭捕捉圖像數據。
- 的XForm:使用圖像處理算法,例如噪聲濾波和幾何變換在照相機 透視屏幕 或用戶的座標系中的變換圖像的點雲。本質上是數據平行的。
- 檢測:檢測點雲中的手勢並具有重要的數據並行性。
- 隱藏輸入:接受檢測程序找到的手勢,並將其作爲人機界面 設備(HID)輸入發送到操作系統。
下他們提到執行下列流程:
「從照相機讀取數據需要複製圖像緩衝器出內核空間向用戶空間的 書寫到管道連接catusb到xform導致將相同緩衝區寫回內核空間。要在GPU上運行的XForm,所述系統必須讀出內核空間的緩衝器到用戶空間,其中用戶模式運行時,如CUDA必須隨後寫緩衝器返回到內核空間並將其傳輸到,GPU和背面」
,所以我想知道什麼是:
如果相機緩衝的內存空間駐留在內存中,以便從攝像頭讀取數據 時候爲什麼從內核空間讀取它,我不明白,是不是因爲該緩衝區本身駐留在內核空間(其他字內,映射到RAM的硬件設備的內存駐留在內核空間)?,
即使相機緩存駐留在相機的芯片使 讀出通過內核的複製,從相機芯片直接緩衝到 用戶空間做了,對嗎?如果是這樣,爲什麼它在 段說將緩衝區從內核複製到用戶空間。
現在我明白了,但還有一件事你說「**內核中的地址和0x1000以及程序中的地址0x1000實際上在RAM **中是物理上不同的位置」不是地址&0x1000代表在內核或用戶空間內發生了異常,換言之,地址&0x1000被添加到基址寄存器中以提供物理地址。 – user2963216
在這種情況下,0x1000指的是絕對地址。它可能是一個虛擬地址,或者它可能是一個物理地址。對於你的用戶級程序,內存管理單元將把地址的最高有效位翻譯成內存頁面的物理位置。地址的最低有效位將用作該物理頁面內的偏移量。 – hayesti