第六章 輸入輸出系統(tǒng)_第1頁
第六章 輸入輸出系統(tǒng)_第2頁
第六章 輸入輸出系統(tǒng)_第3頁
第六章 輸入輸出系統(tǒng)_第4頁
第六章 輸入輸出系統(tǒng)_第5頁
已閱讀5頁,還剩96頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第六章輸入輸出系統(tǒng)6.1

I/O系統(tǒng)的功能、模型和接口6.2

I/O設(shè)備和設(shè)備控制器6.3

中斷機構(gòu)和中斷處理程序6.4

設(shè)備驅(qū)動程序6.5

與設(shè)備無關(guān)的I/O軟件6.6

用戶層I/O軟件6.7緩沖區(qū)管理6.8磁盤存儲器的性能和調(diào)度6.1

I/O系的功能、模型和接口6.1.1I/O系統(tǒng)的基本功能1)隱藏物理設(shè)備的細節(jié)2)與設(shè)備無關(guān)性

用戶命令只需提供邏輯設(shè)備名3)提高處理機和I/O設(shè)備的利用率

盡可能讓CPU和I/O設(shè)備并行操作4)對I/O設(shè)備進行控制可編程I/O,中斷I/O,DMA,通道I/O5)確保對設(shè)備的正確共享

獨占設(shè)備、共享設(shè)備6)錯誤處理

臨時性錯誤:重新操作永久性錯誤:向上層軟件報告1.方便用戶使用I/O設(shè)備2.提高CPU和I/O設(shè)備利用率3.方便用戶共享設(shè)備

6.1.2I/O系統(tǒng)的層次結(jié)構(gòu)和模型I/O軟件的目標:

1)解決由于外部設(shè)備與CPU速度不匹配所引起的問題,提高主機和外設(shè)的并行工作能力,提高系統(tǒng)效率2)方便用戶對設(shè)備的操作和管理1.I/O軟件的層次結(jié)構(gòu)(1)用戶層軟件:實現(xiàn)與用戶交互的接口,用戶可直接調(diào)用在用戶層提供的、與I/O操作有關(guān)的庫函數(shù),對設(shè)備進行操作。

(2)設(shè)備獨立性軟件:負責實現(xiàn)與設(shè)備驅(qū)動器的統(tǒng)一接口、設(shè)備命名、設(shè)備的保護以及設(shè)備的分配與釋放等,同時為設(shè)備管理和數(shù)據(jù)傳送提供必要的存儲空間。(3)設(shè)備驅(qū)動程序:與硬件直接相關(guān),負責具體實現(xiàn)系統(tǒng)對設(shè)備發(fā)出的操作指令,驅(qū)動I/O設(shè)備工作的驅(qū)動程序。(4)中斷處理程序:用于保存被中斷進程的CPU環(huán)境,轉(zhuǎn)入相應(yīng)的中斷處理程序進行處理,處理完后再恢復(fù)被中斷進程的現(xiàn)場后返回到被中斷進程。2.I/O系統(tǒng)中各種模塊之間的層次視圖1)I/O系統(tǒng)的上下接口

(1)I/O系統(tǒng)接口(2)軟硬件接口

2)I/O系統(tǒng)分層6.1.3I/O系統(tǒng)接口1.塊設(shè)備接口1)塊設(shè)備:數(shù)據(jù)的存取和傳輸以數(shù)據(jù)塊為單位,速度快可尋址2)隱藏磁盤二維結(jié)構(gòu)

塊接口將磁盤扇區(qū)從0到n-1編號3)將抽象命令映射為低層操作2.流設(shè)備接口

1)字符設(shè)備:數(shù)據(jù)的存取和傳輸以字符為單位,速度低不可尋址,多是獨占設(shè)備需互斥共享

2)用put,get操作進行順序存取

3)采用統(tǒng)一的in-control指令來管理字符設(shè)備3.網(wǎng)絡(luò)通信接口6.2I/O設(shè)備和設(shè)備控制器6.2.1

I/O設(shè)備1.I/O設(shè)備的類型

I/O設(shè)備的性能指標:設(shè)備使用特性、數(shù)據(jù)傳輸速率、數(shù)據(jù)的傳輸單位、設(shè)備共享屬性等。

1)按設(shè)備的使用特性分類第一類:存儲設(shè)備(外存):存取速度慢,容量大價格便宜。

第二類:輸入/輸出設(shè)備:

輸入設(shè)備:用來接收外部信息,如鍵盤、鼠標、掃描儀等。

輸出設(shè)備:用于將計算機加工處理后的信息送向外部的設(shè)備,如打印機、繪圖儀等。

交互式設(shè)備:集成上述兩類設(shè)備,如顯示器

2)按傳輸速率分類

低速設(shè)備:幾個字節(jié)至數(shù)百個字節(jié)/S。如鍵盤、鼠標器、語音的輸入和輸出等設(shè)備。

中速設(shè)備:數(shù)千個字節(jié)至數(shù)十萬個字節(jié)/S。如行式打印機、

激光打印機等。

高速設(shè)備:數(shù)百個千字節(jié)至千兆字節(jié)/S。如磁帶機、磁盤機、光盤機等。

2.設(shè)備與控制器之間的接口1)數(shù)據(jù)信號線

用于在設(shè)備和設(shè)備控制器之間傳送數(shù)據(jù)信號。2)控制信號線

由設(shè)備控制器向I/O設(shè)備發(fā)送控制信號時的通路。

規(guī)定了設(shè)備將要執(zhí)行的操作,如讀操作(指由設(shè)備向控制器傳送數(shù)據(jù))或?qū)懖僮?從控制器接收數(shù)據(jù)),或執(zhí)行磁頭移動等操作。3)狀態(tài)信號線用于傳送指示設(shè)備當前狀態(tài)的信號。

設(shè)備的當前狀態(tài)有正在讀(或?qū)?;設(shè)備已讀(寫)完成,并準備好新的數(shù)據(jù)傳送。

6.2.2設(shè)備控制器1.設(shè)備控制器的基本功能

1)接收和識別命令

CPU可以向控制器發(fā)送多種不同的命令,設(shè)備控制器應(yīng)能接收并識別這些命令??刂萍拇嫫鳎河脕泶娣沤邮盏拿詈蛥?shù),并對其命令進行譯碼。2)數(shù)據(jù)交換

CPU與控制器之間、控制器與設(shè)備之間的數(shù)據(jù)交換。在控制器中須設(shè)置數(shù)據(jù)寄存器。

3)標識和報告設(shè)備的狀態(tài)控制器應(yīng)記下設(shè)備的狀態(tài)供CPU了解。狀態(tài)寄存器:反映設(shè)備的某一種狀態(tài)。4)地址識別系統(tǒng)中的每一個設(shè)備都有一個地址,設(shè)備控制器必須能夠識別它所控制的每個設(shè)備的地址。

在控制器中應(yīng)配置地址譯碼器。

5)數(shù)據(jù)緩沖

I/O設(shè)備的速率較低而CPU和內(nèi)存的速率高,故在控制器中必須設(shè)置一緩沖器。

輸出:緩沖器暫存由主機高速傳來的數(shù)據(jù);

輸入:暫存從I/O設(shè)備送來的數(shù)據(jù),待接收到一批數(shù)據(jù)后,再高速地傳送給主機。6)差錯控制

對由I/O設(shè)備傳送來的數(shù)據(jù)進行差錯檢測。

若發(fā)現(xiàn)傳送中出現(xiàn)了錯誤,CPU報告,重新傳送。2.設(shè)備控制器的組成

1)設(shè)備控制器與處理機的接口

用于實現(xiàn)CPU與設(shè)備控制器之間的通信。

共有三類信號線:數(shù)據(jù)線、地址線和控制線。數(shù)據(jù)線:傳輸數(shù)據(jù)和設(shè)備狀態(tài)信息地址線:傳送給I/O邏輯進行地址譯碼控制線:傳送控制命令2)設(shè)備控制器與設(shè)備的接口

在一個設(shè)備控制器上可以連接一個或多個設(shè)備??刂破髦斜阌幸粋€或多個設(shè)備接口,一個接口連接一臺設(shè)備。

每個接口中都存在數(shù)據(jù)、控制和狀態(tài)三種類型的信號。

控制器中的I/O邏輯根據(jù)處理機發(fā)來的地址信號去選擇一個設(shè)備接口。

3)I/O邏輯

用于實現(xiàn)對設(shè)備的控制。

通過一組控制線與處理機交互:

(1)處理機利用該邏輯向控制器發(fā)送I/O命令;(2)I/O邏輯對收到的命令進行譯碼。6.2.3內(nèi)存映像I/O6.2.4

I/O通道

1.I/O通道(I/OChannel)設(shè)備的引入

在CPU和設(shè)備控制器之間又增設(shè)了通道其主要目的:建立獨立的I/O操作,使一些原來由CPU處理的I/O任務(wù)轉(zhuǎn)由通道來承擔進一步把CPU從繁雜的I/O任務(wù)中解脫出來。設(shè)置了通道后,CPU只需向通道發(fā)送一條I/O指令。通道在收到該指令后,便從內(nèi)存中取出本次要執(zhí)行的通道程序,然后執(zhí)行該通道程序,僅當通道完成了規(guī)定的I/O任務(wù)后,才向CPU發(fā)中斷信號。

I/O通道是一種特殊的處理機:能執(zhí)行I/O指令,并通過通道(I/O)程序來控制I/O操作。

但I/O通道又與一般的處理機不同:

1.指令類型單一,主要局限于與I/O操作有關(guān)的指令;

2.通道沒有自己的內(nèi)存,通道與CPU共享內(nèi)存。2.通道類型

1)字節(jié)多路通道(ByteMultiplexorChannel)按字節(jié)交叉方式工作,通常含有許多非分配型子通道,這些子通道按時間片輪轉(zhuǎn)方式共享主通道。不適于連接高速設(shè)備。

2)數(shù)組選擇通道(BlockSelectorChannel)

數(shù)據(jù)傳送是按數(shù)組方式進行。

用于連接多臺高速設(shè)備,但只含有一個分配型子通道:在一段時間內(nèi)只能執(zhí)行一道通道程序,某臺設(shè)備占用了該通道后,便一直由它獨占,即使是它無數(shù)據(jù)傳送,通道被閑置,也不允許其它設(shè)備使用該通道,直至該設(shè)備傳送完畢釋放該通道。通道利用率很低。3)數(shù)組多路通道(BlockMultiplexorChannel)

采用多路復(fù)用技術(shù),含有多個非分配型子通道,既具有很高的數(shù)據(jù)傳輸速率,又能獲得令人滿意的通道利用率。

廣泛地用于連接多臺高、中速的外圍設(shè)備。

3.“瓶頸”問題解決“瓶頸”問題的最有效的方法:增加設(shè)備到主機間的通路而不增加通道6.3中斷機構(gòu)和中斷處理程序6.3.1中斷簡介1.中斷和陷入

1)中斷:CPU對I/O設(shè)備發(fā)來的中斷信號的一種響應(yīng)。是由外部設(shè)備引起的,又稱外中斷。

2)陷入:由CPU內(nèi)部事件引起的中斷如非法指令、地址越界等。又稱內(nèi)中斷。2.中斷向量表和中斷優(yōu)先級

1)中斷向量表:記錄中斷號及對應(yīng)的中斷處理程序入口地址

2)中斷優(yōu)先級:磁盤中斷,打印機,鍵盤3.對多中斷源處理方式

1)屏蔽中斷2)嵌套中斷6.3.2中斷處理程序

1.測試是否有未響應(yīng)的中斷信號

CPU執(zhí)行完當前指令后要測試是否有未響應(yīng)的中斷信號,若無則執(zhí)行下個指令,否則停止當前進程執(zhí)行轉(zhuǎn)去執(zhí)行中斷處理程序。

2.保護被中斷進程的CPU環(huán)境

由硬件自動將處理機狀態(tài)字PSW和程序計數(shù)器(PC)中的內(nèi)容,保存在中斷保留區(qū)(棧)中。3.轉(zhuǎn)入相應(yīng)的設(shè)備處理程序

由處理機對各個中斷源進行測試,以確定引起本次中斷的I/O設(shè)備,然后將相應(yīng)的設(shè)備中斷處理程序的入口地址裝入到程序計數(shù)器中,轉(zhuǎn)向中斷處理程序。4.中斷處理

不同設(shè)備有不同的中斷處理程序。首先判別中斷是正常完成中斷還是異常結(jié)束中斷。

若是前者,中斷程序便進行結(jié)束處理;

若是異常結(jié)束中斷,則根據(jù)發(fā)生異常的原因做相應(yīng)的處理。

5.恢復(fù)被中斷進程的現(xiàn)場

將保存在中斷棧中的被中斷進程的現(xiàn)場信息取出,并裝入到相應(yīng)的寄存器中,包括該程序下一次要執(zhí)行的指令的地址N+1、處理機狀態(tài)字PSW。

處理機再執(zhí)行本程序時,便從N+1處開始,最終返回到被中斷的程序。6.4設(shè)備驅(qū)動程序6.4.1設(shè)備驅(qū)動程序概述(設(shè)備處理程序)是I/O進程與設(shè)備控制器之間的通信程序,常以進程的形式存在,故簡稱設(shè)備驅(qū)動進程。主要任務(wù):

1.接收上層軟件發(fā)來的抽象I/O要求,轉(zhuǎn)換為具體要求后發(fā)送給設(shè)備控制器,啟動設(shè)備去執(zhí)行;

2.將由設(shè)備控制器發(fā)來的信號傳送給上層軟件。

1.設(shè)備驅(qū)動程序的功能

(1)接收由設(shè)備獨立性軟件發(fā)來的命令和參數(shù),并將命令中的抽象要求轉(zhuǎn)換為具體要求,例如,將磁盤塊號轉(zhuǎn)換為磁盤的盤面、磁道號及扇區(qū)號。

(2)檢查用戶I/O請求的合法性,了解I/O設(shè)備的狀態(tài),傳遞有關(guān)參數(shù),設(shè)置設(shè)備的工作方式。

(3)發(fā)出I/O命令。若設(shè)備空閑立即啟動完成操作;若忙則將請求者的請求塊掛在設(shè)備隊列上等待。

(4)及時響應(yīng)由控制器或通道發(fā)來的中斷請求,并根據(jù)其中斷類型調(diào)用相應(yīng)的中斷處理程序進行處理。

補:(5)對于設(shè)置有通道的計算機系統(tǒng),驅(qū)動程序還應(yīng)能夠根據(jù)用戶的I/O請求,自動地構(gòu)成通道程序。2.設(shè)備驅(qū)動程序的特點(了)3.設(shè)備處理方式(了)

1)為每一類設(shè)備設(shè)置一個進程,專門執(zhí)行這一類設(shè)備的I/O操作

2)整個系統(tǒng)設(shè)置一個I/O進程,專門執(zhí)行所有各類設(shè)備的I/O操作

3)只為各類設(shè)備設(shè)置相應(yīng)驅(qū)動程序6.4.2設(shè)備驅(qū)動程序的處理過程

不同類型的設(shè)備應(yīng)有不同的設(shè)備驅(qū)動程序。

大體上分成兩部分:

1)驅(qū)動I/O設(shè)備工作的驅(qū)動程序;

2)設(shè)備中斷處理程序,以處理I/O完成后的工作。設(shè)備驅(qū)動程序的主要任務(wù)是啟動指定設(shè)備。但在啟動之前,還必須完成必要的準備工作,如檢測設(shè)備狀態(tài)是否為“忙”等。在完成所有的準備工作后,才最后向設(shè)備控制器發(fā)送一條啟動命令。

1)將抽象要求轉(zhuǎn)換為具體要求通常在每個設(shè)備控制器中都含有若干個寄存器,分別用于暫存命令、數(shù)據(jù)和參數(shù)等。

例如,將抽象要求中的盤塊號轉(zhuǎn)換為磁盤的盤面、

磁道號及扇區(qū)。這一轉(zhuǎn)換工作只能由驅(qū)動程序來完成,

在OS中只有驅(qū)動程序才同時了解抽象要求和設(shè)備控制器中的寄存器情況;也只有它才知道命令、

數(shù)據(jù)和參數(shù)應(yīng)分別送往哪個寄存器。

2)檢查I/O請求的合法性對于任何輸入設(shè)備,都是只能完成一組特定的功能,若該設(shè)備不支持這次的I/O請求,則認為這次I/O請求非法。系統(tǒng)應(yīng)予以拒絕。3)讀出和檢查設(shè)備的狀態(tài)在啟動某個設(shè)備進行I/O操作時,其前提條件應(yīng)是該設(shè)備正處于空閑狀態(tài)。否則只能等待。

4)傳送必要的參數(shù)

例如在啟動磁盤進行讀/寫之前,應(yīng)先將本次要傳送的字節(jié)數(shù)和數(shù)據(jù)應(yīng)到達的主存始址,送入控制器的相應(yīng)寄存器中。

5)工作方式的設(shè)置有些設(shè)備可具有多種工作方式,典型情況是利用RS-232接口進行異步通信。在啟動該接口之前,應(yīng)先按通信規(guī)程設(shè)定參數(shù):波特率、奇偶校驗方式、停止位數(shù)目及數(shù)據(jù)字節(jié)長度等。

6)啟動I/O設(shè)備在完成上述各項準備工作之后,驅(qū)動程序可以向控制器中的命令寄存器傳送相應(yīng)的控制命令。驅(qū)動程序發(fā)出I/O命令后,基本的I/O操作是在設(shè)備控制器的控制下進行的。

此時驅(qū)動(程序)進程把自己阻塞起來,直到中斷到來時才將它喚醒。6.4.3

I/O控制方式

1.程序I/O方式

早期無中斷機構(gòu),處理機對I/O設(shè)備的控制采取程序I/O方式,或稱為忙—等待方式:處理機向控制器發(fā)出一條I/O指令啟動輸入設(shè)備輸入數(shù)據(jù)時,把狀態(tài)寄存器中的忙/閑標志busy置為1,然后不斷地循環(huán)測試busy。

當busy=1時,表示輸入機尚未輸完一個字(符),處理機應(yīng)繼續(xù)對該標志進行測試;

當busy=0,表明輸入機已將輸入數(shù)據(jù)送入控制器的數(shù)據(jù)寄存器中。2中斷驅(qū)動I/O控制方式

現(xiàn)代計算機系統(tǒng)中,廣泛采用中斷驅(qū)動(InterruptDriven)方式:當某進程要啟動某個I/O設(shè)備工作時,便由CPU向相應(yīng)的設(shè)備控制器發(fā)出一條I/O命令,然后立即返回繼續(xù)執(zhí)行原來的任務(wù)。設(shè)備控制器于是按照該命令的要求去控制指定I/O設(shè)備。此時,CPU與I/O設(shè)備并行操作。

一旦數(shù)據(jù)進入數(shù)據(jù)寄存器,控制器便通過控制線向CPU發(fā)送中斷信號,由CPU檢查輸入過程中是否出錯,若無錯,便向控制器發(fā)送取走數(shù)據(jù)的信號,然后再通過控制器及數(shù)據(jù)線將數(shù)據(jù)寫入內(nèi)存指定單元中。

在I/O設(shè)備輸入每個數(shù)據(jù)的過程中,由于無需CPU干預(yù),因而可使CPU與I/O設(shè)備并行工作。僅當輸完一個數(shù)據(jù)時,才需CPU花費極短的時間去做些中斷處理。CPU和I/O設(shè)備都處于忙碌狀態(tài),從而提高了整個系統(tǒng)的資源利用率及吞吐量。3.直接存儲器訪問(DMA)I/O控制方式

1)DMA(DirectMemoryAccess)控制方式的引入雖然中斷驅(qū)動I/O比程序I/O方式更有效,但須注意,它仍是以字(節(jié))為單位進行I/O的,每當完成一個字(節(jié))的I/O時,控制器便要向CPU請求一次中斷。

中斷驅(qū)動I/O方式時的CPU是以字(節(jié))為單位進行干預(yù)的。如果將這種方式用于塊設(shè)備的I/O,顯然是極其低效的。例如,為了從磁盤中讀出1KB的數(shù)據(jù)塊,需要中斷CPU1K次。為了進一步減少CPU對I/O的干預(yù)而引入了直接存儲器訪問方式。該方式的特點是:

(1)數(shù)據(jù)傳輸?shù)幕締挝皇菙?shù)據(jù)塊,即在CPU與I/O設(shè)備之間,每次傳送至少一個數(shù)據(jù)塊;

(2)所傳送的數(shù)據(jù)是從設(shè)備直接送入內(nèi)存的,或者相反;

(3)僅在傳送一個或多個數(shù)據(jù)塊的開始和結(jié)束時,才需CPU干預(yù),整塊數(shù)據(jù)的傳送是在控制器的控制下完成的。可見,DMA方式較之中斷驅(qū)動方式,又是成百倍地減少了CPU對I/O的干預(yù),進一步提高了CPU與I/O設(shè)備的并行操作程度。

2)DMA控制器的組成

DMA控制器由三部分組成:主機與DMA控制器的接口;DMA控制器與塊設(shè)備的接口;I/O控制邏輯。

主要介紹主機與控制器之間的接口。四類寄存器:(1)命令/狀態(tài)寄存器(CR):接收CPU發(fā)來的I/O命令,或有關(guān)控制信息,或設(shè)備的狀態(tài)。(2)內(nèi)存地址寄存器(MAR)。在輸入時,它存放把數(shù)據(jù)從設(shè)備傳送到內(nèi)存的起始目標地址;在輸出時,它存放由內(nèi)存到設(shè)備的內(nèi)存源地址。

(3)數(shù)據(jù)寄存器(DR):暫存從設(shè)備到內(nèi)存,或從內(nèi)存到設(shè)備的數(shù)據(jù)。(4)數(shù)據(jù)計數(shù)器(DC)。存放本次CPU要讀或?qū)懙淖?節(jié))數(shù)。

3)DMA工作過程以從磁盤讀入數(shù)據(jù)為例

CPU向磁盤控制器發(fā)送一條讀命令;

該命令被送到其中的命令寄存器(CR)中;

數(shù)據(jù)讀入的內(nèi)存起始目標地址送入內(nèi)存地址寄存器(MAR)中;

要讀數(shù)據(jù)的字(節(jié))數(shù)則送入數(shù)據(jù)計數(shù)器(DC)中;

將磁盤中的源地址送至DMA控制器的I/O控制邏輯;

啟動DMA控制器進行數(shù)據(jù)傳送;

此后,整個數(shù)據(jù)傳送過程便由DMA控制器進行控制。

當DMA控制器已從磁盤中讀入一個字(節(jié))的數(shù)據(jù)并送入數(shù)據(jù)寄存器(DR)后,再挪用一個存儲器周期,將該字(節(jié))傳送到MAR所指示的內(nèi)存單元中。接著便對MAR內(nèi)容加1,將DC內(nèi)容減1。若減1后DC內(nèi)容不為0,表示傳送未完,便繼續(xù)傳送下一個字(節(jié));否則,由DMA控制器發(fā)出中斷請求。圖5-9是DMA方式的工作流程。4.I/O通道控制方式

1)I/O通道控制方式的引入雖然DMA方式比起中斷方式來已經(jīng)顯著地減少了CPU的干預(yù),即已由以字(節(jié))為單位的干預(yù)減少到以數(shù)據(jù)塊為單位的干預(yù),但CPU每發(fā)出一條I/O指令,也只能去讀(或?qū)?一個連續(xù)的數(shù)據(jù)塊。而當我們需要一次去讀多個數(shù)據(jù)塊且將它們分別傳送到不同的內(nèi)存區(qū)域,或者相反時,則須由CPU分別發(fā)出多條I/O指令及進行多次中斷處理才能完成。

I/O通道方式是DMA方式的發(fā)展,它可進一步減少CPU的干預(yù),即把對一個數(shù)據(jù)塊的讀(或?qū)?為單位的干預(yù)減少為對一組數(shù)據(jù)塊的讀(或?qū)?及有關(guān)的控制和管理為單位的干預(yù)。同時,又可實現(xiàn)CPU、通道和I/O設(shè)備三者的并行操作,從而更有效地提高整個系統(tǒng)的資源利用率。例如,當CPU要完成一組相關(guān)的讀(或?qū)?操作及有關(guān)控制時,只需向I/O通道發(fā)送一條I/O指令,以給出其所要執(zhí)行的通道程序的首址和要訪問的I/O設(shè)備,通道接到該指令后,通過執(zhí)行通道程序便可完成CPU指定的I/O任務(wù)。

2.通道程序通道是通過執(zhí)行通道程序,并與設(shè)備控制器共同實現(xiàn)對I/O設(shè)備的控制的。通道程序是由一系列通道指令(或稱為通道命令)所構(gòu)成的。通道指令與一般的機器指令不同,在它的每條指令中都包含下列諸信息:

(1)操作碼。操作碼規(guī)定了指令所執(zhí)行的操作,如讀、寫、控制等操作。

(2)內(nèi)存地址。內(nèi)存地址標明字符送入內(nèi)存(讀操作)和從內(nèi)存取出(寫操作)時的內(nèi)存首址。

(3)計數(shù)。該信息表示本條指令所要讀(或?qū)?數(shù)據(jù)的字節(jié)數(shù)。

(4)通道程序結(jié)束位P。該位用于表示通道程序是否結(jié)束。P=1表示本條指令是通道程序的最后一條指令。

(5)記錄結(jié)束標志R。R=0表示本通道指令與下一條指令所處理的數(shù)據(jù)是同屬于一個記錄;R=1表示這是處理某記錄的最后一條指令。

下面示出了一個由六條通道指令所構(gòu)成的簡單的通道程序。該程序的功能是將內(nèi)存中不同地址的數(shù)據(jù)寫成多個記錄。其中,前三條指令是分別將813~892單元中的80個字符和1034~1173單元中的140個字符及5830~5889單元中的60個字符寫成一個記錄;第4條指令是單獨寫一個具有300個字符的記錄;第5、6條指令共寫含500個字符的記錄。6.5與設(shè)備無關(guān)的I/O軟件為了提高OS的可適應(yīng)性和可擴展性,在現(xiàn)代OS中都毫無例外地實現(xiàn)了設(shè)備獨立性,也稱為設(shè)備無關(guān)性。6.5.1與設(shè)備無關(guān)軟件的基本概念

1.早期以物理設(shè)備名使用設(shè)備

2.引入邏輯設(shè)備名

邏輯設(shè)備、物理設(shè)備

使用邏輯設(shè)備名的優(yōu)點:1)設(shè)備分配時的靈活性

2)易于實現(xiàn)I/O重定向3.邏輯設(shè)備名到物理設(shè)備名的轉(zhuǎn)換(LUT表)6.5.2與設(shè)備無關(guān)的軟件

為了實現(xiàn)設(shè)備獨立性,必須再在驅(qū)動程序之上設(shè)置一層軟件,稱為設(shè)備獨立性軟件。

設(shè)備獨立性軟件的主要功能:執(zhí)行所有設(shè)備公有操作。

①向用戶層(或文件層)軟件提供統(tǒng)一接口。無論何種設(shè)備,它們向用戶所提供的接口應(yīng)該是相同的。例如,對各種設(shè)備的讀操作,在應(yīng)用程序中都使用read;而對各種設(shè)備的寫操作,也都使用write。②緩沖管理③差錯控制:暫時性錯誤、永久性錯誤。由于在I/O操作中的絕大多數(shù)錯誤都與設(shè)備無關(guān),故主要由設(shè)備驅(qū)動程序處理,而設(shè)備獨立性軟件只處理那些設(shè)備驅(qū)動程序無法處理的錯誤;④對獨立設(shè)備的分配與回收;⑤提供獨立于設(shè)備的邏輯塊6.5.3設(shè)

1.設(shè)備分配中的數(shù)據(jù)結(jié)構(gòu)

1)設(shè)備控制表(DCT)系統(tǒng)為每一個設(shè)備都配置了一張設(shè)備控制表,用于記錄本設(shè)備的情況。

(1)設(shè)備隊列隊首指針。凡因請求本設(shè)備而未得到滿足的進程,其PCB都應(yīng)按照一定的策略排成一個隊列,稱該隊列為設(shè)備請求隊列或簡稱設(shè)備隊列。其隊首指針指向隊首PCB。在有的系統(tǒng)中還設(shè)置了隊尾指針。

(2)設(shè)備狀態(tài)。當設(shè)備自身正處于使用狀態(tài)時,應(yīng)將設(shè)備的忙/閑標志置“1”。若與該設(shè)備相連接的控制器或通道正忙,也不能啟動該設(shè)備,此時則應(yīng)將設(shè)備的等待標志置“1”。

(3)與設(shè)備連接的控制器表指針。該指針指向該設(shè)備所連接的控制器的控制表。在設(shè)備到主機之間具有多條通路的情況下,一個設(shè)備將與多個控制器相連接。此時,在DCT中還應(yīng)設(shè)置多個控制器表指針。

(4)重復(fù)執(zhí)行次數(shù)。由于外部設(shè)備在傳送數(shù)據(jù)時,較易發(fā)生數(shù)據(jù)傳送錯誤,因而在許多系統(tǒng)中,如果發(fā)生傳送錯誤,并不立即認為傳送失敗,而是令它重新傳送,并由系統(tǒng)規(guī)定設(shè)備在工作中發(fā)生錯誤時應(yīng)重復(fù)執(zhí)行的次數(shù)。在重復(fù)執(zhí)行時,若能恢復(fù)正常傳送,則仍認為傳送成功。僅當屢次失敗,致使重復(fù)執(zhí)行次數(shù)達到規(guī)定值而傳送仍不成功時,才認為傳送失敗。

2)控制器控制表、通道控制表和系統(tǒng)設(shè)備表

(1)控制器控制表(COCT)。

(2)通道控制表(CHCT)。

(3)系統(tǒng)設(shè)備表(SDT)系統(tǒng)范圍的數(shù)據(jù)結(jié)構(gòu),其中記錄了系統(tǒng)中全部設(shè)備的情況。2.設(shè)備分配時應(yīng)考慮的因素

設(shè)備的固有屬性;②

設(shè)備分配算法;③

設(shè)備分配時的安全性;④

設(shè)備獨立性。1)設(shè)備的固有屬性第一種獨占性:采用獨享分配策略

第二種共享性:可同時分配給多個進程使用,此時須注意對這些進程訪問該設(shè)備的先后次序進行合理的調(diào)度。

第三種可虛擬設(shè)備:一臺可虛擬設(shè)備是可共享的設(shè)備,可以將它同時分配給多個進程使用,并對這些訪問該(物理)設(shè)備的先后次序進行控制。

2)設(shè)備分配算法

(1)先來先服務(wù)。將這些進程排成一個設(shè)備請求隊列,設(shè)備分配程序總是把設(shè)備首先分配給隊首進程。

(2)優(yōu)先級高者優(yōu)先。將優(yōu)先權(quán)高的進程排在設(shè)備隊列前面,對于優(yōu)先級相同的I/O請求,則按先來先服務(wù)原則排隊。

3)設(shè)備分配中的安全性

1)安全分配方式每當進程發(fā)出I/O請求后,便進入阻塞狀態(tài),直到其I/O操作完成時才被喚醒。這種分配方式已經(jīng)摒棄了造成死鎖的四個必要條件之一的“請求和保持”條件,從而使設(shè)備分配是安全的。其缺點是進程進展緩慢,即CPU與I/O設(shè)備是串行工作的。

2)不安全分配方式進程在發(fā)出I/O請求后仍繼續(xù)運行,需要時又發(fā)出第二個I/O請求、

第三個I/O請求等。僅當進程所請求的設(shè)備已被另一進程占用時,請求進程才進入阻塞狀態(tài)。3.獨占設(shè)備的分配程序

1)基本的設(shè)備分配程序

(1)分配設(shè)備首先根據(jù)I/O請求中的物理設(shè)備名,查找系統(tǒng)設(shè)備表(SDT),從中找出該設(shè)備的DCT,再根據(jù)DCT中的設(shè)備狀態(tài)字段,可知該設(shè)備是否正忙。若忙,便將請求I/O進程的PCB掛在設(shè)備隊列上;否則,便按照一定的算法來計算本次設(shè)備分配的安全性。如果不會導(dǎo)致系統(tǒng)進入不安全狀態(tài),便將設(shè)備分配給請求進程;否則,仍將其PCB插入設(shè)備等待隊列。

(2)分配控制器在系統(tǒng)把設(shè)備分配給請求I/O的進程后,再到其DCT中找出與該設(shè)備連接的控制器的COCT,從COCT的狀態(tài)字段中可知該控制器是否忙碌。若忙,便將請求I/O進程的PCB掛在該控制器的等待隊列上;否則,便將該控制器分配給進程。

(3)分配通道在該COCT中又可找到與該控制器連接的通道的CHCT,再根據(jù)CHCT內(nèi)的狀態(tài)信息,可知該通道是否忙碌。若忙,便將請求I/O的進程掛在該通道的等待隊列上;否則,將該通道分配給進程。只有在設(shè)備、

控制器和通道三者都分配成功時,這次的設(shè)備分配才算成功。然后,便可啟動該I/O設(shè)備進行數(shù)據(jù)傳送。

2.設(shè)備分配程序的改進

設(shè)備分配程序缺點:

進程是以物理設(shè)備名來提出I/O請求的;

采用的是單通路的I/O系統(tǒng)結(jié)構(gòu),容易產(chǎn)生“瓶頸”。為此,應(yīng)從以下兩方面對基本的設(shè)備分配程序加以改進。

1)增加設(shè)備的獨立性進程應(yīng)使用邏輯設(shè)備名請求I/O。2)考慮多通路情況采用多通路的I/O系統(tǒng)結(jié)構(gòu)。只要有一個控制器(通道)可用,系統(tǒng)便可將它分配給進程。

6.5.4邏輯設(shè)備名到物理設(shè)備名映射的實現(xiàn)

1.邏輯設(shè)備表LUT

用于將應(yīng)用程序使用的邏輯設(shè)備名映射為物理設(shè)備名。每個表目中包含了三項:邏輯設(shè)備名、物理設(shè)備名和設(shè)備驅(qū)動程序的入口地址。

2.LUT的設(shè)置問題

LUT的設(shè)置可采取兩種方式:

第一種方式是在整個系統(tǒng)中只設(shè)置一張LUT。

由于系統(tǒng)中所有進程的設(shè)備分配情況都記錄在同一張LUT中,因而不允許在LUT中具有相同的邏輯設(shè)備名,這就要求所有用戶都不使用相同的邏輯設(shè)備名。

這種方式主要用于單用戶系統(tǒng)中。

第二種方式是為每個用戶設(shè)置一張LUT。故此時的邏輯設(shè)備表可以采用上圖

(b)中的格式。

6.6用戶層的I/O軟件6.6.1系統(tǒng)調(diào)用與庫函數(shù)

一般而言,大部分的I/O軟件都在操作系統(tǒng)內(nèi)部,但仍有一小部分在用戶層,包括與用戶程序鏈接在一起的庫函數(shù)。

用戶層軟件必須通過一組系統(tǒng)調(diào)用來取得操作系統(tǒng)服務(wù)。

用戶程序通過調(diào)用對應(yīng)的庫函數(shù)使用系統(tǒng)調(diào)用。庫函數(shù)與調(diào)用程序連接在一起,包含在運行時裝入在內(nèi)存的二進制程序中,如C語言中的庫函數(shù)write等,這些庫函數(shù)的集合也是I/O系統(tǒng)的組成部分。6.6.2

假脫機系統(tǒng)

1.假脫機技術(shù)

早期:脫機輸入、脫機輸出技術(shù):利用專門的外圍控制機,將低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上;或者相反?,F(xiàn)在:利用多道程序其中的一道程序,來模擬脫機輸入時的外圍控制機功能,把低速I/O設(shè)備上的數(shù)據(jù)傳送到高速磁盤上;再用另一道程序來模擬脫機輸出時外圍控制機的功能,把數(shù)據(jù)從磁盤傳送到低速輸出設(shè)備上。

可在主機的直接控制下,實現(xiàn)脫機輸入、輸出功能。這種在聯(lián)機情況下實現(xiàn)的同時外圍操作稱為SPOOLing,或稱為假脫機操作。

2.SPOOLing系統(tǒng)的組成

SPOOLing系統(tǒng)主要有以下三部分:

(1)輸入井和輸出井。磁盤輸入井:暫存I/O設(shè)備輸入的數(shù)據(jù);輸出井:暫存用戶程序的輸出數(shù)據(jù)。

(2)輸入緩沖區(qū)和輸出緩沖區(qū)。內(nèi)存

輸入緩沖區(qū):暫存輸入數(shù)據(jù),以后再傳送到輸入井。

輸出緩沖區(qū):暫存輸出數(shù)據(jù),以后再傳送給輸出設(shè)備。

(3)輸入進程SPi和輸出進程SPo。利用兩個進程來模擬脫機I/O時的外圍控制機。

進程SPi模擬脫機輸入時的外圍控制機:將用戶要求的數(shù)據(jù)從輸入機通過輸入緩沖區(qū)再送到輸入井,當CPU需要輸入數(shù)據(jù)時,從輸入井讀入內(nèi)存;

進程SPo模擬脫機輸出時的外圍控制機:把用戶要求輸出的數(shù)據(jù)先從內(nèi)存送到輸出井,待輸出設(shè)備空閑時,再將輸出井中的數(shù)據(jù)經(jīng)過輸出緩沖區(qū)送到輸出設(shè)備上。

3.SPOOLing系統(tǒng)的特點

SPOOLing系統(tǒng)具有如下主要特點:

(1)提高了I/O的速度。

(2)將獨占設(shè)備改造為共享設(shè)備。

(3)實現(xiàn)了虛擬設(shè)備功能。

4.假脫機打印機系統(tǒng)打印機屬于獨占設(shè)備,利用SPOOLing技術(shù)可改為共享設(shè)備,從而提高設(shè)備的利用率,也方便了用戶。

當用戶進程請求打印輸出時,SPOOLing系統(tǒng)并不真正立即把打印機分配給該用戶進程,而是做兩件事:

由輸出進程在輸出井中為之申請一個空閑磁盤塊區(qū),并將要打印的數(shù)據(jù)送入其中;

輸出進程再為用戶進程申請一張空白的用戶請求打印表,并將用戶的打印要求填入其中,再將該表掛到請求打印隊列上。

如果還有進程要求打印輸出,系統(tǒng)仍可接受該請求,也同樣為該進程做上述兩件事。

6.7緩

6.7.1緩沖的引入

(1)緩和CPU與I/O設(shè)備間速度不匹配的矛盾。

事實上,凡在數(shù)據(jù)到達速率與其離去速率不同的地方,都可設(shè)置緩沖區(qū),以緩和它們之間速率不匹配的矛盾。

眾所周知,CPU的運算速率遠遠高于I/O設(shè)備的速率。

(2)減少對CPU中斷頻率,放寬對CPU中斷響應(yīng)時間的限制。

(3)提高CPU和I/O設(shè)備之間的并行性。緩沖的引入可顯著地提高CPU和I/O設(shè)備間的并行操作程度,提高系統(tǒng)的吞吐量和設(shè)備的利用率。例如,在CPU和打印機之間設(shè)置了緩沖區(qū)后,便可使CPU與打印機并行工作。

6.7.2單緩沖和雙緩沖

1.單緩沖(SingleBuffer)在單緩沖情況下,每當用戶進程發(fā)出一I/O請求時,操作系統(tǒng)便在主存中為之分配一緩沖區(qū),假定從磁盤把一塊數(shù)據(jù)輸入到緩沖區(qū)的時間為T,操作系統(tǒng)將該緩沖區(qū)中的數(shù)據(jù)傳送到用戶區(qū)的時間為M,而CPU對這一塊數(shù)據(jù)處理(計算)的時間為C。系統(tǒng)對每一塊數(shù)據(jù)的處理時間表示為Max(C,T)+M。

2.雙緩沖(DoubleBuffer)

也稱為緩沖對換(BufferSwapping)。在設(shè)備輸入時,先將數(shù)據(jù)送入第一緩沖區(qū),裝滿后便轉(zhuǎn)向第二緩沖區(qū)。6.7.3循環(huán)緩沖

1.循環(huán)緩沖的組成

(1)多個緩沖區(qū),每個緩沖區(qū)的大小相同。分為三種類型空緩沖區(qū)R:裝輸入數(shù)據(jù);滿緩沖區(qū)G;現(xiàn)行工作緩沖區(qū)C;

(2)多個指針。作為輸入的緩沖區(qū)可設(shè)置三個指針:用于指示計算進程下一個可用緩沖區(qū)G的指針Nextg、指示輸入進程下次可用的空緩沖區(qū)R的指針Nexti,以及用于指示計算進程正在使用的緩沖區(qū)C的指針Current。

2.循環(huán)緩沖區(qū)的使用

(1)Getbuf過程。(2)Releasebuf過程。當計算進程把C緩沖區(qū)中的數(shù)據(jù)提取完畢時,便調(diào)用Releasebuf過程,將緩沖區(qū)C釋放。此時,把該緩沖區(qū)由當前(現(xiàn)行)工作緩沖區(qū)C改為空緩沖區(qū)R。類似地,當輸入進程把緩沖區(qū)裝滿時,也應(yīng)調(diào)用Releasebuf過程,將該緩沖區(qū)釋放,并改為G緩沖區(qū)。

3.進程同步使用輸入循環(huán)緩沖,可使輸入進程和計算進程并行執(zhí)行。相應(yīng)地,指針Nexti和指針Nextg將不斷地沿著順時針方向移動,這樣就可能出現(xiàn)下述兩種情況:

(1)Nexti指針追趕上Nextg指針。

輸入數(shù)據(jù)的速度大于計算進程處理數(shù)據(jù)的速度,稱為系統(tǒng)受計算限制。

(2)Nextg指針追趕上Nexti指針。

輸入數(shù)據(jù)的速度低于計算進程處理數(shù)據(jù)的速度稱為系統(tǒng)受I/O限制。

6.7.4緩沖池

1.緩沖池的組成

①空(閑)緩沖區(qū);②裝滿輸入數(shù)據(jù)的緩沖區(qū);③

裝滿輸出數(shù)據(jù)的緩沖區(qū)。三個隊列:

(1)空緩沖隊列emq。由空緩沖區(qū)所鏈成的隊列。

(2)輸入隊列inq。由裝滿輸入數(shù)據(jù)的緩沖區(qū)所鏈成的隊列(3)輸出隊列outq。由裝滿輸出數(shù)據(jù)的緩沖區(qū)鏈成的隊列四種工作緩沖區(qū):

用于收容輸入數(shù)據(jù)的工作緩沖區(qū);②

用于提取輸入數(shù)據(jù)的工作緩沖區(qū);

用于收容輸出數(shù)據(jù)的工作緩沖區(qū);

用于提取輸出數(shù)據(jù)的工作緩沖區(qū)。

2.Getbuf過程和Putbuf過程

(1)Addbuf(type,number)過程。該過程用于將由參數(shù)number所指示的緩沖區(qū)B掛在type隊列上。

(2)Takebuf(type)過程。該過程用于從type所指示的隊列的隊首摘下一個緩沖區(qū)。為使諸進程能互斥地訪問緩沖池隊列,可為每一隊列設(shè)置一個互斥信號量MS(type)。此外,為了保證諸進程同步地使用緩沖區(qū),又為每個緩沖隊列設(shè)置了一個資源信號量RS(type)。既可實現(xiàn)互斥又可保證同步的Getbuf過程和Putbuf過程

3.緩沖區(qū)的工作方式緩沖區(qū)可以工作在收容輸入、提取輸入、收容輸出和提取輸出四種工作方式下,如圖5-15所示。

(1)收容輸入。在輸入進程需要輸入數(shù)據(jù)時,便調(diào)用Getbuf(emq)過程,從空緩沖隊列emq的隊首摘下一空緩沖區(qū),把它作為收容輸入工作緩沖區(qū)hin。然后,把數(shù)據(jù)輸入其中,裝滿后再調(diào)用Putbuf(inq,hin)過程,將該緩沖區(qū)掛在輸入隊列inq上。

(2)提取輸入。當計算進程需要輸入數(shù)據(jù)時,調(diào)用Getbuf(inq)過程,從輸入隊列inq的隊首取得一個緩沖區(qū),作為提取輸入工作緩沖區(qū)(sin),計算進程從中提取數(shù)據(jù)。計算進程用完該數(shù)據(jù)后,再調(diào)用Putbuf(emq,sin)過程,將該緩沖區(qū)掛到空緩沖隊列emq上。

(3)收容輸出。當計算進程需要輸出時,調(diào)用Getbuf(emq)過程從空緩沖隊列emq的隊首取得一個空緩沖區(qū),作為收容輸出工作緩沖區(qū)hout。當其中裝滿輸出數(shù)據(jù)后,又調(diào)用Putbuf(outq,hout)過程,將該緩沖區(qū)掛在outq末尾。

(4)提取輸出。由輸出進程調(diào)用Getbuf(outq)過程,從輸出隊列的隊首取得一裝滿輸出數(shù)據(jù)的緩沖區(qū),作為提取輸出工作緩沖區(qū)sout。在數(shù)據(jù)提取完后,再調(diào)用Putbuf(emq,sout)過程,將該緩沖區(qū)掛在空緩沖隊列末尾。

6.8磁盤存儲器的管理

6.8.1磁盤性能簡述

1.數(shù)據(jù)的組織和格式物理盤片、存儲面(surface)、磁道(track)、扇區(qū)(sectors)又叫盤塊(或數(shù)據(jù)塊)一個10GB容量的磁盤,有8個雙面可存儲盤片,共16個存儲面(盤面),每面有16383個磁道(也稱柱面),63個扇區(qū)。

為了在磁盤上存儲數(shù)據(jù),必須先將磁盤低級格式化。每條磁道含有30個固定大小的扇區(qū),每個扇區(qū)容量為600個字節(jié),其中512個字節(jié)存放數(shù)據(jù),其余的用于存放控制信息。每個扇區(qū)包括兩個字段:

(1)標識符字段,其中一個字節(jié)的SYNCH具有特定的位圖像,作為該字段的定界符,利用磁道號、磁頭號及扇區(qū)號三者來標識一個扇區(qū);CRC字段用于段校驗。

(2)數(shù)據(jù)字段,其中可存放512個字節(jié)的數(shù)據(jù)。

2.磁盤的類型

硬盤和軟盤、單片盤和多片盤、固定頭磁盤和活動頭(移動頭)磁盤等。

1)固定頭磁盤這種磁盤在每條磁道上都有一讀/寫磁頭,所有的磁頭都被裝在一剛性磁臂中。

通過這些磁頭可進行并行讀/寫,主要用于大容量磁盤上。

2)移動頭磁盤

每一個盤面僅配有一個磁頭,也被裝入磁臂中。

磁頭必須能移動以進行尋道,僅能以串行方式讀/寫,I/O速度較慢,廣泛應(yīng)用于中小型磁盤設(shè)備中。

在微型機上配置的溫盤和軟盤都采用移動磁頭結(jié)構(gòu)。

3.磁盤訪問時間

1)尋道時間Ts指把磁臂(磁頭)移動到指定磁道上所經(jīng)歷的時間。是啟動磁臂的時間s與磁頭移動n條磁道花費時間之和,即

Ts=m×n+s

其中,m是一常數(shù),與磁盤驅(qū)動器的速度有關(guān)。對于一般磁盤,m=0.2;對于高速磁盤,m≤0.1。

2)旋轉(zhuǎn)延遲時間Tr指定扇區(qū)移動到磁頭下面所經(jīng)歷的時間。

不同的磁盤類型旋轉(zhuǎn)速度至少相差一個數(shù)量級,如軟盤為300r/min,硬盤一般為7200~15000r/min,甚至更高。

磁盤旋轉(zhuǎn)延遲時間:如旋轉(zhuǎn)速度為15000r/min,每轉(zhuǎn)需時4ms,則平均旋轉(zhuǎn)延遲時間Tr為2ms。

3)傳輸時間Tt

把數(shù)據(jù)從磁盤讀出或向磁盤寫入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論