OS - 计算机组成原理及CPU主频揭秘

简介: OS - 计算机组成原理及CPU主频揭秘

20210214100112901.png

生猛干货


计算机专业学生、非科班程序员必备! 90%程序员忽略的大厂招聘考点、技能进阶秘诀尽在这里!


大纲视图


20210214095742609.png



我们把整个计算机组成原理的知识点拆分成了四大部分,分别是计算机的基本组成、计算机的指令和计算、处理器设计,以及存储器和I/O设备


计算机的基本组成

运算器、控制器、存储器、输入设备和输出设备这五大基本组件 . 除此之外,我们还需要了解计算机的两个核心指标:性能和功耗


计算机的指令和计算


一条条指令执行的控制过程,就是由计算机五大组件之一的 控制器来控制的。

实现这些运算功能的ALU(Arithmetic LogicUnit/ALU),也就是算术逻辑单元,其实就是计算机五大组件之一的运算器


计算机性能指标


计算机的性能,类比我们自己搬东西 ,有两个指标可以衡量

  • 响应时间(Response time)或叫执行时间(Execution time): 可以理解为让计算机“跑得更快” 。 我们执行一个程序, 花的时间越少,自然性能就越好



20210214125847252.png

  • 吞吐率(Throughput)或者带宽(Bandwidth):可以理解为让计算机“搬得更多”


20210214125824953.png


和搬东西来做对比,如果我们的响应时间短,跑得快,我们可以来回多跑几趟多搬几趟。所以说,缩短程序的响应时间,一般来说都会提升吞吐率。


除了缩短响应时间, 还可以多找几个人一起来搬,这就类似服务器都是8核、16核的。人多力量大,同时处理数据,在单位时间内就可以处理更多数据,吞吐率自然也就上去了。


计算机的计时单位 :CPU时钟


时间是一个很自然的用来衡量性能的指标,但是用时间来衡量时,有两个问题

  • 时 间 不 “ 准 ”


随便写的一个程序,来统计程序运行的时间,每一次统计结果不会完全一样。有可能这一次花了45ms,下一次变成了53ms。


为什么会不准呢?首先,我们统计时间是程序运行结束的时间减去程序开始运行的时间。这个时间也叫Wall Clock Time或者Elapsed Time,就是在运行程序期间,挂在墙上的钟走掉的时间。


但是,计算机可能同时运行着好多个程序,CPU实际上不停地在各个程序之间进行切换。在这些走掉的时间里面,很可能CPU切换去运行别的程序了。而且,有些程序在运行的时候,可能要从网络、硬盘去读取数据,要等网络和硬盘把数据读出来,给到内存和CPU。


所以说, 要 想 准 确 统 计 某 个 程 序 运 行 时 间 , 进 而 去较 两 个 程 序 的 实 际 性 能 , 我 们 得 把 这 些 时 间 给 刨 除


Linux下有一个叫time的命令,可以帮我们统计出来,同样的Wall Clock Time下,程序实际在CPU上到底花了多少时间

$ time seq 1000000 | wc -l
1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
 real time,也就是我们说的Wall Clock Time,也就是运行程序整个过程中流逝掉的时间
 user time,也就是CPU在运行你的程序,在用户态运行指令的时间
 sys time,是CPU在运行你的程序,在操作系统内核里运行指令的时间。

程序实际花费的CPU执行时间(CPU Time),就是user time加上sys time

实际上程序用了0.101s,但是CPU time只有0.031+0.016 = 0.047s。运行程序的时间里,只有不到一半是实际花在这个程序上的



20210214132448347.png

  • 即使我们已经拿到了CPU时间,我们也不一定可以直接“比较”出两个程序的性能差异

即使在同一台计算机上,CPU可能满载运行也可能降频运行,降频运行的时候自然花的时间会多一些。除了CPU之外,时间这个性能指标还会受到主板、内存这些其他相关硬件的影响。


那如何量化呢?


程序的CPU执行时间=CPU时钟周期数×时钟周期时间


时钟周期时间是什么?


Intel Core-i7-7700HQ 2.8GHz,这里的2.8GHz就是电脑的主频(Frequency/Clock Rate)。这个2.8GHz,可以先粗浅地认为,CPU在1秒时间内,可以执行的简单指令的数量是2.8G条。


更准确一点描述,这个2.8GHz就代表,我们CPU的一个“钟表”能够识别出来的最小的时间间隔。就像我们挂在墙上的挂钟,都是“滴答滴答”一秒一秒地走,所以通过墙上的挂钟能够识别出来的最小时间单位就是秒。


在CPU内部,和我们平时戴的电子石英表类似,有一个叫晶体振荡器(Oscillator Crystal)的东西,简称为晶振。我们把晶振当成CPU内部的电子表来使用。晶振带来的每一次“滴答”,就是时钟周期时间。


在这个2.8GHz的CPU上,这个时钟周期时间,就是1/2.8G。CPU,是按照这个“时钟”提示的时间来进行自己的操作。主频越高,意味着这个表走得越快,CPU也就“被逼”着走得越快。


在回到上面程序CPU执行时间的公式

程序的CPU执行时间=CPU时钟周期数×时钟周期时间


最简单的提升性能方案,自然缩短时钟周期时间,也就是提升主频。换句话说,就是换一块好一点的CPU。


这个是硬件的,控制不了, 那我们看另一个因子——CPU时钟周期数上。如果能够减少程序需要的CPU时钟周期数量,一样能够提升程序性能。


对于CPU时钟周期数,可以再做一个分解,把它变成“指令数× 每 条 指 令 的 平 均 时 钟 周 期 数(Cycles PerInstruction,简称CPI)”。


不同的指令需要的Cycles是不同的,加法和乘法都对应着一条CPU指令,但是乘法需要的Cycles就比加法要多,自然也就慢。


在这样拆分了之后,程序的CPU执行时间就可以变成这样三个部分的乘积。

程序的CPU执行时间=指令数×CPI×Clock Cycle Time



因此,如果想要解决性能问题,其实就是要优化这三者。


时钟周期时间,就是计算机主频,这个取决于计算机硬件。我们所熟知的摩尔定律就一直在不停地提高我们计算机的主频。


每条指令的平均时钟周期数CPI,就是一条指令到底需要多少CPU Cycle。 现代的CPU通过流水线技术(Pipeline),让一条指令需要的CPU Cycle尽可能地少。因此,对于CPI的优化,也是计算机组成和体系结构中的重要一环。


指令数,代表执行我们的程序到底需要多少条指令、用哪些指令。这个很多时候就把挑战交给了编译器。同样的代码,编译成计算机指令时候,就有各种不同的表示方式。


类比一下 ,把自己想象成一个CPU,坐在那里写程序。


计算机主频就好像是打字速度,打字越快,你自然可以多写一点程序。


CPI相当于你在写程序的时候,熟悉各种快捷键,越是打同样的内容,需要敲击键盘的次数就越少。


指令数相当于你的程序设计得够合理,同样的程序要写的代码行数就少。


如果三者皆能实现,自然可以很快地写出一个优秀的程序,“性能”从外面来看就是好的。


小结


“响应时间”这个性能指标主要体现在 提升计算机主频,优化CPU设计使得在单个时钟周期内能够执行更多指令,以及通过编译器来减少需要的指令数。


搞定计算机基础内功


https://artisan.blog.csdn.net/article/details/113805984?spm=1001.2014.3001.5502


相关文章
|
6月前
|
存储
计算机组成原理(7)----CPU内部单总线数据通路
计算机组成原理(7)----CPU内部单总线数据通路
359 0
|
6月前
|
存储
计算机组成原理(5)----CPU的基本结构
计算机组成原理(5)----CPU的基本结构
171 0
|
3月前
|
存储 缓存 数据处理
计算机临时存储CPU运算数据
【8月更文挑战第4天】
65 8
|
3月前
|
存储 固态存储 测试技术
|
4月前
|
编译器 芯片
计算机中CPU 架构
【7月更文挑战第27天】
65 2
|
4月前
|
存储 缓存 数据处理
计算机中 中央处理器 (CPU)
【7月更文挑战第27天】
57 2
|
4月前
|
Linux 调度
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
部署02-我们一般接触的是Mos和Wimdows这两款操作系统,很少接触到Linux,操作系统的概述,硬件是由计算机系统中由电子和机械,光电元件所组成的,CPU,内存,硬盘,软件是用户与计算机接口之间
|
5月前
|
虚拟化 iOS开发 MacOS
客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法
客户机操作系统已禁用 CPU。请关闭或重置虚拟机。解决方法
2676 0
|
6月前
|
存储 芯片 块存储
计算机组成原理(2)-----存储芯片与CPU的连接
计算机组成原理(2)-----存储芯片与CPU的连接
262 1
|
6天前
|
弹性计算 Kubernetes Perl
k8s 设置pod 的cpu 和内存
在 Kubernetes (k8s) 中,设置 Pod 的 CPU 和内存资源限制和请求是非常重要的,因为这有助于确保集群资源的合理分配和有效利用。你可以通过定义 Pod 的 `resources` 字段来设置这些限制。 以下是一个示例 YAML 文件,展示了如何为一个 Pod 设置 CPU 和内存资源请求(requests)和限制(limits): ```yaml apiVersion: v1 kind: Pod metadata: name: example-pod spec: containers: - name: example-container image:

热门文章

最新文章