




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Unit 9操作系統(tǒng)原理操作系統(tǒng)原理馮耀霖馮耀霖設(shè)備,也稱外部設(shè)備或設(shè)備,也稱外部設(shè)備或I/O設(shè)備,是指那些由于原理、設(shè)備,是指那些由于原理、結(jié)構(gòu)、數(shù)據(jù)格式等原因不能與系統(tǒng)總線直接連接的裝置。結(jié)構(gòu)、數(shù)據(jù)格式等原因不能與系統(tǒng)總線直接連接的裝置。它們也是計(jì)算機(jī)系統(tǒng)不可或缺的重要組成部分,是計(jì)算機(jī)它們也是計(jì)算機(jī)系統(tǒng)不可或缺的重要組成部分,是計(jì)算機(jī)主機(jī)(主機(jī)(CPU+內(nèi)存)與外部環(huán)境進(jìn)行交互和溝通的通道。內(nèi)存)與外部環(huán)境進(jìn)行交互和溝通的通道。顯然,顯然,I/O設(shè)備的存在才使得計(jì)算機(jī)的存在有了意義,設(shè)備的存在才使得計(jì)算機(jī)的存在有了意義,就像一個(gè)人,如果沒(méi)有與人交際和溝通的能力,則這個(gè)人就像一個(gè)人,如果沒(méi)
2、有與人交際和溝通的能力,則這個(gè)人通常被認(rèn)為是癡呆或白癡,即使他實(shí)際上是一個(gè)天才。同通常被認(rèn)為是癡呆或白癡,即使他實(shí)際上是一個(gè)天才。同樣,一臺(tái)沒(méi)有樣,一臺(tái)沒(méi)有I/O設(shè)備的計(jì)算機(jī),不管其計(jì)算功能多么強(qiáng)設(shè)備的計(jì)算機(jī),不管其計(jì)算功能多么強(qiáng)大,也是廢鐵一堆。所以,設(shè)備管理也是操作系統(tǒng)的重要大,也是廢鐵一堆。所以,設(shè)備管理也是操作系統(tǒng)的重要組成部分,是操作系統(tǒng)的基本功能之一,而且由于組成部分,是操作系統(tǒng)的基本功能之一,而且由于I/O設(shè)設(shè)備的種類繁多,各自的特性和使用方式有很大差異,因此,備的種類繁多,各自的特性和使用方式有很大差異,因此,設(shè)備管理軟件可以說(shuō)是操作系統(tǒng)中最繁雜的部分。設(shè)備管理軟件可以說(shuō)是操作
3、系統(tǒng)中最繁雜的部分。 內(nèi)容內(nèi)容設(shè)備設(shè)備設(shè)備管理概述設(shè)備管理概述設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序獨(dú)立于設(shè)備的獨(dú)立于設(shè)備的I/O軟件軟件用戶級(jí)用戶級(jí)I/O軟件軟件1 設(shè)備分類設(shè)備分類設(shè)備的差異性設(shè)備的差異性設(shè)備控制器設(shè)備控制器I/O控制方式控制方式1.1 可以說(shuō),外部設(shè)備(簡(jiǎn)稱外設(shè)或設(shè)備)是計(jì)算機(jī)系統(tǒng)可以說(shuō),外部設(shè)備(簡(jiǎn)稱外設(shè)或設(shè)備)是計(jì)算機(jī)系統(tǒng)中最多樣、差異最大的組成部分,不同的計(jì)算機(jī)系統(tǒng)所配中最多樣、差異最大的組成部分,不同的計(jì)算機(jī)系統(tǒng)所配置的外設(shè)也不同。對(duì)外設(shè)的分類方法有許多種,主要有以置的外設(shè)也不同。對(duì)外設(shè)的分類方法有許多種,主要有以下三種:下三種:基本分類法基本分類法功能分類法功能分類法管理分類
4、法管理分類法1. 基本分類法基本分類法它把外設(shè)大致分為三類:它把外設(shè)大致分為三類:(1) 外存外存:磁盤、光盤、:磁盤、光盤、U盤。盤。(2) 人機(jī)通信設(shè)備人機(jī)通信設(shè)備:輸入設(shè)備有:鍵盤、鼠標(biāo)、話筒、光筆、掃描儀、數(shù)輸入設(shè)備有:鍵盤、鼠標(biāo)、話筒、光筆、掃描儀、數(shù)碼相機(jī)等;碼相機(jī)等;輸出設(shè)備有:顯示器、打印機(jī)、繪圖儀、揚(yáng)聲器等。輸出設(shè)備有:顯示器、打印機(jī)、繪圖儀、揚(yáng)聲器等。(3) 機(jī)機(jī)通信設(shè)備機(jī)機(jī)通信設(shè)備:輸入設(shè)備有:傳感器、儀器儀表等;輸入設(shè)備有:傳感器、儀器儀表等;輸出設(shè)備有:執(zhí)行器、儀器儀表等;輸出設(shè)備有:執(zhí)行器、儀器儀表等;輸入輸出設(shè)備有:網(wǎng)卡、輸入輸出設(shè)備有:網(wǎng)卡、Modem等。等。2
5、. 功能分類法功能分類法如果從外設(shè)的功能上來(lái)分,只有兩種:存儲(chǔ)設(shè)備和通如果從外設(shè)的功能上來(lái)分,只有兩種:存儲(chǔ)設(shè)備和通信設(shè)備。信設(shè)備。(1)存儲(chǔ)設(shè)備存儲(chǔ)設(shè)備即外存,外存的共同特點(diǎn)是都對(duì)存儲(chǔ)即外存,外存的共同特點(diǎn)是都對(duì)存儲(chǔ)區(qū)進(jìn)行分塊管理,也就是說(shuō),這些設(shè)備在邏輯上可以看成區(qū)進(jìn)行分塊管理,也就是說(shuō),這些設(shè)備在邏輯上可以看成是有若干存儲(chǔ)塊組成的存儲(chǔ)空間,所以傳統(tǒng)上也被稱作是有若干存儲(chǔ)塊組成的存儲(chǔ)空間,所以傳統(tǒng)上也被稱作塊塊設(shè)備設(shè)備。另外,為了進(jìn)行大塊數(shù)據(jù)的傳輸,通常需要在內(nèi)存。另外,為了進(jìn)行大塊數(shù)據(jù)的傳輸,通常需要在內(nèi)存為它們創(chuàng)建比較大的數(shù)據(jù)緩沖區(qū)。為它們創(chuàng)建比較大的數(shù)據(jù)緩沖區(qū)。(2)通信設(shè)備通信設(shè)備
6、除了外存之外的那些外設(shè)通常都是通除了外存之外的那些外設(shè)通常都是通信設(shè)備,它們是計(jì)算機(jī)與外部環(huán)境進(jìn)行交互的主要手段。信設(shè)備,它們是計(jì)算機(jī)與外部環(huán)境進(jìn)行交互的主要手段。這些設(shè)備的數(shù)據(jù)量往往不是很大,也不是很集中,因此這這些設(shè)備的數(shù)據(jù)量往往不是很大,也不是很集中,因此這類設(shè)備在內(nèi)存中不需要較大的緩沖區(qū),或者就根本沒(méi)有緩類設(shè)備在內(nèi)存中不需要較大的緩沖區(qū),或者就根本沒(méi)有緩沖區(qū),例如鍵盤、鼠標(biāo)等。這些設(shè)備傳統(tǒng)上也被稱作沖區(qū),例如鍵盤、鼠標(biāo)等。這些設(shè)備傳統(tǒng)上也被稱作字符字符設(shè)備設(shè)備。 3. 管理分類法管理分類法按設(shè)備的管理性質(zhì)可把外設(shè)分為兩類:按設(shè)備的管理性質(zhì)可把外設(shè)分為兩類:(1)系統(tǒng)設(shè)備是指操作系統(tǒng)生成
7、時(shí)就納入系統(tǒng)管理系統(tǒng)設(shè)備是指操作系統(tǒng)生成時(shí)就納入系統(tǒng)管理范圍的各種范圍的各種標(biāo)準(zhǔn)設(shè)備標(biāo)準(zhǔn)設(shè)備(基本配置),操作系統(tǒng)提供有相應(yīng)(基本配置),操作系統(tǒng)提供有相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和設(shè)備驅(qū)動(dòng)程序等。如鍵盤、鼠標(biāo)、顯示器、的數(shù)據(jù)結(jié)構(gòu)和設(shè)備驅(qū)動(dòng)程序等。如鍵盤、鼠標(biāo)、顯示器、磁盤驅(qū)動(dòng)器等。磁盤驅(qū)動(dòng)器等。(2)用戶設(shè)備是指系統(tǒng)設(shè)備之外的用戶設(shè)備是指系統(tǒng)設(shè)備之外的非標(biāo)準(zhǔn)設(shè)備非標(biāo)準(zhǔn)設(shè)備,在,在安裝操作系統(tǒng)時(shí)沒(méi)有配置,而由用戶根據(jù)需要自己安裝配安裝操作系統(tǒng)時(shí)沒(méi)有配置,而由用戶根據(jù)需要自己安裝配置。如掃描儀、繪圖儀等。置。如掃描儀、繪圖儀等。 1.2 設(shè)備的差異性設(shè)備的差異性外部設(shè)備由于種類不同,制造商不同,技術(shù)標(biāo)準(zhǔn)不同,
8、外部設(shè)備由于種類不同,制造商不同,技術(shù)標(biāo)準(zhǔn)不同,其特性可以有巨大的不同。而這種不同越是明顯,對(duì)操作其特性可以有巨大的不同。而這種不同越是明顯,對(duì)操作系統(tǒng)的設(shè)計(jì)的挑戰(zhàn)就越大。因?yàn)槠帘芜@些巨大的不同,使系統(tǒng)的設(shè)計(jì)的挑戰(zhàn)就越大。因?yàn)槠帘芜@些巨大的不同,使得不同的設(shè)備相互共存并不是一件容易的事情。得不同的設(shè)備相互共存并不是一件容易的事情。其中最為明顯的一種差異是數(shù)據(jù)傳輸?shù)乃俣?,它涵蓋其中最為明顯的一種差異是數(shù)據(jù)傳輸?shù)乃俣?,它涵蓋的范圍從每秒十個(gè)字節(jié)到幾兆個(gè)字節(jié)。表的范圍從每秒十個(gè)字節(jié)到幾兆個(gè)字節(jié)。表9-1給出的是較給出的是較為常見(jiàn)的一些設(shè)備的數(shù)據(jù)傳輸率。為常見(jiàn)的一些設(shè)備的數(shù)據(jù)傳輸率。輸入輸出設(shè)備輸入輸
9、出設(shè)備數(shù)據(jù)傳輸速率數(shù)據(jù)傳輸速率鍵盤鍵盤10B鼠標(biāo)鼠標(biāo)100B56KModem7KB雙向雙向ISDN線路線路16KB激光打印機(jī)激光打印機(jī)100KB掃描儀掃描儀400KB以太網(wǎng)以太網(wǎng)1.25MBUSB1.5MBIDE磁盤磁盤5MB40X CD-ROM6MB表表9-1 外設(shè)的數(shù)據(jù)傳輸率外設(shè)的數(shù)據(jù)傳輸率輸入輸出設(shè)備輸入輸出設(shè)備數(shù)據(jù)傳輸速率數(shù)據(jù)傳輸速率快速以太網(wǎng)快速以太網(wǎng)12.5MBISA總線總線16.7MBEIDE磁盤磁盤16.7MBXGA監(jiān)視器監(jiān)視器60MBSONET OC-1278MBSCSI Ultra磁盤磁盤80MB千兆級(jí)以太網(wǎng)千兆級(jí)以太網(wǎng)125MBUltrium磁帶磁帶320MBPCI總線總
10、線528MBSun千兆平面千兆平面XB backplane20GB1.3 設(shè)備控制器設(shè)備控制器從設(shè)備的物理結(jié)構(gòu)上來(lái)看,外設(shè)可能是電器的或機(jī)械從設(shè)備的物理結(jié)構(gòu)上來(lái)看,外設(shè)可能是電器的或機(jī)械的,甚至是機(jī)、電、光多種技術(shù)結(jié)合的。但不管其主體是的,甚至是機(jī)、電、光多種技術(shù)結(jié)合的。但不管其主體是哪種構(gòu)成,只要它要與電子計(jì)算機(jī)相連接,那它就必須有哪種構(gòu)成,只要它要與電子計(jì)算機(jī)相連接,那它就必須有電子器件部分。這也就是說(shuō),計(jì)算機(jī)的外設(shè)必須由兩部分電子器件部分。這也就是說(shuō),計(jì)算機(jī)的外設(shè)必須由兩部分組成:一是外設(shè)的執(zhí)行部分(電氣的、機(jī)械或機(jī)、電、光組成:一是外設(shè)的執(zhí)行部分(電氣的、機(jī)械或機(jī)、電、光多種技術(shù)結(jié)合的
11、),也稱設(shè)備主體;二是外設(shè)與系統(tǒng)的接多種技術(shù)結(jié)合的),也稱設(shè)備主體;二是外設(shè)與系統(tǒng)的接口部分,而且這部分一定是電子部分,因?yàn)橛?jì)算機(jī)系統(tǒng)必口部分,而且這部分一定是電子部分,因?yàn)橛?jì)算機(jī)系統(tǒng)必須通過(guò)這些接口來(lái)對(duì)外設(shè)進(jìn)行控制和數(shù)據(jù)傳輸。須通過(guò)這些接口來(lái)對(duì)外設(shè)進(jìn)行控制和數(shù)據(jù)傳輸。設(shè)備控制器(也稱設(shè)備控制器(也稱適配器適配器)是外設(shè)與總線之間的一組)是外設(shè)與總線之間的一組電子器件。例如,串行口控制器就是一種簡(jiǎn)單的設(shè)備控制電子器件。例如,串行口控制器就是一種簡(jiǎn)單的設(shè)備控制器,它是計(jì)算機(jī)上用來(lái)控制串行信號(hào)的一塊芯片或一個(gè)芯器,它是計(jì)算機(jī)上用來(lái)控制串行信號(hào)的一塊芯片或一個(gè)芯片組。再如貼在磁盤側(cè)面的電子線路板也是
12、一種設(shè)備控制片組。再如貼在磁盤側(cè)面的電子線路板也是一種設(shè)備控制 器器磁盤控制器,磁盤控制器,CPU就是通過(guò)這個(gè)控制器來(lái)對(duì)磁盤進(jìn)就是通過(guò)這個(gè)控制器來(lái)對(duì)磁盤進(jìn)行各種操作的。行各種操作的。為使處理器可以像訪問(wèn)內(nèi)存那樣來(lái)訪問(wèn)外設(shè),計(jì)算機(jī)為使處理器可以像訪問(wèn)內(nèi)存那樣來(lái)訪問(wèn)外設(shè),計(jì)算機(jī)系統(tǒng)必須提供一些互不沖突、能按地址訪問(wèn)、并能以數(shù)字系統(tǒng)必須提供一些互不沖突、能按地址訪問(wèn)、并能以數(shù)字信號(hào)進(jìn)行數(shù)據(jù)傳送的設(shè)備寄存器。通常每個(gè)設(shè)備都有三類信號(hào)進(jìn)行數(shù)據(jù)傳送的設(shè)備寄存器。通常每個(gè)設(shè)備都有三類設(shè)備寄存器:狀態(tài)寄存器、控制寄存器、數(shù)據(jù)寄存器。這設(shè)備寄存器:狀態(tài)寄存器、控制寄存器、數(shù)據(jù)寄存器。這些寄存器都有自己的專有地址
13、,稱做些寄存器都有自己的專有地址,稱做端口端口(port)。這些)。這些寄存器的作用分別為:寄存器的作用分別為:狀態(tài)寄存器狀態(tài)寄存器用來(lái)由控制器向處理器提供設(shè)備的當(dāng)前用來(lái)由控制器向處理器提供設(shè)備的當(dāng)前工作狀態(tài)。例如,設(shè)備的當(dāng)前操作是否執(zhí)行完畢,數(shù)據(jù)是工作狀態(tài)。例如,設(shè)備的當(dāng)前操作是否執(zhí)行完畢,數(shù)據(jù)是否可以被讀出或?qū)懭?,以及各種錯(cuò)誤提示等。這些信息通否可以被讀出或?qū)懭?,以及各種錯(cuò)誤提示等。這些信息通常都用字位(常都用字位(bit)來(lái)表示。)來(lái)表示。 控制寄存器控制寄存器主要用來(lái)由處理器向控制器傳送操作命主要用來(lái)由處理器向控制器傳送操作命令。還用來(lái)管理外設(shè)工作模式,即在設(shè)備初始化時(shí)或運(yùn)行令。還用來(lái)
14、管理外設(shè)工作模式,即在設(shè)備初始化時(shí)或運(yùn)行時(shí),處理器可以通過(guò)向控制寄存器寫入命令來(lái)改變?cè)O(shè)備工時(shí),處理器可以通過(guò)向控制寄存器寫入命令來(lái)改變?cè)O(shè)備工作模式或設(shè)備狀態(tài)。例如,在串口寄存器中專有一位信息作模式或設(shè)備狀態(tài)。例如,在串口寄存器中專有一位信息是用來(lái)選擇通信方式的(全工或半工),還有一位信息是是用來(lái)選擇通信方式的(全工或半工),還有一位信息是用來(lái)設(shè)置數(shù)據(jù)字長(zhǎng)的,以及其他用來(lái)設(shè)置通信波特率等的用來(lái)設(shè)置數(shù)據(jù)字長(zhǎng)的,以及其他用來(lái)設(shè)置通信波特率等的各個(gè)控制位。各個(gè)控制位。數(shù)據(jù)寄存器數(shù)據(jù)寄存器(有些設(shè)備控制器又進(jìn)一步設(shè)置為輸入(有些設(shè)備控制器又進(jìn)一步設(shè)置為輸入數(shù)據(jù)寄存器和輸出數(shù)據(jù)寄存器)則是輸入輸出數(shù)據(jù)的暫
15、存數(shù)據(jù)寄存器和輸出數(shù)據(jù)寄存器)則是輸入輸出數(shù)據(jù)的暫存寄存器,用來(lái)實(shí)現(xiàn)設(shè)備與處理器之間的數(shù)據(jù)交換。寄存器,用來(lái)實(shí)現(xiàn)設(shè)備與處理器之間的數(shù)據(jù)交換。除了設(shè)備寄存器外,有些設(shè)備控制器還設(shè)有除了設(shè)備寄存器外,有些設(shè)備控制器還設(shè)有I/O數(shù)據(jù)數(shù)據(jù)緩沖區(qū)緩沖區(qū),以提高與,以提高與CPU交互數(shù)據(jù)的效率。塊設(shè)備控制器都交互數(shù)據(jù)的效率。塊設(shè)備控制器都設(shè)有設(shè)有I/O數(shù)據(jù)緩沖區(qū),而有些字符設(shè)備控制器也設(shè)有數(shù)據(jù)緩沖區(qū),而有些字符設(shè)備控制器也設(shè)有I/O數(shù)據(jù)緩沖區(qū),如視頻控制器。數(shù)據(jù)緩沖區(qū),如視頻控制器。所有設(shè)備控制器的寄存器和所有設(shè)備控制器的寄存器和I/O數(shù)據(jù)緩沖區(qū)構(gòu)成的地?cái)?shù)據(jù)緩沖區(qū)構(gòu)成的地址空間稱作址空間稱作I/O地址空間
16、地址空間(I/O空間),對(duì)于空間),對(duì)于I/O地址空地址空間的處理有三種方式:間的處理有三種方式: (1)獨(dú)立編址的獨(dú)立編址的I/O空間空間在這種方式下,在這種方式下,I/O空間與內(nèi)存是完全脫離的。每個(gè)空間與內(nèi)存是完全脫離的。每個(gè)設(shè)備寄存器被賦予一個(gè)設(shè)備寄存器被賦予一個(gè)I/O端口,這個(gè)端口就是一個(gè)端口,這個(gè)端口就是一個(gè)9位位或或16位的一個(gè)整數(shù),它與內(nèi)存地址沒(méi)有任何關(guān)系。而正位的一個(gè)整數(shù),它與內(nèi)存地址沒(méi)有任何關(guān)系。而正是由于端口與內(nèi)存地址沒(méi)有任何關(guān)系,或者說(shuō)端口不是內(nèi)是由于端口與內(nèi)存地址沒(méi)有任何關(guān)系,或者說(shuō)端口不是內(nèi)存地址,操作系統(tǒng)必須使用專門的輸入輸出特殊指令來(lái)進(jìn)存地址,操作系統(tǒng)必須使用專門
17、的輸入輸出特殊指令來(lái)進(jìn)行數(shù)據(jù)的讀寫。例如,許多指令集使用行數(shù)據(jù)的讀寫。例如,許多指令集使用IN REG, PORT指令用來(lái)從設(shè)備讀數(shù)據(jù),而指令指令用來(lái)從設(shè)備讀數(shù)據(jù),而指令OUT PORT, REG則用來(lái)則用來(lái)將數(shù)據(jù)寫入設(shè)備。將數(shù)據(jù)寫入設(shè)備。這種方式的優(yōu)點(diǎn)是這種方式的優(yōu)點(diǎn)是I/O空間與內(nèi)存分離,輸入輸出操空間與內(nèi)存分離,輸入輸出操作不會(huì)影響或干擾內(nèi)存操作,尤其是輸入輸出軟件的可靠作不會(huì)影響或干擾內(nèi)存操作,尤其是輸入輸出軟件的可靠性通常不如內(nèi)存管理軟件,這種分離就顯得更有價(jià)值。但性通常不如內(nèi)存管理軟件,這種分離就顯得更有價(jià)值。但俗話說(shuō),成也蕭何,敗也蕭何。這個(gè)優(yōu)點(diǎn)恰恰也是其缺點(diǎn)。俗話說(shuō),成也蕭何,
18、敗也蕭何。這個(gè)優(yōu)點(diǎn)恰恰也是其缺點(diǎn)。由于由于I/O空間與內(nèi)存分離,輸入輸出指令與內(nèi)存訪問(wèn)指令空間與內(nèi)存分離,輸入輸出指令與內(nèi)存訪問(wèn)指令自然也不相同,輸入輸出所使用的自然也不相同,輸入輸出所使用的IN/OUT等指令都是低等指令都是低級(jí)的匯編指令。由于高級(jí)編程語(yǔ)言不支持這種低級(jí)指令,級(jí)的匯編指令。由于高級(jí)編程語(yǔ)言不支持這種低級(jí)指令,從而形成高級(jí)語(yǔ)言屏蔽的一個(gè)漏洞。程序員如果想要進(jìn)行從而形成高級(jí)語(yǔ)言屏蔽的一個(gè)漏洞。程序員如果想要進(jìn)行I/O,則必須使用低級(jí)語(yǔ)言,這將增大程序設(shè)計(jì)的難度和,則必須使用低級(jí)語(yǔ)言,這將增大程序設(shè)計(jì)的難度和可靠性??煽啃?。 (2)內(nèi)存映射內(nèi)存映射I/O空間空間顧名思義,就是將顧名
19、思義,就是將I/O空間映射到內(nèi)存里面,與內(nèi)存空間映射到內(nèi)存里面,與內(nèi)存統(tǒng)一編址。具體來(lái)說(shuō),就是系統(tǒng)在內(nèi)存空間中劃出一部分統(tǒng)一編址。具體來(lái)說(shuō),就是系統(tǒng)在內(nèi)存空間中劃出一部分來(lái)作為來(lái)作為I/O空間,即所有設(shè)備寄存器的端口和空間,即所有設(shè)備寄存器的端口和I/O數(shù)據(jù)緩數(shù)據(jù)緩沖區(qū)都是正規(guī)的內(nèi)存地址空間的一部分,沖區(qū)都是正規(guī)的內(nèi)存地址空間的一部分, CPU對(duì)這些空對(duì)這些空間的讀寫與對(duì)普通內(nèi)存的讀寫使用同樣的指令,但引起的間的讀寫與對(duì)普通內(nèi)存的讀寫使用同樣的指令,但引起的是與外部設(shè)備間的數(shù)據(jù)傳送。是與外部設(shè)備間的數(shù)據(jù)傳送。RISC(精簡(jiǎn)指令集)類(精簡(jiǎn)指令集)類CPU計(jì)算機(jī)都使用這種方式。計(jì)算機(jī)都使用這種方
20、式。這種方式雖然具有這種方式雖然具有I/O與內(nèi)存訪問(wèn)統(tǒng)一的優(yōu)點(diǎn),但是與內(nèi)存訪問(wèn)統(tǒng)一的優(yōu)點(diǎn),但是也存在一些問(wèn)題。例如總線競(jìng)爭(zhēng),在單總線系統(tǒng)里,內(nèi)存也存在一些問(wèn)題。例如總線競(jìng)爭(zhēng),在單總線系統(tǒng)里,內(nèi)存和外設(shè)都需要對(duì)總線上的數(shù)據(jù)進(jìn)行監(jiān)聽(tīng),以確認(rèn)命令是否和外設(shè)都需要對(duì)總線上的數(shù)據(jù)進(jìn)行監(jiān)聽(tīng),以確認(rèn)命令是否針對(duì)自己。這樣將產(chǎn)生總線競(jìng)爭(zhēng)而降低系統(tǒng)效率。針對(duì)自己。這樣將產(chǎn)生總線競(jìng)爭(zhēng)而降低系統(tǒng)效率。 (3)混合混合I/O空間空間這是上述兩種方式的組合:這是上述兩種方式的組合:I/O數(shù)據(jù)緩沖區(qū)為內(nèi)存映數(shù)據(jù)緩沖區(qū)為內(nèi)存映射,而設(shè)備寄存器則獨(dú)立于內(nèi)存。例如采用射,而設(shè)備寄存器則獨(dú)立于內(nèi)存。例如采用Intel奔騰處奔騰處
21、理器的計(jì)算機(jī)系統(tǒng),將理器的計(jì)算機(jī)系統(tǒng),將640K到到1M的主存地址留給的主存地址留給I/O數(shù)數(shù)據(jù)緩沖區(qū),而據(jù)緩沖區(qū),而0到到64K的地址留給的地址留給I/O端口。端口。設(shè)備控制器與設(shè)備控制器與CPU通過(guò)總線來(lái)連接??偩€是一種嚴(yán)格通過(guò)總線來(lái)連接。總線是一種嚴(yán)格定義的描述了線上傳輸數(shù)據(jù)的協(xié)議,凡是符合總線協(xié)議的定義的描述了線上傳輸數(shù)據(jù)的協(xié)議,凡是符合總線協(xié)議的各種設(shè)備都可以共同使用總線與各種設(shè)備都可以共同使用總線與CPU進(jìn)行數(shù)據(jù)通信。進(jìn)行數(shù)據(jù)通信。 CPU內(nèi)存內(nèi)存字符設(shè)備字符設(shè)備控制器控制器字符設(shè)備字符設(shè)備控制器控制器DMA控制器控制器總線總線圖圖9-1 單總線型單總線型I/O系統(tǒng)結(jié)構(gòu)系統(tǒng)結(jié)構(gòu)1.
22、4 I/O控制方式控制方式I/O控制方式,即為實(shí)現(xiàn)數(shù)據(jù)的輸入輸出,控制方式,即為實(shí)現(xiàn)數(shù)據(jù)的輸入輸出,CPU與外與外設(shè)之間的交互方式。有三種基本的設(shè)之間的交互方式。有三種基本的I/O控制方式:控制方式:輪詢(輪詢(polling)方式)方式中斷驅(qū)動(dòng)方式中斷驅(qū)動(dòng)方式DMA方式方式采用何種采用何種I/O控制方式將直接影響設(shè)備管理的實(shí)施方控制方式將直接影響設(shè)備管理的實(shí)施方法及效率。法及效率。1. 輪詢方式輪詢方式 也稱程序控制方式。它要求在程序中的也稱程序控制方式。它要求在程序中的I/O指令后緊指令后緊接著安排循環(huán)查詢指令,即在接著安排循環(huán)查詢指令,即在CPU啟動(dòng)了設(shè)備控制器進(jìn)啟動(dòng)了設(shè)備控制器進(jìn)行數(shù)據(jù)
23、的輸入輸出后便以循環(huán)查詢?cè)O(shè)備狀態(tài)的方式來(lái)等待行數(shù)據(jù)的輸入輸出后便以循環(huán)查詢?cè)O(shè)備狀態(tài)的方式來(lái)等待I/O的完成。的完成。這種方式的特點(diǎn)是:這種方式的特點(diǎn)是:CPU處于主動(dòng)地位,涉入處于主動(dòng)地位,涉入I/O過(guò)過(guò)程的程度很深,而外設(shè)則處于被動(dòng)地位,是一種同步工作程的程度很深,而外設(shè)則處于被動(dòng)地位,是一種同步工作方式。方式。2. 中斷驅(qū)動(dòng)方式中斷驅(qū)動(dòng)方式使用輪詢方式時(shí),使用輪詢方式時(shí),CPU需要讀取設(shè)備狀態(tài)寄存器以檢需要讀取設(shè)備狀態(tài)寄存器以檢測(cè)設(shè)備的當(dāng)前狀態(tài),如果設(shè)備還未完成此次的測(cè)設(shè)備的當(dāng)前狀態(tài),如果設(shè)備還未完成此次的I/O,則需,則需要要CPU不斷地查詢,由于不斷地查詢,由于CPU與外設(shè)的速度差距巨
24、大,與外設(shè)的速度差距巨大,因此在因此在I/O過(guò)程中,過(guò)程中,CPU絕大部分時(shí)間都處于繁忙等待狀絕大部分時(shí)間都處于繁忙等待狀態(tài),態(tài),CPU的效率十分低下。的效率十分低下。一種更為有效的方式是讓設(shè)備處于某種主動(dòng)地位,而一種更為有效的方式是讓設(shè)備處于某種主動(dòng)地位,而將將CPU從忙等待中解脫出來(lái)。在啟動(dòng)了某個(gè)外設(shè)后,立即從忙等待中解脫出來(lái)。在啟動(dòng)了某個(gè)外設(shè)后,立即阻塞現(xiàn)行進(jìn)程,阻塞現(xiàn)行進(jìn)程,CPU就可被調(diào)度轉(zhuǎn)去執(zhí)行其他進(jìn)程而不是就可被調(diào)度轉(zhuǎn)去執(zhí)行其他進(jìn)程而不是在原地踏步等待。當(dāng)某個(gè)數(shù)據(jù)在原地踏步等待。當(dāng)某個(gè)數(shù)據(jù)I/O任務(wù)完成后,由設(shè)備控任務(wù)完成后,由設(shè)備控制器向制器向CPU發(fā)出一個(gè)發(fā)出一個(gè)I/O中斷,
25、驅(qū)動(dòng)中斷,驅(qū)動(dòng)CPU中止現(xiàn)行進(jìn)程的中止現(xiàn)行進(jìn)程的執(zhí)行而轉(zhuǎn)去執(zhí)行相應(yīng)的中斷處理程序,并喚醒等待該執(zhí)行而轉(zhuǎn)去執(zhí)行相應(yīng)的中斷處理程序,并喚醒等待該I/O的進(jìn)程。的進(jìn)程。顯然,這種顯然,這種I/O控制方式可以大大提高控制方式可以大大提高CPU的效率,的效率,因此是設(shè)備與因此是設(shè)備與CPU進(jìn)行交互的基本手段。進(jìn)行交互的基本手段。3. DMA方式方式雖然中斷驅(qū)動(dòng)方式避免了輪詢方式的忙等待現(xiàn)象,從雖然中斷驅(qū)動(dòng)方式避免了輪詢方式的忙等待現(xiàn)象,從而大大提高了而大大提高了CPU的效率,但這主要是對(duì)慢速的字符設(shè)的效率,但這主要是對(duì)慢速的字符設(shè)備而言的。而對(duì)于一次需要傳輸大量數(shù)據(jù)的高速塊設(shè)備來(lái)備而言的。而對(duì)于一次需要
26、傳輸大量數(shù)據(jù)的高速塊設(shè)備來(lái)說(shuō),仍然不能令人滿意。因?yàn)樵O(shè)備的數(shù)據(jù)寄存器的容量是說(shuō),仍然不能令人滿意。因?yàn)樵O(shè)備的數(shù)據(jù)寄存器的容量是有限的,故一個(gè)有限的,故一個(gè)I/O任務(wù)中待傳輸?shù)臄?shù)據(jù)需要多次送往數(shù)任務(wù)中待傳輸?shù)臄?shù)據(jù)需要多次送往數(shù)據(jù)寄存器,而每當(dāng)設(shè)備傳送完一次數(shù)據(jù)寄存器中的數(shù)據(jù)時(shí),據(jù)寄存器,而每當(dāng)設(shè)備傳送完一次數(shù)據(jù)寄存器中的數(shù)據(jù)時(shí),就會(huì)觸發(fā)一次就會(huì)觸發(fā)一次I/O中斷,因此在塊設(shè)備的一次中斷,因此在塊設(shè)備的一次I/O任務(wù)的任務(wù)的完成過(guò)程中,完成過(guò)程中,CPU需要響應(yīng)和處理許多次需要響應(yīng)和處理許多次I/O中斷,而每中斷,而每一次一次I/O中斷的響應(yīng)和處理都需要付出不小的額外中斷的響應(yīng)和處理都需要付出不小
27、的額外CPU開(kāi)開(kāi)銷,銷,CPU的效率并未獲得太多改善。的效率并未獲得太多改善。人們發(fā)現(xiàn),在設(shè)備與主機(jī)交換大量數(shù)據(jù)時(shí),人們發(fā)現(xiàn),在設(shè)備與主機(jī)交換大量數(shù)據(jù)時(shí),CPU只是只是數(shù)據(jù)傳輸?shù)囊粋€(gè)中介,用功能強(qiáng)大的數(shù)據(jù)傳輸?shù)囊粋€(gè)中介,用功能強(qiáng)大的CPU長(zhǎng)時(shí)間去充當(dāng)長(zhǎng)時(shí)間去充當(dāng) 一個(gè)傳輸數(shù)據(jù)的中介角色顯然得不償失。于是就設(shè)計(jì)出一一個(gè)傳輸數(shù)據(jù)的中介角色顯然得不償失。于是就設(shè)計(jì)出一種專門負(fù)責(zé)執(zhí)行數(shù)據(jù)種專門負(fù)責(zé)執(zhí)行數(shù)據(jù)I/O事務(wù)的處理器事務(wù)的處理器I/O處理器處理器,它比它比CPU要簡(jiǎn)單得多,但也便宜很多,它只能執(zhí)行少量要簡(jiǎn)單得多,但也便宜很多,它只能執(zhí)行少量的指令,主要是數(shù)據(jù)的指令,主要是數(shù)據(jù)I/O指令。指令。I
28、/O處理器既可以構(gòu)建在處理器既可以構(gòu)建在設(shè)備控制器里面(這樣的控制器稱為設(shè)備控制器里面(這樣的控制器稱為DMA控制器控制器),也),也可以作為獨(dú)立的實(shí)體掛在計(jì)算機(jī)主板上。最簡(jiǎn)單的可以作為獨(dú)立的實(shí)體掛在計(jì)算機(jī)主板上。最簡(jiǎn)單的I/O處處理器在一個(gè)時(shí)間只能處理一個(gè)理器在一個(gè)時(shí)間只能處理一個(gè)I/O,即不能并發(fā),而復(fù)雜,即不能并發(fā),而復(fù)雜的的I/O處理器可以同時(shí)處理多個(gè)處理器可以同時(shí)處理多個(gè)I/O,即它能夠提供多個(gè),即它能夠提供多個(gè)I/O通道,每個(gè)通道可以對(duì)應(yīng)一個(gè)通道,每個(gè)通道可以對(duì)應(yīng)一個(gè)I/O設(shè)備。有了設(shè)備。有了I/O處處理器,就可以將理器,就可以將CPU從繁雜的從繁雜的I/O事務(wù)中解脫出來(lái)。事務(wù)中解
29、脫出來(lái)。DMA(Direct Memory Access,直接內(nèi)存訪問(wèn)直接內(nèi)存訪問(wèn))方式就是使用方式就是使用I/O處理器的處理器的I/O控制方式,主要是針對(duì)塊控制方式,主要是針對(duì)塊設(shè)備的。設(shè)備的。DMA方式的目的當(dāng)然是降低方式的目的當(dāng)然是降低CPU響應(yīng)中斷的頻率,使響應(yīng)中斷的頻率,使得一個(gè)傳輸大量數(shù)據(jù)的得一個(gè)傳輸大量數(shù)據(jù)的I/O任務(wù)中需要響應(yīng)許多次中斷變?nèi)蝿?wù)中需要響應(yīng)許多次中斷變?yōu)橹豁憫?yīng)一次中斷。為只響應(yīng)一次中斷。DMA方式在設(shè)備和內(nèi)存之間建立了直方式在設(shè)備和內(nèi)存之間建立了直接數(shù)據(jù)通路,即設(shè)備和內(nèi)存之間可直接讀寫數(shù)據(jù),且數(shù)據(jù)接數(shù)據(jù)通路,即設(shè)備和內(nèi)存之間可直接讀寫數(shù)據(jù),且數(shù)據(jù)傳輸?shù)幕締挝皇菙?shù)據(jù)
30、塊。一個(gè)傳輸?shù)幕締挝皇菙?shù)據(jù)塊。一個(gè)I/O任務(wù)中的所有數(shù)據(jù)是任務(wù)中的所有數(shù)據(jù)是在一個(gè)在一個(gè)DMA控制器的控制下完成傳輸?shù)?,且在整個(gè)傳輸過(guò)控制器的控制下完成傳輸?shù)?,且在整個(gè)傳輸過(guò)程中無(wú)需程中無(wú)需CPU的直接干預(yù),直到該任務(wù)中的所有數(shù)據(jù)都傳的直接干預(yù),直到該任務(wù)中的所有數(shù)據(jù)都傳輸完后,輸完后,DMA控制器才向控制器才向CPU發(fā)出一個(gè)發(fā)出一個(gè)I/O中斷。中斷。DMA控制器在普通設(shè)備控制器的基礎(chǔ)上又增設(shè)了兩個(gè)控制器在普通設(shè)備控制器的基礎(chǔ)上又增設(shè)了兩個(gè)寄存器:內(nèi)存地址寄存器和數(shù)據(jù)計(jì)數(shù)寄存器。寄存器:內(nèi)存地址寄存器和數(shù)據(jù)計(jì)數(shù)寄存器。DMA方式的方式的I/O過(guò)程如下:過(guò)程如下:CPU對(duì)對(duì)DMA控制器進(jìn)行設(shè)置
31、,告訴其存放控制器進(jìn)行設(shè)置,告訴其存放I/O數(shù)數(shù)據(jù)的主存區(qū)地址和傳輸長(zhǎng)度(分別送入內(nèi)存地址寄存器和據(jù)的主存區(qū)地址和傳輸長(zhǎng)度(分別送入內(nèi)存地址寄存器和數(shù)據(jù)計(jì)數(shù)寄存器);數(shù)據(jù)計(jì)數(shù)寄存器);啟動(dòng)啟動(dòng)DMA過(guò)程,將系統(tǒng)總線的使用權(quán)暫時(shí)移交給過(guò)程,將系統(tǒng)總線的使用權(quán)暫時(shí)移交給DMA控制器;控制器; DMA控制器進(jìn)行數(shù)據(jù)傳輸,即接管對(duì)系統(tǒng)總線的控制器進(jìn)行數(shù)據(jù)傳輸,即接管對(duì)系統(tǒng)總線的使用權(quán)(總線周期竊用),啟動(dòng)設(shè)備進(jìn)行數(shù)據(jù)的使用權(quán)(總線周期竊用),啟動(dòng)設(shè)備進(jìn)行數(shù)據(jù)的I/O,并,并進(jìn)行數(shù)據(jù)傳送個(gè)數(shù)的計(jì)數(shù)以及內(nèi)存區(qū)地址的增量;進(jìn)行數(shù)據(jù)傳送個(gè)數(shù)的計(jì)數(shù)以及內(nèi)存區(qū)地址的增量;當(dāng)數(shù)據(jù)傳送完畢,當(dāng)數(shù)據(jù)傳送完畢,DMA控制
32、器向控制器向CPU發(fā)出一個(gè)發(fā)出一個(gè)I/O中斷,同時(shí)向中斷,同時(shí)向CPU移交總線使用權(quán)。移交總線使用權(quán)。CPU響應(yīng)中斷,處理善后事宜。響應(yīng)中斷,處理善后事宜。DMA方式的優(yōu)點(diǎn)是顯著減少了中斷次數(shù)和方式的優(yōu)點(diǎn)是顯著減少了中斷次數(shù)和CPU的的I/O操作次數(shù),從而大大減輕了操作次數(shù),從而大大減輕了CPU的的I/O負(fù)擔(dān),加快了負(fù)擔(dān),加快了I/O的速度,不僅有利于的速度,不僅有利于CPU效率的發(fā)揮,而且能滿足高效率的發(fā)揮,而且能滿足高速速I/O設(shè)備對(duì)成組數(shù)據(jù)的高速傳送要求。缺點(diǎn)自然是增加設(shè)備對(duì)成組數(shù)據(jù)的高速傳送要求。缺點(diǎn)自然是增加了成本和復(fù)雜性,而且由于了成本和復(fù)雜性,而且由于DMA控制器需要與控制器需要
33、與CPU競(jìng)爭(zhēng)競(jìng)爭(zhēng)系統(tǒng)總線,其效率的提高不如理論上的期望。系統(tǒng)總線,其效率的提高不如理論上的期望。2 設(shè)備管理的目標(biāo)和功能設(shè)備管理的目標(biāo)和功能 設(shè)備控制塊設(shè)備控制塊I/O軟件的分層結(jié)構(gòu)軟件的分層結(jié)構(gòu)2.1 設(shè)備管理的目標(biāo)和功能設(shè)備管理的目標(biāo)和功能 1. 設(shè)備管理的目標(biāo)設(shè)備管理的目標(biāo)設(shè)備管理是操作系統(tǒng)的重要組成部分,現(xiàn)代操作系統(tǒng)設(shè)備管理是操作系統(tǒng)的重要組成部分,現(xiàn)代操作系統(tǒng)的設(shè)備管理的基本目標(biāo)除了公平和有效之外,另一目標(biāo)是的設(shè)備管理的基本目標(biāo)除了公平和有效之外,另一目標(biāo)是把所有外設(shè)都抽象成文件,使得對(duì)物理特征各異的各種設(shè)把所有外設(shè)都抽象成文件,使得對(duì)物理特征各異的各種設(shè)備都可以以統(tǒng)一的文件方式進(jìn)行
34、操作。具體地說(shuō),它必須備都可以以統(tǒng)一的文件方式進(jìn)行操作。具體地說(shuō),它必須滿足下述設(shè)計(jì)要求:滿足下述設(shè)計(jì)要求:為用戶提供方便、統(tǒng)一的設(shè)備使用界面。將復(fù)雜的為用戶提供方便、統(tǒng)一的設(shè)備使用界面。將復(fù)雜的具體設(shè)備操作控制過(guò)程隱藏起來(lái),通過(guò)統(tǒng)一的文件操作界具體設(shè)備操作控制過(guò)程隱藏起來(lái),通過(guò)統(tǒng)一的文件操作界面進(jìn)行面進(jìn)行I/O操作,既方便了用戶對(duì)設(shè)備的使用和滿足用戶操作,既方便了用戶對(duì)設(shè)備的使用和滿足用戶使用外設(shè)的各種要求,又有利于將不同類型的設(shè)備配置在使用外設(shè)的各種要求,又有利于將不同類型的設(shè)備配置在系統(tǒng)中。系統(tǒng)中。 提高外設(shè)的利用率,盡量提高并行程度。一方面,提高外設(shè)的利用率,盡量提高并行程度。一方面,
35、用戶使用外設(shè)常有很大的隨機(jī)性,設(shè)備管理應(yīng)能根據(jù)當(dāng)時(shí)用戶使用外設(shè)常有很大的隨機(jī)性,設(shè)備管理應(yīng)能根據(jù)當(dāng)時(shí)設(shè)備的忙閑狀況進(jìn)行分配,實(shí)現(xiàn)資源共享。另一方面,充設(shè)備的忙閑狀況進(jìn)行分配,實(shí)現(xiàn)資源共享。另一方面,充分發(fā)揮設(shè)備和主機(jī)的效率,有效地解決分發(fā)揮設(shè)備和主機(jī)的效率,有效地解決CPU與外設(shè)之間與外設(shè)之間傳輸速率不協(xié)調(diào)的問(wèn)題。另外,將獨(dú)享設(shè)備盡量虛擬成共傳輸速率不協(xié)調(diào)的問(wèn)題。另外,將獨(dú)享設(shè)備盡量虛擬成共享設(shè)備,以增大資源利用率和降低死鎖發(fā)生的概率。例如,享設(shè)備,以增大資源利用率和降低死鎖發(fā)生的概率。例如,將一臺(tái)打印機(jī)虛擬成多臺(tái)可共享的邏輯打印機(jī)。將一臺(tái)打印機(jī)虛擬成多臺(tái)可共享的邏輯打印機(jī)。用戶程序獨(dú)立于設(shè)備
36、,即實(shí)現(xiàn)程序與設(shè)備的無(wú)關(guān)性。用戶程序獨(dú)立于設(shè)備,即實(shí)現(xiàn)程序與設(shè)備的無(wú)關(guān)性。程序中可使用邏輯設(shè)備名或設(shè)備文件名來(lái)使用設(shè)備,它們程序中可使用邏輯設(shè)備名或設(shè)備文件名來(lái)使用設(shè)備,它們與實(shí)際使用的物理設(shè)備無(wú)關(guān)。當(dāng)物理設(shè)備發(fā)生故障或有更與實(shí)際使用的物理設(shè)備無(wú)關(guān)。當(dāng)物理設(shè)備發(fā)生故障或有更換時(shí),用戶程序不必修改,就可使用系統(tǒng)分配的其他相關(guān)換時(shí),用戶程序不必修改,就可使用系統(tǒng)分配的其他相關(guān)設(shè)備。設(shè)備。2. 設(shè)備管理的功能設(shè)備管理的功能為了達(dá)到設(shè)備管理的目標(biāo),設(shè)備管理系統(tǒng)通常需要實(shí)為了達(dá)到設(shè)備管理的目標(biāo),設(shè)備管理系統(tǒng)通常需要實(shí)現(xiàn)如下基本功能:現(xiàn)如下基本功能:設(shè)備驅(qū)動(dòng)和錯(cuò)誤處理。主要是按照設(shè)備驅(qū)動(dòng)和錯(cuò)誤處理。主要是
37、按照I/O控制方式,控制方式,對(duì)不同的設(shè)備完成相應(yīng)的對(duì)不同的設(shè)備完成相應(yīng)的I/O中斷、設(shè)備控制器操作、讀中斷、設(shè)備控制器操作、讀寫操作等物理寫操作等物理I/O過(guò)程。針對(duì)不同的設(shè)備請(qǐng)求,通過(guò)設(shè)備過(guò)程。針對(duì)不同的設(shè)備請(qǐng)求,通過(guò)設(shè)備驅(qū)動(dòng)程序完成對(duì)設(shè)備的直接控制。錯(cuò)誤處理指的是對(duì)輸入驅(qū)動(dòng)程序完成對(duì)設(shè)備的直接控制。錯(cuò)誤處理指的是對(duì)輸入輸出過(guò)程中產(chǎn)生的錯(cuò)誤進(jìn)行偵測(cè)與糾正,而且糾錯(cuò)應(yīng)該在輸出過(guò)程中產(chǎn)生的錯(cuò)誤進(jìn)行偵測(cè)與糾正,而且糾錯(cuò)應(yīng)該在最靠近硬件的層面上進(jìn)行。最靠近硬件的層面上進(jìn)行。系統(tǒng)與設(shè)備間的協(xié)調(diào)。主要是速度上的協(xié)調(diào),要解系統(tǒng)與設(shè)備間的協(xié)調(diào)。主要是速度上的協(xié)調(diào),要解決快速的決快速的CPU與慢速的與慢速的
38、I/O設(shè)備之間的操作不匹配的問(wèn)題,設(shè)備之間的操作不匹配的問(wèn)題,通常采用通常采用I/O緩沖區(qū)的方式來(lái)解決這個(gè)矛盾。設(shè)備管緩沖區(qū)的方式來(lái)解決這個(gè)矛盾。設(shè)備管理要實(shí)現(xiàn)理要實(shí)現(xiàn)I/O緩沖區(qū)的建立、分配及回收。緩沖區(qū)的建立、分配及回收。設(shè)備調(diào)度與分配。即對(duì)等待共享設(shè)備設(shè)備調(diào)度與分配。即對(duì)等待共享設(shè)備I/O操作的進(jìn)操作的進(jìn)程進(jìn)行調(diào)度,而對(duì)多個(gè)進(jìn)程爭(zhēng)用獨(dú)占設(shè)備進(jìn)行分配。程進(jìn)行調(diào)度,而對(duì)多個(gè)進(jìn)程爭(zhēng)用獨(dú)占設(shè)備進(jìn)行分配。 2.2 設(shè)備控制塊與設(shè)備文件設(shè)備控制塊與設(shè)備文件就如用進(jìn)程控制塊(就如用進(jìn)程控制塊(PCB)來(lái)表示一個(gè)進(jìn)程,用文件)來(lái)表示一個(gè)進(jìn)程,用文件控制塊(控制塊(FCB)來(lái)表示一個(gè)文件一樣,操作系統(tǒng)用設(shè)
39、備控)來(lái)表示一個(gè)文件一樣,操作系統(tǒng)用設(shè)備控制塊(制塊(DCB)來(lái)抽象表示一個(gè)外部設(shè)備。操作系統(tǒng)在內(nèi)核)來(lái)抽象表示一個(gè)外部設(shè)備。操作系統(tǒng)在內(nèi)核空間中為每個(gè)設(shè)備建立一個(gè)設(shè)備控制塊,用于描述本設(shè)備空間中為每個(gè)設(shè)備建立一個(gè)設(shè)備控制塊,用于描述本設(shè)備的各種抽象屬性及控制信息。的各種抽象屬性及控制信息。DCB包含的內(nèi)容如:包含的內(nèi)容如:設(shè)備名(即設(shè)備文件名)設(shè)備名(即設(shè)備文件名)設(shè)備設(shè)備ID設(shè)備工作狀態(tài)設(shè)備工作狀態(tài)控制器端口控制器端口I/O緩沖區(qū)端口緩沖區(qū)端口I/O請(qǐng)求隊(duì)列指針請(qǐng)求隊(duì)列指針設(shè)備驅(qū)動(dòng)程序指針設(shè)備驅(qū)動(dòng)程序指針設(shè)備中斷處理程序指針設(shè)備中斷處理程序指針設(shè)備設(shè)備ID由主設(shè)備號(hào)和次設(shè)備號(hào)構(gòu)成。主設(shè)備號(hào)
40、用于標(biāo)由主設(shè)備號(hào)和次設(shè)備號(hào)構(gòu)成。主設(shè)備號(hào)用于標(biāo)識(shí)設(shè)備類型,如識(shí)設(shè)備類型,如IDE硬盤、硬盤、SCSI硬盤、顯示器、打印機(jī)等,硬盤、顯示器、打印機(jī)等,同一類設(shè)備使用的是同一個(gè)設(shè)備驅(qū)動(dòng)程序。次設(shè)備號(hào)用于同一類設(shè)備使用的是同一個(gè)設(shè)備驅(qū)動(dòng)程序。次設(shè)備號(hào)用于標(biāo)識(shí)同類設(shè)備中的某個(gè)具體設(shè)備及其控制器,即同類設(shè)備標(biāo)識(shí)同類設(shè)備中的某個(gè)具體設(shè)備及其控制器,即同類設(shè)備的序號(hào)。的序號(hào)。這里的這里的設(shè)備驅(qū)動(dòng)程序指針設(shè)備驅(qū)動(dòng)程序指針實(shí)際上是一個(gè)指針組,其中實(shí)際上是一個(gè)指針組,其中的每個(gè)指針指向一個(gè)設(shè)備操作函數(shù)。設(shè)備驅(qū)動(dòng)程序容易被的每個(gè)指針指向一個(gè)設(shè)備操作函數(shù)。設(shè)備驅(qū)動(dòng)程序容易被人誤認(rèn)為是一個(gè)完整的、能夠獨(dú)立運(yùn)行的程序,其
41、實(shí)不然,人誤認(rèn)為是一個(gè)完整的、能夠獨(dú)立運(yùn)行的程序,其實(shí)不然,它只是一組進(jìn)程可調(diào)用的、能對(duì)設(shè)備實(shí)施它只是一組進(jìn)程可調(diào)用的、能對(duì)設(shè)備實(shí)施I/O操作及控制操作及控制操作的內(nèi)核功能函數(shù),如操作的內(nèi)核功能函數(shù),如open( ); /打開(kāi)打開(kāi)close( ); /關(guān)閉關(guān)閉read( ); /讀數(shù)據(jù)讀數(shù)據(jù)write( ); /寫數(shù)據(jù)寫數(shù)據(jù)llseek( ); /移動(dòng)讀寫指針移動(dòng)讀寫指針readdir( );/讀目錄讀目錄ioclt( ); /輸入輸出控制輸入輸出控制release( ); /釋放緩存釋放緩存當(dāng)然,對(duì)于塊設(shè)備和字符設(shè)備以及不同的塊設(shè)備和不當(dāng)然,對(duì)于塊設(shè)備和字符設(shè)備以及不同的塊設(shè)備和不同的字符設(shè)
42、備,各自所含的功能函數(shù)的個(gè)數(shù)有所不同,同同的字符設(shè)備,各自所含的功能函數(shù)的個(gè)數(shù)有所不同,同名函數(shù)具體執(zhí)行的算法也是不同的,從而構(gòu)成了不同設(shè)備名函數(shù)具體執(zhí)行的算法也是不同的,從而構(gòu)成了不同設(shè)備的驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序就是操作系統(tǒng)對(duì)設(shè)備的物理抽的驅(qū)動(dòng)程序。設(shè)備驅(qū)動(dòng)程序就是操作系統(tǒng)對(duì)設(shè)備的物理抽象(最底層抽象)。象(最底層抽象)。至于如何管理至于如何管理DCB則可以有不同的方法。自則可以有不同的方法。自UNIX后,后,現(xiàn)代操作系統(tǒng)普遍將現(xiàn)代操作系統(tǒng)普遍將DCB抽象成抽象成特殊文件特殊文件(即(即設(shè)備文件設(shè)備文件)。)。與數(shù)據(jù)文件一樣,系統(tǒng)為每個(gè)設(shè)備文件建立一個(gè)與數(shù)據(jù)文件一樣,系統(tǒng)為每個(gè)設(shè)備文件建立一
43、個(gè) FCB,但,但設(shè)備文件的特殊之處在于,它并沒(méi)有數(shù)據(jù)文件意義上的文設(shè)備文件的特殊之處在于,它并沒(méi)有數(shù)據(jù)文件意義上的文件體,即它并不在磁盤空間中占有一席之地,換言之,操件體,即它并不在磁盤空間中占有一席之地,換言之,操作系統(tǒng)并不給設(shè)備文件分配磁盤空間單元。那么,作系統(tǒng)并不給設(shè)備文件分配磁盤空間單元。那么,設(shè)備文設(shè)備文件的文件體是什么呢?就是件的文件體是什么呢?就是DCB!例如,例如,Linux是按如下方式處理的。是按如下方式處理的。Linux支持三種類型的硬件設(shè)備:字符設(shè)備、塊設(shè)備支持三種類型的硬件設(shè)備:字符設(shè)備、塊設(shè)備及網(wǎng)絡(luò)設(shè)備。及網(wǎng)絡(luò)設(shè)備。字符設(shè)備能夠存儲(chǔ)或傳輸不定長(zhǎng)數(shù)據(jù)。某些字符設(shè)備字符
44、設(shè)備能夠存儲(chǔ)或傳輸不定長(zhǎng)數(shù)據(jù)。某些字符設(shè)備可以每次傳送一個(gè)字節(jié),可以不經(jīng)過(guò)緩沖區(qū)直接進(jìn)行讀可以每次傳送一個(gè)字節(jié),可以不經(jīng)過(guò)緩沖區(qū)直接進(jìn)行讀寫,如系統(tǒng)中的串行口寫,如系統(tǒng)中的串行口/dev/dnao和和/dev/cnal,傳送,傳送完一個(gè)字節(jié)后產(chǎn)生一個(gè)完一個(gè)字節(jié)后產(chǎn)生一個(gè)I/O中斷;另一些字符設(shè)備可以在中斷;另一些字符設(shè)備可以在設(shè)備內(nèi)緩存數(shù)據(jù),因此可以一次傳送完多個(gè)字節(jié)后產(chǎn)生一設(shè)備內(nèi)緩存數(shù)據(jù),因此可以一次傳送完多個(gè)字節(jié)后產(chǎn)生一個(gè)個(gè)I/O中斷。中斷。塊設(shè)備以塊為單位傳輸數(shù)據(jù)。每個(gè)塊設(shè)備都可建有一塊設(shè)備以塊為單位傳輸數(shù)據(jù)。每個(gè)塊設(shè)備都可建有一個(gè)個(gè)I/O數(shù)據(jù)緩沖區(qū)隊(duì)列,緩沖區(qū)的大小與塊相等,因此,數(shù)據(jù)
45、緩沖區(qū)隊(duì)列,緩沖區(qū)的大小與塊相等,因此,塊設(shè)備一次可傳輸一塊或多塊數(shù)據(jù)。塊設(shè)備一次可傳輸一塊或多塊數(shù)據(jù)。網(wǎng)絡(luò)設(shè)備也稱包設(shè)備(如以太網(wǎng)卡),是通過(guò)網(wǎng)絡(luò)設(shè)備也稱包設(shè)備(如以太網(wǎng)卡),是通過(guò)BSDsocket和網(wǎng)絡(luò)子系統(tǒng)訪問(wèn),它負(fù)責(zé)數(shù)據(jù)包的發(fā)送和接收。和網(wǎng)絡(luò)子系統(tǒng)訪問(wèn),它負(fù)責(zé)數(shù)據(jù)包的發(fā)送和接收。網(wǎng)絡(luò)協(xié)議(如網(wǎng)絡(luò)協(xié)議(如TCP/IP)就建立在網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序之上。)就建立在網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序之上。與字符設(shè)備和塊設(shè)備不同的是,網(wǎng)絡(luò)設(shè)備傳輸?shù)牟皇菬o(wú)結(jié)與字符設(shè)備和塊設(shè)備不同的是,網(wǎng)絡(luò)設(shè)備傳輸?shù)牟皇菬o(wú)結(jié)構(gòu)的流式數(shù)據(jù),而是有結(jié)構(gòu)的數(shù)據(jù)包。構(gòu)的流式數(shù)據(jù),而是有結(jié)構(gòu)的數(shù)據(jù)包。針對(duì)這三類設(shè)備,針對(duì)這三類設(shè)備,Linux
46、在內(nèi)核空間中建立了三個(gè)在內(nèi)核空間中建立了三個(gè)設(shè)設(shè)備注冊(cè)表備注冊(cè)表(也稱(也稱設(shè)備開(kāi)關(guān)表設(shè)備開(kāi)關(guān)表),分別是:),分別是:塊設(shè)備注冊(cè)表塊設(shè)備注冊(cè)表、字符設(shè)備注冊(cè)表、字符設(shè)備注冊(cè)表、以及以及網(wǎng)絡(luò)設(shè)備注冊(cè)表網(wǎng)絡(luò)設(shè)備注冊(cè)表,它們均為線性,它們均為線性表(數(shù)組)表(數(shù)組) 。每個(gè)已配置在系統(tǒng)中的外設(shè)都在相應(yīng)的設(shè)。每個(gè)已配置在系統(tǒng)中的外設(shè)都在相應(yīng)的設(shè)備注冊(cè)表中占有一個(gè)表項(xiàng)。表項(xiàng)中包含了備注冊(cè)表中占有一個(gè)表項(xiàng)。表項(xiàng)中包含了DCB中的核心中的核心內(nèi)容,主要有:設(shè)備名(即設(shè)備文件名)、主設(shè)備號(hào)、內(nèi)容,主要有:設(shè)備名(即設(shè)備文件名)、主設(shè)備號(hào)、驅(qū)動(dòng)程序指針。驅(qū)動(dòng)程序指針。DCB中的其他內(nèi)容則被記錄在中的其他內(nèi)容則
47、被記錄在 i 節(jié)點(diǎn)中。節(jié)點(diǎn)中。i 節(jié)點(diǎn)中也節(jié)點(diǎn)中也設(shè)置有主設(shè)備號(hào),通過(guò)它與相應(yīng)的注冊(cè)表表項(xiàng)連接了起設(shè)置有主設(shè)備號(hào),通過(guò)它與相應(yīng)的注冊(cè)表表項(xiàng)連接了起來(lái)。從而在設(shè)備文件名與設(shè)備驅(qū)動(dòng)程序之間建立起了一來(lái)。從而在設(shè)備文件名與設(shè)備驅(qū)動(dòng)程序之間建立起了一條通路。見(jiàn)圖條通路。見(jiàn)圖9-2。i節(jié)點(diǎn)號(hào)節(jié)點(diǎn)號(hào)外設(shè)外設(shè)主設(shè)備號(hào)主設(shè)備號(hào)fops*read()*write()write()read()驅(qū)動(dòng)程序驅(qū)動(dòng)程序中處程序中處程序設(shè)備設(shè)備文件名文件名設(shè)備目錄設(shè)備目錄i 節(jié)點(diǎn)節(jié)點(diǎn)設(shè)備注冊(cè)表設(shè)備注冊(cè)表圖圖9-2 設(shè)備文件名到設(shè)備驅(qū)動(dòng)程序的通路設(shè)備文件名到設(shè)備驅(qū)動(dòng)程序的通路*intrrpt()2.3 I/O軟件的分層結(jié)構(gòu)軟件
48、的分層結(jié)構(gòu)設(shè)備管理軟件,也稱作設(shè)備管理軟件,也稱作I/O控制系統(tǒng)(控制系統(tǒng)(IOCS)或)或I/O軟件軟件 ,是操作系統(tǒng)中非常繁雜的部分,通常按照,是操作系統(tǒng)中非常繁雜的部分,通常按照I/O功能進(jìn)行分層,每一層提供獨(dú)特的功能,并與相鄰功能進(jìn)行分層,每一層提供獨(dú)特的功能,并與相鄰的層面間設(shè)計(jì)有標(biāo)準(zhǔn)界面。當(dāng)然,不同的操作系統(tǒng)這種的層面間設(shè)計(jì)有標(biāo)準(zhǔn)界面。當(dāng)然,不同的操作系統(tǒng)這種分層是不同的,但一般都會(huì)有如下幾層(從高到低)分層是不同的,但一般都會(huì)有如下幾層(從高到低) :用戶級(jí)用戶級(jí)I/O軟件軟件獨(dú)立于設(shè)備的獨(dú)立于設(shè)備的I/O軟件軟件設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序設(shè)備中斷處理程序設(shè)備中斷處理程序 I/O
49、請(qǐng)求請(qǐng)求 (用戶進(jìn)程)(用戶進(jìn)程) I/O 應(yīng)答應(yīng)答用戶級(jí)用戶級(jí)I/O軟件軟件獨(dú)立于設(shè)備的獨(dú)立于設(shè)備的I/O軟件軟件設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序硬硬 件件圖圖9-3 I/O軟件的分層結(jié)構(gòu)軟件的分層結(jié)構(gòu)設(shè)備中斷處理程序設(shè)備中斷處理程序3 由于大多數(shù)由于大多數(shù)I/O均為中斷驅(qū)動(dòng),設(shè)備中斷處理程序就均為中斷驅(qū)動(dòng),設(shè)備中斷處理程序就成為成為I/O軟件的不可分割的組成部分。由于設(shè)備中斷處理軟件的不可分割的組成部分。由于設(shè)備中斷處理程序直接與硬件相關(guān),針對(duì)不同的外部設(shè)備,中斷響應(yīng)的程序直接與硬件相關(guān),針對(duì)不同的外部設(shè)備,中斷響應(yīng)的處理也不盡相同,因此,設(shè)備中斷處理程序處于處理也不盡相同,因此,設(shè)備中斷處理程序
50、處于I/O軟件軟件分層結(jié)構(gòu)里面的最底層。而為了降低操作系統(tǒng)的復(fù)雜性,分層結(jié)構(gòu)里面的最底層。而為了降低操作系統(tǒng)的復(fù)雜性,設(shè)備中斷處理程序的暴露窗口應(yīng)該越小越好,與其打交道設(shè)備中斷處理程序的暴露窗口應(yīng)該越小越好,與其打交道的的OS部分也是越少越好。部分也是越少越好。而降低暴露窗口的最好辦法是讓設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)而降低暴露窗口的最好辦法是讓設(shè)備驅(qū)動(dòng)程序負(fù)責(zé)I/O中斷響應(yīng),即設(shè)備驅(qū)動(dòng)程序啟動(dòng)中斷響應(yīng),即設(shè)備驅(qū)動(dòng)程序啟動(dòng)I/O操作后阻塞(通操作后阻塞(通過(guò)執(zhí)行信號(hào)量的過(guò)執(zhí)行信號(hào)量的P操作或等待信號(hào)),然后等待操作或等待信號(hào)),然后等待I/O中斷。中斷。當(dāng)響應(yīng)當(dāng)響應(yīng)I/O中斷時(shí),先執(zhí)行設(shè)備中斷處理程序,在設(shè)
51、備中中斷時(shí),先執(zhí)行設(shè)備中斷處理程序,在設(shè)備中斷處理程序完成相關(guān)的處理后喚醒設(shè)備驅(qū)動(dòng)程序(通過(guò)執(zhí)斷處理程序完成相關(guān)的處理后喚醒設(shè)備驅(qū)動(dòng)程序(通過(guò)執(zhí)行信號(hào)量的行信號(hào)量的V操作或發(fā)送信號(hào))。操作或發(fā)送信號(hào))。I/O中斷處理過(guò)程大致有以下幾個(gè)步驟:中斷處理過(guò)程大致有以下幾個(gè)步驟:1. 關(guān)中斷。關(guān)中斷。CPU中的中斷響應(yīng)部件響應(yīng)中斷請(qǐng)求后立中的中斷響應(yīng)部件響應(yīng)中斷請(qǐng)求后立即關(guān)中斷。即關(guān)中斷。2. 保存現(xiàn)行進(jìn)程(被中斷的進(jìn)程)的執(zhí)行現(xiàn)場(chǎng)(上下保存現(xiàn)行進(jìn)程(被中斷的進(jìn)程)的執(zhí)行現(xiàn)場(chǎng)(上下文)。文)。3. 分析中斷源(中斷類型和發(fā)出中斷的設(shè)備分析中斷源(中斷類型和發(fā)出中斷的設(shè)備ID),切),切換到相應(yīng)的設(shè)備中
52、斷處理程序。換到相應(yīng)的設(shè)備中斷處理程序。4. 執(zhí)行設(shè)備中斷處理程序。設(shè)備中斷處理程序首先從執(zhí)行設(shè)備中斷處理程序。設(shè)備中斷處理程序首先從設(shè)備控制器中讀出設(shè)備狀態(tài),根據(jù)設(shè)備的當(dāng)前狀態(tài)作相應(yīng)設(shè)備控制器中讀出設(shè)備狀態(tài),根據(jù)設(shè)備的當(dāng)前狀態(tài)作相應(yīng)處理;最后喚醒相應(yīng)的設(shè)備驅(qū)動(dòng)程序。處理;最后喚醒相應(yīng)的設(shè)備驅(qū)動(dòng)程序。5. 恢復(fù)被中斷進(jìn)程的執(zhí)行現(xiàn)場(chǎng)?;謴?fù)被中斷進(jìn)程的執(zhí)行現(xiàn)場(chǎng)。6. 開(kāi)中斷。開(kāi)中斷。4 什么是設(shè)備驅(qū)動(dòng)程序什么是設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序的算法框架設(shè)備驅(qū)動(dòng)程序的算法框架4.1 什么是設(shè)備驅(qū)動(dòng)程序什么是設(shè)備驅(qū)動(dòng)程序設(shè)備驅(qū)動(dòng)程序,顧名思義,就是直接驅(qū)動(dòng)外部設(shè)備進(jìn)設(shè)備驅(qū)動(dòng)程序,顧名思義,就是直接驅(qū)動(dòng)外部設(shè)備
53、進(jìn)行行I/O操作的軟件。其作用就是實(shí)現(xiàn)對(duì)外部設(shè)備的軟件封操作的軟件。其作用就是實(shí)現(xiàn)對(duì)外部設(shè)備的軟件封裝,隱藏外部設(shè)備的所有硬件細(xì)節(jié),向用戶提供一個(gè)統(tǒng)一裝,隱藏外部設(shè)備的所有硬件細(xì)節(jié),向用戶提供一個(gè)統(tǒng)一的操作界面,的操作界面,是操作系統(tǒng)對(duì)外部設(shè)備的物理抽象是操作系統(tǒng)對(duì)外部設(shè)備的物理抽象。它屬于。它屬于與設(shè)備控制器直接聯(lián)系的與設(shè)備控制器直接聯(lián)系的IOCS部分,與具體的外設(shè)直接部分,與具體的外設(shè)直接相關(guān),并針對(duì)每個(gè)特定的外設(shè)進(jìn)行過(guò)優(yōu)化。設(shè)備驅(qū)動(dòng)程序相關(guān),并針對(duì)每個(gè)特定的外設(shè)進(jìn)行過(guò)優(yōu)化。設(shè)備驅(qū)動(dòng)程序通常由設(shè)備制造商提供,但歸屬于操作系統(tǒng)內(nèi)核。正因?yàn)橥ǔS稍O(shè)備制造商提供,但歸屬于操作系統(tǒng)內(nèi)核。正因?yàn)檫@一
54、屬性,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)安全的一大隱患。這一屬性,設(shè)備驅(qū)動(dòng)程序是操作系統(tǒng)安全的一大隱患。由于需要直接驅(qū)動(dòng)設(shè)備的運(yùn)行,設(shè)備驅(qū)動(dòng)程序必須清由于需要直接驅(qū)動(dòng)設(shè)備的運(yùn)行,設(shè)備驅(qū)動(dòng)程序必須清楚設(shè)備的所有物理細(xì)節(jié)。例如,磁盤驅(qū)動(dòng)程序必須清楚磁楚設(shè)備的所有物理細(xì)節(jié)。例如,磁盤驅(qū)動(dòng)程序必須清楚磁盤控制器設(shè)置有多少寄存器及其端口,了解磁盤擁有的柱盤控制器設(shè)置有多少寄存器及其端口,了解磁盤擁有的柱面數(shù)(磁道數(shù))、磁頭數(shù)(盤面數(shù))、扇區(qū)數(shù)及扇區(qū)的容面數(shù)(磁道數(shù))、磁頭數(shù)(盤面數(shù))、扇區(qū)數(shù)及扇區(qū)的容量、臂的移動(dòng)、交叉訪問(wèn)系數(shù)、電機(jī)驅(qū)動(dòng)器、磁頭穩(wěn)定時(shí)量、臂的移動(dòng)、交叉訪問(wèn)系數(shù)、電機(jī)驅(qū)動(dòng)器、磁頭穩(wěn)定時(shí)間以及所有保證磁
55、盤正常工作的硬件機(jī)制。鼠標(biāo)驅(qū)動(dòng)程序間以及所有保證磁盤正常工作的硬件機(jī)制。鼠標(biāo)驅(qū)動(dòng)程序自然需要具備辨認(rèn)是哪個(gè)按鍵被按下的能力。自然需要具備辨認(rèn)是哪個(gè)按鍵被按下的能力。每種設(shè)備配置有一個(gè)設(shè)備驅(qū)動(dòng)程序,但一個(gè)設(shè)備驅(qū)動(dòng)每種設(shè)備配置有一個(gè)設(shè)備驅(qū)動(dòng)程序,但一個(gè)設(shè)備驅(qū)動(dòng)程序并不是一個(gè)完整獨(dú)立的程序,而是由一組相對(duì)獨(dú)立的程序并不是一個(gè)完整獨(dú)立的程序,而是由一組相對(duì)獨(dú)立的設(shè)備操作函數(shù)(內(nèi)核函數(shù))所構(gòu)成,其中的每個(gè)函數(shù)都可設(shè)備操作函數(shù)(內(nèi)核函數(shù))所構(gòu)成,其中的每個(gè)函數(shù)都可被進(jìn)程單獨(dú)調(diào)用,實(shí)現(xiàn)相關(guān)的物理被進(jìn)程單獨(dú)調(diào)用,實(shí)現(xiàn)相關(guān)的物理I/O。在在UNIX中,設(shè)備驅(qū)動(dòng)程序與整個(gè)中,設(shè)備驅(qū)動(dòng)程序與整個(gè)OS內(nèi)核編在一個(gè)二內(nèi)
56、核編在一個(gè)二進(jìn)制文件里。如果要增加新的設(shè)備驅(qū)動(dòng)程序或者修改現(xiàn)有進(jìn)制文件里。如果要增加新的設(shè)備驅(qū)動(dòng)程序或者修改現(xiàn)有的設(shè)備驅(qū)動(dòng)程序,則需要重新編譯整個(gè)操作系統(tǒng)內(nèi)核。的設(shè)備驅(qū)動(dòng)程序,則需要重新編譯整個(gè)操作系統(tǒng)內(nèi)核。UNIX的這種做法主要是考慮到安全因素。由于用戶無(wú)法的這種做法主要是考慮到安全因素。由于用戶無(wú)法動(dòng)態(tài)地裝卸設(shè)備驅(qū)動(dòng)程序,操作系統(tǒng)的安全性較高。不動(dòng)態(tài)地裝卸設(shè)備驅(qū)動(dòng)程序,操作系統(tǒng)的安全性較高。不過(guò),這種不能動(dòng)態(tài)裝卸的限制讓人感覺(jué)十分不便,因此在過(guò),這種不能動(dòng)態(tài)裝卸的限制讓人感覺(jué)十分不便,因此在最新的最新的UNIX以及以及Linux版本里,建立了較復(fù)雜的可安裝版本里,建立了較復(fù)雜的可安裝內(nèi)核模
57、塊機(jī)制,它可支持設(shè)備驅(qū)動(dòng)程序的動(dòng)態(tài)裝卸。內(nèi)核模塊機(jī)制,它可支持設(shè)備驅(qū)動(dòng)程序的動(dòng)態(tài)裝卸。Windows操作系統(tǒng)從一開(kāi)始(操作系統(tǒng)從一開(kāi)始(NT開(kāi)始)就支持設(shè)備開(kāi)始)就支持設(shè)備驅(qū)動(dòng)程序的動(dòng)態(tài)裝卸,這也是驅(qū)動(dòng)程序的動(dòng)態(tài)裝卸,這也是Windows不如不如UNIX安全安全的一個(gè)原因。的一個(gè)原因。 4.2 設(shè)備驅(qū)動(dòng)程序的算法框架設(shè)備驅(qū)動(dòng)程序的算法框架(1) 在收到一個(gè)在收到一個(gè)I/O請(qǐng)求后,設(shè)備驅(qū)動(dòng)程序做的第一請(qǐng)求后,設(shè)備驅(qū)動(dòng)程序做的第一件事是檢查輸入?yún)?shù)是否合法。如果不合法,則錯(cuò)誤返回;件事是檢查輸入?yún)?shù)是否合法。如果不合法,則錯(cuò)誤返回;否則,將否則,將I/O請(qǐng)求的抽象表示轉(zhuǎn)換為設(shè)備控制器能夠認(rèn)識(shí)請(qǐng)求的
58、抽象表示轉(zhuǎn)換為設(shè)備控制器能夠認(rèn)識(shí)的具體表示,例如,將線性的盤塊號(hào)映射為磁道、磁頭、的具體表示,例如,將線性的盤塊號(hào)映射為磁道、磁頭、扇區(qū)等。扇區(qū)等。(2) 然后,設(shè)備驅(qū)動(dòng)程序需要檢查設(shè)備狀態(tài)以確認(rèn)設(shè)然后,設(shè)備驅(qū)動(dòng)程序需要檢查設(shè)備狀態(tài)以確認(rèn)設(shè)備是否處于閑置狀態(tài)。如果設(shè)備正忙著,則將備是否處于閑置狀態(tài)。如果設(shè)備正忙著,則將I/O請(qǐng)求送請(qǐng)求送入該設(shè)備的等待隊(duì)列以待處理,并阻塞調(diào)用者;否則,若入該設(shè)備的等待隊(duì)列以待處理,并阻塞調(diào)用者;否則,若設(shè)備空閑,就驅(qū)動(dòng)設(shè)備運(yùn)行并啟動(dòng)電機(jī)。設(shè)備空閑,就驅(qū)動(dòng)設(shè)備運(yùn)行并啟動(dòng)電機(jī)。(3) 接著開(kāi)始驅(qū)動(dòng)真正的接著開(kāi)始驅(qū)動(dòng)真正的I/O操作。設(shè)備驅(qū)動(dòng)程序通操作。設(shè)備驅(qū)動(dòng)程序通
59、過(guò)向設(shè)備寄存器里送入一系列的過(guò)向設(shè)備寄存器里送入一系列的I/O控制命令來(lái)進(jìn)行物理控制命令來(lái)進(jìn)行物理的數(shù)據(jù)傳輸工作。如果需要,設(shè)備驅(qū)動(dòng)程序通過(guò)自行阻塞的數(shù)據(jù)傳輸工作。如果需要,設(shè)備驅(qū)動(dòng)程序通過(guò)自行阻塞來(lái)等待來(lái)等待I/O中斷。中斷。(4) 在被中斷處理程序喚醒后,讀取設(shè)備狀態(tài)寄存器在被中斷處理程序喚醒后,讀取設(shè)備狀態(tài)寄存器中的信息以檢查此中的信息以檢查此I/O操作是否正確完成。如果正確完成操作是否正確完成。如果正確完成的話,進(jìn)行的話,進(jìn)行I/O操作的善后處理,例如,對(duì)于讀操作,需操作的善后處理,例如,對(duì)于讀操作,需要將要將I/O緩沖區(qū)中的數(shù)據(jù)傳送到調(diào)用者指定的內(nèi)存數(shù)據(jù)區(qū)緩沖區(qū)中的數(shù)據(jù)傳送到調(diào)用者指
60、定的內(nèi)存數(shù)據(jù)區(qū)中,繼續(xù)中,繼續(xù)(5)。如果未正確完成的話,檢查錯(cuò)誤狀態(tài),對(duì)。如果未正確完成的話,檢查錯(cuò)誤狀態(tài),對(duì)可修復(fù)性錯(cuò)誤進(jìn)行必要的出錯(cuò)處理,否則錯(cuò)誤返回??尚迯?fù)性錯(cuò)誤進(jìn)行必要的出錯(cuò)處理,否則錯(cuò)誤返回。(5) 如果該設(shè)備的等待隊(duì)列非空,則喚醒等待的進(jìn)程。如果該設(shè)備的等待隊(duì)列非空,則喚醒等待的進(jìn)程。(6) 正常返回此正常返回此I/O請(qǐng)求的調(diào)用者。請(qǐng)求的調(diào)用者。5 統(tǒng)一界面統(tǒng)一界面I/O緩沖緩沖設(shè)備的安全保護(hù)設(shè)備的安全保護(hù)設(shè)備的分配與調(diào)度設(shè)備的分配與調(diào)度錯(cuò)誤處理錯(cuò)誤處理假脫機(jī)假脫機(jī)一般來(lái)說(shuō),設(shè)備驅(qū)動(dòng)程序并不直接從用戶程序處接收一般來(lái)說(shuō),設(shè)備驅(qū)動(dòng)程序并不直接從用戶程序處接收I/O請(qǐng)求,而是通過(guò)另外
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 資質(zhì)過(guò)剩感對(duì)員工幸福感和家庭角色績(jī)效的影響研究
- 2025至2030液體羊毛脂行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 小組工作介入初中生學(xué)業(yè)拖延行為的實(shí)務(wù)研究
- 關(guān)于孝的作文400字10篇范文
- 被動(dòng)鎖模光纖激光器及光孤子特性研究
- 天津師范大學(xué)招聘真題
- 東風(fēng)和春風(fēng)350字13篇范文
- 2024年海南省退役軍人事務(wù)廳下屬事業(yè)單位真題
- NPC2通過(guò)自噬調(diào)節(jié)動(dòng)物肝臟脂質(zhì)代謝紊亂的作用及機(jī)制研究
- 2024年安徽師范大學(xué)輔導(dǎo)員考試真題
- 7數(shù)滬科版期末考試卷-2024-2025學(xué)年七年級(jí)(初一)數(shù)學(xué)下冊(cè)期末考試模擬卷03
- 涼山州木里縣選聘社區(qū)工作者筆試真題2024
- 2025年安徽省高考物理試卷真題(含答案解析)
- 2025年中國(guó)太平洋人壽保險(xiǎn)股份有限公司勞動(dòng)合同
- 配電線路高級(jí)工練習(xí)試題附答案
- (2025)干部任前廉政知識(shí)考試題庫(kù)及答案
- 公共組織績(jī)效評(píng)估-形考任務(wù)一(占10%)-國(guó)開(kāi)(ZJ)-參考資料
- GB/T 45439-2025燃?xì)鈿馄亢腿細(xì)馄块y溯源二維碼應(yīng)用技術(shù)規(guī)范
- YC/T 620-2024煙草零售客戶滿意度調(diào)查規(guī)范
- 《公路橋梁掛籃設(shè)計(jì)與施工技術(shù)指南》
- 16J914-1 公用建筑衛(wèi)生間
評(píng)論
0/150
提交評(píng)論