第一章.计算机的抽象与技术

※ PS:
一、本文包含我自己的思考,我本身是软工的,初入底层难免错误频出,切勿轻信!如遇错误,可私信我,我立即更改,感谢!
二、在开始之前,先想一下计算机组成与设计能学到什么?
我认为说白了,无非就如下两个目的:
1. 什么会影响程序的性能,以及如何提高性能?
2. 底层的软硬件是沟通的?软件如何去指导硬件完成所需的功能?
前几章应该会着重围绕着第一个问题进行探讨。

第1章. 计算机的抽象与技术

1.1 计算机体系结构中的8个伟大思想

如下图:
在这里插入图片描述

1.1.1 面向摩尔定律的设计

  根据摩尔定律,芯片的集成度(晶体管数量)会在几年内翻一番,晶体管数量增加,理论上芯片处理的速度越快,性能也就越高

1.1.2 使用抽象简化设计

  就如同面向过程和面向对象,当面向过程时,随着项目工程的变大,设计的复杂性、冗余程度也会越来越大,这无疑会导致程序性能的下降,以及继续开发或者在后期进行维护也相当困难,这时,如果将底层的细节隐藏起来,只提供给高层一个简化的模型,或者是接口,方便程序员后续继续进行开发及维护等操作。

1.1.3 加速大概率事件

  大概率事件通常比小概率事件简单,出现的也更为频繁,因此对大概率事件进行优化更易提高性能。

1.1.4 通过并行提高性能

  并行执行操作来提高性能,这个就不多赘述了。

1.1.5 通过流水线提高性能

  这是一种普遍的并行技术,例如:一个西部小镇着火了,小镇居民们排成一排,接力把水桶从水源快速传至火场,而不是让每个人来回奔跑运水灭火。

1.1.6 通过预测提高性能

  这里有一个假设,即当预测犯错后,恢复的代价不大,同时预测的概率也挺高时,可以通过预测来提高性能。

1.1.7 存储器的层次结构

在这里插入图片描述

  如图,顶层使用容量小但是速度最快的存储器,底层使用速度慢但是容量大的存储器,再使用Cache技术,给程序员造成一种假象,让他们感觉自己的主存既有顶层的高速度,又有底层的大容量。

1.1.8 通过冗余提高可靠性

  计算机工作时,不仅要快,可靠性同样重要,因此就设计了使用适当的冗余器件,来提高系统的可靠性。例如:大的卡车上,同一个轮子大多有两个车胎,即防止一个车胎爆炸后,另一个车胎能够继续稳住车身,以此来提高可靠性。

1.2 程序表象与硬件包装之下简述

  程序表象之下,是应用软件与硬件“通话”的一个过程,其过程如下图所示:
在这里插入图片描述
即从高级语言 — > 汇编语言 — > 机器语言。
由上图可知,我们在日常使用的高级语言,对于计算机是不能直接理解的,需要先翻译成汇编语言,然后汇编器(assembler)再将汇编语言语句翻译成机器能够理解的二进制码。

  硬件包装之下,组成计算机且完成输入、输出、处理和存储数据任务的一共有五大部件,如下图:
在这里插入图片描述
它们分别是:
1.输入设备
2.输出设备
3.存储器
4.数据通路
5.控制器

  其中,4和5组合起来又称为处理器
注:
数据通路:负责完成算数运算
控制器:负责指导数据通路、存储器和I/O设备按照程序指令的要求协同工作。

1.3 性能

1.3.1性能的定义

  对于计算机性能的度量一直没有一个统一的标准,那么在这里,针对不同的用户群体,衡量性能的指标又可以分为两种,分别是响应时间执行时间),和吞吐率
  响应时间:一个任务从开始执行到完成的总时间
  吞吐率:单位时间内完成的工作量
  
  对于个人用户而言,大部分个人用户更加注重计算机的响应时间,对于某个计算机X,它的响应时间或者说是执行时间可以表示为:
性能 X = 1 执行时间 X (1) 性能X = \frac{ 1 }{ 执行时间X } \tag{1} 性能X=执行时间X1(1)
此时,如果有两台计算机X和Y,且X的性能比Y要好,那么有:
性能 X > 性能 Y (2) 性能X > 性能Y\tag{2} 性能X>性能Y(2)
这说明对于同一个任务,计算机X的执行时间要比计算机Y的执行时间要短,那又可以得到如下公式:
1 执行时间 X > 1 执行时间 Y (3) \frac{ 1 }{ 执行时间X } > \frac{ 1 }{ 执行时间Y }\tag{3} 执行时间X1>执行时间Y1(3)

执行时间 Y > 执行时间 X (4) 执行时间Y > 执行时间X\tag{4} 执行时间Y>执行时间X(4)
所以,当我们在日常生活中,听到某某CPU的速率是某某CPU的n倍时,其实就是:
性能 X 性能 Y = 执行时间 Y 执行时间 X = n (5) \frac{ 性能X }{ 性能Y } = \frac{ 执行时间Y }{ 执行时间X } = n \tag{5} 性能Y性能X=执行时间X执行时间Y=n(5)

1.3.2 性能的度量

时间常用来度量计算机性能,程序执行一般以秒为单位,然而,当我们采用不同的计量方式时,时间也有不同的定义方法,其中最直接的就是墙钟时间
  墙钟时间:表示完成一项任务需要的总时间,包括磁盘访问,内存访问,I/O操作和操作系统开销等等时间。
  
  我们知道,CPU在运行时,并不是线性运行的,即CPU不是执行完一个任务,再去执行下一个任务的。它可能需要同时运行好几个程序,例如当这个程序正在进行I/O操作,它就去执行下一个程序的计算操作,以此来最大化利用CPU的性能。也正是因此,在度量性能时,我们往往需要把任务执行时间与CPU工作时间区分开来。由此,我们引申出三个概念:" CPU执行时间、用户CPU时间、系统CPU时间 "。
  CPU执行时间:亦称为CPU时间,表示CPU为了完成某任务花费的计算时间,不包括等待I/O或等待其他程序运行的时间。
  用户CPU时间:用户执行程序所花费的CPU时间。
  系统CPU时间:系统为用户程序执行(操作系统服务)所花费的时间。
  
   统一术语:
   系统性能:表示空载系统的响应时间
   CPU性能:表示用户CPU时间

PS:空载系统指没有运行用户程序时的系统,此时响应时间主要是操作系统等系统软件的开销。

1.3.3 CPU的性能及其度量因素

   由之前的内容可知,度量CPU性能的底线是CPU执行时间,下面先介绍下几个相关名词的定义,再用公式把它们和CPU时间关联起来:
  时钟频率、时钟周期长度、时钟周期数
  众所周知,我们在买CPU的时候,都喜欢看它的主频和睿频,例如今年刚出的I9 14900k,它的主频是3.2GHz。而这个主频,其实就是我们称的“时钟频率”,它是计算机中非常重要的一个性能指标,CPU I9 14900k的主频是3.2GHz,这意味着它一秒钟能完成3.2G个时钟周期。
  那猜一猜每个时钟周期的长度是多少?
  显而易见,时钟周期长度时钟频率的倒数,即:
时钟周期长度 = 1 时钟频率 (6) 时钟周期长度 = \frac{ 1 }{ 时钟频率 } \tag{6} 时钟周期长度=时钟频率1(6)
  同理,我们I9 14900k的时钟周期长度为:
1 3.2 × 1 0 9 = 2.5 × 1 0 − 10 s (7) \frac{ 1 }{ 3.2 × 10^{9} } = 2.5 × 10^{-10}s \tag{7} 3.2×1091=2.5×1010s(7)
  
  时钟周期数,顾名思义,它就是针对一个任务,完成其所有指令所需的时钟周期的个数,它是离散的(因为宏观上,CPU往往是多个任务并行的,它并非等待这个任务完成才会去执行下一个任务)。对于时间周期数有如下公式:
程序的 C P U 执行时间 = 程序的 C P U 时钟周期数 × 时钟周期长度 (8) 程序的CPU执行时间 = 程序的CPU时钟周期数 × 时钟周期长度\tag{8} 程序的CPU执行时间=程序的CPU时钟周期数×时钟周期长度(8)
  由于我们已知时钟周期长度时钟频率的倒数,即我们可以得到:
程序的 C P U 执行时间 = 程序的 C P U 时钟周期数 时钟频率 (9) 程序的CPU执行时间 = \frac{ 程序的CPU时钟周期数 }{ 时钟频率 } \tag{9} 程序的CPU执行时间=时钟频率程序的CPU时钟周期数(9)
  到这里,上述的公式中,已经知道了时钟周期数时钟频率怎么来的了,还剩下一个CPU时钟周期数,它是怎么来呢?我们有如下公式:
C P U 时钟周期数 = 程序的指令数 × 每条指令的平均时钟周期数( C P I ) (10) CPU时钟周期数 = 程序的指令数 × 每条指令的平均时钟周期数(CPI)\tag{10} CPU时钟周期数=程序的指令数×每条指令的平均时钟周期数(CPI(10)
  程序的指令数:这里指的是一个程序,它被编译器翻译成计算机能懂的若干个对印的指令,这些指令的总和就是程序的指令数
  每条指令的平均时钟周期数(CPI | Clock cycles Per Instruction):指的是执行每条指令所需的平均时钟周期数,或者说是执行每条指令所需要消耗的时间。
  
  由上述公式(8)和公式(10),我们可以用如下公式计算CPU时间:
C P U 时间 = 时钟周期长度 × 指令数 × C P I (11) CPU时间 = 时钟周期长度 × 指令数 × CPI\tag{11} CPU时间=时钟周期长度×指令数×CPI(11)
由于时钟频率和时钟周期长度互为倒数,所以也可以表示成:
C P U 时间 = 指令数 × C P I 时钟频率 (12) CPU时间 = \frac{指令数 × CPI}{时钟频率}\tag{12} CPU时间=时钟频率指令数×CPI(12)

1.4 小结

说白了,这一章最主要讲的就是性能,1.1主要探讨了一下现有的能够优化或加速计算机性能的8个方法。其次,稍微了解了一下计算机内部的构造,以及运行原理。最后详细讲述了一下计算机整体性能的评估标准

PS:测试及历史章节不做过多探讨。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值