王道计算机组成原理(一)
一、概述
0.计算机系统 = 硬件 + 软件
硬件决定性能,软件发挥实力
比如苹果系统的软件生态很好,能充分发挥出硬件的实力。
软件分为:
系统软件:操作系统、数据库管理系统、标准程序库、网络软件、语言处理程序、服务程序;
应用软件:Steam
硬件的发展历程:
1946——电子管时代——第一台电子数字计算机 冯诺依曼
逻辑元件——用来处理电信号的最基本单元
内存——泵延迟线、磁鼓、磁带磁盘
1947——贝尔实验室发明了晶体管
1955——威廉肖克利 创建了实验室
1957——仙童创立
1959——仙童半导体发明集成电路
1968——摩尔建立Intel
摩尔定律:集成电路上可容纳的晶体管数目,约每隔18个月增加一倍,整体性能提升一倍
半导体存储器也几乎符合摩尔定律
1969——桑德斯创立AMD
1958——晶体管时代——贝尔
体积能耗降低,出现了面向过程的程序设计语言:FORTRAN,出现了操作系统雏形
1964——中小规模集成电路时代
将元件集成在基片上,出现了各种高级语言,操作系统
1972——大规模集成电路、超大规模集成电路时代——个人计算机 personal computer (PC)
出现了微处理器
机器字长——计算机一次整数运算所能处理的二进制数 (64位)
软件的发展历程:
机器语言
汇编语言
FORTRAN PASCAL C++
Java Python
DOS Windows ANDROID
两级分化的发展趋势:
一:微型计算机更像微型化、网络化、高性能、多用途方向发展
二:巨型机
1.计算机硬件:
CPU,内存,主板,显卡,硬盘
2.硬件识别的数据:
二进制数 0/1,每一位称为:bit(比特)
表示方法:高低电平 接受路径:金属针脚,印刷电路
3.几个问题
cpu如何对二进制数进行运算?
如何取出想要的数据?
cpu如何识别和执行我们写的程序?
数字文字图像如何用二进制表示?
二、计算机硬件的基本组成
两种结构:
1.冯诺依曼结构:
提出了存储程序概念,将指令以二进制代码的形式事先输入计算机的主存储器中,然后按照其在主存储器中的首地址执行程序的第一条指令
输入设备:将信息转换为机器识别的二进制数
存储器:存放数据和程序
运算器:算术运算和逻辑运算
输出设备:将结果转换为人们熟悉的结果
控制器: 指挥程序的运行
在计算机系统中,软件和硬件在逻辑上是等效的。
特点:
1.计算机由五大部件构成
2.指令和数据以同等地位存于存储器,可按地址寻访
3.指令和数据用二进制表示
4.指令由操作码和地址码组成
5.存储程序
6.以运算器为中心
2.现代计算机结构
特点:以存储器为中心
cpu = 运算器 + 控制器
主机:cpu+主存
主存和cpu进行数据交换
主存和辅存,辅存是一种 I / O 设备
三、各个硬件的组成
1.主存的基本组成
存储体、MAR(存储地址寄存器)、MDR(存储数据寄存器)
数据在存储体内按地址存储
存储单元
存储字
存储字长
存储元:存储二进制的电子元件,每个存储元可存1bit
MAR:反映存储单元的个数
MDR:反映存储字长
这两个元器件也通常被集成在CPU中
一个字 不等
1字节 = 8bit
1b=1个bit
2.运算器的基本组成
ACC: 累加器,存放操作数、运算结果
MQ: 乘商寄存器
X:通用寄存器、存放操作数
ALU:算术逻辑单元,通过内部复杂电路实现算术运算、逻辑运算
3.控制器的基本组成
CU:控制单元
IR:指令寄存器,存放当前执行的指令
PC:程序计数器,存放下一条指令地址,有自动加一功能
取指令(PC)-> IR -> CU
计算机工作过程:
int a=2 ,b=3 c=1,y=0;
void main(){
}
(取指令)
1.PC取到地址,给 MAR 发地址,MAR访问存储体,指令数据存储在MDR中,MDR 将指令 给 指令寄存器 IR
2.IR 将指令操作码给CU,CU分析,得知取数指令
(执行指令)
3.分析完指令操作码让IR给MAR地址码,MAR收到地址,MDR得到数据
4.ACC存储MDR的运算数据,ACC存加数和乘数 以及结果
主存存数据的方法:接收MAR和MDR的数据,MAR地址来自IR,MDR来自ACC
停机:利用中断机制通知操作系统中止该进程
5.运行完该指令,PC++
四、计算机系统的层次结构
层次结构:
虚拟机器 M4 用编译程序翻译成汇编语言程序
(高级语言机器)
虚拟机器 M3 用汇编程序翻译成机器语言程序 汇编语言指令和机器语言指令一一对应
(汇编语言机器)
虚拟机器M2 向上提供“广义指令”(系统调用)
(操作系统机器)
传统机器 M1 执行二进制机器指令
(用机器语言的机器)
微程序机器 M0 由硬件直接执行微指令 微指令1、3、7
(微指令系统)
三种级别语言:
汇编语言:助记符
高级语言:C/C++、Java
(编译程序:只需要翻译一次、解释程序,解释器:边解释边执行)
如:脚本语言:JavaScript、Python、Shell
机器语言:二进制代码
五、计算机的性能指标
存储器
MAR位数反映了存储单元的个数(最多支持多少个)
MDR位数=存储字长=每个存储单元大小
CPU(主频、CPI、指令系统)
CPU主频 :CPU内数字脉冲信号振荡的频率
GHz : 越高越好
每个脉冲信号时间称为CPU时钟周期:单位:纳秒、微秒
CPI :执行一条指令所需要的时钟周期
越低越好,但是影响因素过多,平均值最多
执行不同的指令CPU需要的时钟周期可能不同
eg:某CPU主频为 1000Hz,100条指令 CPI为3,多久?
0.3s
IPS:每秒执行多少指令
= 主频/CPI均值
FLOPS:每秒执行多少次浮点运算
PS:衡量性能所用的数量单位K、M、G、T是 10^3这种
系统整体性能指标
数据通路带宽:数据总线一次所能并行传送信息的位数(各个硬件部位通过数据总线传输数据)
吞吐量:指系统在单位时间内处理请求的数量。
取决于信息能多快的输入内存,CPU能多快地取指令,数据能多快地从内存中取出还有输出
响应时间:用户向计算机发送一个请求,到系统对该请求做出响应并获得他所需要的结果的等待时间,通常包括IO操作
基准程序(跑分软件):基准程序中的语句存在频度差异,运行结果也不能完全说明问题
六、进位计数值
进制转换:
二进制 B
八进制 O
十进制 D
十六进制 H
BCD码
无符号整数表示和运算
带符号整数的表示和运算
原反补码的特性对比
移码
定位小数
奇偶校验码
加法器
并行进位加法器
补码加减运算器
加减运算和溢出判断
标志位生成
定点数的移位运算
原码的乘法运算
补码的乘法运算
原码的除法运算
补码的除法运算
七、C语言类型转换
C语言中定点整数是用“补码”存储的
无符号数和有符号数:不改变数据内容,改变解释方式。
y=(unsigned short)x ;
short x = -4321
y=61215
长整数变短整数:高位截断,保留低位。
int a=165537
short c= (short) a
短整数变长整数:符号扩展。
八、数据的存储和排列
大小端模式
地址:从左往右,从小到大
大端存储:数据高位字节存在左边,便于阅读
小端存储:反之,地址低,存低字节数据,便于机器处理
边界对齐
现在计算机通常是按 字节编址,1个字节对应一个地址
支持 按 字、半字、按字节寻址。
字节地址的转换:逻辑左移