一、設備分配的策略
為了使系統能夠安全高效地工作,系統在進行設備分配時應考慮的因素有:⑴設備的固有屬性;⑵設備的分配算法;⑶設備分配的安全性。
1.根據設備的固有屬性而采取的策略
在分配設備時,首先應考慮設備的屬性。根據設備的固有屬性采取以下三種策略:
(1)獨享方式
獨享方式是指將一個設備分配給某進程后,便一直由它獨占,直至該進程完成或釋放該設備為止,系統才能將該設備分配給其它進程使用。這種分配方式是對獨占設備采用的分配策略。它不僅往往造成設備利用率低,而且還會引起系統死鎖。
(2)共享方式
共享方式是指將共享設備(磁盤)同時分配給多個進程使用。但是這些進程對設備的訪問需進行合理的調度。
(3)虛擬方式
虛擬方式是指通過高速的共享設備,把一台慢速的以獨占方式工作的物理設備改造成若干台虛擬的同類邏輯設備,這就需要引入SPOOLing技術。虛擬設備屬於邏輯設備。
2.設備分配算法
與進程的調度算法相似,通常只采用以下兩種分配算法:
(1)先來先服務
當多個進程同時向某一設備提出I/O請求時,該算法就根據對該設備提出請求的先后次序將這些進程排列成一個設備請求隊列,設備分配程序把設備首先分配給隊首進程。
(2)優先級高者優先
對優先權高的進程所提出的I/O請求賦予高優先權,在形成設備隊列時,將優先級高的進程排在設備隊列前面,先得到分配。而對於優先權相同的I/O請求,則按先來先服務原則排隊分配。
3.設備分配中的安全性
(1)安全分配方式
每當進程發出一個I/O請求后,便進入阻塞狀態,直到其I/O操作完成時才被喚醒。當它運行時不保持任何設備資源,打破了產生死鎖一個必要條件—“請求和保持”,所以這種分配方式是安全的。但是這種分配算法使得CPU與I/O設備串行工作,設備的利用率比較低。
(2)不安全分配方式
進程發出一個I/O請求后仍可以繼續運行,需要時還可以發第二個I/O請求、第三個I/O請求。只有當進程所請求的設備已被另一個進程占用時,進程才進入阻塞狀態。這種分配方式是不安全,因為它可能具備“請求和保持”條件,從而可能造成系統死鎖。如圖2-15所示進程P1發出第一個I/O請求,占有了資源R1后,在繼續向前推進時,又要申請資源R2;此時,進程P2卻占有了資源R2,在繼續向前推進時,又要申請資源R1,從而造成系統死鎖。所以,在設備分配程序中應該增加安全性檢查的功能。
二、獨享設備的分配程序
主機系統的獨享設備分配程序是負責向對系統提出I/O請求的進程分配設備,及其相應的控制器和通道。
1.設備分配中數據結構
在進行設備分配時,通常要借助於一些用於記錄系統中有關設備、控制器和通道的信息。基本的表格有:系統設備表(SDT)、設備控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)。每個表的具體內容如圖4-13所示。
在整個系統中,有一張系統設備表(SDT),用於記錄系統中全部設備的信息。每個設備占一個表目,其中包括物理設備類型、設備標識符、設備控制表指針及設備驅動程序的入口地址等表項。
系統為每一個設備都配置了一張設備控制表(DCT),用於記錄該設備的情況。表中除了有用於指示設備類型的字段和設備標識符字段外,還應有下列字段:
(1)設備狀態:當設備自身處於“忙”狀態時,將設備的忙標志置“l”。若與該設備相連接的控制器或通道處於“忙”狀態,而不能啟動該設備,則將設備的等待標志置“l”。
(2)設備隊列的隊首、隊尾指針:凡因請求本設備而未得到滿足的進程,其PCB都應按照一定的策略排成一個隊列,稱為設備請求隊列或簡稱為設備隊列。其隊首、隊尾指針指向設備請求隊列的隊首、隊尾的PCB。
(3)COCT表指針:該指針指向與該設備相連接的控制器的控制表。在具有多條通路的情況下,一個設備可與多個控制器相連接。此時,在DCT中應設置多個控制器表指針。
(4)重復執行次數:外部設備在傳送數據時,若發生信息傳送錯誤,系統並不立即認為傳送失敗,而是允許它重新傳送。只要在規定的重復次數或時間內恢復正常傳送,則仍認為傳送成功,否則才認為傳送失敗。
系統也為每個控制器設置一張用於記錄本控制器情況的控制器控制表(COCT),為每個通道都配有一張通道控制表(CHCT)。
2.單通道的系統設備分配程序
對於具有單通道的系統,則當進程提出I/O請求后,系統依次查找圖4-13的SDT和DCT、COCT、CHCT四個表,分別從中找出設備、相連的控制器、通道,根據相應表目狀態字可知它是否正忙(DCT表目還要看狀態字是否等待)。若忙,便將請求I/O進程的PCB掛在它的等待隊列上;否則,便將它分配給進程。只有在設備、控制器和通道三者都分配成功時,這次的設備分配才算成功。然后,便可啟動該I/O設備進行數據傳送。
3.設備分配程序的改進
為了獲得設備的獨立性,進程應用邏輯設備名代替物理設備名請求I/O。這樣,系統首先從 SDT中找出同類設備的DCT集合表。從集合表中尋找不忙的設備進行分配,若找不到則將進程阻塞,排入該類設備的等待隊列中。
實際上,系統為了提高可靠性和靈活性,通常采用多通路的I/O系統結構。此時對多個控制器和通道的分配,必須查找所有的控制器和通道,才能決定是否將該進程掛起。