2014-04-25 113 views
2

我知道內核空間是專門用來運行內核的,而用戶空間是用於用戶應用程序。何時將數據從內核空間讀取到用戶空間?

但有關OS我感到困惑的論文之一讀取款之後,

假設我們有手勢識別系統和設計分解系統分爲四個組成部分,作爲單獨的程序,來實現:

  • catusb:從連接在USB總線上的攝像頭捕捉圖像數據。
  • 的XForm:使用圖像處理算法,例如噪聲濾波和幾何變換在照相機 透視屏幕 或用戶的座標系中的變換圖像的點雲。本質上是數據平行的。
  • 檢測:檢測點雲中的手勢並具有重要的數據並行性。
  • 隱藏輸入:接受檢測程序找到的手勢,並將其作爲人機界面 設備(HID)輸入發送到操作系統。

下他們提到執行下列流程:

enter image description here

「從照相機讀取數據需要複製圖像緩衝器出內核空間向用戶空間的 書寫到管道連接catusbxform導致將相同緩衝區寫回內核空間。要在GPU上運行的XForm,所述系統必須讀出內核空間的緩衝器到用戶空間,其中用戶模式運行時,如CUDA必須隨後寫緩衝器返回到內核空間並將其傳輸到,GPU和背面」

,所以我想知道什麼是

  • 如果相機緩衝的內存空間駐留在內存中,以便從攝像頭讀取數據 時候爲什麼從內核空間讀取它,我不明白,是不是因爲該緩衝區本身駐留在內核空間其他字內,映射到RAM的硬件設備的內存駐留在內核空間)?,

  • 即使相機緩存駐留在相機的芯片使 讀出通過內核的複製,從相機芯片直接緩衝到 用戶空間做了,對嗎?如果是這樣,爲什麼它在 段說將緩衝區從內核複製到用戶空間。

回答

1

操作系統的工作是允許很多組件,包括硬件和軟件,以相互發揮作用。一般來說,用戶級程序不能直接操作外設,也不能互相干擾。我不熟悉你所引用的具體設置,但這聽起來並不罕見。

USB攝像頭通知操作系統它有一個新的幀。當內核(驅動程序)注意到它時,會將帶有I/O命令的幀複製到RAM中。由於這個RAM是由驅動程序分配的,用戶級程序由於虛擬內存將無法看到或讀取它。快速總結一下,內核中的地址& 0x1000和程序中地址& 0x1000實際上在RAM中是物理上不同的位置。然後內核將把幀複製到任何需要從攝像機輸入的進程的內存中,然後通知它(在此情況下爲catusb)。

同樣地,由於的XForm檢測hdinput存在作爲單獨的過程中,他們必須使用進程間通信。由於操作系統必須確保程序的隔離,因此每個進程都將利用內核來實現這一點。

這裏沒有什麼不尋常的。我想他們只是拼寫出來,因爲手勢識別對時間至關重要,這樣做有一定的開銷。

+0

現在我明白了,但還有一件事你說「**內核中的地址和0x1000以及程序中的地址0x1000實際上在RAM **中是物理上不同的位置」不是地址&0x1000代表在內核或用戶空間內發生了異常,換言之,地址&0x1000被添加到基址寄存器中以提供物理地址。 – user2963216

+1

在這種情況下,0x1000指的是絕對地址。它可能是一個虛擬地址,或者它可能是一個物理地址。對於你的用戶級程序,內存管理單元將把地址的最高有效位翻譯成內存頁面的物理位置。地址的最低有效位將用作該物理頁面內的偏移量。 – hayesti

相關問題