《Linux設(shè)備管理》課件.ppt_第1頁(yè)
《Linux設(shè)備管理》課件.ppt_第2頁(yè)
《Linux設(shè)備管理》課件.ppt_第3頁(yè)
《Linux設(shè)備管理》課件.ppt_第4頁(yè)
《Linux設(shè)備管理》課件.ppt_第5頁(yè)
已閱讀5頁(yè),還剩52頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、1,第六章 Linux設(shè)備管理,設(shè)備管理概述 總線、橋、端口、接口 設(shè)備驅(qū)動(dòng) Linux塊設(shè)備管理 塊設(shè)備 buffer head bio和bio_vec I/O請(qǐng)求隊(duì)列(Request queue) 調(diào)度算法 deadline、as、cfq、noop Linux其他設(shè)備管理 字符設(shè)備 網(wǎng)絡(luò)設(shè)備/時(shí)鐘設(shè)備/終端設(shè)備 設(shè)備管理相關(guān)技術(shù) 中斷 DMA,2,設(shè)備分類 (1),輸入設(shè)備、輸出設(shè)備 輸入設(shè)備:鍵盤、鼠標(biāo) 輸出設(shè)備:顯示器、打印機(jī) 輸入/輸出設(shè)備:磁盤、網(wǎng)絡(luò)、串口設(shè)備 系統(tǒng)設(shè)備與外部設(shè)備 系統(tǒng)設(shè)備:系統(tǒng)時(shí)鐘、系統(tǒng)揚(yáng)聲器、總線接口 系統(tǒng)設(shè)備的驅(qū)動(dòng)由內(nèi)核本身完成 外部設(shè)備: 外部設(shè)備的驅(qū)動(dòng)由專

2、門的驅(qū)動(dòng)程序?qū)崿F(xiàn),以內(nèi)核模塊的方式附加到內(nèi)核中 外部設(shè)備可以被安裝和卸載,而系統(tǒng)設(shè)備則不能,3,設(shè)備分類 (2),獨(dú)占設(shè)備與共享設(shè)備 獨(dú)占設(shè)備:在某一時(shí)間段內(nèi)只能被一個(gè)進(jìn)程所使用的設(shè)備 打印機(jī)、終端設(shè)備等 共享設(shè)備: 允許多個(gè)進(jìn)程同時(shí)使用的設(shè)備。 磁盤等存儲(chǔ)設(shè)備:允許多個(gè)進(jìn)程同時(shí)訪問(wèn)文件,存取文件的數(shù)據(jù) 字符設(shè)備與塊設(shè)備 字符設(shè)備:終端設(shè)備(顯示器、鍵盤、鼠標(biāo)等)、打印機(jī)、串口設(shè)備 順序訪問(wèn) 塊設(shè)備:磁盤、光盤、閃存 隨即訪問(wèn) 塊設(shè)備都是以“文件系統(tǒng)掛載”的方式進(jìn)行訪問(wèn),4,設(shè)備管理,設(shè)備管理目標(biāo) 從資源的角度出發(fā) 要盡可能地提高設(shè)備的使用效率,提高I/O系統(tǒng)的性能; 從用戶的角度出發(fā) 設(shè)備管

3、理系統(tǒng)要屏蔽各種設(shè)備的物理特性,為用戶提供一個(gè)統(tǒng)一的、方便的I/O操作界面 設(shè)備管理功能 設(shè)備分配 根據(jù)設(shè)備的特點(diǎn)對(duì)設(shè)備進(jìn)行合理的分配和調(diào)度 設(shè)備驅(qū)動(dòng) 根據(jù)進(jìn)程的I/O請(qǐng)求,啟動(dòng)設(shè)備操作,控制數(shù)據(jù)傳輸 設(shè)備中斷處理:對(duì)設(shè)備產(chǎn)生的中斷進(jìn)行處理 虛擬設(shè)備:用共享設(shè)備模擬獨(dú)占設(shè)備,實(shí)現(xiàn)虛擬設(shè)備,5,設(shè)備與系統(tǒng)的接口,外部物理設(shè)備無(wú)法直接與CPU相連接的,存在以下差異 控制方式不同 CPU是數(shù)字化命令,而設(shè)備需要物理信號(hào)來(lái)控制 傳輸方式不同 CPU以字節(jié)為數(shù)據(jù)傳輸單位,設(shè)備可能以位或者塊為單位 速度不匹配 設(shè)備的工作速度要比CPU慢許多 時(shí)序不一致 設(shè)備的定時(shí)控制電路,難以與CPU的時(shí)鐘一致 信息形式

4、不同 CPU處理信息是數(shù)字的,設(shè)備則可能是模擬的 總線、橋、端口、接口 Busses, Bridges, Ports, and Interfaces,6,第六章 Linux設(shè)備管理,設(shè)備管理概述 總線、橋、端口、接口 設(shè)備驅(qū)動(dòng) Linux塊設(shè)備管理 塊設(shè)備 buffer head bio和bio_vec I/O請(qǐng)求隊(duì)列(Request queue) 調(diào)度算法 deadline、as、cfq、noop Linux其他設(shè)備管理 字符設(shè)備 網(wǎng)絡(luò)設(shè)備/時(shí)鐘設(shè)備/終端設(shè)備 設(shè)備管理相關(guān)技術(shù) 中斷 DMA,7,總線 (bus) 與 橋(bridge),總線(bus) 以總線為紐帶,系統(tǒng)板上的部件都通過(guò)總線

5、相連,所有的信號(hào)都要通過(guò)總線進(jìn)行傳輸。 a processor communicates with its surrounding devices is through a series of electrical connections (line). address bus data bus control bus 北橋 vs. 南橋 Bridge是兩個(gè)bus之間連接硬件,front-side bus,8,總線 (bus),Intel Hubs The newer Intel system architecture has moved to the concept of hubs GMCH

6、 Graphics and Memory Controller Hub ICH I/O Controller Hub,9,總線 (bus),AMD HyperTransport PCI compatible,10,總線(bus),總線由CPU控制 CPU通過(guò)總線訪問(wèn)內(nèi)存和設(shè)備,以及控制在內(nèi)存和設(shè)備之間傳輸數(shù)據(jù) 獨(dú)占使用方式 總線采用獨(dú)占使用方式,任何設(shè)備若需要直接和內(nèi)存交換數(shù)據(jù),先要申請(qǐng)總線使用權(quán),獲得使用權(quán)后獨(dú)占總線進(jìn)行通信 數(shù)據(jù)交換 字符設(shè)備 CPU與慢速字符設(shè)備交換數(shù)據(jù)時(shí),由CPU控制設(shè)備與內(nèi)存之間的數(shù)據(jù)交換 輸入時(shí),CPU從控制器中將數(shù)據(jù)讀到CPU的寄存器中,再寫(xiě)到內(nèi)存單元 輸出時(shí),將

7、內(nèi)存數(shù)據(jù)讀到CPU的寄存器中,再寫(xiě)到控制器的數(shù)據(jù)寄存器中 塊設(shè)備 CPU與某些高速的塊設(shè)備交換數(shù)據(jù)時(shí),以DMA方式進(jìn)行 DMA控制器先申請(qǐng)總線使用權(quán),然后控制設(shè)備直接與內(nèi)存?zhèn)鬏敂?shù)據(jù),11,端口、接口,設(shè)備適配器與設(shè)備 顯卡 vs. 顯示器 聲卡 vs. 音響 網(wǎng)卡 vs. 網(wǎng)線 設(shè)備適配器(控制器)通過(guò)總線插槽(ISA或PCI等)接入系統(tǒng)總線,12,端口、接口,出于通用性設(shè)計(jì)的考慮,計(jì)算機(jī)硬件結(jié)構(gòu)都提供了一些標(biāo)準(zhǔn)的設(shè)備接口,這些接口遵照統(tǒng)一的標(biāo)準(zhǔn)來(lái)設(shè)計(jì),不同的設(shè)備只要遵從同一標(biāo)準(zhǔn)即可通過(guò)該接口與系統(tǒng)連接。 I/O接口分為兩類 通用接口 如串口、并口、USB接口 專用接口 IDE(Integra

8、ted Device Electronics,集成設(shè)備電路) SCSI接口 一個(gè)I/O接口可以帶多個(gè)同類型的設(shè)備 例如一個(gè)IDE接口可以帶兩個(gè)IDE磁盤驅(qū)動(dòng)器 標(biāo)準(zhǔn)的I/O接口為設(shè)備的開(kāi)發(fā)和使用提供了方便,13,端口、接口,設(shè)備資源 I/O設(shè)備與系統(tǒng)通信必須首先獲得一些系統(tǒng)資源 I/O端口地址 適配器中的每個(gè)I/O端口寄存器都有一個(gè)唯一的地址,一個(gè)適配器所擁有的I/O端口地址的總和稱為該設(shè)備的I/O范圍。 如COM1的I/O范圍為0 x03f80 x03ff。 中斷申請(qǐng)?zhí)朓RQ 設(shè)備申請(qǐng)中斷使用的中斷號(hào)碼 緩沖區(qū)地址 適配器中的緩沖區(qū)所映射的內(nèi)存地址范圍 DMA通道號(hào) 設(shè)備申請(qǐng)DMA使用的DM

9、A通道號(hào)碼 在安裝設(shè)備時(shí),由系統(tǒng)為適配器分配這些資源,并保證各個(gè)設(shè)備的資源彼此不相沖突。,14,第六章 Linux設(shè)備管理,設(shè)備管理概述 總線、橋、端口、接口 設(shè)備驅(qū)動(dòng) Linux塊設(shè)備管理 塊設(shè)備 buffer head bio和bio_vec I/O請(qǐng)求隊(duì)列(Request queue) 調(diào)度算法 deadline、as、cfq、noop Linux其他設(shè)備管理 字符設(shè)備 網(wǎng)絡(luò)設(shè)備/時(shí)鐘設(shè)備/終端設(shè)備 設(shè)備管理相關(guān)技術(shù) 中斷 DMA,15,I/O設(shè)備的軟件結(jié)構(gòu),16,設(shè)備識(shí)別,設(shè)備號(hào) 主設(shè)備號(hào) (8bit) major number usually referred to a device

10、 driver or controller 次設(shè)備號(hào) (8bit) minor number was a particular device within that controller 主設(shè)備號(hào)標(biāo)識(shí)設(shè)備的控制器,次設(shè)備號(hào)用來(lái)區(qū)分同一控制器下的不同設(shè)備實(shí)例 主設(shè)備號(hào)與設(shè)備的驅(qū)動(dòng)程序一一對(duì)應(yīng),而次設(shè)備號(hào)供驅(qū)動(dòng)程序內(nèi)部使用 devfs: 通過(guò)devfs(設(shè)備文件系統(tǒng))訪問(wèn) (Linux的新動(dòng)向) With devfs, a module can register a device by name rather than a major/minor number pair 通過(guò)一個(gè)16bit設(shè)備號(hào)進(jìn)

11、行識(shí)別 為了兼容,devfs可以將major:minor模式轉(zhuǎn)換為唯一的16bit設(shè)備號(hào),17,設(shè)備驅(qū)動(dòng),The hardware device driver 直接操控底層硬件 熟知底層設(shè)備的物理特性 register locations, I/O, timing, 設(shè)備管理方式 interrupt, DMA 封裝對(duì)物理設(shè)備的操作 提供open、close、read、write等操作函數(shù),18,通用塊設(shè)備驅(qū)動(dòng), Generic Block Driver register_blkdev (major, dev_name, fops) 注冊(cè) struct gendisk *alloc_disk (

12、int minors); include/linux/genhd.h 創(chuàng)建gendisk結(jié)構(gòu)體 blk_init_queue(request_fn_proc, spinlock_t) 初始化I/O請(qǐng)求隊(duì)列 void add_disk (struct gendisk *disk); 使得內(nèi)核對(duì)該塊設(shè)備可見(jiàn),19,訪問(wèn)塊設(shè)備,Device driver registers itself at driver initialization time This adds the driver to the kernels driver table mapping the device number /d

13、evices name (每個(gè)設(shè)備被視為一個(gè)文件) to the block_device_operations structure,20,第六章 Linux設(shè)備管理,設(shè)備管理概述 總線、橋、端口、接口 設(shè)備驅(qū)動(dòng) Linux塊設(shè)備管理 塊設(shè)備 buffer head bio和bio_vec I/O請(qǐng)求隊(duì)列(Request queue) 調(diào)度算法 deadline、as、cfq、noop Linux其他設(shè)備管理 字符設(shè)備 網(wǎng)絡(luò)設(shè)備/時(shí)鐘設(shè)備/終端設(shè)備 設(shè)備管理相關(guān)技術(shù) 中斷 DMA,21,塊設(shè)備 硬盤,扇區(qū) Sector(扇區(qū)) 512B Sector是磁盤存儲(chǔ)的最小物理單位 塊(block)

14、塊(block)由若干個(gè)相鄰的扇區(qū)組成 塊是對(duì)存儲(chǔ)空間的邏輯劃分 塊是分區(qū)格式化時(shí)指定的“最小存儲(chǔ)單位” Sblock = 2k Ssector (但小于或等于頁(yè)的大小) 常見(jiàn)塊大小: 512B, 1KB,4KB 說(shuō)明 扇區(qū):設(shè)備的最小尋址單位 塊: 文件系統(tǒng)的最小尋址單位 文件系統(tǒng)以塊為單位對(duì)磁盤進(jìn)行讀/寫(xiě),22,Buffer Head結(jié)構(gòu)體 (1),buffer The buffer represents a disk block in memory 當(dāng)磁盤上的一個(gè)block調(diào)入內(nèi)存時(shí),其存儲(chǔ)在一個(gè)buffer中 每個(gè)buffer和一個(gè)block對(duì)應(yīng) 一個(gè)page可存儲(chǔ)一個(gè)或多個(gè)block

15、 buffer_head結(jié)構(gòu)體 buffer_head是buffer的描述符 記錄了buffer與block對(duì)應(yīng)關(guān)系:來(lái)自哪個(gè)設(shè)備、哪個(gè)block 記錄了內(nèi)核操作buffer的所需信息: 狀態(tài)、計(jì)數(shù)等 A buffer_head contains all the information necessary to map a physical block to a buffer in physical memory.,23,Buffer 與 Buffer Head (2),buffer_head結(jié)構(gòu)體 (include/linux/buffer_head.h L50) 說(shuō)明 b_data指向bu

16、ffer在內(nèi)存的起始地址 b_data + b_size即為buffer在內(nèi)存中的結(jié)束地址,24,Buffer 與 Buffer Head (3),unsigned long b_state; /* buffer state flags */,25,bio (block I/O)和bio_vec結(jié)構(gòu)體 (1),為了更好地利用內(nèi)存碎片,一個(gè)磁盤block能否對(duì)應(yīng)多個(gè)不連續(xù)內(nèi)存片段呢? bio_vec 來(lái)描述內(nèi)存中的片段(segment),這些segment可位于不同的page bio被引入用來(lái)描述一個(gè)磁盤block與多個(gè)內(nèi)存片段對(duì)應(yīng),26,bio和bio_vec結(jié)構(gòu)體 (2),bio結(jié)構(gòu)體 (i

17、nclude/linux/bio.h L70),27,bio和bio_vec結(jié)構(gòu)體 (3),bio_vec結(jié)構(gòu)體 (include/linux/bio.h L56) 描述一個(gè)segment片段,28,buffer_head 與 bio總結(jié),buffer_head描述一個(gè)連續(xù)內(nèi)存空間,它與磁盤上一個(gè)block對(duì)應(yīng) bio用來(lái)描述一個(gè)磁盤block與多個(gè)內(nèi)存片段對(duì)應(yīng) bio_vec 來(lái)描述內(nèi)存中的片段(segment),這些segment可位于不同的物理page,29,訪問(wèn)塊設(shè)備,通用塊設(shè)備層(Generic Block Device Layer) request queue,30,請(qǐng)求隊(duì)列,Re

18、quest Queues and Scheduling I/O When a read or write request traverses the layers from VFS, through the filesystem drivers and page cache, it eventually ends up entering the block device driver to perform the actual I/O on the device that holds the data requested I/O請(qǐng)求隊(duì)列(I/O request queue) 每個(gè)塊設(shè)備擁有自己

19、的I/O request queue 進(jìn)程在對(duì)request queue“更新”前,須先對(duì)該隊(duì)列加“鎖” attempting to optimizes throughput but does not indefinitely postpone requests. (吞吐率 vs. 等待延遲),31,I/O請(qǐng)求隊(duì)列,request_queue結(jié)構(gòu)體 (include/linux/blkdev.h L287) 字段 struct list_head queue_head; /指向I/O請(qǐng)求隊(duì)列頭 struct request *last_merge; /最近剛合并的請(qǐng)求 elevator_t *

20、elevator; /電梯調(diào)度算法(三者之一) struct request_list rq; /read請(qǐng)求隊(duì)列和write請(qǐng)求隊(duì)列 只要請(qǐng)求隊(duì)列不為空,對(duì)應(yīng)的塊設(shè)備驅(qū)動(dòng)就從隊(duì)列頭獲取請(qǐng)求,然后處理。 在Linux2.6內(nèi)核,塊設(shè)備通過(guò)在_init()函數(shù)中調(diào)用 request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock) 來(lái)初始化請(qǐng)求隊(duì)列. (drivers/block/ll_rw_blk.c L1505),32,I/O請(qǐng)求,request結(jié)構(gòu)體 (include/linux/blkdev.h L108) r

21、equest_queue中的每一項(xiàng)I/O請(qǐng)求用request結(jié)構(gòu)體描述 字段 struct bio *bio; /第一個(gè)bio struct bio *biotail; /最后一個(gè)bio sector_t hard_sector; /* next sector to complete */ unsigned long hard_nr_sectors; /* no. of sectors left to complete */ unsigned int hard_cur_sectors; /* no. of sectors left to complete in the current segm

22、ent */ struct gendisk *rq_disk; /指向磁盤 unsigned long start_time; unsigned int timeout; 說(shuō)明: 一個(gè)request可能涉及多個(gè)連續(xù)的磁盤block,每個(gè)block用一個(gè)bio表示 磁盤上的block必須連續(xù),但在內(nèi)存中并不一定連續(xù),即每個(gè)bio結(jié)構(gòu)體可以組織多個(gè)內(nèi)存segment (每個(gè)segment用bio_vec來(lái)描述),33,下課了!,34,I/O調(diào)度,為什么需要I/O調(diào)度? 磁盤尋址是指將磁頭定位到特定的塊 磁盤尋址是整個(gè)計(jì)算機(jī)中最慢的操作之一 想一想:若按request提交的次序響應(yīng)操作,會(huì)怎么樣?

23、磁頭頻繁來(lái)回移動(dòng) (相當(dāng)于電梯為每一個(gè)請(qǐng)求來(lái)回跑),非常耗時(shí) I/O scheduler I/O scheduler的工作是管理塊設(shè)備的request queue 決定隊(duì)列中request的排列順序,及派發(fā)request的時(shí)機(jī) 目標(biāo):減少全局磁盤尋址時(shí)間、提高吞吐率 為了提高系統(tǒng)整體性能,可能對(duì)某些request不公平 法寶:對(duì)request進(jìn)行預(yù)處理 合并(merging)和排序(sorting),35,I/O調(diào)度,排序(sorting) 將請(qǐng)求隊(duì)列按照扇區(qū)地址同向方向有序排列 新提交的請(qǐng)求可以“插隊(duì)” 合并(merging) 在磁盤訪問(wèn)時(shí),若block相鄰的兩個(gè)請(qǐng)求可以合并,36,The

24、Linus Elevator,說(shuō)明 在Linux 2.4中,linux elevator是默認(rèn)的I/O調(diào)度程序 在Linux 2.6中,被deadline和as算法替代 當(dāng)一個(gè)新request加入隊(duì)列中時(shí) 當(dāng)一個(gè)新請(qǐng)求到來(lái)時(shí),先檢查隊(duì)列看能否合并 如果隊(duì)列中已存在一個(gè)相鄰磁盤扇區(qū)操作的請(qǐng)求,則新請(qǐng)求和這個(gè)已存在的請(qǐng)求合并 否則,新請(qǐng)求被插入到隊(duì)列中一個(gè)合適的位置 按扇區(qū)地址增長(zhǎng)原則,能否插入到兩個(gè)請(qǐng)求之間 否則,新請(qǐng)求加入到隊(duì)列尾 特殊情況 若隊(duì)列中某個(gè)請(qǐng)求等待時(shí)間超過(guò)了一個(gè)閥值(threadhold),新請(qǐng)求被加入到隊(duì)列尾部,防止其他請(qǐng)求饑餓 缺點(diǎn):并不能真正地防止饑餓,37,Deadlin

25、e I/O Scheduler (1),為了消除饑餓,特別是讀請(qǐng)求饑餓,提出了Deadline I/O Scheduler drivers/block/deadline-iosched.c 區(qū)分read request和write request的緊迫程度 Read request: 必須和進(jìn)程同步,因?yàn)檫M(jìn)程必須掛起,直到讀操作完成 Write request:可以和進(jìn)程異步執(zhí)行 (但頁(yè)不能讓write reqeust等太久才執(zhí)行) 缺省的deadline 每個(gè)請(qǐng)求都有一個(gè)超時(shí)時(shí)間(an expiration time) Read請(qǐng)求: 500ms write請(qǐng)求: 5s 三個(gè)隊(duì)列 在sort

26、ed queue,請(qǐng)求按磁盤扇區(qū)地址增長(zhǎng)方向排列 在read queue和write queue,請(qǐng)求按FIFO排列,38,Deadline I/O Scheduler (2),Deadline I/O Scheduler 新請(qǐng)求到來(lái)時(shí) 在sorted queue中進(jìn)行插入或合并 以保證sorted queue中請(qǐng)求按磁盤扇區(qū)地址增長(zhǎng)方向排列 根據(jù)請(qǐng)求類型,按FIFO加入到read queue或者write queue的隊(duì)尾 處理請(qǐng)求(讀請(qǐng)求優(yōu)先) 先檢查read queue的隊(duì)首元素,若該請(qǐng)求已到期限,則馬上處理 若無(wú)read請(qǐng)求到期,則去檢查write queue的隊(duì)首元素 若無(wú)read請(qǐng)

27、求和write請(qǐng)求到期,則按sorted queue進(jìn)行處理 缺點(diǎn): 降低了系統(tǒng)吞吐率 有可能多次尋址,39,Anticipatory I/O Scheduler (預(yù)測(cè)、期待),Anticipatory I/O scheduler目標(biāo)是 通過(guò)短暫時(shí)間停滯,期待臨近地址的請(qǐng)求到來(lái),以減少磁頭頻繁來(lái)回尋址 attempts to anticipate what the next operation is and aims to improve I/O throughput. drivers/block/as-iosched.c 與deadline I/O scheduler異同 相同點(diǎn) Read

28、 queue, write queue, sorted queue 對(duì)每個(gè)請(qǐng)求設(shè)置deadline:read request 500ms, write request 5s 不同點(diǎn) 處理完一個(gè)請(qǐng)求后, Anticipatory并不馬上處理其他請(qǐng)求,而是暫停6ms(預(yù)等待期),以等待一個(gè)位置臨近的請(qǐng)求到來(lái) 若在預(yù)等待期內(nèi),有一個(gè)臨近區(qū)域的請(qǐng)求到來(lái),則處理該請(qǐng)求 過(guò)了預(yù)等待期,則調(diào)度程序回歸正常操作(和deadline調(diào)度一樣),40,cfq: Complete Fair Queuing I/O Scheduler,cfq (完全公平調(diào)度算法)是為特殊任務(wù)設(shè)計(jì)的 Round robin per-p

29、rocess disk scheduling drivers/block/cfq-iosched.c 核心思想 cfg為每個(gè)進(jìn)程創(chuàng)建一個(gè)I/O請(qǐng)求隊(duì)列 在每個(gè)隊(duì)列中,I/O請(qǐng)求按序排列(支持“插隊(duì)”或“合并”) 以時(shí)間片輪轉(zhuǎn)調(diào)度進(jìn)程的I/O請(qǐng)求 This provides fairness at a per-process level, assuring that each process receives a fair slice of the disks bandwidth. 說(shuō)明: The intended workload is multimedia cfq is recommende

30、d for desktop workloads,41,The noop I/O Scheduler (no-operation),no-op I/O Scheduler drivers/block/noop-iosched.c It is intended only for random-access devices, e.g., flash memory cards. 核心思想 Noop面向random-access device,故不存在磁頭來(lái)回移動(dòng)問(wèn)題,故無(wú)需使I/O request按地址增長(zhǎng)方向排序(無(wú)需插隊(duì)) reqeust queue I/O請(qǐng)求按FIFO排隊(duì) 對(duì)地址相鄰的兩個(gè)請(qǐng)求

31、進(jìn)行“合并” 故在noop中,請(qǐng)求隊(duì)列是一種near-FIFO(近似FIFO)隊(duì)列 說(shuō)明 常用于無(wú)磁盤的嵌入式系統(tǒng)(RAM),42,I/O調(diào)度算法總結(jié),Linux2.6提供了以上四種塊設(shè)備I/O請(qǐng)求調(diào)度算法 在啟動(dòng)階段,可以通過(guò)命令行修改 elevator=foo 激活新的I/O調(diào)度算法,43,第六章 Linux設(shè)備管理,設(shè)備管理概述 總線、橋、端口、接口 設(shè)備驅(qū)動(dòng) Linux塊設(shè)備管理 塊設(shè)備 buffer head bio和bio_vec I/O請(qǐng)求隊(duì)列(Request queue) 調(diào)度算法 deadline、as、cfq、noop Linux其他設(shè)備管理 字符設(shè)備 網(wǎng)絡(luò)設(shè)備/時(shí)鐘設(shè)備/

32、終端設(shè)備 設(shè)備管理相關(guān)技術(shù) 中斷 DMA,44,其他設(shè)備 (1),字符設(shè)備(Character device) 字符設(shè)備與主機(jī)之間的I/O通過(guò)字符或者字符流 例如:key board (serial devices) Block device和character device比較 All Linux device I/O is based on files. All Linux device I/O is either character or block Random access Block device (Yes) vs. character device (No) 請(qǐng)求隊(duì)列(Reque

33、st queue) Block device需要request queue,而character device不需要 中斷(Interrupt) 對(duì)無(wú)buffer的character device來(lái)說(shuō),每接受一個(gè)字符須發(fā)生中斷 而對(duì)于Block device而言,一個(gè)數(shù)據(jù)塊才發(fā)生一次中斷,45,其他設(shè)備 (2),網(wǎng)絡(luò)設(shè)備(Network Devices) Network devices have attributes of both block and character devices Like a character device, at the physical level, data

34、is transmitted serially. Like a block device, data is packetized and moved to and from the network controller via direct memory access(DMA). 時(shí)鐘設(shè)備(Clock Devices) Clocks are I/O devices that count the hardware heartbeat of the system. Without the concept of elapsed time, Linux would cease to function.

35、 終端設(shè)備(Terminal Devices) tty: send and receive text data,46,第六章 Linux設(shè)備管理,設(shè)備管理概述 總線、橋、端口、接口 設(shè)備驅(qū)動(dòng) Linux塊設(shè)備管理 塊設(shè)備 buffer head bio和bio_vec I/O請(qǐng)求隊(duì)列(Request queue) 調(diào)度算法 deadline、as、cfq、noop Linux其他設(shè)備管理 字符設(shè)備 網(wǎng)絡(luò)設(shè)備/時(shí)鐘設(shè)備/終端設(shè)備 設(shè)備管理相關(guān)技術(shù) 中斷 DMA,47,中斷,中斷(interrupt) 在計(jì)算機(jī)運(yùn)行期間,當(dāng)系統(tǒng)內(nèi)部或外部發(fā)生了某個(gè)異步事件需要CPU處理時(shí),CPU將暫時(shí)中止當(dāng)前正在執(zhí)

36、行的程序,而轉(zhuǎn)去執(zhí)行相應(yīng)的事件處理程序,待處理完畢后又返回原來(lái)被中斷處,繼續(xù)執(zhí)行或者調(diào)度新的進(jìn)程執(zhí)行,這個(gè)過(guò)程就稱為“中斷”。 異步事件指與系統(tǒng)運(yùn)行沒(méi)有時(shí)序關(guān)系的、不可預(yù)期的事件 用戶按下鍵盤按鍵、磁盤傳輸數(shù)據(jù)完成、系統(tǒng)硬件出現(xiàn)故障等 中斷最早應(yīng)用在I/O傳輸過(guò)程中,它使外部設(shè)備和CPU的并行工作成為可能 中斷技術(shù)已擴(kuò)大到設(shè)備之外的其他事件 凡是需要CPU干涉或處理的異步事件都采用中斷的手段進(jìn)行處理。 中斷對(duì)于操作系統(tǒng)的意義重大,它是系統(tǒng)一切并發(fā)活動(dòng)的基礎(chǔ),因而是操作系統(tǒng)最基本的技術(shù)。,48,中斷,中斷源與中斷分類 引起中斷發(fā)生的事件稱為中斷源。 通常中斷源是由硬件產(chǎn)生的信號(hào),通知CPU某個(gè)需

37、要處理的事件 例,當(dāng)敲打鍵盤時(shí),鍵盤控制器就會(huì)產(chǎn)生一個(gè)鍵盤中斷源信號(hào) 中斷種類 I/O中斷: 由設(shè)備數(shù)據(jù)傳輸過(guò)程中發(fā)生的中斷屬于I/O中斷 時(shí)鐘中斷:周期性的時(shí)鐘中斷 其他中斷: 由內(nèi)部故障或程序故障引起的“異?!?exception) 電源掉電、CPU故障、除數(shù)為0、內(nèi)存溢出、執(zhí)行了陷入指令,49,中斷,中斷請(qǐng)求 中斷源通過(guò)中斷線送到中斷控制器的輸入端,這稱為中斷請(qǐng)求。 中斷控制器 一個(gè)硬件裝置,它負(fù)責(zé)捕獲中斷請(qǐng)求,并以一定的方式向CPU提交中斷。 競(jìng)爭(zhēng) 由于同時(shí)可能會(huì)有多個(gè)中斷信號(hào)產(chǎn)生,它們需要共用有限的中斷控制線。 因此,當(dāng)設(shè)備要使用中斷控制線時(shí)就要先進(jìn)行中斷請(qǐng)求(IRQ),以獲得中斷控制線的使用權(quán)。,50,中斷,中斷響應(yīng) CPU在收到來(lái)自中斷控制器的中斷信號(hào)后,暫停執(zhí)行當(dāng)前的進(jìn)程,轉(zhuǎn)入相應(yīng)的中斷處理程序進(jìn)行處理,這個(gè)反應(yīng)的過(guò)程稱為中斷響應(yīng)。 通常CPU在執(zhí)行完一條指令后,會(huì)檢查有無(wú)中斷請(qǐng)求。如有,則會(huì)立即作出響應(yīng)。 由硬件和軟件相結(jié)合的一整套中斷機(jī)構(gòu)實(shí)施 中斷響應(yīng)由硬件實(shí)施,中斷處理主要由軟件實(shí)施 中斷實(shí)施過(guò)程 保存現(xiàn)場(chǎng) 中止當(dāng)前進(jìn)程的執(zhí)行,對(duì)被響應(yīng)的中斷進(jìn)行應(yīng)答,保存當(dāng)前進(jìn)程的斷點(diǎn)信息(主要是程序狀態(tài)字P

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論