I/O緩衝

I/O緩衝是指在記憶體里開闢一塊區域裡存放的數據是用來接收用戶輸入和用於計算機輸出的數據以減小系統開銷和提高外設效率。

基本介紹

  • 中文名:I/O緩衝
  • 外文名:I/O buffer
  • 分類:三類
  • 作用:用來平滑I/O需求峰值的一種技術
  • 領域:計算機學
背景,分類,單方向緩衝,雙方向緩衝,緩衝的作用,

背景

假設某個用戶進程需要從磁碟中讀入多個數據塊,每次讀一塊,每塊長度為512個位元組。這些數據將被讀入用戶進程地址空間中的一個區域。最簡單的方法是對磁碟單元執行一個I/O命令,並等待數據傳輸完畢。這個等待可以是忙等待,也可以是進程被中斷掛起。
這種方法存在兩個問題。首先,程式被掛起,等待相對比較慢的I/O完成。這種I/O方法干擾了作業系統的交換決策。如果使用了分頁機制,那么至少需要將包含目標地址單元的頁鎖定在記憶體中。因此,儘管該進程的一部分頁面可能被交換到磁碟,但不可能把該進程全部換出。其次,有可能出現單進程死鎖。為了避免死鎖,在發出I/O請求之前,參與I/O操作的用戶存儲空間必須立即鎖定在記憶體中,即使這個I/O操作正在排隊。
為了避免以上提到的這些開銷和低效操作,或者也為了方便起見,在輸入請求發出前就開始執行輸入傳送,並且在輸出請求發出一段時間後才開始執行輸出傳送,這項技術就成為I/O緩衝。

分類

單方向緩衝

1.單緩衝
作業系統中提供的最簡單的類型是單緩衝。當用戶進程發出I/O請求時,作業系統給該操作分配一個位於記憶體中系統部分的緩衝區。
輸入傳送的數據被放到系統緩衝區中。當傳送完成時,進程把該塊移到用戶空間,並立即請求另一塊,這稱為預讀,這樣做通常是合理的,因為數據通常是被順序訪問的,只有在處理序列的最後才會讀入一個不必要的塊。相對於無系統緩衝的情況,這種方法通常會提高系統速度。用戶進程可以在下一數據塊讀取的同時,處理已讀入的數據塊。由於輸入發生在系統記憶體中而不是用戶進程記憶體,因此作業系統可以將該進程換出。但是這種技術增加了作業系統的邏輯複雜度,作業系統必須記錄給用戶進程分配系統緩衝區的情況,而且交換邏輯也受到影響:如果I/O操作所涉及的磁碟和用戶交換的磁碟是同一個磁碟,則磁碟寫操作排隊等待進程換出到同一個設備上是沒有任何意義的。若試圖換出進程並釋放記憶體,則要在I/O操作完成後才能開始,而在這個時候,把進程換出到磁碟已經不再合適了。
2.雙緩衝
作為對單緩衝方案的改進,可以給操作分配兩個系統緩衝區。在一個進程往一個緩衝區中傳送數據的同時,作業系統正在清空另一個緩衝區,這種技術稱作雙緩衝。
3.循環緩衝
雙緩衝方案可以平滑I/O設備和進程之間的數據流。如果關注的焦點是某個特定進程的性能,那么需要相關I/O操作能夠跟得上這個進程,如果該進程需要爆發式地執行大量的I/O操作,僅有雙緩衝就不夠了,在這種情況下,通常使用多於兩個緩衝區的方案來緩解不足,因此,整個這組緩衝區就被當成循環緩衝區,其中每一個緩衝區是這個循環緩衝區的一個單元。

雙方向緩衝

1.緩衝池
把系統內的緩衝區統一管理起來,變專用為通用。緩衝池的結構由若干個大小相同的緩衝區組成。當某進程需要使用緩衝區時,提出申請,由管理程式分配給它,用完後釋放緩衝區,這樣可用少量的緩衝區為更多的進程服務。

緩衝的作用

緩衝是用來平滑I/O需求峰值的一種技術,但是當進程的平均需求大於I/O設備的服務能力時,緩衝再多也不能讓I/O設備與這個進程一直並駕齊驅。即使有多個緩衝區,所有緩衝區終將會被填滿,進程在處理完每一大塊數據後不得不等待。但是,在多道程式設計環境中,當存在多種I/O活動和多種進程活動時,緩衝是提高作業系統效率和單個進程性能的一種方法。

相關詞條

熱門詞條

聯絡我們