文章目录
I/O设备的基本概念和分类
什么是I/O设备
I/O设备的分类
按使用特性
按传输速率分类
按信息交换的单位分类
I/O控制器
I/O设备的机械部件
I/O设备的电子部件(I/O控制器)
I/O控制器的组成
内存映像I/O v.s. 寄存器独立编址
I/O控制方式
程序直接控制方式
中断驱动方式
DMA方式
通道控制方式
- 一个通道可以控制多个I/O控制器,而一个I/O控制器又可以控制多个I/O设备
I/O软件层次结构
用户层软件
设备独立性软件
设备驱动程序
中断处理程序
输入输出应用程序接口&驱动程序接口
输入/输出应用程序接口
字符设备接口&块设备接口
网络设备接口/网络套接字接口/socket接口
socket 网络套接字
不太好理解,我们可以简单地把其理解称为一片内核空间里面的内核存储空间
,这片空间会用于接收或者发送数据socket
系统调用会给用户返回一个描述符fd
,我们可以把其理解为指向这个套接字的一个指针- 同时,我们在套接字创建之后需要使用
bind 系统调用
把这个套接字绑定到本地的某个端口上面
- 现在两个主机都有了各自的套接字之后可以让主机1的这个p1进程使用
connect 系统调用
把本机的套接字连接到另一台机器的套接字上,比如可以把主机1的fd所指向的p1进程的套接字连接到具体ip地址的具体的端口上 connect 系统调用
就会使得这两个套接字之间建立起一个连接(应用层),然后它们可以规定在传输层要使用的协议TCP/UDP
- 现在p1想给p3发送一个数据包,那么p1首先会在自己的用户区准备好这个数据,然后使用
write 系统调用
指明我们现在要往fd所指向的这个套接字当中写入黄色的数据 - 设备独立性软件接收到write系统调用之后,它就会把用户进程准备好的这块数据给复制到内核区,也就是套接字所对应的这片缓冲区当中
- 接下来设备独立性软件这一层,它会调用网络控制器的驱动程序来处理这片数据,那这个驱动程序会负责把准备好的这一坨数据给它输出到网络设备上,接下来网络控制器就可以把这些数据包发到网络上面了
- 数据包在网络上的传送就需要计网中所涉及的TCP/UDP协议,这里使用的是TCP/IP协议
- 接下来数据包传送到对应目的设备的网络控制器上面之后,主机2会向主机发出一个中断信号,此时中断处理程序发现中断信号是来自于网络控制器,因此接下来会调用网络控制器的驱动程序,让驱动程序来把网络控制器里边收到的这些数据给它搬到内核的缓冲区里边
- 所以此时接收到的数据会被放到指定的端口所对应的那一片内核缓冲区中,接下来p3这个进程它要接受一个网络数据包,只需要使用read系统调用指明我要从fd所对应的这个套接字对象当中读出一个数据包,然后设备独立性软件会从缓冲区里边把对应的数据复制到用户进程的用户区当中,这样用户进程就可以使用其收到的这一块数据了
阻塞I/O v.s. 非阻塞I/O
设备驱动程序接口
统一标准的设备驱动程序接口
I/O核心子系统
要在哪个层次实现这些功能?
I/O调度
设备保护
假脱机技术(SPOOLing技术)
- 用软件方式实现的脱机技术
什么是脱机技术?
假脱机技术——输入井和输出井
- 类比磁带
假脱机技术——输入进程和输出进程
- 类比外围控制机
假脱机技术——输入/输出缓冲区
共享打印机原理分析
- SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备
设备的分配和回收
设备分配时应该考虑的因素
设备的固有属性
设备的分配算法
设备分配中的安全性
静态分配和动态分配
设备分配管理中的数据结构
设备控制表DCT
控制器控制表COCT
通道控制表CHCT
系统设备表SDT
设备分配的步骤
设备分配步骤的改进
缓冲区管理
什么是缓冲区?
缓冲区有什么作用?
单缓冲
双缓冲
使用单缓冲/双缓冲在通信时的区别
循环缓冲区
缓冲池
- 放满了各种各样的缓冲区的一个池子