更新中
本专栏是博主在大学浪了近两年啥也没学后重学计算机专业时写的,方便个人学习和复习,本人菜鸟一枚,如有错误或能优化的地方欢迎指正,也特别欢迎交流学习。
motto共勉:心之所向,素履以往;做喜欢的事不需要坚持
目录
第一章 计算机系统概述
本章重点分析计算机硬、软件系统的组成及功能、计算机性能指标和评价,从总体上对计算机的构成和主要部件的功能有一个初步的了解
1.1计算机发展历程
计算机是能够按事先存储的程序,自动、高速、准确地对相关信息进行处理的电子设备。从数据表示看,计算机可分为数字计算机和模拟计算机。今天的计算机以数字计算机为主
1.1.1 国外计算机发展概况
1946年2月,第一台电子数字积分计算机 ENIAC(Electronic Numerical Integrator and Computer)在美国宾夕法尼亚大学诞生
第一代 电子管计算机(1946-1958年)
第二代 晶体管计算机(1958-1964年)
第三代 集成电路计算机(1964-1971年)
第四代 超大规模集成电路计算机(1971-至今)
1.1.2 摩尔定律
主要内容
当价格不变时,集成电路能容纳的晶体管数量每过18-24个月将翻一番,性能也将翻倍
1.2 计算机系统的组成
一台完整的计算机包括硬件和软件两部分,另外还有一部分固化的软件称为固件,它兼具硬件和软件的特性,如个人计算机的BIOS。硬件和软件的结合才能使计算机正常运行并发挥作用
1.2.1 计算机硬件系统
计算机硬件系统是构成计算机系统的电子线路和电子元件等物理设备的总称。硬件是构成计算机的物质基础,是计算机系统的核心
冯诺依曼体系结构
冯诺依曼提出了采用二进制作为数字计算机数制基础的理论。此外,他还提出了存储程序和程序控制的思想。存储程序指将解题步骤编制成程序,将程序和运行程序需要的数据以二进制的形式存入存储器。程序控制指计算机中的控制器逐条取出存储器的指令并按顺序执行,控制各功能部件进行相应的操作,完成数据的加工处理。存储程序和程序控制是冯诺依曼结构计算机的主要思想,人们把这些理论称作冯诺依曼体系结构
计算机的硬件系统包含运算器ALU、控制器CU、存储器、输入设备和输出设备五大部件,运算器和控制器合称为中央处理器CPU,CPU和存储器合称为主机,输入设备和输出设备合称为输入输出设备,又称外部设备
冯诺依曼体系结构
1.存储器
主要功能 存储程序和数据
组成 目前,计算机主存储器都是半导体存储器。由若干存储单元组成,每个存储单元对应一个编号,称为单元地址
向存储单元存入或从存储单元取出信息,都称为访问存储器。访问时,先有地址编译器将送来的单元地址进行译码,找到对应的存储单元;再由读/写控制电路确定访问存储器的方式,即读(取出)还是写(存入);最后按规定方式完成取出或存入操作。
与之相关的部件还有地址总线和数据总线,分别为访问存储器传递地址信息和数据信息,地址总线是单向的,数据总线是双向的。
存储器组成框图
2.运算器
主要功能 运算器是一种用于信息加工处理的部件,它对数据进行算术运算和逻辑运算。算术运算是按照算术规则进行的加、减、乘、除等运算。逻辑运算一般泛指非算术运算,如逻辑加、逻辑乘、逻辑取反及异或等。
组成 运算器通常由算术逻辑单元(ALU)和一系列寄存器组成。ALU是具体完成算术与逻辑运算的部件;寄存器用于存放运算操作数;累加器除存放运算操作数外,在连续运算中,还用于存放中间结果和最后结果,寄存器与累加器中的原始数据既可从存储器获得,也可以来自其他寄存器;累加器的最后结果既可存放到存储器中,也可送入其他寄存器。
一般将运算器一次运算能处理的二进制位数称为机器字长,它是计算机的重要性能指标。常用的计算机字长有8位、16位、32位及64位。寄存器、累加器及存储单元的长度一般与机器字长相等。现代计算机的运算器具有多个寄存器,如8个、16个、32个,多的有上百个,这些寄存器统称为通用寄存器组。设置通用寄存器组可以减少访问存储器的次数,提高运算器的运算速度。
最简单的运算器示意图
3.控制器
主要功能 控制器工作的实质就是解释程序,它每次从存储器读取一条指令,经过分析译码产生一串操作命令,再发给各功能部件控制各部件动作,使整个机器连续地、有条不紊的运行,以实现指令和程序的功能。
计算机中有两股信息在流动:一股是控制流信息,即操作命令,它分散流向各个功能部件;另一股是数据流信息,它受控制流信息的控制,从一个部件流向另一个部件,在流动的过程中被相应的部件加工处理。控制流信息的发源地是控制器。控制器产生控制流信息的依据来自以下3个方面:一是存放在指令寄存器中的机器指令,它是计算机操作的主要依据。二是状态寄存器,用于存放反映计算机运行的状态信息。三是时序电路,它能产生各种时序信号,使控制器的操作命令被有序地发送出去,以保证整个机器协调的工作。
控制器结构
4.输入设备
输入设备就是将人们熟悉的信息形式转换成计算机能接收并识别的信息形式,就是二进制数据。一般输入设备用于原始数据和程序的输入。常用的输入设备有键盘、鼠标、扫描仪及模/数(A/D)转换器等。
输入设备与主机之间通过接口连接。设置接口主要有以下几个方面的原因。一是输入设备大多数是机电设备,传送数据的速度远远低于主机,因此需用接口进行数据缓冲。二是输入设备所用的信息格式与主机不同,例如,通过键盘输入的字母、数字先由键盘接口转换成8位二进制码(ASCII码),再拼接成主机认可的字长送入主机。因此,需用接口进行信息格式的转换。三是接口还可以向主机报告设备运行的状态、传达主机的命令等。
5.输出设备
输出设备就是将计算机运算结果转换成人们和其他设备能接收和识别的信息形式的设备。输出设备有打印机、显示器、数/模(D/A)转换器等。 此外,它还有存储信息的功能,因此,它常常作为辅存使用。计算机的存储管理软件将它与主存一起管理,作为主存的补充。常见的外存储器有磁盘、光盘与磁带机,它们与输入输出设备一样
6.系统互连
计算机硬件系统各功能部件还需要有组织地以某种方式连接起来,从而实现数据流信息和控制流信息在不同部件之间的流动及数据信息的加工处理。在现代计算机中使用较多的就是总线互连方案,这种方式实现简单,扩展容易。
总线(Bus)是连接两个或多个设备(部件)的公共信息通路。它主要由数据线、地址线和控制线组成。CPU及计算机中各主要部件的总线称为系统总线。基于单总线结构的系统互连由于总线是多个设备的公共连接线,因此同一时刻只能 允许一个设备向总线发送信息,但可以允许多个设备同时接收来自总线的信息。
基于单总线结构的系统互连
总结 Conclusion
总之,计算机硬件系统是运行程序的基本组成部分,人们通过输入设备将程序与数据存入存储器,计算机运行时,控制器从存储器中逐条取出指令,将它们解释成控制命令去控制各部件的动作。数据在运算器中被加工处理,处理后的结果通过输出设备输出。
1.2.2 计算机软件系统
计算机软件将解决问题的思想、方法和过程用程序进行描述
一台计算机中全部程序的集合统称为这台计算机的软件系统。计算机软件按其功能分成应用软件和系统软件两大类。应用软件是用户为解决某种应用问题而编制的一些程序。系统软件用于对计算机系统进行管理、调度、监视和服务等,其目的是方便用户、提高计算机使用效率、扩充系统的功能。通常将系统软件分为以下几类。
操作系统
操作系统是管理计算机中各种资源、自动调度用户作业、处理各种中断的软件。
操作系统管理的资源通常有硬件、软件和数据信息。
程序设计语言及语言处理程序
程序设计语言是用于书写计算机程序的语言,其基础是一组记号和一组规则。程序设计语言通常分为3类:机器语言、汇编语言和高级语言。
(1)机器语言
机器语言是用二进制代码表示的计算机能直接识别和执行的一种机器指令的集合。故机器语言也称为面向机器的语言,不同硬件结构的计算机的机器语言一般是不同的。
(2)汇编语言
汇编语言是一种用助记符表示的面向机器的计算机语言。汇编程序必须利用汇编器转换成机器指令才能执行。
(3)高级语言
高级语言是与人类自然语言相接近且能为计算机所接受的,语意确定、规则明确、自然直观和通用易学的计算机语言。
高级语言是面向用户的程序设计语言,需要通过相应的语言翻译程序才可变成计算机硬件能识别并执行的目标程序。其根据执行方式可分为解释型与编译型两类。解释型语言采用边解释、边执行的方法,不生成目标程序,如Python语言;编译型语言必须先将源程序翻译成目标程序才能执行,典型的如C语言等。
语言翻译程序主要包括编译程序、汇编程序、解释程序和其他软件操作程序。编译程序负责将高级语言翻译成汇编代码,也称为编译器;汇编程序负责将汇编语言翻译成机器语言目标程序,也称为汇编器;解释程序用于将源程序中的语句按执行顺序逐条翻译成机器指令并执行,且不生成目标程序,也称为解释器。
数据库管理系统
数据库管理系统又称数据库管理软件。数据库是为了满足数据处理和信息管理的需要,在文件系统的基础上发展起来的,在信息处理、情报检索、办公自动化和各种管理信息系统中起着重要的支撑作用。常见的数据库管理系统包括Oracle、SQL Server、DB2、PostgreSQL、MySQL等
1.3 计算机系统的层次结构
使用抽象的方法进行简化设计是计算机系统结构的伟大思想之一。借助分层抽象的方法对复杂系统问题进行求解,在抽象的最高层,可以使用问题环境的语言,以概括的方式叙述问题的解;在抽象的较低层,则采用过程化的方式进行描述
1.3.1 系统层次结构
计算机系统的层次结构
1.3.2 各层之间的关系
计算机系统层次结构中,高层是低层功能的扩展,低层是高层的基础
1.3.3 软件和硬件的关系
相互依存硬件是软件运行的基础,软件的正常运行是硬件发挥作用的重要途径。计算机系统必须要配备完善的软件系统才能正常工作,且应充分发挥其硬件的功能;逻辑等效性某些功能既可由硬件实现,也可由软件来实现;随着大规模集成电路技术的发展,软件硬化或固化是必然趋势
协同发展软件随硬件技术的迅速发展而发展,而软件的不断发展与完善又促进硬件的更新,两者密切地交织发展,缺一不可 。
1.4 计算机性能指标和评价
1.4.1 基本性能指标
字长
计算机的字长一般是指CPU一次处理的数据位数,用二进制数的长度来衡量,字长一般与计算机内部寄存器、运算器、数据总线的位宽相等。
字长一般以字节(Byte)为基本单位。现代计算机字长一般为32位或64位。
字长对计算机性能有如下几方面的影响。
(1)影响计算精确度。字长越长,计算精确度就越高,反之计算精确度就越低.
(2)影响数据的表示范围和精度。字长越长,定点数的表示范围就越大,浮点数的表示范围越大、精度也越高
主存容量
主存容量是指主存能存储的最大信息量,一般用M×N表示,其中M表示存储单元数,也称字容量;N表示每个存储单元存储的二进制位数,也称位容量
增加主存容量能减少程序运行期间访问辅存的次数,有利于提高程序的执行速度,也有利于计算机性能的提高
1.4.2 与时间有关的性能指标
时间是衡量计算机系统性能最基本的标准,执行同一程序所需要的时间越少,表明该计算机的性能越高。需要特别强调的是,一段程序的执行时间(也称响应时间)是由便盘访问时间、内存访问时间、IO操作时间、操作系统开销时间和CPU执行时间等几部分构成的。
CPU执行时间也称CPU时间,是指CPU真正花费在该程序上的时间,又包括执行用户程序本身所花费的CPU时间(用户CPU时间)和为执行程序而花费在操作系统上的时间(系统CPU时间),很难精确区分一个程序执行过程中的用户CPU时间和系统CPU时间。在没有特别说明的情况下,我们将基于用户CPU时间进行计算机性能评价
基础知识
CPU 时间
一个程序在 CPU 上运行的时间。(不包括I/O时间)
主频、时钟频率
指CPU内核工作的时钟频率,即CPU内数字脉冲信号振荡的速率,与CPU实际的运算能力之间不是唯一的、直接关系;表示1秒可以完成多少个周期。例如,主频为 4.1GHz,表示每秒可以完成 4.1*10^9 个时钟周期。
时钟周期
时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。
时钟周期 = 1 / 频率,例如 1/ 4.1*10^9 。
CPU 的时钟周期越短,CPU 性能越好。
f 与 T的关系互为倒数, f 越高,T就越小 (f =100MHz时T=10ns, f =1GHz时 T=1ns)。指令周期
取出并执行一条指令的时间。
时钟周期
时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是时钟频率的倒数,也称为节拍周期或T周期,随着CPU主频的提高,对应的时钟周期将变短,例如,主频1GHz的CPU时钟周期为1ns
CPI
CPI(Clock Cycles Per Instruction)是指执行每条指令所需要的平均时钟周期数。由于指令功能不同且相同功能的指令还可能有不同的寻址方式,因此,指令执行时所需要的时钟周期数也可能不同。CPI既可表示每条指令执行所需要的时钟周期数,也可指一类指令(如算术运算类指令)或一段程序中所有指令执行所需时钟周期数的平均值。
假设程序中包含的总指令条数用IC表示,程序执行所需时钟周期数为m,时钟周期为T,频率为f,则根据上述CPI的定义可得
CPI = m / IC
若能知道某程序中每类指令的使用频率(用Pi表示)、每类指令的CPI(用CPIi表示)、每类指令的条数(用IC表示),则程序的CPI可表示为:
CPU时间
可以用来衡量程序执行速度
某段程序的CPU时间可表示为:
Tcpu = m × T = m / f
考虑CPI后,CPU时间还可表示为:
Tcpu = CPI × IC ×T = CPI × IC / f
可以看出CPU时间与下列3个因素紧密相关。
(1)时钟频率。时钟频率取决于CPU的实现技术和工艺,时钟频率越高,程序执行速度就越快。
(2)CPI。CPI取决于计算机的实现技术和指令集结构,CPI越小,程序执行速度越快。
(3)指令条数。当CPI和时钟周期固定时,程序指令条数越少,执行速度就越快。完成相同功能的程序所包含的指令条数主要与指令系统的设计和编译技术有关
IPC
IPC(Instructions Per Cycle)是指每个时钟周期CPU能执行的指令条数,是CPI的倒数。由于指令流水线技术以及多核技术的发展,目前IPC的值已经可以大于1,反过来CPI的值也可以小于1。
IPC和CPI指标与ISA指令集、处理器微体系结构、计算机系统组成、操作系统效率以及应用软件的设计紧密相关,其具体值并不能用于直接比较计算机的性能,基于真实场景负载的应用性能测试结果更能反映计算机的性能
实际上频率和IPC在真正影响CPU性能。准确的CPU性能判断标准应该是CPU性能=IPC(CPU每一时钟周期内所执行的指令多少)×频率(MHz时钟速度)--由英特尔提出并被业界广泛认可。
MIPS
MIPS(Million Instructions Per Second)即每秒百万条指令,更大的单位有GIPS(Gigare Instructions PerSecond)。可用每秒执行完成的指令数量作为衡量计算机性能的一个指标,不过要注意这个指标衡量的指令数量是以百万为单位的。
根据MIPS的定义,可用下面的公式计算MIPS:
MIPS = IC / (Tcpu × 10^6)
=f / CPI ......CPU全性能公式
这里时钟频率f的单位为MHz。从CPU全性能公式可以看出,计算机性能与指令的CPI和主频有直接的关系,主频越高,MIPS值越高;CPI越小,MIPS值越高
MFLOPS
MFLOPS(Million Floating-Point Operations Per Second)是指计算机每秒执行浮点运算的次数,而不是MIPS所衡量的每秒执行的指令条数。如某系统的运算速度为2MFLOPS,表示该系统的浮点运算速度为每秒200万次。MFLOPS不是计算机实际执行程序的速度,而是计算机在理论上能达到的浮点运算处理速度
MFLOPS = ICflops / Tcpu × 10^6
1.5 课程学习的建议
计算机组成原理是一门计算机各专业的核心基础课程。通过该课程的学习,学生应理解计算机核心组成部件(运算器、控制器、存储器等)的内部结构、工作原理、设计与实现方法并能具有整机的概念,奠定坚实的智能硬件及计算机系统的设计实现基础
构造观
本课程的教学目标之一就是帮助学生在理解并掌握运算器、控制器等核心功能部件的结构及工作原理的基础上,掌握运算器、控制器等功能部件及简单计算机系统的设计方法,具有功能部件和智能硬件及其系统的设计能力
系统观
总体上来看,系统观就是要研究硬件系统与软件系统的协同与互动
工程观
工程观强调培养学生软硬件协同视角下的计算机系统开发和实现能力
220510 更新
第二章 数据表示
2.1 机器数及特点
1)目的:组织数据,方便计算机硬件直接使用。2)要考虑的因素•支持的数据类型;•能表示的数据范围;•能表示的数据精度;•存储和处理的代价;(是否有利于运算器设计简单)•是否有利于软件的移植等…
1)真值:符号用“+”、“-”表示的数据表示方法。2)机器数:符号数值化的数据表示方法, 用0、1表示符号。例1 求下列各数的原码、补码和反码1) X=+1011[X] 原 = [X] 反 = X] 补 = 010112) X= –1011[X] 原 =11011 [X] 反 =10100 [X] 补 =101013)0的表示:[+0] 原 = 00000 [-0] 原 =10000[+0] 反 = 00000 [-0] 反 =11111[+0] 补 = 00000=[-0] 补
220512 更新
例 已知: x = 1101 , Y = -1010 用反码运算求 X+Y
解: [x] 反 = 01101 , [Y] 反 = 10101
X+Y = 00011
移码(增码)
移码表示浮点数的阶码,IEEE754中阶码用移码表示。
设定点整数X的移码形式为
则移码的定义是:
(X为真值,n为X的整数位位数)具体实现:数值位与X的补码相同,符号位与补码相反。
例 X= +10101 [X] 补 =010101 [X] 移 =110101
X= –10101 [X] 补 =101011 [X] 移 =001011
2.2 定点与浮点数据表示
定点数据表示
浮点数据表示
把数的范围和精度分别表示的一种数据表示方法
浮点数的使用场合:
当数的表示范围超出了定点数能表示的范围时
格式(一般格式)
[例] 将x =表示成机器形式。假定用8位表示该
数,且阶码占3位,位数占5位(均包含一位符号位)解:假定阶码和尾数均采用补码
一般表示格式的不足:
不同系统可能根据自己的浮点数格式从中提取不同位数的阶码
IEEE 754格式
指数采用偏移值,其中单精度偏移值为127,双精度为1023,将浮点数的阶码值变成非负整数,便于浮点数的比较和排序
IEEE754尾数形式为1.XXXXXX,其中M部分保存的是XXXXXX(1被隐藏),从而可保留更多的有效位,提高数据表示的精确度
与上述IEEE754格式相对应的32位浮点数的真值可表示为:
IEEE754 32位浮点数与对应真值之间的变换流程:
[例] 将十进制数20.59375转换成32位IEEE754格式浮点数的二进制格式。
解: 先将十进制数换成二进制数:
20.59375=10100.10011
移动小数点,使其变成1.M的形式
得到:
S=0, e = 4,E= 100+01111111 =10000011,M = 010010011
最后得到32位浮点数的二进制存储格式为:
0100 0001 1010 0100 1100 0000 0000 0000
= 41A4C000H
2.3 数据校验的基本原理
数据校验的必要性
受元器件的质量、电路故障或噪音干扰等因素的影响,数据在被处理、传输、存储的过程中可能出现错误;
若能设计硬件层面的错误检测机制,可以减少基于软件检错的代价(系统观)
校验的基本原理
码距的概念
同一编码中,任意两个合法编码之间不同二进数位数的最小值
0011与0001 的码距为1,一位错误时无法识别
0000、0011、0101、0110、1001、1010、1100、1111等编码码距为2。任何一位发生改变,如0000变成1000就从有效编码变成了无效编码,容易检测到这种错误
校验码中增加冗余项的目的就是为了增大码距
码距与检错或纠错能力的关系
选择码距要考虑的因素
码距越大,抗干扰能力越强,纠错能力越强,数据冗余越大,编码效率低,编码电路也相对复杂
选择码距必须考虑信息发生差错的概率和系统能容许的最小差错率
220528 更新
2.4 奇偶校验
1) 增加冗余码(校验位)
2) 编码:根据有效信息计算校验信息位,使校验码(数据+ 1位校验信息)中 1 的个数满足奇 / 偶校验的要求0001 → 0001 1 (偶校验)0001 →0001 0 ( 奇校验 )
3) 检错方法与电路
编码与检错简单编码效率高不能检测偶数位错误 , 无错结论不可靠, 是一种错误检测码不能定位错误,因此不具备纠错能力
举例说明奇 / 偶校验码距为 211000011 → 0 100001 0最小码距 ≥ e+1:可检测e个错误最小码距 ≥ 2t+1:可纠正t个错误最小码距 ≥ e+t+1:可纠正t个错误,同时检测e个错误(e ≥ t)
双向奇偶校验方块校验垂直水平校验
哪些场合应用奇偶校验?工程上的应用如:哪条内存条具有错奇偶校验功能的内存条?http://www.eepw.com.cn/article/280413.htm (关于串口奇偶校验配置的经验)一般在同步传输方式中常采用奇校验,异步传输方式中常采用偶校验0000000000000 0 偶校验0000000 1 奇校验
2.5 CRC校验及其实现
增加冗余码(校验位)N=k+r ≤ 2 r -1生成多项式 G(x)收发双方约定的一个 (r + 1) 位二进制数,发送方利用 G(X) 对信息多项式做模 2 除运算 , 生成校验码。接收方利用G(X) 对收到的编码多项式做模 2 除运算检测差错及错误定位。G(x) 应满足的条件A、最高位和最低位必须为1;B、当被传送信息(CRC码)任何一位发生错误时,被生成多项式做除后应该使余数不为0;C、不同位发生错误时,模 2 除运算后余数不同;D、对不为0余数继续进行模 2 除运算应使余数循环 常见生成多项式 G(x)
模2运算规则a)加/减运算 (异或运算,加不进位,减不借位)0±0=0,0±1=1,1±0=1,1±1=0b)模2除法按模2减,求部分余数,不借位。c)上商原则①部分余数首位为1时,商为1,减除数;②部分余数首位为0时,商为0,减0;③当部分余数的位数小于除数的位数时,该余数即为最后余数。
(1)根据待校验信息的长度k,按照 k+r ≤ 2 r -1 确定校验位r的位数(3)进行下列变化(2)根据r 和生成多项式的选择原则,选择位数为 r +1 的生成多项式 G(X)= 1011如对4位信息 1100 进行CRC编码,根据 4+r ≤ 2 r -1得 r min = 3即:将待校验的二进制信息Q(X)逻辑左移 r 位,得到Q(X)’(4)对Q(X)’按模2运算法则除G(x),求CRC编码中的r位校验信息(5)用得到的余数替换Q(X)’的最后r位即可得到对应的CRC编码
即为1100 的CRC 编码
接收方利用 G(X) 对收到的编码多项式做模 2 除运算余数为0说明传输没有错误
接收方利用G(X)对收到的有错编码多项式做模2除运算
余数不为0说明传输有错
(7,4)编码不同数位出错对应的余数G(X) = 1011
G(X) = 1101
一位出错情况下余数的循环特性
利用出错情况下余数的循环特性进行纠错
若余数不为0,一边对余数补0继续做模2除,同时让被检测的校验码循环左移,当余数为 101 时, 出错位也移到A1位置。通过异运算纠正后继续循环左移和执行余数模2除法,直到修改后的出错位回原位。不需对每一位提供纠正电路。 当位数增多时,循环码校验能有效地降低硬件代价,这是它得以广泛应用的主要原因
硬件实现方式
待更新......