《计算机组成原理》(5) 学习了计算机组成原理的第五章——计算机组成,为了理清思路,特来写一篇博客,把计算机的组成讲清楚。如有错误请不吝赐教。 知识点: 1.计算机组成部分分为三个大类(或者说子系统),分别是:中央处理单CPU,主储存器,和输入输出系统 (1)其中CPU:用于数据的运算,它又由三个组成部分:算术逻辑单,控制单,寄存器组(快速存储单) 接下来分别介绍这三个组成部分的功能。 算术逻辑单(ALU==Arithmetic &logical Unit):对数据进行逻辑,移位和算术运算 寄存器:用来临时存放数据的高速独立的储存单,CPU的运算功能依赖它。寄存器也分为三种,数据寄存器:保存计算的中间结果;指令寄存器:储存程序(指令),CPU就是从内存中读取指令放在指令寄存器中,解释并执行指令;程序计数器:其中保存的是当前正在执行的指令,指令执行完后,计数器自动加1,指向下一条内存地址。 看到这里,我回顾之前写的关于函数栈帧调用的一些反汇编指令和对一些自动执行的操作有了更深刻的认识,比如为什么pop会让esi,eps同时往后弹一轮,为什么每次执行完会自动跳下一条指令;用于传递形参和带回返回值的其实是寄存器。有兴趣的可以看一看 函数调用的栈帧详解 – 小浩的文章 – 知乎 https://zhuanlan.zhihu.com/p/ 控制单 介绍的很简略,但是简单的文字里透露出其强大的功能:“控制各个子系统的操作,控制通过从控制单发送到其他子系统的信号来进行”,可能就是操作系统,这里我暂时不理解。 (2)主储存器 相比于我们之前了解的硬盘,内存,之类的,主储存器的定义是“储存单的集合” 主要有两种储存类型:RAM(随机存取储存器),ROM(只读储存器),这两种储存方式用户都可以看到里面的数据,但不同的是,用户不可以修改ROM中的原数据。同时RAM有个缺点,就是断电后,里面的数据就会丢失。RAM又分为两种:SRAM (静态RAM)和 DRAM(动态RAM),区别在于前者速度快,价格昂贵(采用传统的触发器门);后者速度慢,但是价格低(用的是电容技术) ROM,一个特点就是用户只能读不能写,而且断电后数据不会损失,常用来装开机时运行的程序,然后有PROM,EPROM,EEPROM几种,(对于现阶段来说暂时不用了解) 速度快的储存器通常比较贵,速度慢的呢通常比较便宜,为了解决这个问题,在设计计算机时,采用储存器的层次结构的方式来建构计算器的主储存器 。 下面来实际的介绍一个数据存储的细节: 高速缓冲存储器位于寄存器和主存(可以认为是内存)之间,高速缓冲存储器在任何时间都含有主存中的部分内容的副本(这个特点非常的重要,二八效应在计算机中的体现就是计算机通常花80%的时间来读取20%的数据,也就是说相同的数据往往被存取多次,而高速缓冲存储器存放了这部分数据,就极大的提高了速度) 当CPU要读取数据时,他会先在高速缓存找,找到了就直接复制过去,找不到再去内存读,并将要找的那个数据的一段内存块都拷贝到高速存储器中去(因为它很有可能在后面的几步操作要用到相邻内存的数据,省略了后续再查找的操作,这也大大的提高了速度) (3)输入输出子系统(可以看作是用于与用户交互的) 主要分为两大类:非存储设备和存储设备 非存储设备使得CPU/内存可以与外界通信,但是它们不能存储信息,典型的有键盘和显示器,打印机 存储设备:磁盘,磁带 不用了解太多,比较鸡肋,主要有用的还是非存储设备 第一大块,组成计算机的三个子系统介绍完了,下面介绍这些系统间的交互,这是重难点。 首先讲CPU和存储器间的连接 CPU与存储器通常由称为总线的三组线路连接在一起,分别是地址总线,数据总线,控制总线。 数据总线的多少决定了我们同一时刻可以修改的存放数据的位的大小,比如32根数据总线,那么就可以同一时刻修改一个int类型的变量的值 地址总线控制我们访问存储器中的哪个字,同时地址总线的数量就决定了我们存储空间的大小,比如存储器的容量为2^n个字,那么就需要n根地址线才能管理好 控制总线,它的数量决定了计算机指令的多少,它负责的是在中央处理器和内存之间传送信息 l/O设备的连接,输入和输出设备不能直接与连接CPU和内存的总线相连。因为输入输出设备的本质与CPU和内存的本质不同,前者是机电,磁性或者光学设备,而CPU和内存是电子设备,操作速度要慢的多因此必须有中介来处理这种差异,一种被称为输入/输出控制器或接口的器件将设备连接到总线上(主要有:SCSI即小型计算机接口,火线,USB,了解一下即可) CPU可以使用相同的总线在主存和输入/输出设备之间读写数据,唯一不同的是指令。这一点让我影响深刻,记得在学习python和C 语言的文件读写操作时,都使用了不同于常规的语句,比如fscanf,fgetc和fputc等等,原理就是这句话:总线相同,只是指令不同(还有也可以是地址不同) 有两种方法对输入输出设备进行寻址,I/O独立寻址和I/O存储器映射寻址。 I/O独立寻址就是有专门的指令完成对输入和输出设备的控制和读写操作 I/O存储器映射寻址,这种方式下,CPU将输入和输出设备看作是内存,对输入和输出设备的读写操作的指令和对自身内存的操作指令没有什么不同,用来区分的是地址 程序的执行:当今计算机使用称为程序的一系列指令来处理数据,程序和数据都存在内存中(这也是原始的计算机和图灵机或说现代计算机的一大区别) 章节的最后给出了一些很有价值的计算机工作的细节 1.机器周期: CPU利用重复的机器周期来执行程序中指令,而周期包括三步:取指令,译码,执行 取指令阶段,控制单命令系统将下一条要执行的指令复制到CPU指令寄存器中,被复制的指令的地址被保存在程序计数器中,复制完成后,程序计数器自动加一(要被复制的下一条指令是如何被找到的,就是程序计数器的功劳) 译码:指令存在寄存器之后,该指令由控制单译码,将指令转换为一系列可执行的二进制代码 执行:CPU将这些可执行的指令发给相应的部件要求它们执行操作,这就是执行。 2.输入输出操作,计算机需要通过指令把数据从I/O设备传输到CPU和内存,因为输入输出设备的速度要比CPU慢的多,有三种方法用于设计同步:分别为程序控制输入输出(让CPU等待设备,期间不能做事),中断控制输入输出(也等待,但是同时CPU可以做其他的事),直接存储器存取(主要是对于高速I/O设备读取大量的数据块才用) 3.不同的计算机体系结构 (1)CISC复杂指令集计算机,它的体系结构设计策略是使用大量的指令,包含复杂指令,但是使得CPU和控制单的电路非常复杂,于是增添了微内存这一结构来执行微操作,优点是在此体系上,程序设计变得非常的简单。 看着挺绕的,下面我来解释一下:复杂指令集计算机最大的特点就是它包含复杂的指令(复杂指令可以认为是简单指令的集合,只是这里封装了,而且通过一次性直接操作底层来解决,不需要自己去写一条一条简单的指令来达成目的),而计算机为了完成这些复杂的指令就需要更加复杂的电路来支持,但是这会让CPU性能和成本开销很大,于是设计者提出了让CPU只执行微指令而达到简化电路设计的目的,然后多设计一个微内存,该内存完成两个任务,存储由复杂指令转为的微指令,将这些微指令送给CPU执行。优点让程序设计变得简单,这个道理就像是在写C语言的时候我们可以使用函数来简化操作一样。 (2)精简指令集计算机,该体系结构的设计策略是用少量的指令完成最少的简单操作,复杂的指令都用简单的指令集模拟,这使得程序设计变得非常的困难。 乍一看,感觉这两种体系的差别好像不大,有种极为相似的感觉,复杂指令都是由简单指令合成的,但是我理解的区别就在于,前者可以直接使用复杂指令,将复杂指令转为简单指令的动作交给机器来完成,而后者要自己将这些复杂指令写出来(或许,这些底层的程序设计没有函数这种操作吧) (3)流水线,这是一种技术,之前我们说过了CPU执行程序是通过循环机器周期的来完成的,读取,译码,执行,但是原始的计算机一次不能够执行多个周期,需要串行完成,简单来说就是上一步没完成,下一步就别想开始,哈哈。但是使用流水线技术就可以让多个周期同时进行,大大提高了效率
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/22351.html