Some typical device, network, and bus data rates.
I/O设备大致可以分为两类:块设备与字符设备。块设备把信息存储在固定大小的块中,每隔块有自己的地址。通常块的大小在512字节至32769字节之间。所有传输以一个或多个完整的(连续的)块为单位。块设备的基本特征是每个块能独立于其它快而读写。硬盘、CD-ROM和USB是常见的块设备。
(a) Separate I/O and memory space. (b) Memory-mapped I/O. (c) Hybrid.
将IO端口映射为内存进行访问,在设备打开或驱动模块被加载时,申请IO端口区域并使用ioport_map()映射到内存,之后使用IO内存的函数进行端口访问,最后,在设备关闭或驱动模块被卸载时释放IO端口并释放映射
(a) A single-bus architecture. (b) A dual-bus memory architecture.
Ø I/O设备的寄存器和内存被映射到CPU的内存地址空间 Ø CPU访问I/O设备的方式和操作普通内存的方式是一样的。这样简化了I/O操作。 Ø I/O设备和普通内存共享相同的总线信号(地址、数据、控制) Ø 因为I/O操作要比内存操作慢,所以这种方式,会降低总线的速率,造成内存操作的性能下降 Ø 由与此类型的CPU架构采用了单独的地址空间,所以CPU的逻辑、设计都变的简单了,CPU的运行速度变快了,RISC计算机就是采取这种设计方式。
How an interrupt happens. The connections between the devices and the interrupt controller actually use interrupt lines on the bus rather than dedicated wires.
所有的linux操作系统都是基于中断驱动的。
中断其实就是由硬件或软件所发送的一种称为IRQ(中断请求)的信号。
中断允许让设备,如键盘,串口卡,并口等设备表明它们需要CPU。
一旦CPU接收了中断请求,CPU就会暂时停止执行正在运行的程序,并且调用一个称为中断处理器或中断服务程序(interrupt service routine)的特定程序。
中断服务程序或中断处理器可以在中断向量表中找到,而这个中断向量表位于内存中的固定地址中。中断被CPU处理后,就会恢复执行之前被中断的程序。
当我们在键盘上按下一个按键时,键盘就会对CPU说,一个键已经被按下。在这种情况下,键盘的IRQ线路中的电压就会发生一次变化,而这种电压的变化就是来自设备的请求,就相当于说这个设备有一个请求需要处理。
Operation of a DMA transfer.
DMA是一种无需CPU的参与就可以让外设和系统内存之间进行双向数据传输的硬件机制。使用DMA可以使系统CPU从实际的I/O数据传输过程中摆脱出来,从而大大提高系统的吞吐率。DMA经常与硬件体系结构特别是外设的总线技术密切相关。
一、DMA控制器硬件结构 DMA允许外围设备和主内存之间直接传输 I/O 数据, DMA 依赖于系统。每一种体系结构DMA传输不同,编程接口也不同。 数据传输可以以两种方式触发:一种软件请求数据,另一种由硬件异步传输。 a -- 软件请求数据 调用的步骤可以概括如下(以read为例): (1)在进程调用 read 时,驱动程序的方法分配一个 DMA 缓冲区,随后指示硬件传送它的数据。进程进入睡眠。 (2)硬件将数据写入 DMA 缓冲区并在完成时产生一个中断。 (3)中断处理程序获得输入数据,应答中断,最后唤醒进程,该进程现在可以读取数据了。 b -- 由硬件异步传输 在 DMA 被异步使用时发生的。以数据采集设备为例: (1)硬件发出中断来通知新的数据已经到达。 (2)中断处理程序分配一个DMA缓冲区。 (3)外围设备将数据写入缓冲区,然后在完成时发出另一个中断。 (4)处理程序利用DMA分发新的数据,唤醒任何相关进程。
Layers of the I/O software system.
I/O软件通常组织成四个层次,每一个层具有一个要执行的定义明确的功能和一个定义明确的与邻近层次的接口。功能与接口随系统的不同而不同
Logical positioning of device drivers. In reality all communication between drivers and device controllers goes over the bus.
三种类型的设备:
字符设备
字符设备是个能像字节流(类似文件)一样被访问的设备,由字符设备驱动来实现这种特性。字符设备驱动通常至少实现open,close,read,write系统调用。
块设备
一个块设备驱动程序主要通过传输固定大小的数据来访问设备。块设备和字符设备的区别仅仅在于内核管理数据的方式,也就是内核及驱动程序之间的软件接口,而这些不同对用户来讲是透明的。在内核中,和字符取得相比,块设备具有完全不同的接口。
网络接口设备
任何网络事物都经过一个网络接口形成,即一个能够和其它主机交换数据的设备。它可以是个硬件设备,但也可能是个纯软件设备。访问网络接口的方法仍然是给它们分配一个唯一的名字(比如eth0),但这个名字在文件系统中不存在对应的节点。内核和网络设备驱动程序间的通信,完全不同于内核和字符以及块驱动程序之间的通信,内核调用一套和数据包传输相关的函数而不是read、write等。
(a) Without a standard driver interface. (b) With a standard driver interface.
操作系统的一个主要问题是如何使所有I/O设备与驱动程序看起来或多或少是想通的。如果每隔接口方式不同,那么每次在一个新设备出现时,都必须要为新设备修改操作系统。所以需要设计所有驱动程序具有想通的接口。
(a) Unbuffered input. (b) Buffering in user space. (c) Buffering in the kernel followed by copying to user space. (d) Double buffering in the kernel.
A character device is any device which does not allow random access (seeks)
Examples:
All character devices have a representation in /dev with type 'c'
A block device is any device which allows random access ("seeks") and which is divided into "blocks" of a given size.
Typical block devices:
All block devices have a representation in /dev with type 'b'
Table of Contents | t |
---|---|
Exposé | ESC |
Full screen slides | e |
Presenter View | p |
Source Files | s |
Slide Numbers | n |
Toggle screen blanking | b |
Show/hide slide context | c |
Notes | 2 |
Help | h |