I/O

https://sls.weco.net/node/21333
13. 輸入/輸出系統 (I/O Systems)

Submitted by mei on 一, 2014-01-27 15:55
本章目標:


解析操作系統I/O子系統結構。


討論I/O硬件原理和複雜度。


提供I/O軟、硬件性能方面的詳細內容。





I/0概念:


設計不同的功能來控制設備,這些功能構成核心I/O子系統,將它部分與管理I/O裝置可能涉及的復雜度區分開來。


為了方便管理,將不同裝置的細節與相異之處隱藏起來,作業系統核心涉及成使用裝置驅動程式模組(驅動驅動程式--代表一個與I/O子系統,相同之統一裝置存取界面)。


I/0概念控制目的:(1)如何將這些裝置與電腦掛載連接;(2)如何以軟體程式來控制這些硬體裝置


周邊裝置包括:(1)存儲裝置,如磁帶;(2)傳輸裝置,如數據機;(3)界面裝置,如滑鼠





I/0硬體:


電腦系統與裝置的通訊,借由所謂的連接阜,并使用相同的纜線。這叫做匯流排。


彙流排(Bus):


匯流排概念:由一組纜線組成,并使用嚴謹定義之協定,規定一組課在纜線上傳送的訊息格式


構架:(1)Daisy Chaining;(2)Pulling;(3)Independent Requesting


爲了節省硬體代價,高速彙流排連接高速傳輸裝置;慢速彙流排連接慢速傳輸裝置


下圖為一般PC系統匯流排:





                                                          典型的PC匯流排架構


控制器(Controller):


控制器概念:可操控連接阜、匯流排、或裝置的電子零件組合。控制器內置暫存器,用于存儲資料與控制        訊號,方便處理器透過暫存器讀取資料或命令。某些裝置擁有自己的內建控制器。


控制器與處理器的通訊:


(1)使用特殊I/O指令來傳輸要送往某I/O連接阜位址的位元或字元,I/O指令驅動匯流排線選擇適當的裝置,再將位元輸入或寫出到裝置暫存器。


(2)使裝置控制器支援記憶體映對I/O。


(3)以上兩種方式一起使用。


連接阜(Port):


連接阜概念:連接電腦與裝置,完成它們的通訊。


由4個暫存器組成:(1)狀態暫存器;(2)控制暫存器;(3)資料輸入暫存器;(4)資料輸出暫存器;


狀態暫存器:包含可被主機讀取的位元資料,這些位元指出當前狀態;


控制暫存器:用以起始指令或改變裝置模式;


主機由資料輸入暫存器讀取輸入;


資料輸出暫存器由主機寫入要輸出的資料。


------可擴充控制器的容量為暫存器所用。


查詢


主機與控制器之間有完整的協定,基本握手是其中最簡單的概念


握手與協定(Handshaking and Protocol):


1.主機將重復讀取忙碌位元,知道位元值被清除;


2.主機設定在指令暫存器中的寫入位元,將位元組寫入資料輸出暫存器;


3.主機設定指令就緒位元;


4.當控制器發現指令就緒位元已經設定完成,即設定忙碌位元;


5.控制器讀取指令暫存器并發現寫入指令,則自資料輸出暫存器取位元組,并且執行必須的裝置I/O處理;


6.控制器清除指令就緒位元,并清除在狀態暫存器中的錯誤位元,表示裝置I/O已經成功,再清除忙碌位    元以便表示動作完成。


查詢裝置狀態方式:


讀取裝置暫存器、利用邏輯-和運算抽取狀態位元、若不為零時產生分支。


主機必須提供裝置快速的服務,以便主機知道控制器何時變為閑置狀態,而更有效率。


因此設計了一種叫做中斷的機制。


中斷(Interrupts):


中斷概念::允許裝置通知CPU的硬體機制,方便服務。CPU硬體擁有一個稱為中斷要求管線的纜線,方便    存儲訊號。


下圖為中斷驅動I/O回圈:





                                                            中斷-驅動I/O回圈


引發中斷過程:(1)若控制器發生錯誤,就會通過中斷需求線發出中斷信號;


(2)cpu每執行一個指令后會檢查中斷需求線,當發現信號後,做出相應存儲,跳往執行中斷處理器常式


(3)由中斷常式查明原因並處理,回傳中斷返回指令;


(4)處理完畢後還原工作。


中斷需求線包括2種:(1)不可遮罩中斷;(2)可遮罩中斷。


2者的區別是:中斷信號發生時,是否可以改變信號。不能改變的為不可遮罩中斷,反之為可遮罩中斷。


除了中斷常式,還設有中斷異常表,可查詢那些可預測的經常異常,而不需查詢所有來源。中斷向量表課使用中斷串鏈方式。中斷機制通過接受一個位址,此位址即為中斷向量表格的起始位址。


下圖為中斷向量表,0到31為不可遮罩中斷,32到255為可遮罩中斷。





  現年作業系統使用中斷來處理費同步事件,并跳至核心中的監控者模式,為了讓緊急的時間得以優先處理,現代電腦使用各一套中斷優先權的方法,裝置控制器、硬體錯誤,及系統呼叫皆會引發課驅動核心常式的中斷,由于中斷處理占去極多時間,因此為了良好的執行效率,需要找到有效的中斷處理方法。


  其他有效率之硬體方法:


存儲處理器狀態值,并接著呼叫核心之特權方式。


直接記憶體存取(Direct Memory Access):


程式化I/O:


做大量傳輸時,使用一般性用途的處理器來監看狀態位元,將資料已一次一位元組大小方式送入控制暫存器中。


直接記憶體存取的產生:


由于程式化I/O方式太過浪費,所以使用一種特殊用途處理器來處理大量傳輸這種情況,減輕CPU負擔。


DMA控制器的初始化:


主機將DMA指令區段寫入記憶體,此區段包含指向傳輸來源的指標、指向傳輸目的地的指標與傳輸資料數目。


CPU將此指令區段位置寫至DMA控制器中,而后就不用管了,其他工作都交由DMA來控制:DMA控制器直接操作記憶體匯流排,將位置置于匯流排上,然后進行大量傳輸的工作。


DMA控制器與裝置控制器之間通過握手程序來完成:


(1)當有資料需要傳送,此裝置將一訊號置于DMA-Request纜線上;


(2)DMA控制器抓取記憶體匯流排,將目的位置置于記憶體-位址纜線上,再將訊號置于DMA-Acknowledge纜線上;


(3)當裝置控制器偵測到DMA-Acknowledge纜線上的訊號時,立即將資料傳送至記憶體,並將DMA-Request移除.


下圖為DMA傳輸的步驟圖:





                          The step of the DMA transmit


DMA處理影響:


  CPU不可存取主記憶體,而只能存取主要與第二快取中的資料項。雖然這降低了CPU的計算時間,但總的來說,DMA控制器的傳輸方式算很有效率。


DMA可使用底層實體記憶體的位址,也可執行直接虛擬記憶體存取方式。 


I/0界面應用:


I/0界面:


    爲了兼顧各種類型的I/0裝置,我們找出一般性特征將I/O裝置的細節相異性抽離開來,這些一般性特征可由一組標準化功能加以存取,此即為界面。而那些相異點則保存在裝置驅動器中,不讓I/O子系統觸及。


下圖為核心I/O結構圖








                                                            The struct of the kernel I/O


相應的驅動程式層以界面聯通至硬體部分之各個裝置控制器,再連通各個裝置。將I/O子系統獨立于硬體之外,可簡化作業系統發展者的工作,它亦有利于硬體發展者。


裝置與裝置之間有一些特別的差異,以下介紹一些裝置特色:


(1)字元串列或區段:字元串列裝置以位元組為單位傳輸資料,而區段裝置則以區段位元組為單位傳輸資料。


(2)序列或隨機存取:序列裝置以固定順序傳輸資料,順序由裝置決定,而隨機存取裝置的使用者會通知裝置搜尋任何可用資料的儲存的位置;


(3)同步與非同步:所謂的同步裝置為可在預估回應時間之內,執行資料傳輸的裝置。而非同步裝置則容許不定或無法預知的回應時間。


(4)功用或指定:共用裝置可被多個處理程序或執行緒同時使用,一個指定裝置則不行。


(5)指令操作速度:裝置速度的范圍小至每秒數位元組,大至每秒數百萬位元組。


(6)讀-寫、只讀、只寫:某些裝置同時可執行輸入輸出,但有些只能支援單項資料傳輸。


應用程序的實現離不開系統呼叫,雖然系統呼叫因作業系統不同而不同,但標準化的界面包含以下存取功能:區段I/O、字元串列I/O、記憶體映對檔案存取、網路承接口;特殊的系統呼叫能夠存取諸如時鐘與計時器等裝置。


區段與字元裝置


區段裝置界面包括所有存取磁碟機,及其他區段導向裝置時所需的功能。裝置了解read、write、seek等指令。


Raw I/O:某些特殊的應用程式,透過檔案系統界面,將區段裝置當做簡單的線性區段陣列使用。


例如:記憶體映對


不需讀取與寫入操作,記憶體映對界面即可透過主要記憶體中的位元陣列,對磁碟儲存提供存取能力。就像處理分頁要求虛擬記憶體存取用的機制,檔案映對至記憶體之系統呼叫,將傳回虛擬記憶體的位址。資料傳輸的時間是指在當需要存取記憶體影像時才執行。


字元裝置,例如鍵盤。界面基本系統呼叫可用get、put函數來存取字元,而且一次存取一行,不需緩沖與編輯服務。


網路裝置


網路承接口界面:與磁碟使用之讀-寫-搜尋界面相異。


Wall socket:


插座界面的系統呼叫建立插座,將趨于插座與遠端位址連接起來,等待任何遠端應用程式與趨于插座項鏈,并透過連接收送資料;提供select功能;系統呼叫選擇回送關于該插座正在等待被接受封包的資訊,這個插座有一個用來承接被傳送封包的空間。 


時脈計時器


三種功能時脈與計時器:記錄目前的時間、記錄超過的時間、設定計時器,可在時間T啟動操作X.


但這三種功能在系統呼叫制作碼時并未標準化。


可程式化計時器:使用者可將其設定成在等待特定時間長度之后產生中斷


作業系統提供使用者執行程序的相關界面,亦可使用計時器功能;系統核心包有一個中斷串列,內容為與所屬常式映對以及使用者要求之中斷,以先到先進方式儲存。來達到模擬虛擬時脈時,作業系統能支援比計時器硬體頻道更多的計時器要求的目的。


阻隔與非阻隔I/O


阻隔:當應用程式發出阻隔系統呼叫時,應馬上懸置應用程式的執行,此應用程式將自作業系統的執行序列移至等待序列,在系統呼叫完成后,應用程式將移回執行序列,取得由系統呼叫傳回的資料值,并轉變為可繼續執行狀態。


非阻隔:剛好與阻隔相反。例如熒幕顯示由滑鼠輸入的使用者界面。可以用非同步系統呼叫代替。


非阻隔與非同步系統呼叫的差別:例如,非阻隔read系統呼叫不慣資料是否可用,都會立刻回傳;非同步read系統呼叫只會在資料完全送達時發出傳輸要求,后者指令不會立刻完成。


應用程式設計者可重疊使用I/O的另一方法是撰寫一多執行緒應用程式。














                                                               The charater of the device


核心I/0次系統:


    核心提供許多I/O相關的服務。裝置是有核心I/O子系統 提供的服務,并且建于硬體與裝置驅動器上的架構。


I/0排程(I/O Scheduling):


為了執行程序們公平地享有裝置存取權利,且降低I/O完成指令的平均等待時間,提高執行效率。需要對各個應用程式發出的I/O需求進行排班。


作業系統本身也可以試著講求公平性,這些應用程式即可公平享受系統提供之服務,或讓緊急要求馬上獲得優先服務。


緩衝(Buffering):


緩沖概念:在兩個裝置或裝置與應用程式之間傳輸資料時,可以存儲資料的記憶體區域。


它可做一下幾個用途:


(1)為了解決資料串列之生產者與消費者在速度上不相等的問題;


(2)用在不同資料傳輸大小的裝置之間做調整;


(3)用來提供應用I/O的復制語法。


快取(Caching):


快取概念:一個持有資料復制的快速記憶體,存取已經快取住的復制是比存取原有的資料要來得效率。


快取與緩沖比較:


(1)緩沖器只有持有資料項的備份,快取之持有一個存在于其他位置的項目之快速儲存的復制;


(2)緩沖和快取有時候可以使用同一塊記憶體范圍。


串置執行(Spooling)和裝置預約:


Spooling:一個緩沖器,用來保留不能接收插入之資料串列的裝置(例如印表機)之輸出。系統提供一個 控制界面,這個界面使得使用者和系統管理者拿到由spooling系統形成的序列,方便管理工作的進行。


裝置預約:提供明白的協調功能,來解決應付多個并行應用程式的I/O要求。例如windows NT提供等待系統呼叫,直到裝置物件變成為可用狀態,它也在開啟系統呼叫之中加入參數,用來宣告允許存取其他并行執行緒內容的類型。


錯誤處理


裝置與I/O傳輸發生錯誤主要分兩種:暫時性原因、長久性原因。


UNIX提供額外的整數變數errno來回傳錯誤碼;某些硬體能夠分析錯誤詳細資料,但不能將其傳回應用程式,如:SCSI裝置發生失誤時,感應鍵值可得到失誤狀態,額外感應碼可以說明想無效指令參數等錯誤類別,額外感應碼修飾子可提供更詳細的關于錯誤的資料


核心資料結構


系統核心需要知道關于I/O元件的狀態資訊(例如,追蹤網路連結、字元裝置通訊),它可以透過許多位于核心的資料結構完成。


某些作業系統廣泛地使用物件導向方法。如下圖的UNIX I/O核心結構做參考。





                                                               


 UNIX I/O核心結構


硬體I/0操作:


應用程式提出I/0需求到磁碟讀取檔案過程如下:


(1)處理程序發出阻隔read系統呼叫給先前已經被開啟之檔案描述子;


(2)核心的系統呼叫程式碼檢查參數正確性,在輸入的時候,若資料已存于緩沖器或快取器中,則直接將資料回傳給處理程序,I/O要求完成;


(3)否則,需要執行底層I/O,如此行程才會自執行序列移至裝置等待序列,并且安排I/O要求。最后,I/O子系統會將要求送給裝置驅動器。根據不同的作業系統,要求會借由子常式呼叫或核心訊息傳送;


(4)裝置驅動器會配置核心緩沖空間以便接收資料,并安排I/0。最后,驅動器透過寫入裝置控制器的方法,將命令送至裝置控制器;


(5)裝置控制器操作裝置硬體執行資料傳送;


(6)驅動器可能會查詢狀態與資料,;或者可能會建立DMA傳輸到核心記憶體之中,我們假設傳輸由DMA控制器管理,當傳輸完成時產生中斷;


(7)正確的中斷處理器透過中斷向量表接收中斷、儲存任何必要資料、發訊號給裝置驅動器,并自中斷回傳;


(8)裝置驅動器接收記號,決定哪一個I/O要求完成、要求狀態、并發訊號給核心I/O子系統,告知要求完成的消息;


(9)核心將資料或程式碼個行程之為之空間,并將行程自等待序列移回就緒序列列;


(10)將行程移至就緒序列,并繼續行程的執行,當排版程式將行程指定給CPU時,行程在系統呼叫完成時繼續執行。









                                                    I/O要求的生命周期


串流:


資料串列:一個在裝置驅動器與使用者層處理程序之間的全工連接,讓應用程式能后動態組合驅動器程式碼之管線,它的結構如下圖


(2)驅動尾尾端(Driver End):可控制裝置;


(3)資料串列模組(Stream Modules):存在于可控制裝置之間,可包含零個或多個存在。它提供資料串列處理的功能,使用系統呼叫icotl推入資料串列


三者都包含一個讀取序列和一個寫入序列:


讀取序列:由裝置傳送至行程;和寫入序列:由行程寫入裝置。


驅動器尾端與資料串列標頭或模組差異:


    資料串列標頭如果不能拷貝訊息到線上的下一個序列時可能會被阻隔,而驅動器尾端則必須處理所有進入的資料。









                                                資料串列的結構


資料串列I/O是非同步的,除非當使用者行程和資料串列標頭溝通時。





執行效率:


I/O是影響系統效率的主要因素。系統產生中斷程序對系統的效率影響是很關鍵的,它的過程包含儲存狀態、內容切換等方面都會影響CPU時間。當然這只是其中一個部分,而I/O要求在被安排順序時就會面臨這些問題;網路交通量也可能造成較高的內容切換率。


下圖為電腦內部通訊以及他們的代價圖:









系統在終端機I/O方面,使用獨立前端處理器來減少主CPU的中斷負擔。


    爲了改善執行效率,系統應注意如下事項:


(1)減少內文切換次數;


(2)減少在裝置與應用程式之間傳輸時,必須復制的記憶體資料次數;


(3)減少使用大型傳輸、智慧型控制器與查詢方法之中斷發生頻率;


(4)使用DMA控制器的并行處理,或者可以減少來自CPU簡單資料復制次數的通道;


(5)將處理初始條件移至硬體之中,使它在裝置控制器之中的操作可以與CPU以及匯流排的操作同時進行;


(6)平衡CPU、記憶體子系統、匯流排與I/O之執行效率,因為任一區域的額外負擔都可能造成其他系統的不便。


對I/0分層設計,各層對系統效率的影響:


(1)越上層對彈性越沒影響;


(2)越下層效率越高;


(3)越下層開發代價越高。

Comments

Popular Posts