深入理解IO系统总结

209 阅读7分钟

前期:看过 背过就会 中期:了解基本流程 后期:深入理解 内存缓冲区 内核缓冲区是什么 scanf顺序底层细节原理

一 从中断控制器角度来理解整个中断处理过程

二 printf-从系统调用到IO控制方式的具体实现

三 scanf-中断方式下输入一个字符串的具体过程

一个具体的IO过程包括硬件和软件

一 中断思想

1.处理器的中断处理机制

  1. 保护断点和程序状态字(准备阶段) 保存到堆栈寄存器
    pc=>堆栈或者特殊寄存器

  2. 识别中断事件(查明原因)
    软件识别MIPS :设置一个异常状态寄存器记录异常原因操作系统使用一个统一的异常处理程序按优先级顺序查询识别出异常事件 硬件识别(向量中断):用专门的硬件查询电路按优先级顺序查询异常状态寄存器识别出异常事件

    设置新屏蔽字 开中断

  3. 切换到具体的中断处理程序执行(具体处理阶段)

  4. 关中断 恢复现场及旧屏蔽字 开中断 中断返回()

可编程中断PIC

2. 中断控制器的基本结构

3.中断过程

中断响应(硬件实现)+ 中断处理(软件实现)

中断响应: 中断响应是指主机发现外部中断请求,中止现行程序的执行,到调出中断服务程序这一过程 包括准备和查明两个:保存断点和程序状态字;将cpu改为内核态

中断处理: 保存通用register的内容,执行系统调用服务

(1)中断响应的条件

  1. CPU处于开中断状态
  2. 在一条指令执行完
  3. 至少要有一个未被屏蔽的中断请求

中断响应一定是指令执行完; 异常不能等指令执行完

多重中断

中断响应优先级-12345 中断处理优先级-中断屏蔽字14523

2 1354 2 1

image.png

(2) 运行用户程序时,中断源2 4 同时发生中断请求,而在处理2号中断源的过程中,中断源1、3和5同时发生中断请求,试说明此时CPU运行情况就, 即响应和处理各个中断源的顺序。

解: 2 1 3 5 4->2a 1 5 4 2b 3 因为3 "中断处理优先级"低 所以最后执行

具体如下:

我们首先是保存现场,然后保存旧的屏蔽字,设置新的屏蔽字,然后在具体的中断处理前,我们需要先开中断。

一旦开中断之后,我们就会马上响应四号中断源-> 因为根据中断处理优先级,四是大于二的,我开中断之后,那我CPU立马就能够检测到。当前系统当中啊,是有中断请求的,那么其实就是四发出来的中断请求,那么就会转到这个中断服务程序四去执行。那我一直等四执行完,那么四执行完了之后,那么就返回到这个2的一个环境当中,然后继续执行。
(顺序: 4-2)

当2执行的过程当中135同时发生中断请求。

我们来看,首先考虑的是中断处理优先级,因为它决定的就是哪些中断是被屏蔽的,因为中断处理优先级啊,1>5>2>3,二号我是能够屏蔽掉这个三号的,这个发过来中断请求,所以一号和五号中断源的这个请求信号分别被送到这个硬件排队器去排队。然后然后由这个中断响应优先级决定的,一是大于五的
(顺序: 2-(根据中断处理优先级屏蔽3-- )执行 1-执行5)

所以我先执行这个中断服务程序1,然后又因为这个中断处理优先级一也是最高的。所以一也不会被五打断,那么一执行完那么等一执行完之后啊,那么它又返回这个中断服务程序二的环境。那么,一旦返回到这个中断服务程序二,因为这个五的中断处理间隙啊,它是大于二的,所以我立马就能够去响应这个中断五发过来的中断请求,所以我主要去执行这个中断服务程序五,它的一个中断服务程序,
(1---5---2)

那么等五执行完之后,那么它又返回到二。那么这个时候四号中断源的中断服务程序,一号中断源的中断服务程序,还有五号中断源的中断服务程序啊,都被执行完了。系统里面还有三号重点员发出重点请求,他返回了二之后,因为二的终端处理优先级,我们前面说了它是大于三号的。所以三号中的圆是被二号屏蔽的,那我等二号执行完之后,他要先返回到用户程序,注意哦,他这里为什么要先返回到用户程序啊?

因为在二号中断源的环境之下,它这个中断屏蔽字决定了它是检测不到这个三号中断源发过来中断请求的。那么,它执行结束之后,就是它从哪里发起中断了,那么它就要返回到哪里?它是不是从这个用户程序发起中断到这个二哈?所以它执行完之后,就是返回到这个用户程序吗?那么,只有当用户程序的环境下,它才能够检测到这个三号终端员发出的终端请求,然后马上去响应这个三号终端员发出的终端请求。就去执行这个三的中断服务程序,那么执行完了之后,

一直执行完了之后,然后返回到用户程序继续执行。

CPU运行轨迹图如下

image.png

printf系统调用

操作系统给应用程序的接口是系统调用, 库函数/宏定义封装系统调用

  1. 执行系统调用的操作: 传递系统调用参数-执行陷入指令-执行响应的服务程序-返回用户态

  2. 操作系统完成的是-指不是硬件完成的,由软件完成的-也就是中断处理
    知识点:

中断响应(硬件实现)+ 中断处理(软件实现)

中断响应: 中断响应是指主机发现外部中断请求,中止现行程序的执行,到调出中断服务程序这一过程 包括准备和查明两个:保存断点和程序状态字;将cpu改为内核态

中断处理: 保存通用register的内容,执行系统调用服务

二 驱动程序和IO控制方式的关系

三种不同的IO控制方式,设备驱动程序做不同的事情

轮询方式下输出一个字符串

先把用户缓存区内容复制到内核缓冲区

举例:控制显示器输出
就绪: 显示器的数据缓冲中的内容已被取走,可以接受新的打印字符
设置计数值-设置内存缓冲区首址-读接口状态-就绪-输出一个字符-启动输出-修改内存地址-修改计数值-完成
没就绪就一直读取接口状态

中断驱动方式下输出一个字符串

当外设准备好,向CPU发出中断请求,CPU响应后中止现有程序执行转入中断服务程序并启动外设 中断服务程序执行完后返回被中止的程序断点处继续执行,此时,外设和CPU并行工作

区别\

DMA方式下输出一个字符串

image.png

例题

image.png

三 scanf-sys_read

中断驱动方式下输入一个字符串

内核缓冲区送到用户缓冲区