【简记】Operating System—— I/O
来源:互联网 发布:开淘宝店考试答案 名字 编辑:程序博客网 时间:2024/04/30 12:53
This memo is based on the course of Dr.Li with Operating System as the reference book.
本章内容:
传统的PC机总线结构:
总线( bus ) 是一组线和一组严格定义的可以描述在线上传输信息的协议。
I/O端口通常有4 种寄存器,即状态寄存器、控制寄存器、数据输入寄存器与数据输出寄存器。
· 数据输入寄存器被主机读出以获取数据.
. 数据输出寄存器被主机写入以发送数据。
· 状态寄存器包含一些主机可读取的位( bit ) . 这些位指示各种状态, 例如,当前任务是否完成,数据输入寄存器中是否有数据可以读取,是否出现设备故障等。
· 控制寄存器可以被主机用来向设备发送命令或改变设备状态
13.2.1 轮询
主机与控制器之间交互的完成协议可能很复杂,但基本握手概念则比较简单。下面举例解释握手概念。
假定有两个位来协调控制器与主机之间的生产者与消费者的关系。控制器通过状态寄存器的忙位( busy bit ) 来显示其状态(记住置位 (set a bit ) 就是将1 写到位中,而清位(Clear a bit)就是将0写到位中)。控制器工作时就置忙位,空闲时就清忙位。主机通过命令寄存器中命令就绪位来表示其意愿。当主机有命令需要控制器执行时,就置命令就绪位。例如, 当主机需要通过端口来写输出数据时,主机与控制器之间握手协调如下:
①主机不断地读取忙位,直到该位被清除。
②主机设置命令寄存器的写位,并向输出寄存器写入一个字节。
③主机设置命令就绪位。
④当控制器注意到命令就绪位已被设置, 则设置忙位。
⑤ 控制器读取命令寄存器,并看到写命令。它从数据输出寄存器中读取一个字节,并向设备执行I/O操作。
⑥ 控制器清除命令就绪位,清除状态寄存器的故障位表示设备I/O成功,清除忙位表示完成。
输出每个字节,都要执行以上循环。
13.2.2 中断
13.2.3 直接内存访问
13.3 I/O 应用接口
13.3.4 阻塞与非阻塞I/O
阻塞I/O:
系统调用接口的另一方面与阻塞与非阻塞I/O的选择有关。当应用程序发出一个阻塞系统调用时,应用程序的执行就被挂起。应用程序将会从操作系统的运行队列移到等待队列上去。在系统调用完成后,应用程序就移回到运行队列,并在适合的时候继续执行并能收到系统调用返回的值。由I/O设备执行的物理动作常常是异步的:其执行时间可变或不可预计。然而,绝大多数操作系统为应用程序接口使用阻塞系统调用, 这是因为阻塞应用代码比非阻塞应用代码更容易理解。
应用程序重叠I/O 执行的方法之一是编写多线程应用程序。有的线程执行阻塞系统调用,而其他线程继续执行。
非阻塞I/O:
有的用户级进程需要使用非阻塞I/O 。用户接口是其中的一个例子,它用来接收键盘和鼠标输入,同时还要处理并在屏幕上显示数据。
当应用进程要调用的I/O操作会导致该进程进入阻塞状态时,该I/O调用返回一个错误,一般情况下,应用进程需要利用轮询的方式来检测某个操作是否就绪。数据就绪后,实际的I/O操作会等待数据复制到应用进程的缓冲区中以后才返回。
异步I/O:
除了非阻塞系统调用外, 还有异步系统调用。异步系统调用不必等待I/O完成就可立即返回。应用程序继续执行其代码。在将来I/O 完成时可以通知应用程序,通知方式可以是设置应用程序地址空间内的某个变量, 或通过触发信号或软件中断, 或应用程序执行流程之外的某个回调函数。
非阻塞与异步系统调用的差别是非阻塞read()调用会马上返回任何可用的数据,其所读的数据可以等于或少于所要求的,或为零。
异步read()调用所要求的传输应完整地执行,但其具体执行可以是将来某个特定时间。
从上面图中可以看出,卷1中把I/O操作分为两个阶段,第一阶段等待数据可用,第二阶段将数据从内核复制到用户空间。前三种模型的区别在于第一阶段(阻塞式I/O阻塞在I/O操作上,非阻塞是I/O轮询,I/O复用阻塞在select/poll或者epoll上),第二阶段都是一样的,即这里的阻塞不阻塞体现在第一阶段,从这方面来说I/O复用类型也可以归类到阻塞式I/O,它与阻塞式I/O的区别在于阻塞的系统调用不同。而异步I/O的两个阶段都不会阻塞进程。
我们再来看看同步I/O与异步I/O(AIO),根据卷1的说明,同步I/O与异步I/O是由POSIX定义的两个术语:
同步I/O操作:实际的I/O操作将导致请求进程阻塞,直到I/O操作完成。
异步I/O操作:实际的I/O操作不导致请求进程阻塞。
由此定义来看,前面分类中的前三种:阻塞式I/O,非阻塞式I/O,I/O复用都属于同步I/O,因为第二阶段的数据复制都是阻塞的。而只有前面定义的异步I/O模型与这里的异步I/O操作吻合。
由异步I/O的定义来看,操作系统必须提供一种方式,在应用进程发出I/O操作后,可以在后台(而不是当前应用进程)完成数据等待和数据复制的工作,并最终通知应用进程I/O操作已经完成。
- 【简记】Operating System—— I/O
- 【简记】Operating System—— distributed system
- 【简记】Operating System——Overview
- 【简记】Operating System——Process
- 【简记】Operating System——Thread
- 【简记】Operating System——CPU Scheduling
- 【简记】Operating System——process synchronization
- 【简记】Operating System——Dead Lock
- 【简记】Operating System—— virtual memory
- 【简记】Operating System—— file system in Linux
- 【简记】Operating System——Linux schedule()(暂)
- 【简记】Operating System——process synchronization in Java
- 【简记】Operating System——Atomic Transaction Overview
- 【简记】Operating System—— memory management(part 1)
- 操作系统(Operating System)11 I/O
- 【简记】Operating System—— memory management(分页,分段,页表大小计算)
- 【简记】Operating System—— memory management in Linux(暂)
- 【简记】Operating System—— distributed coordination(2PC 3PC)
- “cvc-complex-type.2.4.a: Invalid content was found starting with element 'taglib'”错误的解决办法
- POJ 3126 Prime Path (BFS) (F)
- POJ 3050 Hopscotch
- Ignite SQL网格
- libjingle ubuntu 16.04 下编程错误
- 【简记】Operating System—— I/O
- CMake学习(二)
- stable_sort的含义
- 习题- 二分法/牛顿迭代法 求算术平方根
- Siamese Network理解(附代码)
- Linux-Flash驱动(1)-块设备系统架构
- 关于java字节流的一点笔记
- Spring MVC 拦截器 Interceptor
- python基础(二)