计算机系统概述(计组)

        计算机的组成

        计算机是由软件+硬件组成,软件分为系统软件和应用软件。系统软件包括:操作系统、数据库管理系统(注意此处不是数据库系统)、标准程序库、网络软件、语言处理程序(汇编程序,编译程序等)、服务类的程序(调试程序等)。系统软件是当计算机开机后就开启,直到计算机关闭后才会关闭的软件。而用户软件是随着用户的使用而打开或关闭的软件。

        一、计算机的发展

        1.硬件的发展:

        我们知道,计算机是由2进制数来存放数据和指令的。最初的计算机是采用电子管来存放一个电信号,强电信号代表1,弱电信号代表0。这样就可以通过操作人员手工连线的方式来为各个电子管接通电流来使计算机运行。虽然电流发出电信号的速度很快,但是操作人员手工接线的方式却很慢,这就导致了计算机整体的运算效率并不高,而且一个电子管的体积是很大的,一个计算机如果想完成计算,需要几十万个电子管,这就导致了第一台计算机的体积也是很大的。

        为了解决电子管作为计算机单个逻辑元件导致的计算机体积大,以及需要操作人员手工接线的方式导致的计算机速度慢,晶体管便被发明了出来,晶体管的体积是比电子管小很多的,所以由晶体管为单个逻辑原件所形成的计算机体积是很小的,并且晶体管由焊接的方式连接在计算机的“主板”上,故也免去了操作人员手工连线导致的效率低的问题,在晶体管时代开始出现操作系统。但是一个计算机有非常多的晶体管,这也导致了焊接时很容易出错。

        为了解决晶焊接晶体管时容易出错的问题,开始出现了集成电路,集成电路是将晶体管集成在一个基片上,后来就成为了我们现在所说的CPU。

        说到CPU就要说一下CPU的龙头公司intel,在我学习汇编语言的时候,我了解到intel公司创立之初时,他们有一个CPU的型号叫做8086,这个CPU处理信息的能力为一次运算可以处理16位2进制数,而CPU处理信息的能力就叫做机器字长,而机器字长也就是字长就对应着CPU处理数据信息的能力,而这些信息包括指令信息和数据信息。

        2.软件的发展

        软件的发展其实就是编程语言的发展,随着编程语言越来越高级,程序员就可以用更加人类化的方式来写出更加丰富的程序,而这是人类用机器语言所不能实现的。编程语言的发展大致可以分为以下阶段:机器语言->汇编语言->高级语言。高级语言通过编译程序编译为汇编语言,而汇编语言通过汇编程序来汇编为机器语言

        现代计算机大致分为两个方向来发展,第一个方向是更小更便捷,适用于我们日常生活的方向发展;另一个方向是更大更高速,适用于科学计算的方向发展。值得注意的是我国的两台超级计算机的运算速度都是以亿亿为单位的,神威计算机的运算速度为9.3亿亿次/s,天河计算机的运算速度为5.49亿亿次/秒,(此处在考研真题中考过,不过真题中是根据其他条件来可以推出运算速度,此处了解一下就好)神威排名世界第三,天河排第四。

        二、计算机硬件的组成

        2.1冯诺依曼型        

        我们的计算机是由输入设备、输出设备、存储器、运算器、控制器组成,而早期的冯诺依曼计算机是以运算器为中心如图: 

        我们前面讲过总线的概念,这里我直接说明。这张图中数据通过输入设备输入,输入设备通过数据总线来将数据传输到运算器中,然后运算器将数据传输到存储器中,存储器再将数据传输到控制器中,控制器来判断该数据是何指令,判断好后,控制器会通过控制总线来控制各个设备,当计算机计算好结果后,运算器将结果存储到存储器中,输出设备想要输出结果的时候再将数据送回给运算器,再由运算器将结果送给输出设备。

        冯诺依曼计算机的最大缺点就是,输入输出设备要将数据从存储器中放入和拿走,但是输入设备输入原始数据的时候,需要运算器作为中介来将数据放入存储器,而输出设备输出结果的时候也需要运算器作为中介来将数据从存储器中拿出。这就大大降低了运算器的效率,所以现代计算机都是以存储器为中心的。

        而现代计算机将运算器和控制器放在一起,也就形成了CPU,而存储器被分为了主存和辅存。主存就是我们现在的内存(RAM),主存中的内容是通过电容存放电荷来存储的所以通电后才会存在而断电即消失的;辅存就是我们现在的硬盘(ROM),硬盘中的内容断电也不会消失。而运算器+控制器+主存就被称作为主机。

        2.2存储器的基本组成 

        主存储器由存储体、地址寄存器(MAR)与数据寄存器(MDR)组成,其实很好记忆,数据是Data,所以数据寄存器是MDR,而数据在存储体中按地址存储,如图:

         如果是读取信息要经历以下步骤:CPU判断为读取数据后,首先MAR接收到地址信息,向存储体中找到对应数据的地址,拿出数据后放入MDR中,由MDR将数据发送出去;如果是存储信息要经历以下步骤:首先数据信息要放入MDR中,然后要将该信息存放的地址信息放入MAR中,CPU接收到存储数据的指令后,会将MDR中的数据存入存储体中MAR的地址。这就是主存储器的工作原理,那么借着这张图,我来讲述一下我在第一次学很头痛的点:字,字长。

        首先,存储体中存储单元的二进制位数叫做存储字,也就是字,而字的长度叫做存储字长,这里的存储字长不是我们平时说的字长,我们平时所说的字长指的是机器字长,它能够反应机器处理信息的能力。从这张图的角度出发也就是字长(机器字长)是反应机器处理字的能力。一定要区分好字、字长、存储字长、机器字长、指令字长。

        存储单元是存储体中存储数据的地方,而MDR是存储单元中数据的临时存放地点。那么也就是说,MDR的一个单位长度可以正好存放一个存储单元中的字,故存储单元长度=存储字长=MDR位数。说完了MDR,说一说MAR,MAR是可以寄存地址的地点,通过这个地址可以找到存储体中所有的地址。那么也就是说,MAR的长度就代表了计算机能在逻辑上能够寻找到的最大地址,而这个最大地址需要包括存储体中所有的地址,所以MAR的长度反映了存储单元的个数。

        需要注意的是,现代寄存器都存在于CPU中。

        2.3CPU的基本组成及工作过程

         CPU由运算器和控制器组成,其中运算器由累加器(ACC);乘商寄存器(MQ);算数逻辑单元(ALU组成);操作数寄存器也叫通用寄存器(X)。控制器由控制单元(CU);指令寄存器(IR);程序计数器(PC)组成。一图胜千言,他们的关系如下图:

         接下来我将利用表格中的指令来讲各个元件联系起来,首先PC的名字叫做程序计数器,当CPU接收到一串指令之后PC会指向逻辑地址为0的指令也就是指向0号地址,当第一条指令执行完毕PC会进行加一的操作。

        此时PC指向0号地址,然后PC会通过地址总线将该地址发送给MAR,MAR根据该地址找到了0号地址所对应的指令,也就是图中的第一个操作码和地址码,然后将该指令放到MDR中。之后MDR会将该指令放入IR也就是指令寄存器中,IR会将该指令对应的操作码传递给CU,CU识别出该操纵码是要进行取数的操作后会通过控制总线来控制IR将地址码通过数据总线传输给MAR,MAR收到地址码后在存储体中找到对应地址的数据,将该数据存入MDR中,最后CU通过控制总线完成最后一步操作,将MDR中暂存的数据放入ACC也就是累加器中。

        第二条指令与第一条指令相似,不过要注意的是CU识别该操作是乘操作后会将操作数放入MQ也就是乘商寄存器中,而我们都知道ACC和MQ都是无法担任加减乘商一类的计算和逻辑操作的,但是此时a在ACC中而b在MQ中,所以ACC会将a传输到X也就是操作数寄存器中,这也就是为什么X要叫做操作数寄存器,而MQ叫做乘商寄存器的原因。直到目前为止,a在X中b在MQ中,而MQ和X之间有一个运算器的核心单元叫做ALU也就是算数逻辑单元,ALU会将MQ和X中的数据做出CU想要它所执行的操作也就是a×b的操作,然后将a×b的结果存入ACC中,这也是为什么ACC要被叫做累加器的原因。至此第二条指令执行完毕。

        第三条指令就简单了,CU判断出该指令为加法,而MDR取出数据c后,此时的a*b在ACC中,那么剩下两个寄存器一个是MQ一个是X,那么我们用膝盖想都知道c不能放到MQ中,因为MQ是乘商寄存器,乘商自然不能存放加数,所以c放入X中,ALU进行操作后将结果放回ACC中。

        后面的指令不做赘述,还有一点要注意的是,根据我们上面的说法,我们在执行一条完整的指令时间叫做指令周期,思考过后我们发现,第一阶段MDR中存放的是指令,第二阶段MDR中存放的是数据,那么也就是说,我们可以通过指令周期的不同阶段来区分此时我们取出的到底是指令还是数据。

        三、计算机层次结构

        我们根据语言的不同来为计算机划分层次结构,首先是机器语言,也就是指令所对应的一串二进制数,在机器语言之下的叫做微指令,比如我们在CPU的工作过程中提过,要执行一条指令,首先要从指令计数器PC中取出要执行的指令地址,而该取地址的操作就是执行该指令的第一个微指令。而在机器语言之上的就是汇编语言,汇编语言的语法是与机器指令一一对应的,也就是说汇编语言也是由指令+地址组成。汇编语言之上的就是我们所熟知的高级语言C\C++、java等。

        计算机层次结构的逐渐发展,使得更加高级更加人类化的语言出现也丰富了计算机的世界,因为人类很难用机器语言来写出一个多样化的APP,所以高级语言是对低级语言的扩展,而低级语言是高级语言的基础(仔细理解这句话)。

        我们的高级语言通过编译程序来编译为汇编语言,而汇编语言通过汇编程序汇编为机器语言,CPU就可以执行这些机器语言了。比如我们平时写的C语言要通过编译器来将其编译为汇编语言再有汇编器汇编为机器语言(其实令我十分不解的是,我觉得编译器也就是编译程序是根据我们用户的需求,我们用户想打开就打开,想关闭就关闭,编译器不是系统开机就打开存在于计算机之中的,所以在我看来编译程序似乎是满足用户程序的特点而不满足系统程序的特点的,但实际上编译程序属于语言处理程序,是属于系统程序,所以这里特殊记忆一下吧)。

        编译器、汇编器、解释器都属于语言处理程序,而我们知到了编译器和汇编器有什么关系,解释器就是为我们所写的程序进行一句一句的解释为机器语言,解释一句机器执行一句;而编译器是属于那种我们写好了一整个程序后,编译器将整个程序编译为机器语言并生成一个.exe文件后,该文件就可以被反复使用,不需要再进行编译,所以总的来说,编译器是一次全部翻译完成并能生成一个文件;而解释器是逐句翻译,翻译一句执行一句,并不会生成文件。

        四、计算机的性能指标

        首先是存储器,存储器中有两个寄存器(寄存器是放在CPU中的,此处我也不知道为什么教材是这样写的),MAR是地址寄存器,给MAR一个地址MAR就可以在存储体中找到该地址对应的存储单元,所以MAR的最大位数反映了一个存储单元所对应的最大地址也反映了存储体中存储单元的个数。MDR是数据寄存器,MDR的位数反映了一个存储单元能够存放多少比特位,其实这要与我们的数据总线做好区分,我们知道数据总线如果宽度不够可以将指令分多次处理,但是MDR却不行,总不能是MDR先存放存储单元中的一部分二进制数给CPU进行处理,然后再存放剩下的二进制数给CPU处理吧?这样显然是不合逻辑的。

        此处需要记忆一些东西,1K=2^10、1M=2^20、1G=2^30、1T=2^40,这是我们在说明计算机内部的存储空间等会说的指标,而当我们说一个宽带是什么速度,以及CPU的HZ是多少或者描述一个计算机的性能的时候用的是十进制,1K是一千;1M是一百万;1G是十亿;1T是万亿;1P是一千万亿;1E是一百京10^18;1Z是十万京10^21。

        现在市面上卖的CPU的指标上都有多少GHZ,CPU在运行的时候会发送数字脉冲信号来进行工作,而发送一次脉冲信号叫做一次时钟周期,而时钟周期的倒数就是HZ。计算机中有两个很重要的指标一个叫做CPI,CPI就是CPU执行一条指令所需要花费的时钟周期数量;另一个叫做IPS,IPS是指计算机一秒钟能执行多少条指令。

        知道了CPI、IPS之后,我们要思考,CPI在不同环境下的变化是怎样的呢?比如在同一台计算机中,当CPU负荷较大时CPI就较高,而负载小时自然就较低;那么是CPI的数量越小就能证明计算机的运行速度越快吗?那么我们想象一下:如果一台计算机CPU的HZ较低但是CPI也低,另一台计算机的CPU的HZ较高但是CPI高,那么我们也是无法比较两台计算机到底哪个更快的;而且根据程序代码设计不同,指令数量也不同,那么同一个功能的两个不同的程序,运行起来速度也不一定谁更快,所以要具体情况具体分析。

        基准程序:基准程序是专门用来评定计算机性能的程序,而基准程序并不一定就能完全代表一个计算机的能力,比如当一台计算机安装了4090显卡,是主要用来进行图形化处理的机器,但是基准程序却可能根据设计人员的代码来专门测定该计算机的CPU运行速度,那这显然是不合理的,并不能代表这台计算机性能不行。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值