排隊順序存取法(queued sequential access,QSAM) 是一種順序存取法。其佇列中既有等待處理的輸入數據塊,也有已經處理,有待傳給輸出裝置或存鍺器的輸出數據塊。
基本介紹
- 中文名:排隊順序存取法
- 外文名:queued sequential access
- 簡稱:QSAM
- 定義:一種順序存取法
- 系統:計算機
- 套用學科:計算機原理
概述,單純緩衝區分配方式,移動方式,定位方式,數據傳送的置換方式,
概述
排隊順序存取法的處理概況如圖所示,其基本特點是:它以邏輯記錄為單位,從檔案的開始,按照記錄在外部介質上的排列次序順序地進行處理。使用輸出宏指令PUT可以向檔案傳送一個記錄,使用輸入宏指令GET可以從檔案中讀取一個記錄。在此過程中由QSAM自動完成如下動作:把邏輯記錄組合成塊傳送到外部介質上或者從外部介質上讀取一塊並分解成邏輯記錄,檢驗輸入輸出操作的完成和正確性,實現輸入輸出操作與CPU處理的同步。排隊順序存取法為了提高處理效率,一般都要分配緩衝池。具備以上這些特點的基礎在於排隊順序存取法具有獨特的緩衝區分配方式和數據傳送方式。
單純緩衝區分配方式
單純緩衝區分配方式,就是對於輸入、輸出檔案分別分配一個或多個輸入、輸出緩衝區,在使用過程中,不改變它們的性質。要按照最大的輸入或輸出塊長來確定輸入或輸出緩衝區的長度。對一個檔案分配的輸入或輸出緩衝區,在檔案處理過程中(也就是檔案在打開後至關閉前)保持不變。單純緩衝區分配方式有移動和定位兩種數據傳送方式。
移動方式
移動方式是在輸入或輸出過程中,記錄要在輸入或輸出緩衝區與用戶工作區之間進行移動。用圖來說明輸入和輸出都採用移動方式並分別具有一個緩衝區時的動作過程。
當數據傳送方式為移動方式時,在用戶程式中要準備一定的輸入和輸出工作區。輸入和輸出可以共用一個工作區,工作區的長度不得小於輸入輸出記錄的最大長度。也可以分別設定工作區,由用戶程式完成工作區之間記錄的傳送。這種情況下,輸入工作區的長度不得小於輸入記錄的最大長度,輸出工作區的長度不得小於輸出記錄的最大長度。圖中,輸入檔案的一個塊由三個記錄構成,輸出檔案的一個塊由兩個記錄構成。
用戶程式初次執行GET宏指令時,從輸入檔案讀取一個塊放到輸入緩衝區中,並對輸入操作的完成及正確性進行檢驗,確認正確無誤後,QSAM又把輸入緩衝區中的第一個記錄(輸入記錄1)取到用戶程式的工作區(②)。然後由用戶程式對工作區中的記錄進行各種計算和加工。待記錄加工完後,用戶程式執行PUT宏指令,把共用工作區中的記錄傳送給輸出緩衝區的第一個輸出記錄(輸出記錄1)(③)。第二次執行GET宏指令時,則把輸入記錄2取到工作區(④),加工完記錄後,第二次執行PUT宏指令,把共用工作區中的記錄傳送給輸出記錄2(⑤)。這時,因輸出緩衝區已被兩個記錄填滿,QSAM便自動把輸出緩衝區中的一塊傳送給輸出檔案,並檢驗輸出操作的完成及正確性(⑥)。當尉戶第三次執行GET宏指令時,再把輸入記錄3取到工作區(⑦)。這時,輸入緩衝區的記錄已被取完,QSAM自動地從輸入檔案把下一塊取到輸入緩衝區中,並檢驗輸入操作的完成及正確性(⑧),與此同時可以並行地加工工作區中的記錄。然後又通過PUT宏指令把共用工作區中的記錄傳送給輸出記錄1(⑨)。笫四次執行GET宏指令時,又從輸入記錄1處將檔案的第四個記錄取到工作區(⑩),以下傳送過程與前述過程完全類似。最後,當執行GET宏指令探查到輸入檔案的結束標記時,便轉到由輸入檔案DCB中EODAD參數所指定的標號處,由用戶程式進行處理(例如關閉輸入檔案)。當記錄全部加工完,執行最後一個PUT宏指令後,即可閉輸出檔案,此時由QSAM將輸出緩衝區中的殘留記錄傳送到輸出檔案上,並附加檔案結束標記。
從上面描述的處理步驟看出:輸入的情況下,當輸入緩衝區不空時,通過GET宏指令可以把記錄逐個地取到輸入工作區中}當輸入緩衝區最初為空或後來通過GET宏指令把緩衝區中的記錄全部取完時,QSAM自動地從輸入檔案把下一塊讀取到輸入緩衝區。這樣,一方面把每個塊分解成記錄,另一方面又完成了輸入操作與CPU的同步和並行。輸出的情況類似,執行PUT宏指令可以把輸出工作區中的記錄逐個地順序存放到輸出緩衝區中,當輸出緩衝區被填滿時,QSAM自動地組合成輸出塊,傳送到輸出檔案中。這樣,一方面把記錄自動組合成塊,同時又完成了輸出操作與CPU的同步和並行。總之,QSAM使用戶感到好象只是在檔案與工作區之間對記錄進行輸入、輸出處理一樣,全然感覺不到緩衝區的存在,使用起來非常方便。
上面說明了使用一個輸入或輸出緩衝區的情況。實際上,為了提高處理效率,都要設立緩衝池。在緩衝池的情況下,當打開輸入檔案時,QSAM自動預讀一個塊到第一個輸入緩衝區,當執行第一個GET宏指令時,此緩衝區中的第一個記錄被取到工作區,而輸入檔案的下一塊被讀入到第二個緩衝區,這樣可以保證輸入過程連續不斷地進行。輸出處理時,在把第一個輸出緩衝區內的記錄傳送到輸出檔案的過程中,工作區的記錄可以傳送到另一空緩衝區;當全部輸出處理結束後,在關閉輸出檔案時,QSAM把最後使用的輸出緩衝區中的殘留記錄傳送到輸出檔案上。用這樣的方法,可以最大限度地保證輸入輸出操作和CPU處理的並行。
定位方式
定位方式是在輸入或輸出過程中,由暫存器指示記錄在緩衝區中的位置,而不需要用戶設立工作區移動記錄。我們用圖3.5來說明輸入和輸出檔案都採用定位方式時的渤作過程,該圖輸入輸出緩衝區內塊的組成情況與圖3.4相同。
當用戶程式第一次執行GET宏指令時,從輸入檔案把一塊讀入到輸入緩衝區(①),在1*暫存器中放有輸入記錄1的開始地址(②)。用戶程式可把l*暫存器的內容轉存到其它寄帝器(例如2*暫存器)中,再對記錄進行加工。當執行第一個PUT宏指令時,在1*暫存器中放有輸出記錄1的開始地址(③),用戶程式將加工好的記錄(由2*暫存器指示其地址)放入輸出記錄1(由1*暫存器指示其地址)中(④)。第二次執行GET宏指令時,在1*暫存器中放有輸入記錄2的開始地址,然後進行與輸入記錄1同樣的處理。第二次執行PUT宏指令時,在1*暫存器中放有輸出記錄2的開始地址(⑥),處理好的記錄被置入輸出記錄2中(⑦)。第三次執行GET宏指令時,在1*暫存器中又放有輸入記錄3的開始地址(⑧)。第三次執行PUT宏指令時,由於輸出緩衝區已填滿,所以將輸出緩衝區中的一塊傳送到輸出檔案上(⑨),並在1*暫存器中放入輸出記錄1的開始地址(⑩)。於是又可將處理好的記錄據此置入其中,以後過程與上完全類似。
從上面描述的傳送過程可以看出:GET或PUT宏指令只在1*暫存器內給出輸入或輸出緩衝區中對應記錄的地址,不用定義工作區,也不進行緩衝區與工作區之間的記錄移動。實際上,為了提高效率,也設立輸入、輸出緩衝池,以達到輸入、輸出處理與CPU最大限度的並行。
數據傳送的置換方式
採用交換緩衝區分配方式時,最初由QSAM分配的輸入、輸出緩衝區和用戶程式構工作區三者,在輸入、輸出過程中輪番地交換它們所擔任的角色(例如輸入緩衝區變為工作區,工作區卻變為輸入緩衝區),而記錄不進行移動。使用這種緩衝區分配方式時,往往是輸入、輸出緩衝區長度相等,緩衝區中記錄的長度和程式工作區的長度相等,記錄形式是固定長的情況。交換緩衝區分配方式的緩衝區長度相當予一個輸入或輸出的塊長,其中相當於一個邏輯記錄長的部分叫緩衝區段。由於輸入緩衝區段、工作區和輸出緩衝區段輪番地、自動地交換它們所擔任的角色,使得不連續的緩衝區段可作為一個連續的區域使用,讀入的塊放入分散的輸入緩衝區段中,而分散的輸出緩衝區段又能集中進行輸出。適應這種緩衝區分配的數據傳送方式是置換方式。
置換方式輸入、輸出過程如圖所示。圖中輸入輸出緩衝區都分為兩個區段,用戶程式準備了一個工作區。初次執行GET宏指令時,從輸入檔案把一塊(輸入記錄1和2)讀取到輸入緩衝區段1和2中,並在1*暫存器中放有當前輸入。緩衝區段1的開始地址,然後該緩衝區段與工作區交換所擔任的角色(b),用戶程式根據1*暫存器對輸入記錄1進行必要的加工。當執行PUT宏指令時,在l*暫存器中放有當前輸出緩衝區段的開始地址,然後該緩衝區段與工作區交換角色,使(a)中的輸入緩衝區段1(此時存放著加工好的輸入記錄1)變成了輸出緩衝區段1(c)。第二次執行GET時,14暫存器中放著輸入記錄2的開始地址,然後與工作區交換角色(d)。第二次執行PUT時,14暫存器中放有輸出區段2的開始地址,然後與工作區交換角色(e)。第三次執行GET時,從輸入檔案把一塊(輸入記錄3和4)讀取到當前的輸入緩衝區段1和2中,1*暫存器中放有當前輸入緩衝區段1的開始地址,並與工作區交換角色(f)。以後過程完全類似。
由上可見,在置換方式中,輸入、輸出緩衝區段與用戶程式的工作區不斷地進行角色交換,藉此來完成輸入輸出操作,而記錄本身並不進行移動,因而可以提高處理效率。
實際套用時,在同一個程式中,輸入和輸出操作可以分別採用不同的緩衝區分配方式和數據傳送方式,這要根據記錄形式、記錄的實際傳送頻率、記憶體的大小和工作區的有無等情況,適當的進行選擇。