I/O设备的基本概念和分类
I/O控制器
- 一个I/O控制器可能会对应多个设备;
- 数据寄存器、控制寄存器、状态寄存器可能有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要有相应的地址,才能方便CPU操作。
- 有的计算机会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些计算机则采用I/O专用地址,即寄存器独立编址。
🌟I/O控制方式🌟
用什么样的方式来控制I/O设备的数据读/写
I/O软件层次结构
- 理解并记住I/O软件各个层次之间的顺序,要能够推理判断某个处理应该是在哪个层次完成的,最常考的是设备独立性软件、设备驱动程序这两层
- 只需理解一个特点即可:直接涉及到硬件具体细节、且与中断无关的操作肯定是在设备驱动程序层完成的;没有涉及硬件的、对各种设备都需要进行的管理工作都是在设备独立性软件层完成的
- 设备独立性软件 = 设备无关性软件
逻辑设备表的作用 :建立逻辑设备名到物理设备名的映射关系;根据设备类型选择调用相应的驱动程序。
I/O应用程序接口 & 设备驱动程序接口
- 阻塞I/O:应用程序发出I/O系统调用,进程需转为阻塞态等待。
- eg:字符设备接口——从键盘读一个字符 get,如C语言中的scanf函数。
- 非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待。
- eg:块设备接口——往磁盘写数据 write
- 设备驱动程序接口:操作系统规定好设备驱动程序的接口标准,各厂商必须按要求开发设备驱动程序,形成统一标准的设备驱动程序接口
不同的操作系统,对设备驱动程序接口的标准各不相同。设备厂商必须根据操作系统的接口要求,开发相应的设备驱动程序,设备才能被使用
I/O核心子系统
- 操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。
- 在UNIX系统中,设备被看做是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户是否有相应的访问权限,以此实现“设备保护”的功能。
假脱机技术(SPOOLing技术)
- 虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。
- SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。
设备的分配与回收
设备的 固有属性 可分为三种:独占设备、共享设备、虚拟设备。
- 独占设备——一个时段只能分配给一个进程(如打印机)
- 共享设备——可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。
- 虚拟设备——采用 SPOOLing 技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用 SPOOLing 技术实现的共享打印机)
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源破坏了“请求和保持”条件,不会发生死锁
- 动态分配:进程运行过程中动态申请设备资源
缓冲区管理
💜单缓冲
结论:采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M
💖双缓冲
结论:采用双缓冲策略,处理一个数据块的平均耗时为 Max (T, C+M)
- 若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输
- 注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道