什麼是 command buffer呀 ?

在AP下command給device時, 常會用到 command buffer, 為什麼連 command 都要用到 buffer 呀 ? 不是直接下command就好了?

如果 command buffer不小心被 clear, 不是無法下command 給device了嗎 ? 請儘量解釋清楚!! 謝謝 !!

1 Answer

Rating
  • Inunu
    Lv 5
    1 decade ago
    Favorite Answer

    通常一個輸入介面會包含 buffer 和 handler.

    Buffer 存放進來的一筆或多筆訊息.

    Handler 處理已存放的每一筆訊息.

    先考慮最基本的 [A] 和 [B] 之間的溝通. [A] 發送一個訊息給 [B], 假設這訊息是個亮燈的指令. 則 [B] 最基本需要做:

    1. 在介面上接收訊息的資料內容 (i.e. data bytes)

    2. 透過資料內容, 判斷訊息的類別 (亮燈, 熄燈... 等)

    3. 依類別來處理夾帶的資料內容 (一號燈, 二號燈... 等)

    步驟 1 中如果可以共用記憶體中的資料 (如程式間的 IPC, API 間的呼叫... 等), 你或許可以直接進行 2 與 3 的步驟, 但必需假設在過程中該訊息內容不會被 [A] 或其他人修改. 因此一般的作法是 [B] 當場覆製一份訊息給後續動作使用. 你文中的 command buffer 就是 [B] 存放這個訊息內容的空間.

    以上只有考慮一個訊息一個動作的情況. 如果連續來了三個訊息但卻還沒處理完第一個訊息怎麼辦? [B] 就需要一塊夠大的空間作為 command buffer, 足夠繼續存放進來的第二和三個訊息. 而 handler 部份也必需在處理完第一個訊息後到 buffer 中去看是否有更多的訊息存放在裡面.

    處理完一個訊息後 handler 需要把 buffer 中那個訊息的空間給清出來, 以供存放下一個訊息. 否則當 command buffer 存放不下訊息的時候, 進來的訊息只好被丟掉, 而 [A] 會很生氣因為 [B] 都不理它. 感覺有點像 "老師有講你沒有聽嘛~ 你當老師說話放屁嘛~ 那老師放的屁你拿來當瓦斯用看看啊!" 一樣.

    如果 command buffer 被清空的話, 目前沒有任何訊息需要處理. 這是理想狀態, 表示處理訊息的速度夠快, 而它隨時可以接受新的訊息.

Still have questions? Get your answers by asking now.