草庐IT

【计算机组成原理 - 第一章】计算机系统概论(完结)

Roye_ack 2023-05-15 原文

本章参考王道考研相关课程:

【2021版】1.2.1_计算机硬件的基本组成_哔哩哔哩_bilibili

【2021版】1.2.2_认识各个硬件部件_哔哩哔哩_bilibili

【2021版】1.2.3_计算机系统的层次结构_哔哩哔哩_bilibili

【2021版】1.3_计算机的性能指标_哔哩哔哩_bilibili

目录

一、计算机的发展

二、计算机软硬件概念

三、计算机系统层次结构

1、三个级别的语言

2、翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?

四、计算机的基本组成

1、冯诺依曼计算机特点

2、计算机硬件框图

(1)主存储器(cpu可以直接访问)、辅助存储

(2)运算器

(3)控制器

五、计算机工作过程

1、取数指令 ​编辑

2、乘法指令

 3、加法指令

4、存数指令

5、计算机工作过程总结

1、取指阶段(必经阶段)

2、分析阶段(必经阶段)

3、执行阶段(根据不同指令步骤不同)

六、计算机性能指标 

1、机器字长

2、存储器的性能指标

3、CPU的性能指标

4、系统整体性能指标

5、主频高的CPU一定比主频低的CPU快吗?为什么?


一、计算机的发展

  • 第一代:电子管计算机
  • 第二代:晶体管计算机
  • 第三代:较小规模集成电路
  • 第四代:较大规模集成电路

二、计算机软硬件概念

  • 系统软件:标准程序库、语言处理程序、操作系统、服务程序、数据库管理系统、网络软件等
  • 应用软件:科学计算类程序,工程设计类程序,数据统计与处理程序

三、计算机系统层次结构

1、三个级别的语言

  • 机器语言:二进制代码,计算机唯一可以直接识别和执行的语言
  • 汇编语言:用英文单词或其缩写代替二进制指令,必须经过一个称为汇编程序的系统软件翻译,将其转换为机器语言,才能在计算机的硬件系统上执行
  • 高级语言:为方便程序员处理问题,经过编译程序编译成汇编语言,然后通过汇编程序转换成机器语言,或直接由高级语言程序翻译成机器语言

  • 高级语言 ——编译——> 汇编语言 ——汇编——> 机器语言
  • 边翻译边执行叫做解析

2、翻译程序、汇编程序、编译程序、解释程序有什么差别?各自的特性是什么?

翻译程序:包括编译程序解释程序

  • 编译程序:将高级语言一次全部翻译成目标程序
  • 解释程序:翻译一句执行一句,并且不会生成目标程序

汇编程序:将汇编语言翻译成机器语言

四、计算机的基本组成

1、冯诺依曼计算机特点

  • 计算机由运算器存储器控制器输入设备输出设备组成
  • 指令和数据以同等地位存放于存储器内,并按地址寻访
  • 数据和指令均用二进制数表示
  • 指令由操作码地址码组成
  • 机器以运算器为中心,输入输出设备与存储器间的数据传送通过运算器完成
  • 早期冯诺依曼机最根本特征是【程序存储】,即按照地址访问并顺序执行指令
  • 计算机五大功能:数据传送功能、数据存储功能、数据处理功能、操作控制功能、操作判断功能

2、计算机硬件框图

(1)主存储器(cpu可以直接访问)、辅助存储

存储体含有许多存储单元,每个存储单元包含若干个存储元,每个存储元可以0或1

  • 存储字:一个存储单元存储一串二进制代码
  • 存储字长:这串二进制代码的位数

为了实现按地址存取,主存配置两个寄存器:

  • 地址寄存器MAR:指明要读/写哪个存储单元。位数=存储单元的个数
  • 数据寄存器MDR:暂存要读/写的数据。位数=存储字长

(2)运算器

  • 运算器最少包括3个寄存器和一个算数逻辑单元ALU
  • 寄存器:ACC累加器、MQ乘商寄存器、X操作数寄存器

(3)控制器

  • 完成一条指令操作:取指阶段PC、分析阶段IR、执行阶段CU
  • 控制器由PC程序计数器、IR指令寄存器、CU控制单元组成

  • (Program Counter)PC程序计数器:存放下一条指令的地址,将指令传给MAR,有自动+1功能
  • (Instruction Register)IR指令寄存器:存放当前执行的指令,拆分出操作码传给CU,拆分出地址码传给MAR,MAR在主存储体中取出数据传给MDR
  • (Control Unit)CU控制单元:分析指令,给出控制信号

五、计算机工作过程

【2021版】1.2.2_认识各个硬件部件_哔哩哔哩_bilibili(16min开始)

高级语言的一段代码

int a=2,b=3,c=1,y=0;

void main()
{
    y=a*b+c;
}

1、取数指令 

2、乘法指令

 3、加法指令

4、存数指令

5、计算机工作过程总结

 CPU区分指令和数据的依据:指令周期的不同阶段

1、取指阶段(必经阶段)

  • PC存放下一条指令的地址 ——> MAR(存放欲访问的存储单元地址)
  • MAR在存储体内找到存储指令的地址 ——> MDR(存放从主存储体取来的数据)
  • MDR将指令 ——> IR(存放当前执行的指令)
  • 取数阶段结束 PC++

2、分析阶段(必经阶段)

  • IR拆分出操作码 ——> CU   
  • 分析阶段结束

3、执行阶段(根据不同指令步骤不同)

  • IR拆分出地址码 ——> MAR
  • MAR在存储体内找到存储的数据的地址 ——> MDR
  • MDR ——> ACC
  • 执行阶段结束

六、计算机性能指标 

1、机器字长

CPU一次能处理数据的位数,一般等于内部寄存器的大小,决定了计算机的运算精度

2、存储器的性能指标

  • MAR:位数反映存储单元的数量
  • MDR:位数反映存储字长(存储字长=存储单元二进制码的位数)

总容量 = 存储单元个数×存储字长 bit(b)

            = 存储单元个数×存储字长÷8 byte(B)

1 byte = 8 bit

eg:MAR为32位,MDR为8位

总容量 = 

描述存储容量、文件大小时:

K—        M—        G—        T—        P=

3、CPU的性能指标

1、时钟周期:CPU中最小时间单位(单位:微秒、纳秒)

2、CPU主频(时钟频率):CPU内数字脉冲信号振荡频率,主频越高的CPU不一定比主频低的CPU快

CPU主频=1/时钟周期 (单位:Hz)

3、CPI:执行一条指令所需的时钟周期数,不同指令CPI不同,相同指令CPI也可能变化

4、CPU执行时间(运行一个程序花费的时间) =(指令条数×CPI)÷主频

eg:某CPU主频为1000Hz,某程序包含100条指令,平均来看指令的CPI=3,问该程序走该CPU上执行需要多久?

100×3÷1000=0.3s

5、IPS:每秒执行多少条指令 IPS=主频÷平均CPI

KIPS、MIPS——比如:2MIPS,即每秒能执行  条指令

6、FLOPS:每秒执行多少次浮点运算

KFLOPS、MFLOPS、GFLOPS、TFLOPS

7、核数——处理器个数(核心数:八核)

描述频率、速度时: 

K=      M=     G=      T=     

4、系统整体性能指标

1、数据通路带宽:数据总线一次所能并行传送信息的位数,各硬件部件通过数据总线传输数据

2、吞吐量:指系统在单位时间内处理请求的数量,主要取决于主存的存储周期

3、响应时间

4、基准程序(动态测试):像鲁大师这种跑分软件,一般情况下,基准测试程序能够反映机器性能的好坏。但由于基准程序中的语句存在频度的差异,因此运行结果并不能完全说明问题

5、主频高的CPU一定比主频低的CPU快吗?为什么?

衡量CPU运算速度的指标有很多,不能以单独的某个指标来判断CPU的好坏

CPU的主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者的数值关系,因为CPU的运算速度还要看CPU的流水线的各方面的性能指标(架构、缓存、指令集、CPU的位数、 Cache大小等)。由于主频并不直接代表运算速度,因此在一定情况下很可能会出现主频较高的CPU实际运算速度较低的现象

有关【计算机组成原理 - 第一章】计算机系统概论(完结)的更多相关文章

  1. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  4. ruby - 使用 Ruby,计算 n x m 数组的每一列中有多少个 true 的简单方法是什么? - 2

    给定一个nxmbool数组:[[true,true,false],[false,true,true],[false,true,true]]有什么简单的方法可以返回“该列中有多少个true?”结果应该是[1,3,2] 最佳答案 使用转置得到一个数组,其中每个子数组代表一列,然后将每一列映射到其中的true数:arr.transpose.map{|subarr|subarr.count(true)}这是一个带有inject的版本,应该在1.8.6上运行,没有任何依赖:arr.transpose.map{|subarr|subarr.in

  5. ruby-on-rails - CarrierWave - PDF - 只选择第一页 - 2

    我的Rails应用程序中安装了carrierwave。但是,当用户上传多页pdf时,我只希望应用程序获取文档中的第一页并将其转换为jpeg。这可能吗?用什么命令?这是我的uploader。#encoding:utf-8classImageUploader[200,300]##defscale(width,height)##dosomething#end#Createdifferentversionsofyouruploadedfiles:version:thumbdoprocess:resize_to_fill=>[150,210]process:convert=>:jpgdefful

  6. ruby - 如何跳过 CSV 文件的第一行并将第二行作为标题 - 2

    有没有办法跳过CSV文件的第一行,让第二行作为标题?我有一个CSV文件,第一行是日期,第二行是标题,所以我需要能够在遍历它时跳过第一行。我尝试使用slice但它会将CSV转换为数组,我真的很想将其读取为CSV,以便我可以利用header。 最佳答案 根据您的数据,您可以使用另一种方法和skip_lines-option此示例跳过所有以#开头的行require'csv'CSV.parse(DATA.read,:col_sep=>';',:headers=>true,:skip_lines=>/^#/#Markcomments!)do|

  7. arrays - 计算数组中的匹配元素 - 2

    给定两个大小相等的数组,如何找到不考虑位置的匹配元素的数量?例如:[0,0,5]和[0,5,5]将返回2的匹配项,因为有一个0和一个5共同;[1,0,0,3]和[0,0,1,4]将返回3的匹配项,因为0有两场,1有一场;[1,2,2,3]和[1,2,3,4]将返回3的匹配项。我尝试了很多想法,但它们都变得相当粗糙和令人费解。我猜想有一些不错的Ruby习惯用法,或者可能是一个正则表达式,可以很好地回答这个解决方案。 最佳答案 您可以使用count完成它:a.count{|e|index=b.index(e)andb.delete_at

  8. ruby - 在 Ruby 中,为什么 Array.new(size, object) 创建一个由对同一对象的多个引用组成的数组? - 2

    如thisanswer中所述,Array.new(size,object)创建一个数组,其中size引用相同的object。hash=Hash.newa=Array.new(2,hash)a[0]['cat']='feline'a#=>[{"cat"=>"feline"},{"cat"=>"feline"}]a[1]['cat']='Felix'a#=>[{"cat"=>"Felix"},{"cat"=>"Felix"}]为什么Ruby会这样做,而不是对object进行dup或clone? 最佳答案 因为那是thedocumenta

  9. arrays - 在一行中选择数组的第一个和最后一个元素 - 2

    我的任务是从数组中选择最高和最低的数字。我想我很清楚我想做什么,但只是努力以正确的格式访问信息以满足通过标准。defhigh_and_low(numbers)array=numbers.split("").map!{|x|x.to_i}array.sort!{|a,b|ba}putsarray[0,-1]end数字可能看起来像"80917234100",要通过,我需要输出"9234"。我正在尝试putsarray.first.last,但一直无法弄明白。 最佳答案 有Array#minmax完全满足您需要的方法:array=[80,

  10. ruby-on-rails - 如何计算 Ruby/Rails 中 JSON 对象的数量 - 2

    Ruby中如何“一般地”计算以下格式(有根、无根)的JSON对象的数量?一般来说,我的意思是元素可能不同(例如“标题”被称为其他东西)。没有根:{[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]}根包裹:{"posts":[{"title":"Post1","body":"Hello!"},{"title":"Post2","body":"Goodbye!"}]} 最佳答案 首先,withoutroot代码不是有效的json格式。它将没有包

随机推荐