上述的循環(huán)緩沖屬專用緩沖。當系統(tǒng)較大時,為了提高緩沖區(qū)的利用率,目前廣泛流
行公用緩沖池,池中的緩沖區(qū)可供多個進程共享。
緩沖池(Buffer Pool)的組成
對于既可用于輸入和輸出的公用緩沖區(qū),至少應含有以下三種類型的緩沖區(qū):
空(閑)緩沖區(qū); 裝滿輸入數(shù)據(jù)的緩沖區(qū); 裝滿輸出數(shù)據(jù)的緩沖區(qū);
為了管理上的方便,可將相同類型的緩沖區(qū)鏈成一個隊列,形成以下三個隊列:
空緩沖隊列emq;
輸入隊列inq;
輸出隊列outq;
除了上述三種(個)隊列外,還應具有四種工作緩沖區(qū):
用于收容輸入數(shù)據(jù)的工作緩沖區(qū);
用于提取輸入數(shù)據(jù)的工作緩沖區(qū);
用于收容輸出數(shù)據(jù)的工作緩沖區(qū);
用于提取輸出數(shù)據(jù)的工作緩沖區(qū);
Getbuf過程和Putbuf過程
為使諸進程能互斥地和同步地訪問緩沖池隊列,可分別為每一隊列設置一個互斥信號
量MS(type)和資源信號量RS(type),過程描述如下:
Procedure Getbuf(type) begin Wait(RS(type)); Wait(MS(type)); B(number):=Takebuf(type); Signal(MS(type)); end |
Procedure Putbuf(type,number) begin Wait(MS(type)); Addbuf(type,number); Signal(MS(type)); Signal(RS(type)); end |
緩沖區(qū)的工作方式
緩沖區(qū)可以工作在收容輸入、提取輸入、收容輸出、提取輸出四種工作方式下,如下
圖:
|