计算机组成原理

1、为什么你需要学习计算机组成原理
  • (1)计算机是由 CPU、内存、显示器这些设备组成的硬件,在硬件和软件之间需要一座桥梁,而“计算机组成原理”就扮演了这个角色,它既隔离了软件和硬件,也提供了让软件无需关心硬件,就能直接操作硬件的接口。
  • (2)可以明白高级语言是如何对应着 CPU 能够处理的一条条指令,搞清楚程序是如何加载运行的,能够让你对操作系统有更深入的理解。
    在这里插入图片描述
2、冯·诺依曼体系结构:计算机组成的金字塔
  • (1)计算机,要先有三大件:CPU、内存和主板。
  • (2)计算机是由CPU,内存,主板,再配上电源供电,计算机就跑起来了,还需要I/O设备(显示器,键盘,鼠标),硬盘保存数据。显卡(里有GPU图形处理器)
  • (3) 计算机所有的计算都是由CPU来进行的
  • (4) 内存越大,能加载的东西自然也就越多
  • (5)主板的芯片组和总线解决了CPU内存之间如何通信的问题,芯片组控制了数据传输的流转,也就是数据从哪里到哪里的问题,总线速度决定了数据传输的多快
  • (6)计算机组成原理,既隔离了软件和硬件,也提供了让软件无需关心的硬件,就能直接操作硬件的接口
  • (7)计算机组成原理通过指令,计算,CPU,存储系统和I/O串起来,
  • (8)冯、诺依曼体系结构,也叫存储程序计算机(可编程,可存储)
  • (9)计算机应该包含:
    • 算术逻辑单元和处理器寄存器的处理器单元,用来完成各种算术和逻辑运算,即运算器
    • 然后包含一个指令寄存器和程序计数器的控制器单元,用来控制程序的流程。
    • 上面的算术逻辑单元和这里的控制器单元共同组成CPU。
    • 接着用来存储数据和指令的内存,以及大容量的外部存储,指向硬盘
    • 最后各种输入输出设备。
  • (10)任何一台计算器的任何一个部件都可以归到运算器,控制器,存储器,输入设备和输出设备中,而所有的现代计算机也是基于这个基础架构来设计开发的
    • 而所有的计算机程序,也都可以抽象为从输入设备读取输入信息,通过运算器和控制器来执行存储在存储器里的程序,最终把结果输出到输出设备中。
      在这里插入图片描述
  • (11)冯诺依曼体系机构确立了我们现在每天使用的计算机硬件的基础架构
  • (12)学习组成原理,就是学习控制器、运算器的工作原理,也就是CPU是怎么工作的。就是在理解从控制器,运算器,存储器,输入设备以及输出设备,从电路这样的硬件,到最终开放给软件的接口,是怎样运作的,为什么要设计成这样,以及在软件开发层面怎么尽可能用好它。
3、计算机组成原理该这么学
  • (1)整个计算机组成原理,就是围绕着计算机是如何组织运作展开的
    在这里插入图片描述
  • (2)计算机由很多个不同的部件放在一起,变成了一个“组织机构”。这个组织机构最终能够进行各种计算、控制、读取输入、进行输出,达成各种强大的功能。计算机组成原理拆成了四大部分:计算机的基本组成,计算机的指令和计算,处理器的设计,以及存储器和I/O设备。
  • (3)计算机的基本组成:
    * 计算机是由CPU、主板、内存、硬盘、鼠标键盘、显示器这些硬件组成
    * 冯诺依曼体系结构:运算器、控制器、存储器、输入设备和输出设备这五大基本组件
    * 计算机的两个核心指标:性能和功耗
  • (4)计算机的指令和计算:
    * 指令部分:我们撰写的一行行Python程序,是怎么在计算机里跑起来的。我们的程序是怎么通过编译器和汇编器,变成一条条机器指令这样的编译过程。我们的操作系统是怎么链接、装载、执行这些程序的。而这一条条指令控制行的控制过程,就是有计算机五大组件之一的控制器来控制的。
    * 计算部分:从二进制和编码开始,理解我们的书籍在计算机里的表示,以及我们是怎么从数字电路层面,实现加法、乘法这些基本的运算功能的。实现这些运算功能的ALU也就是算术逻辑单元,其实是我们计算机五大组件之一的运算器。
  • (5)CPU设计:
    • CPU时钟可以用来构造寄存器和内存的锁存器和触发器,弄明白我们为什么需要CPU时钟,以及寄存器和内存是用什么样的硬件组成。
    • 数据通路,其实就是连接了整个运算器和控制器,并最终组成了CPU。处于对性能和功耗的考虑,需要进一步理解和掌握面向流水线设计的CPU、数据和控制冒险,以及分支预测的相关技术
    • CPU作为控制器要和输入输出设备通信,就要知道异常和中断发生的机制。
  • (6)存储器的原理
    • 通过存储器的层次结构作为基础的框架引导,需要掌握从上到下的CPU高速缓存、内存、SSD硬盘和机械硬盘的工作原理,它们之间的性能差异,以及实际应用中利用这些设备会遇到的挑战。
    • CPU和存储器之间是如何进行通信的,以及我们最重视的性能问题是怎么一回事,理解什么是IO_WAIT,如何通过DMA来提升程序性能。
    • 对于存储器,我们不仅需要它们能够正常工作,还要确保里面的数据不能丢失,于是要掌握我们是如何通过RAID、Erasure Code、ECC以及分布式HDFS,这些不同的技术,来确保数据的完整性和访问性能。
4、通过CPU主频,谈谈“性能”是什么?
  • (1)性能:响应时间的倒数,两个指标:响应时间,吞吐率
  • (2)响应时间:执行时间,让计算机“跑得更快”
    • 响应时间指的就是,我们执行一个程序,到底需要花多少时间,花的时间越少,自然性能就越好
  • (3)吞吐率:带宽,计算机搬得更多
    • 吞吐率指的就是,我们在一定的时间范围内,到底能处理多少事情,在计算机里能处理的数据或者执行的程序指令
  • (4)计算机的计时单位:CPU时钟
    • 如果用时间来衡量性能的指标,有两个问题,第一就是时间不准(如计算机可能同时运行着好几个程序,CPU实际上不停地在各个程序之间进行切换,在这些走掉的时间里面,很可能是CPU去运行别的程序了。而且,有些程序在运行的时候,可能要从网络、硬盘去读取数据,要等网络和硬盘把数据读出来,给到内存和CPU)。
    • 所以,要准确统计某个程序运行时间,进而去比较这两个程序的实际性能,我们得把这些时间给刨除掉
    • Linux下time命令,返回三个值,第一个是real time,也就是运行程序整个过程中流逝掉的时间。第二个是user time,也就是CPU在运行你的程序,在用户态运行指令的时间。第三个是sys time,是CPU在运行你的程序,在操作系统内核例运行指令的时间,而程序实际花费的CPU执行时间,就是user time + sys time
    • 第二个问题,除CPU外,时间这个性能还受主板、内存、这些其他硬件影响,所以我们包时间进行拆解,程序的CPU执行时间 = CPU时钟周期 * 时钟周期时间 = 指令数*每条指令的平均时钟周期数(CPI)*时钟周期时间
    • 时钟周期时间,就是计算机主频,主频2.8GHz,CPU在1秒时间内,可以执行的简单指令的数量是2.8G条;晶振带来的每一次滴答就是时钟周期时间;
    • 时钟周期数=指令数*每条指令的平均时钟周期数(CPI)
    • 优化计算机性能:提升计算机主频,优化CPU设计是的单个时钟周期内能够执行更多指令,以及通过编译器来减少需要的指令数。
5、穿越功耗墙,该从哪些方面提升性能
  • (1)程序的CPU执行时间 = 指令数CPIClock Cycle time
  • (2)提升计算机的性能,从指令数,CPI,以及CPU主频三方面入手
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值