(PS:个人课下整理的操作系统笔记,OneNote直接拷贝过来的,图片看不了就将就一下,配合张伟老师的PPT看效果更好)
一、应用程序的IO接口
1.计算机的两个主要任务:IO操作和计算处理
2.IO设备技术的发展趋势
- 软硬件接口日益增长的标准化
- IO设备的多样性
3.为了隐藏不同设备的细节和特点,设备驱动程序(device driver)为IO子系统提供一个统一的接口,正如系统调用为应用程序与操作系统之间提供了统一的标准接口
设备驱动程序向下屏蔽底层的异构性,向上提供统一的接口
4.IO硬件的共同概念:
- 端口(Port):设备与计算机通信的一个连接点
- 总线(Bus):一组线和一组严格定义的在线上传输信息的协议。
- 传输数据的物理上的线,
- 传输的协议
- 控制器(Controller):用于操作端口、总线或设备的一组电子器件。
5.主机和控制器的交互
轮询:如果不断的重复轮询,主机又很少发现已经准备好的设备(非忙状态),同时其他需要处理器处理的工作又不能完成,则轮询效率会变差。
6.直接内存访问(Direct Memory access,DMA)//重要
- 对于大量传输的设备,如果用昂贵的通用处理器来观察状态位和 向控制器寄存器传输字节,则太浪费了。这里面使用直接内存访问控制器
- 步骤:
- CPU将DMA命令块写入控制器中
- DMA控制器向硬盘控制器发送请求传输到内存
- 磁盘控制器开始通过缓存驱动与主存进行数据传输
- 磁盘控制器时刻向DMA发送回应
- 当DMA控制器完成工作,通过中断告诉CPU
- 在开始DMA传输时,主机向内存中写入DMA命令块,包括源地址,目标地址,传输字节数。CPU将该命令块地址写入DMA控制器中,CPU就不管了。
- 控制器不属于操作系统
7.块设备接口规定了访问磁盘驱动器和其它基于块设备所需的各个方面
8.同步/异步, 它们是消息的通知机制,函数返回的机制。
阻塞/非阻塞, 它们是程序在等待消息(无所谓同步或者异步)时的状态。
- 同步:
所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回。
- 异步:
异步的概念和同步相对。当一个异步过程调用发出后,不等待IO完成,立即返回。调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。
- 阻塞
阻塞调用是指调用结果返回之前,当前线程会被挂起(线程进入非可执行状态,在这个状态下,cpu不会给线程分配时间片,即线程暂停运行)。函数只有在得到结果之后才会返回。
- 非阻塞
非阻塞和阻塞的概念相对应,指在不能立刻得到结果之前,该函数不会阻塞当前线程,
而会立刻返回。
二、内核IO的子系统
1.内核提供了很多余IO有关的服务,例如调度,缓冲,缓存假脱机,设备预留等都是IO内核子系统提供的
2.缓冲buffer:当在设备间传输的时候,可以在内存中存储数据
缓存cache:可以保留数据拷贝的高速内存,其访问要比原始数据访问更为高效
3.假脱机(Spooling)是用来保存设备输出的缓冲区,这些设备如打印机不能接收交叉的数据流。
假脱机和设备预留都是为了某些不能并发的IO访问
三、性能
I/O是影响系统性能的重要因素之一。
1 执行设备驱动程序的代码、内核IO子系统代码、调度等等;
2 由于中断产生的上下文切换;
3 在不使用DMA的情况下,从设备控制器向内存中拷贝数据
4 网络传输问题
都会增加CPU负担。
提高性能的方式: