2012-01-06 97 views
0

我聽到很多關於沖洗緩衝區,發送到緩衝區等,但我沒有關於緩衝區駐留的位置以及它們的樣子的視覺圖像。緩衝區位於何處?

緩衝區是OS內核還是每個進程的一部分?如果情況是第一種情況,多個進程可以使用相同的緩衝區嗎?

+0

緩衝區是編程中的一個通用術語---它可以容納一個數據流,通常用於臨時目的。您是否有興趣瞭解I/O緩衝區? – Jaywalker 2012-01-06 14:44:16

+0

@Jaywalker是的。還是有其他種類的緩衝區..? – Pithikos 2012-01-06 14:47:37

回答

2

緩衝區是字節集合的通用術語,通常用於發送,接收或存儲信息的上下文,其中信息的內部數據結構不重要。

在「沖洗」緩衝區的情況下,這通常用於將數據發送到文件或網絡;在這種情況下,緩衝區被用於將多個小寫入文件或網絡合併爲一個更大且效率更高的緩衝區。在執行最後一次寫入操作後(或在某個「提交」點之後),必須「刷新」緩衝區以確保任何等待與未來寫入合併的數據立即提交給通過網絡發送的底層文件,而不是等待未來的寫作,可能永遠不會來。

在網絡和文件IO的情況下,緩衝區通常被用在多個地方。文件IO很可能被應用程序中的緩衝區,庫中的緩衝區(例如,fwrite的實現可以緩衝輸出),內核甚至設備本身緩衝 - 網絡寫入可能在設備等待時被緩衝對於有線和硬盤驅動器上的帶寬將緩衝來自操作系統的輸出以確保數據不會因爲物理盤片旋轉到寫入的正確位置而丟失。

+0

一般的好答案。在編程軟件的上下文中,「通常」緩衝區是指由OS維護的緩衝區(或底層運行時,如果有的話)。 – Jaywalker 2012-04-27 09:25:20