i/o 设备在linux中被当作啥文件,Linux中的IO系统.ppt

Linux中的IO系统

Linux中的I/O系统 基本概念 Linux和其他的UNIX系统一样,I/O系统相当的简洁明了。 Linux计算机也像所有计算机一样具有磁盘、打印机、网 络等I/O设备。需要一些策略才能使程序访问这些设备。 Linux把设备当作一种 特殊文件 整合到文件系统中。每 个I/O设备都被分配一条路径,通常在/dev目录下。如打 印机的路径可能是 “/dev/lp”。 访问这些特殊文件与访问普通文件的方式相同,常用open、 read、write等系统调用。 例如: cp file/dev/lp 特殊文件(设备)分为两类,块特殊文件和字符特殊文件。 块特殊文件:由一组具有编号的块组成。它的主要特性是 每个块都可以被独立地寻址和访问。比如我们想访问第124 块,我们可以直接访问它而不用先依次去访问前123块。 字符特殊文件:用于表示输入输出字符流的设备。如键盘、 鼠标、打印机、网络以及大部分接受用户数据或输出数据 给用户的设备。 大部分的字符特殊文件都不能够被随机访问,因此它们用 不同于块文件的方式控制。如用“backspace”键去退格, 用"CTRL+C"去中断正在运行的程序。当然,这些方法并 不是唯一的。且Linux允许自定义这些特殊功能。Linux提 供一个专门的系统调用用来设置这些选项,只有字符特殊 文件可以使用这个系统调用。 另外,每个特殊文件都与一个设备的设备驱动相匹配。每 每个设备驱动程序都用主设备号和副设备号来标识,主设 备号与副设备号能够唯一确定一个I/O设备。 网络 I/O的另一个例子是网络,由Berkeley UNIX首创并在Linux引入。在Berkeley 的设计中,嵌套字是关键概念。 嵌套字允许用户连接到网络,就像邮筒允许用户连接到邮 政统一样。嵌套字的位置如图1。 每种嵌套字支持一种特定的网络类型,这在嵌套字创建时 指定。常见的类型是: 1)可靠的面向连接的字节流。 2)可靠的面向连接的数据包流。 3)不可靠的数据包传输。 前两种嵌套字类型都允许在不同机器上的两个进程间建立 一个等同于通道的连接,只是第二个嵌套字保留了数据包 之间的分界而已。第三种方式与前两种相比有更高的性能, 但可靠性相对差了点。 Linux的输入/输出系统调用 输入/输出在Linux中的实现 在Linux中I/O师通过一系列的设备驱动来实现的,每个设 备类型对应一个设备驱动。 当用户访问一个特殊文件时,由文件系统提供此特殊文件 的主设备号和副设备号,并判断它是一个块特殊文件还是 一个字特殊文件。主设备号用于引导存有字符设备或者块 设备数据结构的两个内部散列表之一。副设备号被当作参 数传递。在Linux系统中添加一个新的设备类型,意味着要 想这些表添加一个新的表项,并提供相应的函数来处理此 设备上的各种操作。 图三展示了一部分可以跟不同的字符设备关联的操作。每行指向一个单独的I/O设备。列表示所有的字符驱动程序必须支持的功能。 I/O系统被划分为两大部分:处理块特殊文件的部分和处理 字符特殊文件。 系统中处理块特殊文件I/O部分的目标是它必须完成的传输 次数最小。为了实现这个目标,Linux系统在磁盘驱动程序 和文件系统之间放置了一个高速缓存(cache)。 与字符设备的交互是很简单的。因为字符设备产生和接收 的是字符流或字节数据,所以让字符设备支持随机访问是 几乎没有意义的。当然,除了行规则以外。 感谢观看 * * * 嵌套字 图1 网络中使用嵌套字 发送进程 接受进程 大部分的I/O只使用合适的文件就可以完成,但有时需要一些设备专用的处理。在Linux中,每一个功能调用都是独立的系统调用。图中,前4个系统调用用来食指和获取终端速度。后两个系统调用用来设置和读回所有的消除符号和行以及中断字符等功能的特殊字符。 系统调用 描述 s=cfsetospeed(&termios,speed) 设置输出速率 s=cfsetispeed(&termios,speed) 设置输入速率 s=cfgetospeed(&termios,speed) 获取输出速率 s=cfgetispeed(&termios,speed) 获取输入速率 s=tcsetattr(fd,opt,&termios) 设置属性 s=tcgetattr(fd,&termios) 获取属性 图2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值