《Linux设备管理》课件.ppt_第1页
《Linux设备管理》课件.ppt_第2页
《Linux设备管理》课件.ppt_第3页
《Linux设备管理》课件.ppt_第4页
《Linux设备管理》课件.ppt_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第六章 Linux设备管理,设备管理概述 总线、桥、端口、接口 设备驱动 Linux块设备管理 块设备 buffer head bio和bio_vec I/O请求队列(Request queue) 调度算法 deadline、as、cfq、noop Linux其他设备管理 字符设备 网络设备/时钟设备/终端设备 设备管理相关技术 中断 DMA,2,设备分类 (1),输入设备、输出设备 输入设备:键盘、鼠标 输出设备:显示器、打印机 输入/输出设备:磁盘、网络、串口设备 系统设备与外部设备 系统设备:系统时钟、系统扬声器、总线接口 系统设备的驱动由内核本身完成 外部设备: 外部设备的驱动由专

2、门的驱动程序实现,以内核模块的方式附加到内核中 外部设备可以被安装和卸载,而系统设备则不能,3,设备分类 (2),独占设备与共享设备 独占设备:在某一时间段内只能被一个进程所使用的设备 打印机、终端设备等 共享设备: 允许多个进程同时使用的设备。 磁盘等存储设备:允许多个进程同时访问文件,存取文件的数据 字符设备与块设备 字符设备:终端设备(显示器、键盘、鼠标等)、打印机、串口设备 顺序访问 块设备:磁盘、光盘、闪存 随即访问 块设备都是以“文件系统挂载”的方式进行访问,4,设备管理,设备管理目标 从资源的角度出发 要尽可能地提高设备的使用效率,提高I/O系统的性能; 从用户的角度出发 设备管

3、理系统要屏蔽各种设备的物理特性,为用户提供一个统一的、方便的I/O操作界面 设备管理功能 设备分配 根据设备的特点对设备进行合理的分配和调度 设备驱动 根据进程的I/O请求,启动设备操作,控制数据传输 设备中断处理:对设备产生的中断进行处理 虚拟设备:用共享设备模拟独占设备,实现虚拟设备,5,设备与系统的接口,外部物理设备无法直接与CPU相连接的,存在以下差异 控制方式不同 CPU是数字化命令,而设备需要物理信号来控制 传输方式不同 CPU以字节为数据传输单位,设备可能以位或者块为单位 速度不匹配 设备的工作速度要比CPU慢许多 时序不一致 设备的定时控制电路,难以与CPU的时钟一致 信息形式

4、不同 CPU处理信息是数字的,设备则可能是模拟的 总线、桥、端口、接口 Busses, Bridges, Ports, and Interfaces,6,第六章 Linux设备管理,设备管理概述 总线、桥、端口、接口 设备驱动 Linux块设备管理 块设备 buffer head bio和bio_vec I/O请求队列(Request queue) 调度算法 deadline、as、cfq、noop Linux其他设备管理 字符设备 网络设备/时钟设备/终端设备 设备管理相关技术 中断 DMA,7,总线 (bus) 与 桥(bridge),总线(bus) 以总线为纽带,系统板上的部件都通过总线

5、相连,所有的信号都要通过总线进行传输。 a processor communicates with its surrounding devices is through a series of electrical connections (line). address bus data bus control bus 北桥 vs. 南桥 Bridge是两个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通过总线访问内存和设备,以及控制在内存和设备之间传输数据 独占使用方式 总线采用独占使用方式,任何设备若需要直接和内存交换数据,先要申请总线使用权,获得使用权后独占总线进行通信 数据交换 字符设备 CPU与慢速字符设备交换数据时,由CPU控制设备与内存之间的数据交换 输入时,CPU从控制器中将数据读到CPU的寄存器中,再写到内存单元 输出时,将

7、内存数据读到CPU的寄存器中,再写到控制器的数据寄存器中 块设备 CPU与某些高速的块设备交换数据时,以DMA方式进行 DMA控制器先申请总线使用权,然后控制设备直接与内存传输数据,11,端口、接口,设备适配器与设备 显卡 vs. 显示器 声卡 vs. 音响 网卡 vs. 网线 设备适配器(控制器)通过总线插槽(ISA或PCI等)接入系统总线,12,端口、接口,出于通用性设计的考虑,计算机硬件结构都提供了一些标准的设备接口,这些接口遵照统一的标准来设计,不同的设备只要遵从同一标准即可通过该接口与系统连接。 I/O接口分为两类 通用接口 如串口、并口、USB接口 专用接口 IDE(Integra

8、ted Device Electronics,集成设备电路) SCSI接口 一个I/O接口可以带多个同类型的设备 例如一个IDE接口可以带两个IDE磁盘驱动器 标准的I/O接口为设备的开发和使用提供了方便,13,端口、接口,设备资源 I/O设备与系统通信必须首先获得一些系统资源 I/O端口地址 适配器中的每个I/O端口寄存器都有一个唯一的地址,一个适配器所拥有的I/O端口地址的总和称为该设备的I/O范围。 如COM1的I/O范围为0 x03f80 x03ff。 中断申请号IRQ 设备申请中断使用的中断号码 缓冲区地址 适配器中的缓冲区所映射的内存地址范围 DMA通道号 设备申请DMA使用的DM

9、A通道号码 在安装设备时,由系统为适配器分配这些资源,并保证各个设备的资源彼此不相冲突。,14,第六章 Linux设备管理,设备管理概述 总线、桥、端口、接口 设备驱动 Linux块设备管理 块设备 buffer head bio和bio_vec I/O请求队列(Request queue) 调度算法 deadline、as、cfq、noop Linux其他设备管理 字符设备 网络设备/时钟设备/终端设备 设备管理相关技术 中断 DMA,15,I/O设备的软件结构,16,设备识别,设备号 主设备号 (8bit) major number usually referred to a device

10、 driver or controller 次设备号 (8bit) minor number was a particular device within that controller 主设备号标识设备的控制器,次设备号用来区分同一控制器下的不同设备实例 主设备号与设备的驱动程序一一对应,而次设备号供驱动程序内部使用 devfs: 通过devfs(设备文件系统)访问 (Linux的新动向) With devfs, a module can register a device by name rather than a major/minor number pair 通过一个16bit设备号进

11、行识别 为了兼容,devfs可以将major:minor模式转换为唯一的16bit设备号,17,设备驱动,The hardware device driver 直接操控底层硬件 熟知底层设备的物理特性 register locations, I/O, timing, 设备管理方式 interrupt, DMA 封装对物理设备的操作 提供open、close、read、write等操作函数,18,通用块设备驱动, Generic Block Driver register_blkdev (major, dev_name, fops) 注册 struct gendisk *alloc_disk (

12、int minors); include/linux/genhd.h 创建gendisk结构体 blk_init_queue(request_fn_proc, spinlock_t) 初始化I/O请求队列 void add_disk (struct gendisk *disk); 使得内核对该块设备可见,19,访问块设备,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 (每个设备被视为一个文件) to the block_device_operations structure,20,第六章 Linux设备管理,设备管理概述 总线、桥、端口、接口 设备驱动 Linux块设备管理 块设备 buffer head bio和bio_vec I/O请求队列(Request queue) 调度算法 deadline、as、cfq、noop Linux其他设备管理 字符设备 网络设备/时钟设备/终端设备 设备管理相关技术 中断 DMA,21,块设备 硬盘,扇区 Sector(扇区) 512B Sector是磁盘存储的最小物理单位 块(block)

14、块(block)由若干个相邻的扇区组成 块是对存储空间的逻辑划分 块是分区格式化时指定的“最小存储单位” Sblock = 2k Ssector (但小于或等于页的大小) 常见块大小: 512B, 1KB,4KB 说明 扇区:设备的最小寻址单位 块: 文件系统的最小寻址单位 文件系统以块为单位对磁盘进行读/写,22,Buffer Head结构体 (1),buffer The buffer represents a disk block in memory 当磁盘上的一个block调入内存时,其存储在一个buffer中 每个buffer和一个block对应 一个page可存储一个或多个block

15、 buffer_head结构体 buffer_head是buffer的描述符 记录了buffer与block对应关系:来自哪个设备、哪个block 记录了内核操作buffer的所需信息: 状态、计数等 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结构体 (include/linux/buffer_head.h L50) 说明 b_data指向bu

16、ffer在内存的起始地址 b_data + b_size即为buffer在内存中的结束地址,24,Buffer 与 Buffer Head (3),unsigned long b_state; /* buffer state flags */,25,bio (block I/O)和bio_vec结构体 (1),为了更好地利用内存碎片,一个磁盘block能否对应多个不连续内存片段呢? bio_vec 来描述内存中的片段(segment),这些segment可位于不同的page bio被引入用来描述一个磁盘block与多个内存片段对应,26,bio和bio_vec结构体 (2),bio结构体 (i

17、nclude/linux/bio.h L70),27,bio和bio_vec结构体 (3),bio_vec结构体 (include/linux/bio.h L56) 描述一个segment片段,28,buffer_head 与 bio总结,buffer_head描述一个连续内存空间,它与磁盘上一个block对应 bio用来描述一个磁盘block与多个内存片段对应 bio_vec 来描述内存中的片段(segment),这些segment可位于不同的物理page,29,访问块设备,通用块设备层(Generic Block Device Layer) request queue,30,请求队列,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请求队列(I/O request queue) 每个块设备拥有自己

19、的I/O request queue 进程在对request queue“更新”前,须先对该队列加“锁” attempting to optimizes throughput but does not indefinitely postpone requests. (吞吐率 vs. 等待延迟),31,I/O请求队列,request_queue结构体 (include/linux/blkdev.h L287) 字段 struct list_head queue_head; /指向I/O请求队列头 struct request *last_merge; /最近刚合并的请求 elevator_t *

20、elevator; /电梯调度算法(三者之一) struct request_list rq; /read请求队列和write请求队列 只要请求队列不为空,对应的块设备驱动就从队列头获取请求,然后处理。 在Linux2.6内核,块设备通过在_init()函数中调用 request_queue_t *blk_init_queue(request_fn_proc *rfn, spinlock_t *lock) 来初始化请求队列. (drivers/block/ll_rw_blk.c L1505),32,I/O请求,request结构体 (include/linux/blkdev.h L108) r

21、equest_queue中的每一项I/O请求用request结构体描述 字段 struct bio *bio; /第一个bio struct bio *biotail; /最后一个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; 说明: 一个request可能涉及多个连续的磁盘block,每个block用一个bio表示 磁盘上的block必须连续,但在内存中并不一定连续,即每个bio结构体可以组织多个内存segment (每个segment用bio_vec来描述),33,下课了!,34,I/O调度,为什么需要I/O调度? 磁盘寻址是指将磁头定位到特定的块 磁盘寻址是整个计算机中最慢的操作之一 想一想:若按request提交的次序响应操作,会怎么样?

23、磁头频繁来回移动 (相当于电梯为每一个请求来回跑),非常耗时 I/O scheduler I/O scheduler的工作是管理块设备的request queue 决定队列中request的排列顺序,及派发request的时机 目标:减少全局磁盘寻址时间、提高吞吐率 为了提高系统整体性能,可能对某些request不公平 法宝:对request进行预处理 合并(merging)和排序(sorting),35,I/O调度,排序(sorting) 将请求队列按照扇区地址同向方向有序排列 新提交的请求可以“插队” 合并(merging) 在磁盘访问时,若block相邻的两个请求可以合并,36,The

24、Linus Elevator,说明 在Linux 2.4中,linux elevator是默认的I/O调度程序 在Linux 2.6中,被deadline和as算法替代 当一个新request加入队列中时 当一个新请求到来时,先检查队列看能否合并 如果队列中已存在一个相邻磁盘扇区操作的请求,则新请求和这个已存在的请求合并 否则,新请求被插入到队列中一个合适的位置 按扇区地址增长原则,能否插入到两个请求之间 否则,新请求加入到队列尾 特殊情况 若队列中某个请求等待时间超过了一个阀值(threadhold),新请求被加入到队列尾部,防止其他请求饥饿 缺点:并不能真正地防止饥饿,37,Deadlin

25、e I/O Scheduler (1),为了消除饥饿,特别是读请求饥饿,提出了Deadline I/O Scheduler drivers/block/deadline-iosched.c 区分read request和write request的紧迫程度 Read request: 必须和进程同步,因为进程必须挂起,直到读操作完成 Write request:可以和进程异步执行 (但页不能让write reqeust等太久才执行) 缺省的deadline 每个请求都有一个超时时间(an expiration time) Read请求: 500ms write请求: 5s 三个队列 在sort

26、ed queue,请求按磁盘扇区地址增长方向排列 在read queue和write queue,请求按FIFO排列,38,Deadline I/O Scheduler (2),Deadline I/O Scheduler 新请求到来时 在sorted queue中进行插入或合并 以保证sorted queue中请求按磁盘扇区地址增长方向排列 根据请求类型,按FIFO加入到read queue或者write queue的队尾 处理请求(读请求优先) 先检查read queue的队首元素,若该请求已到期限,则马上处理 若无read请求到期,则去检查write queue的队首元素 若无read请

27、求和write请求到期,则按sorted queue进行处理 缺点: 降低了系统吞吐率 有可能多次寻址,39,Anticipatory I/O Scheduler (预测、期待),Anticipatory I/O scheduler目标是 通过短暂时间停滞,期待临近地址的请求到来,以减少磁头频繁来回寻址 attempts to anticipate what the next operation is and aims to improve I/O throughput. drivers/block/as-iosched.c 与deadline I/O scheduler异同 相同点 Read

28、 queue, write queue, sorted queue 对每个请求设置deadline:read request 500ms, write request 5s 不同点 处理完一个请求后, Anticipatory并不马上处理其他请求,而是暂停6ms(预等待期),以等待一个位置临近的请求到来 若在预等待期内,有一个临近区域的请求到来,则处理该请求 过了预等待期,则调度程序回归正常操作(和deadline调度一样),40,cfq: Complete Fair Queuing I/O Scheduler,cfq (完全公平调度算法)是为特殊任务设计的 Round robin per-p

29、rocess disk scheduling drivers/block/cfq-iosched.c 核心思想 cfg为每个进程创建一个I/O请求队列 在每个队列中,I/O请求按序排列(支持“插队”或“合并”) 以时间片轮转调度进程的I/O请求 This provides fairness at a per-process level, assuring that each process receives a fair slice of the disks bandwidth. 说明: 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,故不存在磁头来回移动问题,故无需使I/O request按地址增长方向排序(无需插队) reqeust queue I/O请求按FIFO排队 对地址相邻的两个请求

31、进行“合并” 故在noop中,请求队列是一种near-FIFO(近似FIFO)队列 说明 常用于无磁盘的嵌入式系统(RAM),42,I/O调度算法总结,Linux2.6提供了以上四种块设备I/O请求调度算法 在启动阶段,可以通过命令行修改 elevator=foo 激活新的I/O调度算法,43,第六章 Linux设备管理,设备管理概述 总线、桥、端口、接口 设备驱动 Linux块设备管理 块设备 buffer head bio和bio_vec I/O请求队列(Request queue) 调度算法 deadline、as、cfq、noop Linux其他设备管理 字符设备 网络设备/时钟设备/

32、终端设备 设备管理相关技术 中断 DMA,44,其他设备 (1),字符设备(Character device) 字符设备与主机之间的I/O通过字符或者字符流 例如: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) 请求队列(Reque

33、st queue) Block device需要request queue,而character device不需要 中断(Interrupt) 对无buffer的character device来说,每接受一个字符须发生中断 而对于Block device而言,一个数据块才发生一次中断,45,其他设备 (2),网络设备(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). 时钟设备(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、 终端设备(Terminal Devices) tty: send and receive text data,46,第六章 Linux设备管理,设备管理概述 总线、桥、端口、接口 设备驱动 Linux块设备管理 块设备 buffer head bio和bio_vec I/O请求队列(Request queue) 调度算法 deadline、as、cfq、noop Linux其他设备管理 字符设备 网络设备/时钟设备/终端设备 设备管理相关技术 中断 DMA,47,中断,中断(interrupt) 在计算机运行期间,当系统内部或外部发生了某个异步事件需要CPU处理时,CPU将暂时中止当前正在执

36、行的程序,而转去执行相应的事件处理程序,待处理完毕后又返回原来被中断处,继续执行或者调度新的进程执行,这个过程就称为“中断”。 异步事件指与系统运行没有时序关系的、不可预期的事件 用户按下键盘按键、磁盘传输数据完成、系统硬件出现故障等 中断最早应用在I/O传输过程中,它使外部设备和CPU的并行工作成为可能 中断技术已扩大到设备之外的其他事件 凡是需要CPU干涉或处理的异步事件都采用中断的手段进行处理。 中断对于操作系统的意义重大,它是系统一切并发活动的基础,因而是操作系统最基本的技术。,48,中断,中断源与中断分类 引起中断发生的事件称为中断源。 通常中断源是由硬件产生的信号,通知CPU某个需

37、要处理的事件 例,当敲打键盘时,键盘控制器就会产生一个键盘中断源信号 中断种类 I/O中断: 由设备数据传输过程中发生的中断属于I/O中断 时钟中断:周期性的时钟中断 其他中断: 由内部故障或程序故障引起的“异常”(exception) 电源掉电、CPU故障、除数为0、内存溢出、执行了陷入指令,49,中断,中断请求 中断源通过中断线送到中断控制器的输入端,这称为中断请求。 中断控制器 一个硬件装置,它负责捕获中断请求,并以一定的方式向CPU提交中断。 竞争 由于同时可能会有多个中断信号产生,它们需要共用有限的中断控制线。 因此,当设备要使用中断控制线时就要先进行中断请求(IRQ),以获得中断控制线的使用权。,50,中断,中断响应 CPU在收到来自中断控制器的中断信号后,暂停执行当前的进程,转入相应的中断处理程序进行处理,这个反应的过程称为中断响应。 通常CPU在执行完一条指令后,会检查有无中断请求。如有,则会立即作出响应。 由硬件和软件相结合的一整套中断机构实施 中断响应由硬件实施,中断处理主要由软件实施 中断实施过程 保存现场 中止当前进程的执行,对被响应的中断进行应答,保存当前进程的断点信息(主要是程序状态字P

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论