




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
6.1I/O系統(tǒng)的硬件結構6.2采用通道模型的I/O系統(tǒng)6.3I/O系統(tǒng)的軟件組織6.4緩沖技術6.5磁盤的驅動調度6.6設備分配程序6.7WindowsNT的I/O系統(tǒng)6.8小結習題6.1.1I/O設備類型
1.按使用特性分類
計算機系統(tǒng)中的外部設備,按設備的使用特性,可分為存儲設備、輸入/輸出設備、終端設備以及脫機設備等,如圖6.1所示。6.1I/O系統(tǒng)的硬件結構圖6.1按使用特性對設備的分類
2.按所屬關系分類
外部設備按其所屬關系可分為系統(tǒng)設備和用戶設備。
(1)系統(tǒng)設備。這是指在操作系統(tǒng)生成時已經登記在系統(tǒng)中的標準設備,如打印機、磁盤等。時鐘也是一個特殊的系統(tǒng)設備,它的全部功能就是按事先定義的時間間隔發(fā)出中斷。
(2)用戶設備。這是指在系統(tǒng)生成時未登記在系統(tǒng)中的非標準設備。這類設備通常是由用戶提供的,因此該類設備的處理程序也應該由用戶提供,并通過適當?shù)氖侄伟堰@類設備登記在系統(tǒng)中,以便系統(tǒng)能對它實施統(tǒng)一管理。
3.按資源分配角度分類
從資源分配角度來看,外部設備又可分為獨占設備、共享設備和虛擬設備等三類。
(1)獨占設備。為了保證信息傳輸?shù)倪B貫性,通常該類設備一經分配給某個進程,在該進程釋放它之前,其他設備不能使用。多數(shù)的低速I/O設備都屬于獨占設備。如打印機和紙帶讀入機,只能為某一個進程所獨占,而不允許幾個進程同時使用。
(2)共享設備。這是指允許若干個進程同時使用的設備。實際上,幾個進程可以同時交替地使用一臺設備,如幾個進程交替地從一臺磁盤機上讀寫數(shù)據(jù)。顯然,共享的效果可獲得較高的設備利用率。
(3)虛擬設備。通過假脫機(Spooling)技術把原來的獨占設備改造成可為若干個進程所共享的設備,以提高設備的利用率,這種設備即為虛擬設備。
4.按傳輸數(shù)據(jù)數(shù)量分類
外部設備按傳輸數(shù)據(jù)的數(shù)量,分為字符設備和塊設備。
(1)字符設備。每次傳輸數(shù)據(jù)以字節(jié)為單位的設備稱為字符設備,如打印機、終端、鍵盤等低速設備。
(2)塊設備。以數(shù)據(jù)塊為單位進行傳輸?shù)脑O備稱為塊設備,如磁盤、磁帶等高速外存儲器等。6.1.2I/O設備的物理特性
1.磁盤
磁盤是一種直接存取存儲設備。磁盤是將信息存儲在涂有一層鐵磁物質的金屬圓盤上的一種存儲媒體。如果將若干個這樣的圓盤片組合在一起,便形成了一個盤組。只有一個盤片的磁盤稱為軟盤,由多個盤片組成的磁盤稱為硬盤。每個盤片有上、下兩個盤面,上、下兩面都有若干個同心圓和一個讀/寫磁頭。在活動頭磁盤中,每個盤面只有一個讀/寫磁頭,讓這些磁頭在盤面上來回移動,而盤體則繞中心軸高速旋轉。圖6.2表示一個盤組由若干圓盤組成,磁頭在盤面上移動的情況。該盤組由10個圓盤組成,共20個盤面,而每個盤面上只有一個磁頭,編號為0~19,其中有一個磁頭稱為伺服磁頭,用于控制定位。圖6.2磁盤物理結構概念圖在磁盤執(zhí)行讀寫操作時,整個盤組在不停地旋轉,存取臂帶動磁頭來回移動。存取臂移動到某一固定位置,對應的磁頭就在磁盤上畫一個圓,這個圓稱為磁道。各個存取臂如以相同的長度沿水平方向移動,則相同半徑的一些磁道組成一個圓柱面,稱為柱面。對于一個盤組,其柱面由外向里編號,即0,1,2,……在每個柱面上,把磁頭號作為磁道號,磁道從上向下編號,即0,1,2,……所有實際的磁盤都組織成許多柱面,一個柱面上的磁道數(shù)等于垂直放置的磁頭數(shù)。一個磁道又可劃分為許多扇區(qū),每個磁道上的扇區(qū)數(shù),對于軟盤是8至32個扇區(qū),在某些硬盤上可多達幾百個扇區(qū)。通常每條磁道具有相同的扇區(qū)數(shù),每個扇區(qū)包含相同的字節(jié)數(shù)。軟件使用的數(shù)據(jù)塊通常由幾個(一個、兩個或四個)連續(xù)的扇區(qū)組成,作為一個物理記錄進行讀寫。磁盤上一個物理塊的物理地址由三部分組成:柱面號(CC)、磁道號(HH)和物理記錄號(R)。不難看出,物理上靠近磁盤外邊沿的扇區(qū)比靠近內邊沿的扇區(qū)要長一些。不過讀寫每個扇區(qū)的時間是一樣的,顯然,在最里面的柱面上的數(shù)據(jù)密度要高一些。這種密度的不同意味著要犧牲一些磁盤容量。有人嘗試過設計一種當磁頭處于外部磁道時,旋轉速度更快的軟盤,這樣外圈磁道就可以具有更多的扇區(qū),從而增加盤的容量。在現(xiàn)代大容量磁盤中,外圈磁道具有的扇區(qū)數(shù)比內圈磁道要多,這就產生了IDE(IntegratedDriveElectronics)驅動器。這種驅動器用內置的電子器件進行復雜的處理,屏蔽了具體細節(jié)。對操作系統(tǒng)來說,它仍然呈現(xiàn)出簡單的結構,每條磁道具有相同的扇區(qū)。
表6-1給出了作為IBM-PC機標準存儲介質的雙面雙密度軟盤和可用在奔騰機上中等容量磁盤的技術參數(shù)。
2.時鐘
時鐘也是一種外部設備,它既不是一個塊設備,也不是一個字符設備。但時鐘軟件卻可以以設備驅動程序的形式進行工作。
在計算機系統(tǒng)中使用兩種類型的時鐘。一種是最簡單的時鐘,它被連接到110V或220V的電力線上,以50Hz或60Hz的頻率在每個電壓周期產生一次中斷。另一種時鐘如圖6.3所示。它由三個元件組成:晶振、計數(shù)器和保持寄存器。當把石英晶體進行適當?shù)那邢鞑惭b于一定壓力之下時,它會產生非常精確的周期信號。把這個信號送入計數(shù)器并使其遞減,當計數(shù)減至零時產生一個中斷。圖6.3可編程時鐘典型的可編程時鐘有幾種操作模式。在單觸發(fā)模式(One-shotMode)中,一個時鐘啟動時,它把保持寄存器的值拷貝到計數(shù)器中,然后每當從晶振來一個脈沖,對計數(shù)器值減1;當計數(shù)器值為零時,產生一次中斷,并停止工作,直至再次被軟件啟動。在方波模式(Square-waveMode)中,每次計數(shù)器計數(shù)至零并引起中斷后,保持寄存器自動拷貝到計數(shù)器,整個過程不斷重復進行。這些周期性的中斷稱為時鐘滴答(ClockTick)。
可編程時鐘的優(yōu)點是它的中斷頻率可由軟件控制。如果使用振蕩頻率為1MHz的晶體,那么計數(shù)器每一微秒接收到一個脈沖,對于16位的寄存器,中斷可編程為按1μs至65536μs的間隔發(fā)生。時鐘硬件所做的工作僅僅是按給定的時間間隔產生中斷,其它和時間有關的工作必須由軟件(時鐘驅動程序)來做。時鐘軟件的任務包括:
①維護日期和時間;
②防止進程運行時間超過允許界限;
③對CPU使用進行記帳;
④處理用戶進程提出的時間鬧鐘系統(tǒng)調用;
⑤對系統(tǒng)某些部分提供監(jiān)視定時器;
⑥支持直方圖監(jiān)視和統(tǒng)計信息搜集。
3.終端
每臺計算機都有一個或多個終端。終端的種類、型號較多,需要終端驅動程序屏蔽其細節(jié)。
根據(jù)操作系統(tǒng)如何與終端通信,將終端分為三類:存儲映像終端、RS-232串行接口和網絡接口終端。
(1)存儲映像終端。其包括鍵盤和顯示器,二者直接與計算機相連。存儲映像終端使用稱為視頻RAM(VideoRAM)的特殊存儲器。視頻RAM是計算機地址空間的一部分,使用與其它地址空間一樣的方式對它進行訪問。視頻存儲卡上有一個芯片稱為視頻控制器(VideoController)。這個芯片從視頻RAM中取出字符,產生用于驅動顯示器(監(jiān)視器)的視頻信號,如圖6.4所示。監(jiān)視器產生水平掃描屏幕的電子束。典型的屏幕有480至1024行,每行640至1200點。這些點稱為像素(Pixel)。視頻控制器調節(jié)電子束,決定一個像素是亮的還是黑的。彩色監(jiān)視器有三個電子束,分別對應紅色、綠色和藍色。圖6.4存儲映像終端直接寫入視頻RAM一個簡單的單色顯示器可顯示25行,每行80個字符。每個字符的寬度為9個像素,高度為14個像素(包括字符間的空白)。這種顯示器有350行掃描線,每行掃描線有720個點,每幀每秒重畫45至70次。視頻控制器被設計成首先從視頻RAM中取出80個字符,產生14行掃描線,再取80個字符,再產生14行掃描線,這樣一直工作下去。事實上,大多數(shù)視頻控制器顯示每個字符的每行掃描線時,都取一次字符以便在控制器中不需要緩沖。每個字符的9列寬14行高的位模保存在視頻控制器的視頻ROM中(也可以使用RAM,以支持用戶字體)。ROM按12位編址,8位來自字符代碼,4位指定掃描線。ROM中每個字節(jié)的8位控制8個像素,字符間的第9個像素總是為空。因此屏幕上的每行文本需14×80次存儲器訪問,也需訪問相同次數(shù)的字符發(fā)生器。對于存儲映像顯示器,鍵盤是與顯示器分開的,它可能通過一個串行口或并行口和計算機相連。對于每一個鍵動作,產生CPU中斷,鍵盤中斷程序通過讀I/O口取得鍵入的字符。
在IBM-PC中,鍵盤包括一個內嵌的微處理器,通過特殊的串行口和主板上的一個控制芯片通信。任何時刻擊鍵或釋放鍵,都產生一個中斷,而且鍵盤僅僅提供鍵碼,而不是ASCII碼。當擊A鍵時,鍵碼(30)被存放于I/O寄存器。輸入字符是大寫、小寫、CTRL-A、ALT-A、CTRL-ALT-A,還是其它的組合,則由驅動程序確定。因為驅動程序知道哪些鍵被按下還沒有釋放,因此它有足夠的信息完成這項工作。雖然鍵盤接口把全部工作交給了軟件,但這提供了很大的靈活性。
(2)RS-232終端。其通過一次傳輸一位的串行口與計算機通信,如圖6.5所示。這些終端使用9針或25針的連接器。其中一針為發(fā)送數(shù)據(jù),一針為接收數(shù)據(jù),一針接地,其它各針可用于各種控制功能,實際上大多數(shù)并未使用。為了向RS-232終端發(fā)一個字符,計算機必須一次傳輸一位,在字符前面加一起始位,后接一個或兩個終止位為字符定界。可在終止位前插入一提供基本校驗的奇偶位,但通常僅在與主機系統(tǒng)通信時才需要這種技術。RS-232終端通常用于計算機遠程通信,兩者之間使用調制解調器及電話線。圖6.5RS-232終端與計算機通信計算機和終端在內部都是對整個字符進行操作的,但又必須通過串行線路以一次傳輸一位的方式進行通信。為此開發(fā)了一種芯片用來實現(xiàn)字符到串行口和串行口到字符的轉換,稱為UART(通用異步收發(fā)器,UniversalAsynchronousReceiverTransmitter)。UART通過把RS-232接口板插入總線和計算機相連。RS-232終端正逐漸消失,而由PC和X終端代替,但它們仍用于一些老的大型系統(tǒng)中。
RS-232終端有多種形式,最簡單的是硬拷貝終端,通過鍵盤鍵入的字符傳輸?shù)街鳈C,主機傳出的字符打印在紙上。這些終端已經過時且很少見到。另一類的啞終端也按這種方式工作,不同的是用屏幕代替了紙。因為在功能上和硬拷貝是一樣的,這些終端被稱為玻璃終端。玻璃終端也已過時。
智能終端事實上是微縮專用計算機,其具有CPU、存儲器和軟件。軟件一般在ROM中。從操作系統(tǒng)的觀點來看,智能終端與玻璃終端的不同在于智能終端可以理解特殊的轉義字符序列。
(3)X終端。此為智能終端最高檔的一種,它包含和主機CPU一樣強大的CPU。X終端還包含幾兆字節(jié)的主存、鍵盤和鼠標,在其上運行MIT的X-Window系統(tǒng),一般X終端通過以太網和主機通信。
一個X終端是運行X軟件的計算機。一些產品只能運行X,其它產品作為通用機能把X作為和其它程序一樣的程序來運行。無論哪種方式,X終端都有一個大的位映像屏幕,一般為960×1200或更高,黑色、灰色或彩色。此外,還有一個完整的鍵盤和一個鼠標。
X終端內收集從鍵盤或鼠標來的輸入并接收遠程計算機命令的一個程序稱為X服務器。它通過網絡與運行在主機上的X客戶通信,使X服務器運行于終端內,客戶程序運行在遠程主機上會令人奇怪,但X服務器的工作是位顯示,因此它靠近用戶是有益的??蛻艉头掌鞯墓芾硎居趫D6.6中。圖6.6X-Window系統(tǒng)中的客戶和服務器
X終端的屏幕包含一些窗口,每個窗口都是采用長方形像素網格的形式。在其頂部有一標題條,左邊有一滾動條,在右上角有一改變窗口大小的方小框。一個X客戶是一個稱為窗口管理器(WindowManager)的程序,它的工作是控制在屏幕上創(chuàng)建、刪除和移動窗口。為了管理窗口,它向X服務器發(fā)一命令,告訴它做什么。這些命令包括畫點畫線、畫矩形、畫多邊形、填充矩形、填充多邊形等。
X服務器的工作是調度來自鼠標、鍵盤和X客戶的輸入并更新顯示。它要跟蹤當前選中了的那一窗口(鼠標所指的),所以它知道鍵盤輸入的內容應送給哪個客戶。6.1.3I/O系統(tǒng)的硬件組織
在計算機系統(tǒng)中,所謂輸入/輸出,是指主存和外圍設備之間的數(shù)據(jù)傳輸操作。在多道程序設計技術引入系統(tǒng)之后,輸入、輸出操作的能力不僅影響計算機的通用性和可擴充性,而且也成為計算機系統(tǒng)的綜合處理能力和性能價格比的重要因素。
1.I/O控制方式
計算機系統(tǒng)中對輸入/輸出的控制有以下幾種方式:
(1)循環(huán)I/O測試方式。在早期計算機或現(xiàn)代微機系統(tǒng)中,往往采用循環(huán)I/O測試方式。
循環(huán)I/O測試方式是一種用程序直接控制I/O操作的方式。在這種方式下,計算機的I/O測試指令,通過測試一臺設備的忙/閑標志,決定主存和外設之間是否要傳輸一個字符或一個字。很顯然,在這種方式下,中央處理機的大量時間用在等待輸入、輸出的循環(huán)檢測上,使主機不能充分發(fā)揮效率,外設也不能得到合理使用,整個系統(tǒng)效率很低。
(2)程序中斷I/O方式。中斷機構引入之后,外圍設備有了反映其自身狀態(tài)的能力,僅當I/O操作正?;虍惓=Y束時才中斷中央處理機,從而實現(xiàn)了一定程度的并行操作,這種方式稱為程序中斷方式。例如行式打印機每打印一行需60ms,在循環(huán)I/O測試方式中,中央處理機要大約花費59.99ms的時間用于測試,并處于循環(huán)等待;但在程序中斷I/O方式中,中央處理機可用多于59.9ms的時間去做別的計算,僅用0.1ms的時間來處理I/O設備發(fā)來的中斷。雖然中斷的引入改善了中央處理機的利用率,并使輸入、輸出和處理這三者更好地并行操作。但I/O操作畢竟還是由CPU控制的,此時每傳輸一個字或字符,往往就要做一次中斷處理。例如,為傳輸1000個字符需經1000次中斷才能完成,其中999次中斷用以傳輸下一個字符,第1000次中斷用作結束處理。通常每次中斷處理經歷幾十條指令,每條指令的典型時間是1~2μs,這樣每次中斷處理需花費100μs的處理機時間,對于傳輸速率為1000字符/s的輸入機,處理機所花費的時間要占10%左右。由此可見,當I/O設備很多時,CPU可能完全陷入I/O處理中。
(3)DMA方式。許多設備,尤其是塊設備都支持DMA(DirectMemoryAccess)方式。我們先看一下沒有使用DMA時磁盤是怎樣讀數(shù)據(jù)的。首先,控制器逐個比特(bit)地從設備完整地讀出一塊(一個或多個扇區(qū))數(shù)據(jù)放入內部緩沖區(qū)中,然后,計算該塊數(shù)據(jù)的檢查和,以保證讀取的正確性,接著,控制器發(fā)出中斷信號,操作系統(tǒng)開始逐個字節(jié)(byte)地從
控制器的設備寄存器中將數(shù)據(jù)讀入內存。由于一次只能讀一個字節(jié),因此需要通過一個循環(huán)才能將整個數(shù)據(jù)塊讀完。顯然,CPU循環(huán)地每次從控制器讀一個或幾個字節(jié)是很費時的,為了解決這個問題,人們引入DMA,將CPU從這項工作中解脫出來。使用DMA時,CPU除了要告訴控制器數(shù)據(jù)塊的地址外,只需告訴控制器兩條消息:數(shù)據(jù)塊將要存放的內存地址和要傳輸?shù)淖止?jié)數(shù),如圖6.7所示。
控制器首先從設備中將整個數(shù)據(jù)塊讀入內部緩沖區(qū)并進行校驗,接著它將第一個字節(jié)(或字)按內存地址寄存器所指示的地址從內部緩沖區(qū)傳送到內存。隨后它對內存地址寄存器和傳輸字節(jié)計數(shù)器分別進行增減,這一過程一直重復下去,直至傳輸字節(jié)計數(shù)器變成0。此時,設備控制器發(fā)出中斷信號,通知操作系統(tǒng)數(shù)據(jù)已經讀完。圖6.7DMA方式下的數(shù)據(jù)傳輸也許有人會問:“為什么控制器從設備讀到數(shù)據(jù)后不立即將其送入內存,而是需要一個內部緩沖區(qū)呢?”原因是一旦磁盤啟動開始讀數(shù)據(jù),從磁盤讀出比特流的速度是恒定的。若此時控制器將數(shù)據(jù)直接傳送到內存,則它必須在每個字節(jié)傳送完畢后獲得總線控制權。如果由于其它設備的爭用而導致總線忙,則只能等待。如果在上一字節(jié)還未送入內存之前下一字節(jié)到達,控制器只好找另一個地方暫時存下來。從另一方面看,如果采用內部緩沖區(qū),則在DMA操作啟動之前不需要使用總線,這樣控制器就能設計得簡單(因為DMA到內存的傳輸對時間要求并不嚴格)。采用DMA方式的數(shù)據(jù)傳輸處理過程如下:
①當進程要求設備輸入數(shù)據(jù)時,CPU把準備存放輸入數(shù)據(jù)的內存始址及要傳輸?shù)淖止?jié)數(shù)分別送入DMA控制器中的內存地址寄存器和傳送字節(jié)計數(shù)器;另外,還要把控制/狀態(tài)寄存器中的中斷允許位和啟動位置1,從而啟動設備,開始數(shù)據(jù)輸入。
②發(fā)出數(shù)據(jù)輸入要求的進程進入阻塞狀態(tài),進程調度程序調度其它進程占有CPU。
③輸入設備不斷地挪用CPU工作周期,將數(shù)據(jù)從內部緩沖區(qū)源源不斷地送入內存,直至所要求的字節(jié)數(shù)全部傳送完畢。
④DMA控制器在傳輸完成時通過中斷請求線發(fā)出中斷信號,CPU接到中斷信號后轉中斷處理程序進行相應處理。
⑤中斷處理結束后,CPU返回被中斷的進程或去運行重新被調度的進程。
(4)通道方式。為了獲得CPU和外設之間更高的并行能力,也為了讓種類繁多、物理特性各異的外設能以標準的接口方式連接到系統(tǒng)中,計算機系統(tǒng)引入了各自獨立體系的通道結構。通道的出現(xiàn)是現(xiàn)代計算機系統(tǒng)功能不斷完善、性能不斷提高的結果,是計算機技術的一個重要進步。
采用通道方式實現(xiàn)輸入/輸出控制將在6.2節(jié)詳細討論。
2.設備控制器
I/O設備通常由機械和電子部件組成。為了達到設計的模塊化和通用性,一般將它們分開。其中的電子部件稱為設備控制器。在個人計算機中它常常是一塊可以插入主板擴展槽的印刷電路板,而機械部分則是設備本身。操作系統(tǒng)一般只與設備控制器打交道??刂破骺ㄉ弦话愣加幸粋€接線器,可以把與設備相連的電纜接進來。許多控制器可以控制2個、4個甚至8個相同設備。如果控制器與設備之間的接口是標準接口,如ANSI、IEEE、ISO,則多家廠商都可以制造與該接口匹配的控制器和設備。大多數(shù)微機、小型計算機的CPU和控制器之間的通信采用單總線模型,而大型主機則采用其它模型,常常是多總線以及專門用于I/O的計算機,即通道模型。由于設備控制器處于CPU和設備之間,它既要與CPU通信,又要與設備通信,還應具有按照CPU所發(fā)來的命令去控制設備操作的功能。因此,現(xiàn)有大多數(shù)的設備控制器由以下三部分組成:
(1)設備控制器與CPU的接口。該接口用于實現(xiàn)設備控制器與CPU之間的通信。在該接口中有三類信號線:數(shù)據(jù)線、地址線、控制線。數(shù)據(jù)線通常與兩類寄存器相連接:
①數(shù)據(jù)寄存器。設備控制器中可以有一個或多個數(shù)據(jù)寄存器,用于存放從設備送來的數(shù)據(jù)(輸入)或從CPU送來的數(shù)據(jù)(輸出)。
②控制/狀態(tài)寄存器。在控制器中同樣可以有一個或多個控制/狀態(tài)寄存器,用于存放從CPU送來的控制信息或由設備產生的狀態(tài)信息。
(2)設備控制器與設備的接口。在一個設備控制器上,可以連接一臺或多臺設備。相應地,在控制器中就有一個或多個設備接口,一個接口連接一臺設備,在每個接口中都有數(shù)據(jù)、控制和狀態(tài)三種類型的信號。
①數(shù)據(jù)信號。這些數(shù)據(jù)信號通常是一些位(bit)流,控制器的任務是把從CPU來的字節(jié)流轉換成相應的位流傳遞給設備,或者把從設備來的位流轉換成字節(jié)流送給CPU。
②控制信號。它通常是輸出信號,是控制器發(fā)給設備的,用于指示設備執(zhí)行讀、寫操作或者其它操作(如移動磁頭)的信號。
③狀態(tài)信號。它通常是輸入信號,用于指示設備的當前狀態(tài)。如指示設備正在進行讀、寫操作,或者指示設備已經完成讀、寫操作,并準備好接受下一次的數(shù)據(jù)傳輸。
(3)I/O邏輯。其用于對I/O的控制。它通過一組控制線與CPU交互。CPU利用該邏輯向控制器發(fā)送I/O命令;I/O邏輯對接收到的命令進行譯碼。每當CPU要啟動一個設備時,一方面要將啟動命令送給控制器;另一方面又同時通過地址線把地址送給控制器。由控制器的I/O邏輯對收到的地址進行譯碼,再根據(jù)譯出的命令對所選的設備進行控制。設備控制器的組成示于圖6.8中。圖6.8設備控制器的組成
計算機的I/O系統(tǒng)可采用多種模型:單總線模型、多總線模型和通道模型。
通道又稱I/O處理機,即專門用于輸入/輸出的處理機,其I/O系統(tǒng)的結構如圖1.3所示。
具有通道結構的計算機系統(tǒng),主存、通道、控制器和設備之間采用四級連接,實施三級控制。采用通道技術后,I/O操作過程如下:CPU在執(zhí)行用戶程序時如遇到I/O請求,則它用I/O指令啟動指定通道上選址的設備,一旦啟動成功,通道開始控制設備進行操作。當設備I/O操作完成后,由通道發(fā)出I/O,結束中斷,CPU停止當前工作,轉向中斷處理程序。6.2采用通道模型的I/O系統(tǒng)6.2.1通道類型
按信息交換方式和連接的設備類型不同,通道可分為三種類型。
1.字節(jié)多路通道
它是為連接大量慢速外圍設備而設置的。它以字節(jié)為單位交叉地工作。當一臺設備傳送一個字節(jié)后,立即轉去為另一設備傳送一個字節(jié)。
2.選擇通道
它用于連接磁帶、磁鼓和磁盤等快速設備,以成組方式工作。每次傳送一批數(shù)據(jù),故傳送速度很快,但在這段時間內只能為一臺設備服務。每當一個I/O請求操作完成后,再選擇與通道相連的另一設備。
3.數(shù)組多路通道
對于像磁盤這樣的外圍設備,雖然傳送信息很快,但是移臂定位時間很長。如果將其連在字節(jié)多路通道上,那么通道很難承受這樣高的傳輸率。如果連在選擇通道上,那么在磁盤移臂的時間內,通道只能空等。數(shù)組多路通道可以解決這一矛盾,它先為一臺設備執(zhí)行一條通道命令,然后自動轉換,為另一臺設備執(zhí)行一條通道命令。對于連在數(shù)組通道上的若干臺磁盤機,可以啟動它們進行移臂,查找欲訪問的柱面,然后,按次序交叉?zhèn)魉鸵慌畔?。這樣就避免了因移臂時間過長而長期占用通道。由于它在任一時刻只能為一臺設備作數(shù)據(jù)傳送服務,這類似于選擇通道,但它不等整個通道程序執(zhí)行結束就能執(zhí)行另一設備的通道程序的命令,這又類似于字節(jié)多路通道。數(shù)組多路通道的實質是:對通道程序采用多道程序設計技術的硬件實現(xiàn)。6.2.2多通路I/O系統(tǒng)
由于通道的成本高,因此通道的數(shù)量遠比設備少。這樣,往往因通道數(shù)量不足而產生一種“瓶頸”現(xiàn)象,影響整個系統(tǒng)的處理能力。
為了使設備能得到充分利用,在通道、控制器和設備的連接上,若采用多通路的配置方案(如圖6.9所示),便可提高設備利用的靈活性。圖6.9多通路的配置方案由圖6.9可見,I/O設備E、F、G、H均有四條通路到達主存。例如設備E到達主存的四條通路是:
通道A——控制器C——設備E通道A——控制器D——設備E
通道B——控制器C——設備E通道B——控制器D——設備E
可見,此時不會因某一通道或某一控制器被占用而妨礙主存和設備E之間的數(shù)據(jù)傳輸。僅當兩個通道或兩個控制器都被占用時,才阻塞主存和設備E之間的交換信息。采用多通路的I/O系統(tǒng)也可提高系統(tǒng)的可靠性。例如通道A出現(xiàn)了故障,仍可使用通道B來訪問所要的設備。
設備管理程序通過對所有通路上狀態(tài)信息的管理,找出一條能用的通路來使用所請求的設備。6.2.3通道命令和通道程序
I/O通道作為I/O處理機具有自己的指令系統(tǒng)。為了與CPU的指令相區(qū)別,我們把I/O處理機的指令稱為通道命令。一條通道命令稱為一個通道命令字(CCW),用通道命令編寫的程序稱為通道程序,也叫I/O程序,編寫通道程序的過程叫做通道程序設計或I/O程序設計。
1.通道命令及其格式
通常,計算機系統(tǒng)的I/O處理機具有如下三類基本通道操作:
(1)數(shù)據(jù)傳送類,如讀、寫、反讀、斷定(檢驗設備狀態(tài));
(2)設備控制類,如控制換頁、磁帶反繞等;
(3)轉移類,即通道程序內部的控制轉移。
例如,某系統(tǒng)中通道命令的格式如下:
每條通道命令由四個字段組成:
(1)操作碼(0~7):表示通道要執(zhí)行的命令;
(2)數(shù)據(jù)主存始址:表示本命令要訪問的主存數(shù)據(jù)區(qū)的起始地址;
(3)特征位(32~47,只使用了32~36位,其余未用):37~39位必須置0,否則認為通道命令錯。特征位進一步規(guī)定了本通道命令的意義,其各特征如下:
數(shù)據(jù)鏈特征(32位):當該位為“1”時,在執(zhí)行本命令后,使計數(shù)值為0并取下一條CCW,下一條CCW(它規(guī)定了新的數(shù)據(jù)主存始址、特征和計數(shù))繼續(xù)執(zhí)行原來的操作。
命令鏈特征(33位):該位為“1”時,當前命令正常結束后,順序執(zhí)行下一條CCW。
在通道程序中,除最后一條CCW外,每條CCW應指定32位為“1”,或33位為“1”。最后一條CCW的所有特征位為“0”時,表示通道在完成當前命令后自動停止。
禁發(fā)長度錯特征(34位):表示對不正確的數(shù)據(jù)長度不發(fā)出錯信號。一般地說,如果通道命令給出的字節(jié)數(shù)與I/O設備所用的字節(jié)數(shù)不一致,就發(fā)出錯信號。如果該位置為“1”,則禁止發(fā)出錯信號。
跳讀特征(35位):表示禁止數(shù)據(jù)傳送到內存。當該位為“1”時,從I/O設備上讀出的數(shù)據(jù)不寫入內存,這樣就可以跳過一些數(shù)據(jù)。
程序控制中斷特征(36位):如果該位為“1”,只要取出CCW并開始操作,則通道就向CPU發(fā)中斷信號。
(4)字節(jié)計數(shù)(48~63位):規(guī)定了數(shù)據(jù)區(qū)的字節(jié)數(shù)。數(shù)據(jù)主存始址和字節(jié)計數(shù)這兩個字段主要用于數(shù)據(jù)傳送類命令。
2.通道地址字和通道狀態(tài)字
在通道進行輸入/輸出操作期間,要訪問兩個固定內存單元:通道地址字(CAW)和通道狀態(tài)字(CSW)。
通道地址字的格式如下:其中0~3位為存儲保護鑰;4~7位必須為0;8~31位為通道程序的起始地址,也就是通道程序的第一條CCW的地址。鑰的作用是:當數(shù)據(jù)寫入主存時,檢查鑰與保護鎖是否一致。
通道狀態(tài)字CSW中包含有通道狀態(tài)的編碼信息。通道狀態(tài)字一般在I/O操作結束時送入主存固定單元,但也可以在執(zhí)行I/O操作期間送入。在CSW的內容未改變之前,主存中的CSW仍然是可用的。通道狀態(tài)字的格式如下:
其中:
鑰——通道訪問主存時所用的保護鑰,它由CAW的前4位送來;
下一條CCW地址——通道命令計數(shù),每當一條CCW執(zhí)行完畢,該地址自動加“8”,指向下一條CCW;
設備狀態(tài)——記錄設備狀態(tài)的字節(jié);
通道狀態(tài)——記錄通道狀態(tài)的字節(jié);
剩余計數(shù)——上一條CCW執(zhí)行結束后,剩余數(shù)據(jù)的字節(jié)數(shù)。
設備狀態(tài)字節(jié)與通道狀態(tài)字節(jié)的內容如圖6.10所示。圖6.10設備狀態(tài)字節(jié)和通道狀態(tài)字節(jié)
(a)設備狀態(tài)字節(jié);(b)通道狀態(tài)字節(jié)設備狀態(tài)字節(jié)是由設備控制器和相應設備產生的信號,并通過標準接口送來。其中,“注意”一般用于人工請求輸入、人機聯(lián)系或其它外部調用;“忙碌”表示設備或控制器正忙;“通道結束”表示設備不再占用子通道,設備與通道之間的信息傳送已經結束;“設備出錯”表示設備或控制器發(fā)現(xiàn)程序出錯或設備故障,但具體原因尚需借助斷定字節(jié)指明。
通道狀態(tài)字節(jié)是通道中發(fā)現(xiàn)并記下的信號,除與設備故障有關的信號外,所有這些信號只在子通道參與執(zhí)行輸入/輸出操作時才能出現(xiàn)。
中斷處理程序在分析I/O中斷原因時,要訪問主存固定單元的CSW,還要利用斷定命令到設備控制器取出斷定字節(jié)。這是因為斷定字節(jié)里保存了設備、控制器的更詳細的狀態(tài)信息。6.2.4CPU和通道間的通訊
1.輸入/輸出指令
輸入/輸出指令是中央處理機的指令,在一般計算機中,這類指令均為特權指令,只能在管態(tài)下運行,否則作為出錯引起程序中斷。
CPU在何時、如何向通道發(fā)出I/O指令呢?當用戶程序要求在主存和I/O設備間傳送數(shù)據(jù)時,就在用戶程序中以廣義指令或系統(tǒng)調用的形式向操作系統(tǒng)提出I/O要求。這樣,處理機的狀態(tài)就由算態(tài)進入管態(tài),在管態(tài)下運行的系統(tǒng)程序便可使用I/O指令了。
例如,某系統(tǒng)中輸入/輸出類指令主要有:SIO,TIO,HIO,TCH。所有I/O指令都具有如下格式:
由(B1)+D1形成的地址指出通道號和設備號的存放單元,該單元的內容為:
SIO(STARTI/O):用于啟動指定通道和設備開始工作。SIO指令發(fā)出后,根據(jù)通道和設備狀態(tài)建立結果特征,即條件碼。CPU根據(jù)執(zhí)行結果建立的條件碼得知此次啟動是否成
功,再確定下一步的動作。
TIO(TESTI/O):用以檢查I/O操作是否完成,建立相應的條件碼。
HIO(HALTI/O):強行停止通道和I/O設備正在執(zhí)行的操作。
TCH(TESTCHANNEL):測試通道,根據(jù)對通道測試的結果建立相應的條件碼。
2.CPU和通道間的通訊
CPU和通道之間的關系是主從關系,CPU是主設備,通道是從設備。CPU和通道之間的通訊方式是:
(1)由CPU向I/O通道發(fā)I/O指令,命令通道工作,并檢查其工作情況;
(2)通道以中斷方式向CPU匯報,等候CPU處理。
CPU啟動外圍設備工作過程可用圖6.11表示。圖6.11CPU啟動通道的工作流程圖中表示了一次成功的輸入/輸出請求過程。當進程i在執(zhí)行中要求讀寫外設上的信息時,通過廣義指令或系統(tǒng)調用提出I/O請求,通過訪管中斷進入操作系統(tǒng),操作系統(tǒng)在管態(tài)下,發(fā)SIO指令,命令通道程序工作。當指定的通道和設備空閑時,則啟動成功,這時通道按通道程序控制設備操作,同時進程i進入阻塞狀態(tài)。此時CPU可與通道并行工作,由進程調度程序選擇了進程j開始執(zhí)行,直到通道產生I/O中斷事件(如I/O完成)時才中止進程j的運行,轉入中斷處理程序,激活進程i,引起重新調度。上面我們討論了計算機系統(tǒng)中I/O的硬件結構,現(xiàn)在來看I/O系統(tǒng)的軟件是如何組織的。
I/O系統(tǒng)的軟件設計目標很明確,其基本思想是,將軟件組織成一種層次結構,低層軟件用來屏蔽硬件的細節(jié),高層軟件則主要為用戶提供一個簡潔、規(guī)范的接口。6.3I/O系統(tǒng)的軟件組織6.3.1I/O軟件設計的目標
I/O軟件設計的第一個目標是設備無關性。其含義就是使程序員寫出的軟件無需任何修改便能讀出軟盤、硬盤以及CD-ROM等不同設備上的文件,而與具體設備無關。例如,用戶可以簡單地輸入如下命令:
sort<input>output
就能夠從各種設備上獲得輸入,包括軟盤、硬盤或鍵盤,同時將輸出送到各種不同的設備上,例如,軟盤、硬盤甚至是屏幕。不同設備之間的差異由操作系統(tǒng)去處理,操作系統(tǒng)會調用不同的設備驅動程序來真正地將輸入數(shù)據(jù)寫到輸出設備上。
I/O軟件設計的第二個目標是錯誤處理??偟膩碚f,錯誤應盡可能在接近硬件的地方處理。如果控制器發(fā)現(xiàn)一個錯誤,則應盡量讓自己去處理;如果處理不了,可交給設備驅動程序,它可能只需重讀一次就能解決問題。只有在低層軟件處理不了的情況下才通知高層軟件。在許多情況下,低層軟件可以自己處理錯誤而不被高層軟件感知。
I/O軟件設計的第三個目標是同步/異步傳輸。多數(shù)I/O設備采用異步傳輸,即CPU啟動傳輸操作后便轉去做其它工作,直至中斷到達。如果采用同步I/O操作,則用戶編程將會簡單得多,在發(fā)出一條Read命令后,則用戶進程自動阻塞,直至數(shù)據(jù)讀到緩沖區(qū)中。操作系統(tǒng)的I/O軟件不僅能處理異步傳輸,也能處理同步傳輸。
I/O軟件設計的第四個目標是必須能處理獨占設備和共享設備的I/O操作。
為實現(xiàn)以上四個目標,I/O系統(tǒng)應組織成以下四個層次:
(1)中斷處理程序;
(2)設備驅動程序;
(3)與設備無關的I/O軟件;
(4)用戶空間的I/O軟件。
6.3.2中斷處理程序
中斷處理程序位于I/O系統(tǒng)的最低層。當進程需要進行I/O操作時,操作系統(tǒng)應將該進程掛起,即進入阻塞,直至I/O操作結束并發(fā)生中斷。當中斷發(fā)生時,中斷處理程序執(zhí)行相應的操作,以解除相應進程的阻塞狀態(tài)。
6.3.3設備驅動程序
設備驅動程序包括了所有與設備有關的代碼。每一個設備驅動程序只處理一種設備或者一類密切相關的設備。設備驅動程序的功能是從與設備無關的軟件中接收抽象的請求,并執(zhí)行該請求。例如,讀磁盤上的第n塊。如果請求到來時,驅動程序空閑,則它立即執(zhí)行該請求;但如果它正在處理另一請求,則它將該請求掛在一個等待隊列中。
執(zhí)行一條I/O請求的第一步,是將該請求轉換成更具體的形式。例如,對磁盤驅動程序,它包括:計算所請求的塊n的物理地址,檢查驅動電機是否在轉,檢測存取臂是否定位在正確的柱面??傊仨毚_定需要哪些控制器命令以及命令的執(zhí)行次序。一旦決定應向控制器發(fā)送什么命令,驅動程序就向控制器中的設備寄存器寫入這些命令。某些控制器一次只能處理一條命令,另一些則可以接收一串命令并自動進行處理。
這些控制命令發(fā)出后有兩種可能。多數(shù)情況下,驅動程序需要等待控制器完成一些操作,而使驅動程序阻塞,直至中斷信號到達時方被喚醒。另一種可能是不需要等待,不必進入阻塞。對于前一種情況,被阻塞的驅動程序必須由中斷喚醒。無論哪種情況,都要進行錯誤檢查。如果一切正常,則驅動程序將數(shù)據(jù)傳送給上層的與設備無關的軟件。最后,它將向它的調用者返回一些關于錯誤報告的狀態(tài)信息。如果請求隊列中有別的請求,則它選中一個進行處理;若等待隊列空,則它阻塞并等待下一請求。6.3.4與設備無關的I/O軟件
與設備無關的I/O軟件提供適用于所有設備的常用I/O功能,并向用戶層軟件提供一個一致的接口?,F(xiàn)以塊設備為例,與設備無關的I/O軟件的主要功能包括:
(1)設備命名。與設備無關的I/O軟件負責將設備名映射到相應的設備驅動程序上。
(2)設備保護。操作系統(tǒng)應向各個用戶賦予不同設備的訪問權限,以實現(xiàn)對設備的保護。例如,UNIX對I/O設備的設備文件采用了rwx的保護機制,系統(tǒng)管理員可以為每臺設備設置合理的訪問權限。
(3)與設備無關的塊大小。不同磁盤的扇區(qū)大小可能不同,設備無關軟件屏蔽了這一差異并向上層軟件提供統(tǒng)一的數(shù)據(jù)塊大小。例如,把若干扇區(qū)作為一個邏輯塊,這樣高層軟件就只和邏輯塊大小相同的抽象設備交互,而不管磁盤物理扇區(qū)的大小。
(4)數(shù)據(jù)緩沖。塊設備和字符設備都需要數(shù)據(jù)緩沖。對于塊設備,硬件每次讀寫均以塊為單位,而用戶程序則可以讀寫任意大小的單元。如果用戶寫半個塊,操作系統(tǒng)將在內部保留這些數(shù)據(jù),直到其余數(shù)據(jù)到齊后才一次性地將這些數(shù)據(jù)寫到盤上。對字符設備,用戶向系統(tǒng)寫數(shù)據(jù)的速度可能比向設備輸出的速度快,所以也需要緩沖。
(5)數(shù)據(jù)塊的分配。當創(chuàng)建了一個文件并向其寫入數(shù)據(jù)時,必須為該文件分配新的磁盤塊。為了完成這種分配工作,操作系統(tǒng)需要為每個磁盤配置一張記錄空閑盤塊的表或位示圖,但定位一個空閑塊的算法應是獨立于設備的。
(6)對獨占設備的分配與釋放。一些設備在同一時刻只能由一個進程使用,這就要求操作系統(tǒng)檢驗對該設備的使用要求,并根據(jù)設備的忙閑情況來決定是接受還是拒絕此請求。
(7)錯誤處理。錯誤處理多數(shù)由驅動程序完成。多數(shù)錯誤是與設備緊密相關的,因此只有驅動程序知道應如何處理。一種典型的錯誤是磁盤塊受損導致不能讀寫。驅動程序在嘗試若干次讀操作失敗后將放棄,并向設備無關軟件報錯。從此處往后,錯誤處理就與設備無關了。如果讀一個文件時出錯,則向調用者報錯即可;如果是在讀一些關鍵系統(tǒng)數(shù)據(jù)結構時出錯,則操作系統(tǒng)只能打印出錯信息,并終止運行。6.3.5用戶空間的I/O軟件
盡管大部分I/O軟件屬于操作系統(tǒng),但是也有一小部分是與用戶程序鏈接在一起的庫例程,甚至是在核心外運行的完整程序。系統(tǒng)調用包括I/O系統(tǒng)調用,通常是庫例程調用。
在如下C語句:
count=write(fd,buffer,nbyte);
中,所調用的庫函數(shù)write()將與用戶程序鏈接在一起,并包含在運行時的二進制代碼中。這一類庫例程顯然也是I/O系統(tǒng)的一部分。標準I/O庫包含相當多涉及I/O的庫例程,它們作為用戶程序的一部分運行。并非所有的用戶層I/O軟件都由庫例程構成,另一個重要的類型就是Spooling系統(tǒng),它是在多道程序設計中處理獨占設備的一種方法。例如,對于打印機,盡管可以打開其設備文件來進行申請,但如果一個進程打開它而長時間不用,則其它進程都無法使用。
解決這一問題的方法是創(chuàng)建一個精靈進程(守護進程Daemon)以及一個特殊的目錄,稱Spooling目錄。打印一個文件之前,進程首先產生完整的待打印文件,并將其放在Spooling目錄下,而由該精靈進程進行打印。這里只有該精靈進程能使用打印機設備文件,通過禁止用戶直接使用打印機設備文件便解決了上述打印機空占的問題。
Spooling還可以用于打印機以外的其它情況。例如,在網絡上傳輸文件常使用網絡精靈進程,發(fā)送文件前先將其放在一特定目錄下,而后由網絡精靈進程將其取出發(fā)送。這種文件傳輸方式的用途之一就是Internet電子郵件系統(tǒng)。Internet通過許多網絡將大量的計算機連在一起,當向某人發(fā)送E-mail時,用戶使用某一個程序如Send,該程序接收要發(fā)送的信件并將其送入一個固定的Spooling目錄下待以后發(fā)送。整個E-mail系統(tǒng)在操作系統(tǒng)之外運行。6.3.6I/O系統(tǒng)軟件的層次結構
圖6.12概括地總結了I/O系統(tǒng)的軟件層次結構。圖中列出了每一層軟件及其主要功能。從底層開始分別是硬件、中斷處理程序、設備驅動程序、與設備無關I/O軟件,最上層是用戶空間的I/O軟件。圖6.12I/O系統(tǒng)的層次結構圖6.12中的箭頭表示控制流。例如,當用戶程序試圖從文件中讀一數(shù)據(jù)塊時,需通過操作系統(tǒng)來執(zhí)行此操作。設備無關軟件首先在數(shù)據(jù)塊緩沖區(qū)中查找此塊。若未找到,則它調用設備驅動程序,向硬件提出相應的請求。用戶進程隨即阻塞,直至數(shù)據(jù)塊被讀出。
當磁盤操作結束時,硬件發(fā)出一個中斷,它將激活中斷處理程序。中斷處理程序則從設備獲取返回狀態(tài)值,并喚醒被阻塞的用戶進程來結束此次I/O請求,隨后,用戶進程將繼續(xù)運行。隨著計算機技術的發(fā)展,計算機外部設備技術也有長足的進步,其速度也在不斷提高。但是,這與CPU的速度相比,仍相差甚遠。因此,將會出現(xiàn)CPU數(shù)據(jù)處理的速度與外設輸入/輸出的速度極不匹配的現(xiàn)象。例如,當用戶進程正在計算時,無數(shù)據(jù)輸出,打印機是空閑的。當計算結束時會產生大量的輸出結果,在極短的時間內要向打印機發(fā)送大量數(shù)據(jù),這時打印機根本來不及處理。這種CPU與外設之間速度的不匹配可能造成數(shù)據(jù)的丟失,或者使CPU長時間“空等”。6.4緩沖技術雖然通道技術和中斷技術為計算機系統(tǒng)的并行活動提供了強有力的支持,但由于CPU與外設之間的不匹配,使得它們之間的并行程度并未得到充分發(fā)揮。
緩沖技術的引入可明顯地提高CPU和外設的并行程度,提高系統(tǒng)的處理能力和設備的利用率。緩沖技術的基本思想是在CPU和外設之間設立緩沖區(qū),用于暫存CPU和外設之間交換的數(shù)據(jù),從而緩和CPU和外設速度不匹配所產生的矛盾。緩沖技術包括輸入緩沖和輸出緩沖。所謂輸入緩沖,是指在用戶進程需要數(shù)據(jù)之前,操作系統(tǒng)已經把數(shù)據(jù)從設備讀入系統(tǒng)存儲區(qū)中;所謂輸出緩沖,則是指操作系統(tǒng)先把要輸出的數(shù)據(jù)寫入系統(tǒng)存儲區(qū),當進程繼續(xù)運行時,操作系統(tǒng)再把數(shù)據(jù)送往設備輸出。
緩沖區(qū)按使用方式有專用緩沖區(qū)和通用緩沖區(qū)。專用緩沖區(qū)是專為某一設備而設置的緩沖區(qū),它為該設備所專用,它占用一定的內存空間,如鍵盤緩沖區(qū)。通用緩沖區(qū)可為多個設備所共享,按其組織方式,可分為單緩沖、雙緩沖以及緩沖池。6.4.1單緩沖
所謂單緩沖,是指在操作系統(tǒng)中設置一個緩沖區(qū),供用戶進程和操作系統(tǒng)之間交換數(shù)據(jù)使用?,F(xiàn)以輸入為例,操作系統(tǒng)從輸入設備讀入數(shù)據(jù)(可以是一字節(jié)、一行或一數(shù)據(jù)塊),把它放入該緩沖區(qū)中,用戶進程將從該緩沖區(qū)將數(shù)據(jù)取至用戶緩沖區(qū)。圖6.13給出了無緩沖與單緩沖的示意圖。我們可以粗略估計無緩沖和單緩沖對系統(tǒng)性能的影響。以塊設備為例,設T為輸入一塊數(shù)據(jù)所需的時間,C是介于兩個輸入請求之間處理數(shù)據(jù)所需的時間。如果無緩沖區(qū),則處理一
塊數(shù)據(jù)所需的時間為T+C;如果采用單緩沖區(qū),則處理時間為Max{C,T}+M,其中M是把一數(shù)據(jù)塊從系統(tǒng)緩沖區(qū)傳送到用戶數(shù)據(jù)區(qū)所需的時間。大多數(shù)的情況下,M遠小于T或C。圖6.13無緩沖與單緩沖(a)無緩沖;(b)單緩沖6.4.2雙緩沖
在單緩沖的情況下,當操作系統(tǒng)把數(shù)據(jù)存放到系統(tǒng)緩沖區(qū)后,假如又有新的數(shù)據(jù)從設備中讀入,而此時用戶進程還沒有把數(shù)據(jù)送到用戶數(shù)據(jù)區(qū),操作系統(tǒng)不得不暫停從設備讀數(shù)據(jù),直至將緩沖區(qū)中的數(shù)據(jù)全部送到用戶數(shù)據(jù)區(qū)。這種情況明顯地影響了CPU和設備之間的并行程度。為此,可采用雙緩沖方式。
所謂雙緩沖,就是在操作系統(tǒng)中為某一設備設置兩個緩沖區(qū),當一個緩沖區(qū)中的數(shù)據(jù)尚未被處理時可用另一緩沖區(qū)存放從設備讀入的數(shù)據(jù),以此來平滑CPU和I/O設備之間速度的差異。如圖6.14所示,設備首先把數(shù)據(jù)放入緩沖區(qū)A中,當用戶進程正對該數(shù)據(jù)處理時,如果從設備讀出一些數(shù)據(jù),此時操作系統(tǒng)將會把數(shù)據(jù)暫存到緩沖區(qū)B中,待用戶進程處理完A中的數(shù)據(jù)后,就從B中讀取數(shù)據(jù),而下次操作系統(tǒng)又可以把從設備讀入的數(shù)據(jù)放入緩沖區(qū)A中。這就是說,用戶進程處理第i個數(shù)據(jù)與操作系統(tǒng)從設備讀入第i+1個數(shù)據(jù)的工作是重疊的。操作系統(tǒng)和用戶進程這樣輪流地使用兩個緩沖區(qū)A和B,以達到并行工作的目的。圖6.14雙緩沖在雙緩沖情況下,處理一個數(shù)據(jù)塊的時間大致為Max{C,T}。如果C<T,則可使塊設備很忙,連續(xù)輸入;如果C>T,則可以保證用戶進程處理完一個數(shù)據(jù)后無需等待I/O操作就可以獲得下一個數(shù)據(jù)。與單緩沖相比,不論哪種情況,系統(tǒng)性能都得到了改善。
雙緩沖可以進一步擴充成多緩沖。此時操作系統(tǒng)與用戶進程將輪流地使用多個緩沖區(qū),以改善系統(tǒng)的性能。但是,系統(tǒng)性能并不是隨著緩沖區(qū)的數(shù)量不斷增加而無休止提高,當緩沖區(qū)到達一定數(shù)量時,對系統(tǒng)性能的提高將是微乎其微的,甚至會使系統(tǒng)性能下降。6.4.3緩沖池
上述緩沖區(qū)一般僅適用于某一特定的I/O設備,因而它屬于專用緩沖區(qū)。如果系統(tǒng)配置的設備較多,那么即使每個設備配置一個緩沖區(qū),累計起來,內存的開銷也十分可觀,而且專用緩沖區(qū)的利用率也不高。為了克服專用緩沖區(qū)的上述缺陷,操作系統(tǒng)經常采用公用緩沖技術——緩沖池(BufferPool)。
1.緩沖池的組成
對于既可用于輸入又可用于輸出的公用緩沖池,其中至少應包含以下三種類型的緩沖區(qū):
①空閑緩沖區(qū);②裝滿輸入數(shù)據(jù)的緩沖區(qū);③裝滿輸出數(shù)據(jù)的緩沖區(qū)。為了管理方便,可將相同類型的緩沖區(qū)鏈成一個隊列。于是,可形成以下三個隊列:
(1)空緩沖區(qū)隊列emq:由空緩沖區(qū)所鏈成的隊列;
(2)輸入隊列inq:由裝滿輸入數(shù)據(jù)的緩沖區(qū)所鏈成的隊列;
(3)輸出隊列outq:由裝滿輸出數(shù)據(jù)的緩沖區(qū)所鏈成的隊列。除了上述三個隊列外,還應具有四種工作緩沖區(qū):
(1)用于收容輸入數(shù)據(jù)的工作緩沖區(qū);
(2)用于提取輸入數(shù)據(jù)的工作緩沖區(qū);
(3)用于收容輸出數(shù)據(jù)的工作緩沖區(qū);
(4)用于提取輸出數(shù)據(jù)的工作緩沖區(qū)。
2.緩沖池管理的基本操作
對緩沖池管理提供兩個基本操作(過程):
(1)getbuf(type):用于從type所指定的隊列的隊首,摘下一個緩沖區(qū);
(2)putbuf(type,number):用于將用參數(shù)number所指示的緩沖區(qū),掛在type隊列上。
3.緩沖池的工作方式
緩沖池可以工作在收容輸入、提取輸入、收容輸出和提取輸出四種工作方式(見圖6.15)。圖6.15緩沖池的工作方式
1)收容輸入工作方式
在輸入進程需要輸入數(shù)據(jù)時,調用getbuf(emq)過程,從emq隊列的隊首摘下一個緩沖區(qū),把它作為收容輸入工作緩沖區(qū)hin。然后,把數(shù)據(jù)輸入其中,裝滿后再調用putbuf(inq,hin)過程,將該緩沖區(qū)掛在輸入隊列inq的隊尾。
2)提取輸入工作方式
當計算進程需要輸入數(shù)據(jù)時,調用getbuf(inq)過程,從輸入隊列取得一緩沖區(qū)sin作為提取輸入工作緩沖區(qū),計算進程從中提取數(shù)據(jù)。當計算進程用完該數(shù)據(jù)后,再調用putbuf(emq,sin),將該緩沖區(qū)掛在空緩沖隊列emq上。
3)收容輸出工作方式
當計算進程需要輸出時,調用getbuf(emq)過程,從空緩沖隊列emq的隊首取得一個空緩沖區(qū)并以此作為收容輸出工作緩沖區(qū)hout。當其裝滿輸出數(shù)據(jù)后,又調用put(outq,hout)過程,將該緩沖區(qū)掛在outq的隊尾。
4)提取輸出工作方式
當要輸出時,由輸出進程調用getbuf(outq)過程,從輸出隊列的隊首取得一個裝滿輸出數(shù)據(jù)的緩沖區(qū),作為提取輸出工作緩沖區(qū)sout。在數(shù)據(jù)提取完成后,再調用put(emq,sout)過程,將它掛在空緩沖隊列的末尾。6.4.4預先讀與延遲寫
操作系統(tǒng)對塊設備的管理通常采用緩沖池技術。為了提高塊設備的讀寫效率,操作系統(tǒng)廣泛采用了預先讀與延遲寫技術。
1.預先讀
操作系統(tǒng)讀塊設備時,一般通過同步方式把一指定的數(shù)據(jù)塊讀入緩沖區(qū),此時用戶進程不得不進入阻塞狀態(tài),等待數(shù)據(jù)傳輸?shù)慕Y束。為了加快進程的推進速度,提高CPU和塊設備工作的并行程度,最好在使用某一塊之前,用異步方式提早把它讀入緩沖區(qū)。當用戶進程實際需要該塊數(shù)據(jù)時,可以立即從緩沖區(qū)取走而無需等待。這種技術稱為預先讀。
2.延遲寫
當塊設備進行輸出時,如果某一緩沖區(qū)只寫了一部分,則不要急于把該緩沖區(qū)的內容寫到塊設備上,而是把寫塊操作推遲到某個適當?shù)臅r機進行。那么什么是適當?shù)臅r機呢?一般有兩個:其一是延遲寫的緩沖區(qū)被寫滿時,其二是該緩沖區(qū)被重新分配時。作為計算機系統(tǒng)中的輔助存儲器,即用來存放文件的磁盤、磁鼓一類高速大容量旋轉型的存儲設備,在多道程序設計的環(huán)境下,可能會出現(xiàn)若干個進程同時對其提出輸入/輸出請求并等待處理的現(xiàn)象。系統(tǒng)必須采用一種調度策略,使得能按最佳次序處理這些請求。這就是所說的驅動調度問題,所采用的調度策略稱為驅動調度算法。
驅動調度能減少為若干個輸入/輸出請求服務所需的總時間,從而提高系統(tǒng)的效率。除了輸入/輸出請求的優(yōu)化排序外,信息在輔助存儲器上的排列方式,文件在輔存空間上的分配方法都能影響存取訪問速度。6.5磁盤的驅動調度磁盤的驅動調度是先進行移臂(移動存取臂)調度,再進行旋轉調度。例如,某一時刻對磁盤的輸入/輸出請求序列是:
柱面(CC) 磁道(HH) 物理記錄R
7
4
1
7
4
8
7
4
5
40
6
4
2
7
7
如果當前存取臂處于0號柱面,若按上述序列訪問磁盤,則存取臂將從0號柱面移至7號柱面,再移至40號柱面,最后回到2號柱面。顯然,這樣就要來回移臂。如果將輸入/輸出請求按柱面號2、7、7、7、40的次序處理,就可大大節(jié)省移臂時間。進一步考查7號柱面上的三個輸入/輸出請求。按上述次序,磁盤需旋轉近兩周才能完成訪問。若將輸入/輸出請求按照下列的次序完成訪問:
柱面(CC) 磁道(HH) 物理記錄R
7
4
1
7
4
5
7
4
8
則對7號柱面4號磁道的三次訪問只需旋轉一周就可完成。因此,對于磁盤來說,不僅要考慮移臂時間最短,而且還要使旋轉周數(shù)最少。移臂調度算法有:
(1)先來先服務算法(FCFS)。先來先服務調度算法是最簡單的一種方法,它按照輸入/輸出請求到達的順序,逐一完成訪問請求。
(2)最短查找時間優(yōu)先法(SSTF)。這種算法總是先完成距當前存取臂距離最近的柱面上的輸入/輸出請求。
(3)掃描法(SCAN)。由于請求序列具有動態(tài)性質,因此可采用掃描法。存取臂從磁盤的一端出發(fā),向另一端移動,遇到需要訪問的柱面就完成訪問請求,直至到達磁盤的另一端。到達另一端后,存取臂移動方向就倒轉過來,繼續(xù)完成這一方向上的訪問請求。
在掃描法中,存取臂總是從磁盤的一端移動到另一端。實際上并不需要這樣,通常的方法是,存取臂僅需移到一個方向最遠的所請求的柱面后,一旦沒有訪問請求了,存取臂就改變移動方向。這種掃描法又稱電梯調度算法。
電梯調度算法是一種簡單而又實用的算法,圖6.16給出了電梯調度算法的流程。圖6.16電梯調度算法流程設備分配程序的主要功能是,當某進程向系統(tǒng)提出I/O請求后,設備分配程序按照一定的策略,把所要求的設備分配給它.6.6設備分配程序6.6.1設備分配的數(shù)據(jù)結構
在配置有通道的計算機系統(tǒng)中,設備分配程序至少應解決以下三個問題:
(1)是否有能用來為I/O請求提供的通路?
(2)是否有一條以上的通路可用?
(3)如果當前尚無通路可用,那么通路何時才能空閑?
為了回答這些問題,I/O設備分配程序應建立一套反映系統(tǒng)設備狀態(tài)的數(shù)據(jù)結構。這一套數(shù)據(jù)結構包括設備控制塊(UCB)、控制器控制塊(CUCB)、通道控制塊(CCB)(圖6.17)以及系統(tǒng)設備表SDT(圖6.18)。圖6.17設備管理中的三種控制塊圖6.18UCB和PCB的連接現(xiàn)以設備控制塊UCB為例,說明表中各項的意義,控制器控制塊、通道控制塊的各相應項意義與之類似。
在設備控制塊UCB中通常包括如下內容:
(1)設備標識符。該設備的設備名或設備號。
(2)設備狀態(tài)。如該設備正忙,則記入使用該設備的進程PCB的首址;如果不忙,則置空閑標志,如圖6.18所示。
(3)與此設備相連的控制器表。如圖6.19所示,與設備E連接的控制器有C、D。在該項內置入與此設備相連接的控制器控制塊首址,因控制器C和D連接到同一設備E,故控制器C和D的CUCB也連接在一起。圖6.19UCB、CUCB、CCB間的連接
(4)等待此設備的進程表。由于提出使用此設備要求的進程有幾個,因此等待此設備的進程按某種調度策略構成了進程鏈,如圖6.18所示。
系統(tǒng)設備表SDT是系統(tǒng)范圍的數(shù)據(jù)結構,它記錄了系統(tǒng)中擁有的全部I/O設備,每一類設備占用一個表目。每個表目包含若干項,項目的多少和項目內容隨系統(tǒng)而異。圖6.20給出了系統(tǒng)設備表和UCB的關系。圖6.20系統(tǒng)設備表與UCB的關系有了上述數(shù)據(jù)結構,I/O設備分配程序一方面隨時登記通道、控制器和設備的狀態(tài)信息,另一方面構成I/O設備到主存的通路。
根據(jù)所請求的I/O設備,由系統(tǒng)狀態(tài)表找到該設備的UCB,然后檢查UCB。例如,所要求的設備是圖6.9中的設備E,于是I/O設備分配程序檢查設備E的UCB,從中找到與此設備相連的CUCB,發(fā)現(xiàn)控制器C、D與E相連。如果控制器C不忙,則從控制器C的CUCB中找出與此控制器相連的通道。其結果是:通道A和B與控制器C相連。如果通道A正忙,而通道B空閑,那么便可構成一條I/O通路:通道B——控制器C——設備E。對于所請求的I/O設備,根據(jù)上述的查找方法,可能出現(xiàn)三種情況:
(1)對于所請求的I/O設備,僅有一條通路可用,例如:通道B——控制器C——設備E。
(2)對于所請求的I/O設備,可以找到一條以上的可用通路,例如上例中,最多可找出四條可用通路:
通道A——控制器C——設備E
通道A——控制器D——設備E
通道B——控制器C——設備E
通道B——控制器D——設備E
(3)對于所請求的I/O設備,沒有一條可用的通路。例如通道A、B都處于忙狀態(tài),則對于設備E,便沒有可用通路。
在I/O繁忙的情況下,暫時沒有可用通路是完全可能的。但是當I/O完成后就會有一個或多個部件(設備、控制器和通道)被釋放。于是此時I/O設備分配程序又會構成I/O通路。為此,當有進程提出I/O請求后,如果有可用通路,則在UCB、CUCB、CCB中將進程名(或進程PCB的首址)登記在表示正在使用該設備(或控制器或通道)的狀態(tài)表目內;如果沒有一個可用的通路,則進行排隊等候,如圖6.18所示。至此,上述三個問題都已解決。6.6.2I/O調度程序
I/O調度程序的主要功能是為滿足進程的I/O請求,決定設備(以及相應的控制器和通道)的分配策略。
在多進程的系統(tǒng)中,由于進程數(shù)多于設備數(shù),就必然要引起進程對資源的爭奪。為使系統(tǒng)有條不紊地工作,系統(tǒng)必須具有一套合理的設備分配原則。這些原則與下述的四個因素有關:
1)I/O設備的固有屬性
I/O設備的固有屬性是指該設備是適合于某進程獨占,還是適合于由幾個進程共享。
前已指出,從設備分配角度看,設備分成獨享、共享和虛擬三種,它們分別對應于三種不同的分配方式。獨享設備包括行式打印機、鍵盤/顯示器等低速I/O設備。一方面,因為這類設備的輸入/輸出介質(顯示器、打印紙等)如果交叉出現(xiàn)用戶信息,則容易造成混亂;另一方面,這些設備的操作常常需要人工干預,如果采用共享分配,則增加操作員的負擔。所以獨享設備應采用獨享分配方式,即一旦某設備分配給一進程,該設備就一直歸它獨自使用,直至該進程將其釋放為止。
共享設備(如磁盤、磁鼓等)可作為大容量外存儲器使用,而且其定位操作的時間較短,可直接進行存取。因此該類設備適合于由若干個進程共享,即采用共享分配方式。
虛擬設備的分配適于采用虛擬分配方式。
2)I/O設備的分配算法
如果請求I/O設備的進程數(shù)多于可用的通路,那么有些進程就要進入設備(或控制器或通道)的等待隊列;當有可用通路時,I/O調度程序便依據(jù)某種算法選擇一個進程,使它的I/O要求得到滿足,將它所等待的設備分配給它。
I/O調度程序所遵循的分配策略,可采用前述的進程調度策略。但I/O操作有一個特點,即一個通道程序一經啟動便一直進行下去,直到最后完成。在它完成之前不會產生中
斷,所以進程調度所采用的時間片輪轉法在I/O調度中不能采用。除此之外的其它方法均可采用。通常采用如下兩種算法:
(1)先請求先服務。當有多個進程對同一設備提出I/O請求時,該算法是把所有發(fā)出I/O請求的進程,按其發(fā)出請求的先后順序排成一個等待該設備的隊列。I/O調度程序把I/O設備分配給該隊列中的第一個進程。
(2)優(yōu)先級高者優(yōu)先。在進程調度中優(yōu)先級高者,優(yōu)先獲得處理機。如果在I/O調度中,對優(yōu)先級高者優(yōu)先滿足它的I/O請求,這也是非常合理的。因為這樣做有利于盡快地結束該進程,從而盡早地釋放它所占有的資源。
I/O調度程序在規(guī)定了具體的調度算法之后,等待I/O設備的進程就可以排隊定序。如果采用優(yōu)先級高者優(yōu)先的算法,那么圖6.19的進程等待隊列就可按優(yōu)先級(由高到低)排隊。一旦I/O調度程序確定了滿足I/O請求的相對順序之后,如有可用的通路,I/O設備分配程序就必須滿足那個進程的I/O請求。
3)設備分配的安全性
在有些系統(tǒng)中,每當進程以命令(或廣義指令)的形式向系統(tǒng)發(fā)出I/O請求后,便立即進入阻塞狀態(tài),直到所提出的I/O請求完成后才被喚醒。此時,一個進程只能提出一個I/O請求。這種方法的優(yōu)點是:首先,使程序的編制更為方便,例如某進程發(fā)出一條“讀入一塊數(shù)據(jù)到緩沖區(qū)”的命令,則在下一條指令執(zhí)行時,就可以認為在緩沖區(qū)中已讀入了所讀數(shù)據(jù);其次,這種方法對設備分配比較安全,不會產生死鎖現(xiàn)象。這種方法也有一個缺點,就是進程和I/O設備之間是串行工作的,進程推進緩慢。為加快進程推進的速度,使CPU和I/O設備能并行工作,應使某些進程以命令形式發(fā)出I/O請求之后,仍可繼續(xù)運行,需要時又可發(fā)出第二個I/O請求、第三個I/O請求。僅當進程
所請求之設備已為另一進程占用時才進入阻塞狀態(tài)。這樣就可同時操作多個外部設備。但這種多請求方式會導致設備分配不安全,有可能產生死鎖現(xiàn)象。對此,在多請求方式中,設備分配應保證安全而不出現(xiàn)死鎖。
4)與設備的無關性
所謂與設備的無關性,是指用戶程序中所使用的設備(邏輯設備)與系統(tǒng)配置的實際物理設備無關。6.6.3設備分配的實施
1.單通路I/O系統(tǒng)的設備分配
在單通路I/O系統(tǒng)中,按如下步驟實施設備分配:
(1)分配設備。根據(jù)進程n所提出的設備名(由邏輯設備名轉換為物理設備名)來檢索系統(tǒng)設備表SDT,從中找到該物理設備之UCB;根據(jù)UCB中的狀態(tài),可知該設備的忙閑。若忙,則將要求I/O的進程n插入到設備隊列中等待;若不忙,系統(tǒng)按一定算法來計算設備分配的安全性。若分配不會引起死鎖,則把該設備分配給進程n;否則,仍把它插入到設備等待隊列中。
(2)分配控制器。當系統(tǒng)把該設備分配給要求I/O的進程后,從UCB中的控制器表指針可找到與此設備相連的控制器表CUCB,再檢查該表的狀態(tài)信息。若忙,將進程插入等待該控制器的隊列;若不忙,則把該控制器分配給進程n。
(3)分配通道。通過CUCB找到與此控制器相連的通道表CCB,從中了解此通道的狀態(tài)信息。若忙,則將進程n插入到通道隊列中等待;若不忙,則將該通道分配給進程n。于是,進程n本次所請求之I/O設備、控制器和通道均已得到,便可啟動I/O設備進行信息傳送了。
2.多通路I/O系統(tǒng)的設備分配
上面講了單通路I/O系統(tǒng)的設備分配。所謂單通路I/O系統(tǒng),就是只有一條通路和主存相連。事實上,為了提高系統(tǒng)的靈活性和可靠性,往往采用多通路的I/O系統(tǒng)。此時,一個設備可連幾個控制器,而一個控制器又可連幾個通道。因此,在這種情況下,設備的分配除了考慮與設備無關性外,尚須考慮分配的安全性。于是,這將使得設備分配變得復雜化了。
現(xiàn)在假定某進程n向系統(tǒng)提出I/O請求,要求為它分配一臺I/O設備。于是系統(tǒng)可選取該類設備中的任何一臺設備分配給該進程。其步驟如下:
(1)根據(jù)要求I/O的進程n所提供的設備類型,檢索SDT表,找到第一個該類物理設備的UCB,由狀態(tài)信息可知其忙閑情況。若忙,則檢查第二個物理設備的UCB。若該類型的全部設備都處于忙碌狀態(tài),則表明該類設備已分配完畢。進程n的此次I/O請求無法滿足,只好把進程n插入到等待該類設備的隊列中。只要在該類設備中有一個空閑設備,系統(tǒng)便可對其計算分配該設備給進程n的安全性。若安全,則把設備分配給進程n,否則將其插入該類設備的等待隊列。
(2)當系統(tǒng)把第i個設備分配給進程n后,便可通過檢查與此設備相連的第一個CUCB,而得知該控制器是否忙碌;若忙,再檢查第二個CUCB表。若與此設備相連的所有的控制器都忙,則表明無控制器可分配給設備i。只要設備i不是該類設備中的最后一個,便可返回到步驟(1),試圖再找下一個空閑設備;否則,仍將該進程插入控制器等待隊列中。
(3)若有空閑的控制器,便可進一步檢查與此控制器j相連的第一個通道是否忙碌。若忙,再查看第二個CCB表,若與此控制器相連的全部通道都忙,表明無通道可分配給控制器j。只要控制器j不是該設備i的最后一個控制器,便返回到步驟(2),試圖找出一個空閑的控制器,否則,將該進程插入通道等待隊列。若有空閑通道可用,則此次設備分配成功,將相應的設備、控制器和通道分配給進程n,接著便可啟動I/O設備,開始信息傳送。多通路I/O系統(tǒng)設備分配的流程示于圖6.21。6.21設備分配流程圖6.7.1I/O系統(tǒng)的結構
1.I/O系統(tǒng)概貌
WindowsNT
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 前臺工作的職業(yè)發(fā)展路徑計劃
- 財務資金分配計劃
- 通信行業(yè)月度個人工作計劃
- 《六盤水市東風煤業(yè)有限公司水城區(qū)東風煤礦(優(yōu)化重組)礦產資源綠色開發(fā)利用方案(三合一)》評審意見
- 攀枝花駿恒礦業(yè)有限責任公司爐房箐鐵礦礦山地質環(huán)境保護與土地復墾方案情況
- 保健植物知識培訓課件
- 蛋白還原酸護理教程
- 小學信息技術四年級上冊第5課《 精彩游戲-軟件的下載》教學設計001
- 2025年銅川貨運從業(yè)資格證考試模擬考試題庫下載
- 2025年新鄉(xiāng)貨運從業(yè)資格證怎么考試
- 2025年中國土木工程集團有限公司招聘筆試參考題庫含答案解析
- 2025廣西壯族自治區(qū)考試錄用公務員(4368人)高頻重點提升(共500題)附帶答案詳解
- 神經病 《神經病學》習題集學習課件
- 2025年四川綿陽市科技城新區(qū)下屬國有企業(yè)新投集團招聘筆試參考題庫附帶答案詳解
- 教科版三年級下冊科學全冊單元教材分析
- 2025年國家鐵路局工程質量監(jiān)督中心招聘歷年高頻重點提升(共500題)附帶答案詳解
- 《S中學宿舍樓工程量清單計價編制(附三維圖)》30000字
- 全國運動員注冊協(xié)議書范本(2篇)
- 2024年03月浙江南潯銀行春季招考筆試歷年參考題庫附帶答案詳解
- 執(zhí)行立案申請書模版
- 智能建筑外掛電梯安裝方案
評論
0/150
提交評論