緩衝管理
適用計算機作業系統(OS)(第四版)
自己的學習筆記,PPT及圖片來源網路及自己老師,侵刪。
1、緩衝的引入
1 )緩和CPU與I/O裝置間速度不匹配的矛盾。
2 )減少對CPU的中斷頻率, 放寬對CPU中斷響應時間的限制。
3 )提高CPU和I/O裝置之間的並行性。
4 )解決資料粒度不匹配的問題
2、I/O緩衝區設定
- 緩衝區實現
- 硬緩衝:
在裝置中(硬體暫存器)設定緩衝區,由硬體實現。 - 軟緩衝:
在記憶體中開闢一個空間,用作緩衝區。
- 硬緩衝:
- 緩衝區管理
- 簡單緩衝:單緩衝和雙緩衝
- 多緩衝:迴圈緩衝和緩衝池
3、單緩衝與雙緩衝區
緩衝區 :緩衝區非空,不能輸入資料,只有當緩衝區中的資料全部傳送至工作區,才能接受下一次的資料。緩衝區為空時,可以輸入資料,但只有當緩衝區為滿之後,才可以向工作區傳輸資料。
3.1 單緩衝區
平均工作時間 : Max(T,C)+M
初始狀態 :工作區滿,緩衝區空。
1)T > C
平均時間 T+M
2)T < C
平均時間 C+M
3.2 雙緩衝區
初始狀態 :工作區為空,一個緩衝區滿,另一個緩衝區為空
平均工作時間 : Max(T,M+C)
1 )T > M + C
平均時間 :T
2 )T < M + C
平均時間 :M + C
找不到一個和初始狀態相同的時間,但是會發現每經過M+C段時間會完成對一個資料塊的處理
3.3 雙機通訊時緩衝區的設定
單緩衝區 :只能進行單方面的通訊,即不允許雙方同時向對方傳送資料。
雙緩衝區 :可以實現同時通訊,一個作為傳送緩衝區,一個作為接受緩衝區。
4 、迴圈緩衝
指標:
-
Nextg:指示計算程式下一個可用的滿緩衝
-
Nexti:指示輸入程式下一個可用的空緩衝
-
Current:指示計算程式正在使用的緩衝區
程式同步 :
Nexti和Nextg同向移動
-
Nexti指標追上Nextg:則輸入速度>計算速度,全部緩衝區已滿。則輸入程式阻塞,等待有空緩衝區出現。此時稱為系統受計算限制。
-
Nextg指標追上Nexti:則輸入速度<計算速度,全部緩衝區已空。則計算程式阻塞,等待有滿緩衝區出現。此時稱為系統受I/O限制。
這種迴圈緩衝只適用於特定的I/O程式和計算程式,屬於專用緩衝,系統較大時,會有許多這樣的迴圈緩衝,佔用大量記憶體,利用率低
5、緩衝池
包含了三種佇列 :
空緩衝佇列
輸入佇列
輸出佇列
四種工作緩衝區:
收容輸入緩衝區(hin):用於收容裝置輸入的資料。
提取輸入緩衝區(sin):用於提取裝置輸入的資料。
收容輸出緩衝區(hout):用於收容CPU輸出的資料。
提取輸出緩衝區(sout):用於提取CPU輸出的資料。
四種情況 :
1)輸入程式請求輸入資料
從空緩衝佇列隊頭取下一塊緩衝區,作為收容輸入緩衝區,當其充滿之後,就會掛到輸入佇列隊尾上。
2)計算程式請求一塊輸入資料
從輸入佇列隊頭取下一塊緩衝區,作為提取輸入緩衝區,當其為空之後,就會掛到空緩衝佇列尾上。
3)計算程式請求將準備好的資料衝入緩衝區
從空緩衝佇列隊頭取下一塊緩衝區,作為收容輸出緩衝區,當其充滿之後,就會掛到輸出佇列隊尾上。
4)輸出程式請求輸出資料到使用者程式
從輸出佇列隊頭取下一塊緩衝區,作為提取輸出緩衝區,當其為空之後,就會掛到空緩衝佇列尾上。
相關文章
- 輸出緩衝
- stdio流緩衝區
- 雙緩衝學習
- 無緩衝阻塞 chan
- 緩衝位元組流#
- MySQL InnoDB緩衝池MySql
- Java NIO:緩衝區Java
- JavaScript 緩衝運動JavaScript
- Java™ 教程(緩衝流)Java
- 開關電源緩衝吸收電路:拓撲吸收、RC吸收、RCD吸收、鉗位吸收、無損吸收、LD緩衝、LR緩衝、飽和電感緩衝、濾波緩衝、振鈴_rc吸收和rcd吸收
- Golang併發程式設計有緩衝通道和無緩衝通道(channel)Golang程式設計
- Go 緩衝通道(bufchan)用法Go
- Java NIO 之緩衝區Java
- 緩衝帶裡的少年
- CSAPP緩衝實驗buflabAPP
- Java整數緩衝區Java
- Unity深度緩衝區指令Unity
- Linux 命令 管道 緩衝區Linux
- Duilib的雙緩衝實現,附帶GDI、WTL的雙緩衝實現UI
- java.IO緩衝流.studyJava
- 緩衝區溢位實驗
- 緩衝區溢位攻擊
- Java中縮放緩衝影像Java
- MySQL 配置InnoDB變更緩衝MySql
- JavaScript WebGL 幀緩衝區物件JavaScriptWeb物件
- 無緩衝阻塞 chan 雜談
- PHP的輸出緩衝區PHP
- Node.js Buffer(緩衝區)Node.js
- Java NIO 之 Buffer(緩衝區)Java
- 《Lua-in-ConTeXt》10:緩衝區魔法Context
- 帶緩衝的輸入/輸入流
- Java-NIO之Buffer(緩衝區)Java
- 緩衝區溢位小程式分析
- Nginx代理緩衝 proxy_buffering 配置Nginx
- Redis效能篇(五)Redis緩衝區Redis
- InnoDB 中的緩衝池(Buffer Pool)
- PHP 輸出緩衝區應用PHP
- 8、Node.js Buffer(緩衝區)Node.js