7.1.1 输入输出系统和几种IO控制方式
输入设备:把数据从主机外部输入主机内部
输出设备:把数据从主机内部输出到主机外部
现在的IO接口(芯片)通常被集成在南桥芯片的内部
DMA接口其实也是IO接口(芯片)的一种,磁盘准备的数据先一个字一个字地送入DMA的寄存器,然后再送到主存当中,主存总线和DMA总线当然会冲突,这也需要仲裁,当然CPU需要的数据80%都在cache当中可以找到,所以主存大部分时间都是可以判给DMA总线!!!
IO总线当然包括了:地址总线、数据总线、控制总线
通道其实就相当于是一个弱鸡版的CPU,它也可以取指执行,但是它只能识别很小的一部分和IO相关的操作指令(了解即可)
7.1.2 显存
了解即可:
独立显卡有自己专门的一块存储芯片
集成显卡是在内存当中单独划出来一块区域作为显存
7.2.1 I/O接口
主机与IO设备交互通过的就是IO接口
控制外设输入的示例:
7.3.1 程序查询方式
打印是时候,打印机是忙状态(busy),CPU轮询in来检查端口是否空闲,打印完a之后就会把状态从busy设置为ready
当打印任务全部完成之后,CPU就会给io接口发送一个停机的命令
打印3个字符abc的过程:
7.3.2 中断的原理和作用
中断处理的过程:
中断请求(INT) -> 中断响应(INTA) -> 中断处理(中断隐指令(硬件)+中断服务程序(软件))
中断请求:中断控制芯片8259告诉CPU有外部中断产生了
中断响应:CPU检查自己的IF位,如果IF=1就通知8259我准备好了,可以把中断类型码发过来了
中断处理:8259把中断类型码送给CPU(比如放到eax当中),然后CPU通过执行中断隐指令的引出中断服务程序(比如eax -> PC),就可以到对应位置继续取指顺序执行了
CPU在指令周期的末尾会例行检查中断(检查CPU的INT端口有没有信号)
根据IF位可以判断当前CPU有没有关中断,如果IF位为1,就从中断寄存器当中取数据,IF为0就不取,相当于不会响应中断
关中断的目的是为了实现原子操作,是通过硬件实现的
中断请求寄存器是在中断控制器8259当中的
关机之前会进行一系列的紧急处理,之后才会被关闭
现在的计算机一般使用硬件实现中断判优,这样比较快速
中断判优的优先级问题:
中断处理过程:
中断隐指令指的是一些列的指令,这一系列指令都是由CPU自动完成的,只要检测到中断请求,CPU就会自动执行这一系列的指令(是通过硬件电路自动实现的)
中断隐指令:关中断、保存断点(PC)、获取中断向量
所有中断源的中断隐指令都是一模一样的!!!
引出中断服务程序:先通过中断类型号指明要去主存为12H的位置取指令并执行(在操作系统的内核空间,常驻内存),执行JMP 200,CPU就会从200的地址处去继续取指执行了!
二级指针,你一级变化,二级不变,不用改动,这样可以方便拓展中断服务程序
中断服务程序的执行过程:
7.3.3 多重中断
执行中断期间也可以响应新的(一般是优先级更高的)中断请求
肯定得在保护完现场/恢复完现场之后才能开中断啊!
至于中断隐指令和中断返回都是通过硬件电路实现的,直接一气呵成好吧
中断屏蔽技术:
中断屏蔽字1111:都给屏蔽喽(这个中断源的优先级很高)
中断屏蔽字存储在屏蔽字寄存器当中,这样可以动态地调整各个中断源的优先级,从而为实现多重中断提供了技术支撑
每个中断源都有一个中断屏蔽字,在这个中断源被响应的时候,就可以把它的屏蔽字写到中断屏蔽字寄存器当中了,以此来决定在他进行中断处理的过程中会对哪些其他中断源进行响应!!!
也就是说,当CPU在处理当前中断的过程中,有其他IO端口发出中断请求,但是这个信号不会被立即送到CPU的INT当中,而是由中断控制器8259根据中断屏蔽字和判优逻辑电路来决定要不要给CPU发送一个INT信号(8259决定了中断信号会不会被送出去给CPU)
一个小练习题😄:
实际CPU当中的中断系统:
中断类型号是通过数据寄存器传给CPU的
中断请求寄存器IR1,IR2...IR7连接的就是IO接口;优先级电路会根据当前中断源的中断屏蔽寄存器等信息决定选择哪一个中断;中断服务寄存器(前面PPT当中用于产生中断向量的)
不管是哪个IO端口(IRx)产生了电信号,中断请求寄存器IRR都会给控制逻辑的INT发一个信号,然后传给CPU的INTR引脚,如果IF=1的话,CPU允许中断,就会通过INTA引脚发给控制逻辑,告诉他我收到了,你可以把中断类型号发给我了,然后控制逻辑控制8259通过和CPU数据寄存器相连的线把中断向量发给CPU