内容基于中国大学MOOC的2023考研计算机组成原理课程所做的笔记。
感谢LY,他帮我做了一部分笔记。由于听的时间不一样,第四章前的内容看起来可能稍显啰嗦,后面会记得简略一些。
西电的计算机组织与体系结构课讲法和王道考研的课不太一样,要应付校内考试建议还是跟着老师学比较好。以下是20年西电计科院车向泉老师这门课的录播下载链接(请勿将录像上传到B站等网站!!):
链接:https://pan.baidu.com/s/1bFs3ajhy8ZcbHopS9izGsw
提取码:fdez
期中考试占20分,一般只考前两章内容,期末考试占60分,一般前两章内容不考,考察内容一般考前的复习课都会讲清楚,请务必认真听复习课。
其他各章节的链接如下:
输入/输出系统
![image-20220919131231389](https://i-blog.csdnimg.cn/blog_migrate/727a564093c0e6b7ba0ecbbe0438d5ca.png)
输入输出系统和IO控制方式
![截屏2022-08-10 12.01.27](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2012.01.27.png)
现代计算机结构
![截屏2022-08-10 11.31.24](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2011.31.24.png)
常见的I/O设备
![image-20220918195009819](https://i-blog.csdnimg.cn/blog_migrate/49ab03d1126c6879aa7ea8a26aacddc4.png)
I/O接口(I/O控制器)
![image-20220918204048963](https://i-blog.csdnimg.cn/blog_migrate/11962de7366a9c15083c6576230b3e44.png)
用USB连接线将键盘插到USB插口,在USB插口背后会专门有一个小芯片用来控制主机与键盘之间的数据交互,这个小芯片就是所谓的I/O接口,更具体一点应该称为USB接口或者USB控制器
![image-20220918205748703](https://i-blog.csdnimg.cn/blog_migrate/8f26cddcba0fc2108cad0a1f87a41680.png)
I/O控制方式简介
![image-20220918205847936](https://i-blog.csdnimg.cn/blog_migrate/d7d7232c49b533a0acafa756035de2fc.png)
CPU取得输入的字符之后好需要写入主存,每输入或者输出一个字就需要CPU介入一次作为中转站
![image-20220918211621664](https://i-blog.csdnimg.cn/blog_migrate/dcdf5294f7efe3e30dd44f7a1d649c03.png)
DMA控制方式
![image-20220918212543356](https://i-blog.csdnimg.cn/blog_migrate/7eb96ec0f54ec90afb2d49d931ab3939.png)
![截屏2022-08-10 11.50.47](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2011.50.47.png)
I/O设备准备好的数据会先存到DMA控制器当中,每准备好一个字的内容DMA控制器就会发出一个DMA请求,接下来DMA控制器会占用一个存取周期往主存的对应位置写入一个字的数据
如果在这个存取周期之内CPU也想要访问主存,CPU就得先等DMA控制器写好这个字的数据
通道控制方式
![image-20220918213140376](https://i-blog.csdnimg.cn/blog_migrate/7b178a16941eb06efdc62c067e5dfd20.png)
![image-20220918213156146](https://i-blog.csdnimg.cn/blog_migrate/3c9ade31b377c79ac053e4773fadbff7.png)
I/O系统基本组成
![image-20220918213558309](https://i-blog.csdnimg.cn/blog_migrate/137e9fcf1052c0edbf1ce66f70ea949a.png)
命令码部分可能和具体的I/O设备有关
外部设备
![image-20220918214020841](https://i-blog.csdnimg.cn/blog_migrate/4a58cfe5c190fff8a30be63366fca800.png)
外部设备
![image-20220919090850452](https://i-blog.csdnimg.cn/blog_migrate/22261fa4ac3b25a6866a8c83b8fbf5c4.png)
输入设备
![image-20220919090923087](https://i-blog.csdnimg.cn/blog_migrate/72080651c1251205d9008359d2fba015.png)
显示器
![image-20220919091216275](https://i-blog.csdnimg.cn/blog_migrate/fe4e0938da7138a6cc914ca3c36887fd.png)
VRAM —— 显存。存放接下来要在显示器上面播放的这一帧图像的信息
![截屏2022-08-10 14.15.18](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2014.15.18.png)
一些3D游戏甚至还有可能在显存里面存放人物模型、场景模型之类的数据用于实时3D渲染
这台电脑是集成显卡,不是独立显卡。对于这种没有独立显卡的计算机,通常显存并不是一块单独的专门存储芯片,而是会从内存里划出一小片空间作为显存
而如果买独立显卡的电脑,一般来说独立显卡内部也会有一个存储芯片专门作为显存使用
![image-20220919091407355](https://i-blog.csdnimg.cn/blog_migrate/787190d2d216d724cb76d6f2d9f2a6d6.png)
![image-20220919091703969](https://i-blog.csdnimg.cn/blog_migrate/6726bb75eb07b5388d9a42d158f70ee3.png)
![image-20220919091454393](https://i-blog.csdnimg.cn/blog_migrate/f0b8da85c0f4eac02fb8a2fe8121a260.png)
![image-20220919091535992](https://i-blog.csdnimg.cn/blog_migrate/468b5fa652f5a85b3a8f11d45011e4d7.png)
接口电路 —— I/O接口
字形码的信息存放在字符发生器ROM里面,ACSII码和机内码的信息存放在显存里
![image-20220919091630211](https://i-blog.csdnimg.cn/blog_migrate/929f2c5d290e7db38dcc6d25b51a5b70.png)
图形显示器用于显示一系列的矢量图形,数电模电显示这些电信号波形图的显示器就是图形显示器,显示的图形一般不会很复杂,会比较规则,通常会被用于工程控制、股票涨跌这样的专用显示器
图像显示器就是现在电脑、手机的这些显示器,可以显示丰富多彩的图像信息
光栅扫描显示器和随机扫描显示器都是图形显示器
打印机
![image-20220919091758823](https://i-blog.csdnimg.cn/blog_migrate/5e4db2d489ed42ee79cd8383a9c9259a.png)
![image-20220919091840511](https://i-blog.csdnimg.cn/blog_migrate/c14e11668cda792ab3fc70288de71270.png)
I/O接口
![image-20220919125728483](https://i-blog.csdnimg.cn/blog_migrate/88598577d9fdb43936a2644fcb364d15.png)
主机如何与I/O设备如何交互?
![image-20220919125959774](https://i-blog.csdnimg.cn/blog_migrate/c654d729997427381bd87a72d17acd1d.png)
I/O接口作用
![截屏2022-08-10 14.24.59](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2014.24.59.png)
I/O接口
![截屏2022-08-10 14.27.36](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2014.27.36.png)
![截屏2022-08-10 14.28.42](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2014.28.42.png)
USB控制器芯片
I/O接口的工作原理
![image-20220919130133697](https://i-blog.csdnimg.cn/blog_migrate/8efe086d85ceb0cfb1d0c02a7635c2f5.png)
设备工作已完成或者出现故障都需要发送中断CPU进行中断处理。这两种中断的类型不同,为了让CPU知道当前出现的中断请求应该怎么处理,也需要结合状态寄存器的内容通过数据总线给CPU反馈一个具体的中断类型号
IO接口可以接多个设备,CPU要操作哪一个设备,对于设备的选择信息怎么传递?
在有的系统当中,这个地址线除了指明CPU要读要写的寄存器之外,也有可能被用于指明具体的设备编号,但是设备编号还有寄存器的编号需要分开两次进行传输
还有一些系统每一个外设都有一组与之对应的I/O端口,CPU对不同的寄存器进行读和写就相当于对不同的设备进行操作
接口与端口
![image-20220919130315337](https://i-blog.csdnimg.cn/blog_migrate/0c5fe72ebeee055b3991be99649810e3.png)
统一编址 v.s. 独立编址
![image-20220919130413535](https://i-blog.csdnimg.cn/blog_migrate/e5bb2a0267befabffc55e8171598cb36.png)
RISC系统只会有LOAD、STORE两个访存指令,用这两个指令就可以实现对所有I/O设备的控制
I/O端口及其编址
![image-20220919130747793](https://i-blog.csdnimg.cn/blog_migrate/fb06c6d793a992a7a7a24b1515032b88.png)
![image-20220919130808071](https://i-blog.csdnimg.cn/blog_migrate/863b562def5ac35eece0c299174b2487.png)
Intel x86架构CPU总共只有4条I/O指令 IN、OUT、INS、OUS
I/O接口分类
![截屏2022-08-10 15.50.21](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2015.50.21.png)
程序查询方式
![image-20220919185510035](https://i-blog.csdnimg.cn/blog_migrate/c7b951e7631ff9453ba911cfe3ade6a0.png)
I/O方式简介
![image-20220919183416289](https://i-blog.csdnimg.cn/blog_migrate/d495adb4a030b2d3edc55065a07de5cb.png)
程序查询方式
![image-20220919183449851](https://i-blog.csdnimg.cn/blog_migrate/f58005e90d30888fcd1599a2894ffeb7.png)
如何打印输出3个字符?
把这次要打印输出的字符放到CPU的某一个寄存器当中。假设此时先要打印的字符是’a’,放在R0
CPU要向打印机发出打印命令字,如何发出打印命令?经过打印机驱动程序处理把启动打印的命令字放到R1,用OUT指令把R1里面的命令字输出到 R n + 1 R_{n+1} Rn+1端口。CPU通过地址线指明此时要输出的I/O端口地址是 n + 1 n+1 n+1,再通过控制线指明此次要对I/O端口进行写操作,要写的命令字数据通过数据线传过来
接下来I/O控制逻辑电路根据CPU发过来的打印命令信号,通过控制线给打印机发出相应的控制信号,打印机收到命令开始启动。当启动准备工作完成之后会通过状态线给I/O接口进行反馈
I/O接口发现打印机启动操作已经完成,I/O控制逻辑电路会把打印机的"Ready"就绪状态信息存到状态寄存器当中
CPU通过OUT指令发出打印请求之后,CPU会通过数据线一直轮询检查状态寄存器。轮询检查操作用IN指令实现,把 R n + 1 R_{n+1} Rn+1的值输入到某一个通用寄存器,CPU再测试取得的状态信息
CPU发现打印机此时处于就绪状态,已经准备好可以输出一个字符。'a’字符的写入用OUT指令实现,CPU通过地址线指明此次要操作的I/O端口是 R n R_n Rn,控制线指明此次要对I/O端口进行写操作,同时把’a’字符的信息放到数据线上,这三个信号就会导致’a’字符数据被写入到数据缓冲寄存器当中
接下来由I/O控制逻辑把这个字符的信息通过数据线输出给打印机,同时发出相应的控制信号。当打印机打印这个字符时状态寄存器处于忙碌状态,直到这个字符的打印工作完成之后打印机又会通过状态线给I/O接口反馈打印已完成的信号,I/O接口再修改状态寄存器为就绪状态,CPU就可以往数据缓冲寄存器里放入第二个字符的信息
打印工作全部结束之后CPU就可以给打印机发出停机命令字,同样地只有驱动程序知道停机应该发出什么样的命令字
程序查询方式流程图
![image-20220919185357257](https://i-blog.csdnimg.cn/blog_migrate/a9955d17b26139bd790396cb4a659d10.png)
例题
![image-20220919185427092](https://i-blog.csdnimg.cn/blog_migrate/3773f0d5ceb243d7d344adec10d73ae8.png)
之前CPU不停地检查一个I/O接口是独占查询的方式,CPU会花全部的时间一直等待I/O完成。事实上CPU也可以采用这种定时查询的方式,每隔一段时间检查某一个特定的I/O接口
不考虑处理时间 —— CPU和I/O接口之间数据的输入输出时间可以不计,只计算CPU每一次查询需要的时间
鼠标滑动和点击的信息会被输入到I/O接口的寄存器,由于鼠标随时都有可能发生滑动和点击,CPU需要定期检查鼠标所对应的I/O接口里面的寄存器,如果CPU每一秒钟才检查一次就有可能导致鼠标的某些输入数据丢失
程序中断方式
![image-20220920190619410](https://i-blog.csdnimg.cn/blog_migrate/2fbe34fcdd398212f2897c356a4e84ea.png)
中断的基本概念
![截屏2022-08-10 17.21.42](https://xdu-cslee-blog.oss-cn-hangzhou.aliyuncs.com/%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%BB%84%E6%88%90%E5%8E%9F%E7%90%86%E7%AC%94%E8%AE%B0%E5%9B%BE%E7%89%87/截屏2022-08-10%2017.21.42.png)
CPU每执行完一条指令之后,在指令周期的末尾都会例行地检查是否有某一种中断请求信号需要处理
中断隐指令把CPU的指令执行流转移到正确的中断服务程序,本质上就是修改PC值,让PC指向程序的第一条指令
中断隐指令并不是一条具体的指令,而是CPU检测到中断信号之后自动执行的一系列动作
中断请求分类
![image-20220920184404202](https://i-blog.csdnimg.cn/blog_migrate/15cb3adae720db4e588d1cd2eaadd92c.png)
外部设备发来的中断请求基本都是可屏蔽中断。接下来如果没有特别说明,当提到中断时指的就是可屏蔽中断
中断请求标记
![image-20220920184608659](https://i-blog.csdnimg.cn/blog_migrate/613a253debc9045cb43bf018e69ea3c3.png)
每一个触发器可以记录一个二进制的0或1
CPU会统一地在每一条指令执行阶段结束之前检查此时有没有中断请求信号以及判断这个中断请求信号是哪些部件发过来的
一条指令的执行可以分为取指阶段、间址阶段、执行阶段和中断阶段。中断阶段就是用于检查中断信号
中断判优-实现
![image-20220920184704169](https://i-blog.csdnimg.cn/blog_migrate/5c46acc457fc0837b3cfdfbeba8c4415.png)
中断判优-优先级设置
![image-20220920184736312](https://i-blog.csdnimg.cn/blog_migrate/8508d2d865e12e69acb7b72191d4755d.png)
硬件故障 —— 掉电 软件中断 —— 系统调用
DMA控制器用于控制某一些高速设备
键盘敲击之后某一个字符信息被放到缓冲寄存器里面,如果CPU不及时把这个字符信息取走,使用键盘的人又紧接着输入了第二个字符就会把之前的字符信息冲掉导致输入信息的丢失
中断处理过程
![image-20220920184814712](https://i-blog.csdnimg.cn/blog_migrate/01badf3db3c972940e80c216632fb12e.png)
中断处理过程-中断隐指令
![image-20220920184849620](https://i-blog.csdnimg.cn/blog_migrate/78e71129326e3e127281d0ed5b765a2a.png)
操作系统有内核堆栈区,所谓的内核堆栈区也是主存内的某一片区域
中断处理过程-硬件向量法
![image-20220920184953249](https://i-blog.csdnimg.cn/blog_migrate/7ffbe985c20128b62b8c986cadff258f.png)
为什么不直接把向量地址指向入口?
因为入口地址在内存中的位置可能会变化
中断处理过程-中断服务程序
![image-20220920185240623](https://i-blog.csdnimg.cn/blog_migrate/ac15e731d6f13ef1c50a88b8bb019fe9.png)
总结:中断处理过程
![image-20220920173630720](https://i-blog.csdnimg.cn/blog_migrate/593dd69f0d1070a6ce0c33bfc1726d5d.png)
由于是用硬件完成的,因此关中断和程序断点进栈两个动作可以同时进行
多重中断
多重中断
![image-20220920185435447](https://i-blog.csdnimg.cn/blog_migrate/4979a9e3a03014c410eb0afba290f0c5.png)
单重中断与多重中断
![image-20220920185514423](https://i-blog.csdnimg.cn/blog_migrate/52c2dc6e3b5e0b0463fc03aa2a988e3d.png)
屏蔽字是什么?
屏蔽字的全称是中断屏蔽字,用于屏蔽某些中断
一个系统里面有可能出现各种各样的中断请求信号,这些中断请求信号是有优先级的,当CPU在处理某一个中断信号时需要一个屏蔽字指明接下来哪些中断请求应该被屏蔽
中断屏蔽技术
![image-20220920190047959](https://i-blog.csdnimg.cn/blog_migrate/cb055fa64218d8286ae3bb604eb1cd24.png)
![image-20220920190450399](https://i-blog.csdnimg.cn/blog_migrate/18b828b4b26c077e32e7df3aba6a3c8d.png)
![image-20220920190551737](https://i-blog.csdnimg.cn/blog_migrate/291c018cf36be876bdb87d4599949b57.png)
扩展
![image-20220920190711044](https://i-blog.csdnimg.cn/blog_migrate/f587c80794baf3280948d62c78268d96.png)
![image-20220920190730362](https://i-blog.csdnimg.cn/blog_migrate/db986b39ba51afb6ee1d74f95b8262b0.png)
无论收到多少个I/O请求信号,中断控制器都会通过内部总线给8086CPU发送中断请求信号。INT输出端会接上8086CPU的INTR,用来通知CPU需要处理中断信号,如果CPU没有关中断会通过INTA引脚给中断控制器发回反馈信号,要求告知应该处理哪一个中断
经过中断判优电路处理之后,会有一个优先级最高的中断请求信号被选中,然后根据这个中断请求信号再经过ISR的处理就可以给CPU指明当前被选中的中断信号类型号为多少。这个地方最左边的电路指的就是之前提到的中断向量地址形成部件
中断类型号通过内部总线的数据总线传给CPU,CPU根据中断类型号找到中断服务程序的入口地址
程序中断方式
程序中断方式
![image-20220920191019836](https://i-blog.csdnimg.cn/blog_migrate/fcf0db5259c081c259a87153feab9a53.png)
![image-20220920191108628](https://i-blog.csdnimg.cn/blog_migrate/812092b257e2cdeb78bb1886872620b8.png)
第一小问结果加5还是不加5都可以
CPI —— Clock Per Instruction,每一条指令需要多少个时钟周期
DMA方式
![image-20220920191842025](https://i-blog.csdnimg.cn/blog_migrate/422d75eacd7c09ae39086b9f92575ec8.png)
三种I/O控制方式
![image-20220920191242134](https://i-blog.csdnimg.cn/blog_migrate/3af332d1e58e666b9f27fc08a2956369.png)
对于程序中断方式,每一次I/O设备准备好一个字的数据CPU就需要运行一次中断服务程序把这个字的数据转存到主存当中,对于速度很快的I/O设备采用这种中断控制方式就会使得CPU执行中断服务程序的开销特别大,效率会很低
采用DMA控制方式需要有一个专门的控制器,DMA控制器也是一种I/O接口,但是这种I/O接口功能比普通的I/O接口更强大
DMA控制器
![image-20220920191311655](https://i-blog.csdnimg.cn/blog_migrate/7b6e4db0dd9e74f07516cb782f5155f2.png)
DMA控制器通常用来控制某一些块设备,比如磁盘
磁盘数据是一个字一个字传给DMA控制器的
![image-20220920191334982](https://i-blog.csdnimg.cn/blog_migrate/8f10c005f00d4e94df66bc9b5c1c0c21.png)
DMA传送过程
![image-20220920191539443](https://i-blog.csdnimg.cn/blog_migrate/d3b58aa5fa9d309aff8aaaea6e57844f.png)
![image-20220920191555234](https://i-blog.csdnimg.cn/blog_migrate/690883a1eadaba0e2897e398021b9650.png)
DMA方式的特点
![image-20220920191645890](https://i-blog.csdnimg.cn/blog_migrate/b365517390aec2922dd3c692574d16a8.png)
单总线结构DMA是否能够访问主存都由CPU说的算,只有这种三总线结构会出现DMA和CPU同时访存的情况,需要考虑DMA传送方式的问题
大多数引入DMA控制器的计算机DMA接口和主存之间有一个专用的数据通路
DMA传送方式
![image-20220920191618133](https://i-blog.csdnimg.cn/blog_migrate/c3a0dda0b251068e586d76fd7a99b1be.png)
DMA方式与中断方式
![image-20220920191723655](https://i-blog.csdnimg.cn/blog_migrate/23aaf389b4a9cd37f315c03582205b87.png)