I/O设备管理
参考资料:谌卫军 王浩娟《操作系统》
1.I/O设备类型
2. CPU与I/O设备交互流程
控制器:一组芯片,主要集成在主板或者,I/O设备内部
控制寄存器:操作系统通过往其中写不同的值,来执行发送/接受数据,打开/关闭操作
状态寄存器:操作系统通过读取其中的值,来自的设备当前状态(就绪,繁忙等)
数据寄存器:操作系统读取与写入数据
数据缓冲区:操作系统用来读写操作
3. I/O地址
CPU需要访问控制器,就需要I/O地址
- I/O独立编址:所有控制器中的每一个寄存器分配一个唯一的I/O端口编号
构成的地址单元完全独立,与内存地址没有任何关系
指令 | 效果 |
---|---|
MOV AX [2] | 内存地址为2的单元内容保存到寄存器AX中 |
IN AX [2] | I/O端口编号为2的单元内容保存到寄存器AX中 |
- 内存映射编址:所有控制器中的每一个寄存器映射为一个内存地址
与内存地址访问完全相同,一般位于内存地址的高位,内存低址为普通内存
优点 | 缺点 |
---|---|
无需专门的输入输出命令 | 不能对控制寄存器Cache |
无需保护机制(防止用户执行I/O操作) | 每次都需要去判断访问的是内存还是I/O |
无需保护机制(防止用户执行I/O操作原理:内存管理中的内存保护机制,端口##### 地址排除在用户进程的逻辑空间之外,不允许他们去访问
- 混合编址:以上两者的综合,对于寄存器 I/O独立编址,对于数据缓冲区 内存映射编址
4. I/O控制方式
操作系统知道地址后,那又以什么方式访问呢?
- 循环检测:进行I/O操作,要询问I/O设备是否可用,CPU会一直询问并等到I/O操作完成,再进行下一步----造成了CPU的循环等待,十分浪费
- 中断机制:就是让CPU不去等待I/O操作完成,而是让中断控制器去处理,让他去叫CPU处理,但最后还是CPU处理。
注:只有中断处理器收到确认信号方可以发出新的中断信号 - DMA :直接内存访问
注:CPU已经发送命令让磁盘控制器读取了磁盘的数据到他的数据缓冲区
1:向磁盘控制器发出读操作,把要写入内存地址打在总线上
2:磁盘控制器的数据缓冲区取一个字节,写入第一步所给地址内存中
3:前两步执行完成后,磁盘控制器向DMA控制器发送确认信号(内存字节+1,传送字节数-1 if计数器>0 返回第一步)
注:对DMA编程指CPU可以向DMA发送读写等等操作
5. 以上已经能实现对I/O的控制,但控制过于细节,为了去掉细节,我们需要设计I/O软件,更好的管理
API
如WindowsAPI
BOOL ReadFile(HANDLE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
这是一个ReadFile API 的参数,对于开发应用程序的人来说,只要知道这个函数怎么用就行,让操作系统再去操作那些细节
注:一般我们希望API分两类,阻塞I/O,形象的来说scanf ;非阻塞I/O 就会涉及到多线程编程
抽象接口
抽象接口面对的设备,所以函数原型相同,于是通过驱动程序来对抽象接口进行转换,比如参数等等,然后才能向设备控制器发送指令
设备独立的I/O软件
- 定义与实现了API与抽象接口
- 提供设备无关的数据块大小
- 缓存技术
拓展:Spooling技术
作用:多道让CPU可以成为多个逻辑CPU;Spooling技术让一台I/O设备成为多台逻辑I/O设备…
6.介绍具体设备—磁盘
1.结构
磁盘设备有一个或多个物理盘片,每个物理盘片有一个或者两个存储面,存储面上有若干磁道,每个磁道又分若干扇区(数据块),扇区与扇区间有扇区间隔,磁道与磁道间有磁道间隙,扇区里的不同字段有间隙
2. 格式化情况(温切斯特盘)
600个字节 ,512字节存放数据,其余放其他信息[图片来自汤小丹计算机操作系统] 下面数字为大小 单位Byte
Synch Byte:该字段定界符
CRC:段校验
3.磁盘访问时间
寻道时间(移到磁道)(大部分)+旋转延迟时间(移到扇区)+传输时间
4.磁盘调度算法
为了减少寻道时间