概述(1.5小时)
计算机系统:
- 硬件的发展:
- 电子管
- 晶体管
- 中小规模集成电路
- 超大规模集成电路
- 硬件的组成:
- 输入输出设备(I\O设备)
- 存储器
- 存储器的性能指标:
- MAR的位数反映了存储单元的个数
- MDR的位数反应了存储单元存储字的字长
- 总存储大小:个数 * 字长(MAR32位,MDR8位,2^32 x 8 = 34,359,738,368 bit = 4,294,967,296 B = 4,194,304 KB = 4,096 MB = 4GB)
- 存储器的性能指标:
- CPU
- 运算器
- 存储器
- CPU的性能指标:
- 主频(HZ),CPU内数字脉冲信号振荡的频率
- 时钟周期(S),CPU内数字脉冲信号振荡一次需要的时间
- CPI:执行一条指令需要的时钟周期数
- CPU执行时间 = 指令数 x CPI / 主频
- IPS:每秒执行多少条指令=主频 / CPI
- FLOPS:每秒执行多少次浮点运算
- 性能:
- 存储器的性能
- CPU的性能
- 系统整体的性能
- 数据通路的带宽:数据总线一次能够并行传送信息的位数–>数据字长
- 吞吐量: 单位时间能够处理请求的数量
- 响应时间:用户发送请求到请求得到响应的等待时间
- 机器字长:计算机内部一次可以处理的二进制的位数,也等于整数运算的数据通路的宽度,也就等于ALU、通用寄存器(X)的宽度
- 现代计算机结构:
- 主存储器:
- 存储体
- 存储单元:存储体由存储单元构成
- 存储字:一个存储单元中存储的二进制代码
- 存储字长:二进制代码的位数(16、32、64…)
- MAR(Memory address register:存储地址寄存器):2^MAR的位数 = 存储单元的个数(4位->16个存储单元)
- MDR(Memory data register:存储数据寄存器):MDR的位数=存储单元的字的字长(16位->16的字长->1个字长度为16bit(2个字节(B)))
- 读:我向MAR提供地址,存储器对应位置的数据先传输到MDR,我从MDR取数据
- 写:我向MAR提供地址,向MDR提供数据,存储器把数据写入到对应地址
- 存储体
- 运算器:
- ACC:累加计数器
- MQ:乘商寄存器
- X:通用寄存器
- ALU:算数逻辑单元
- 控制器
- CU:控制单元
- IR:指令寄存器
- PC :程序计数器
- 汇总:
- 主存储器:
- 三种级别的语言:
- 高级语言-》高级语言机器
- 汇编语言-》汇编语言机器
- 中间有一个操作系统机器
- 机器语言-》机器语言机器
- 微指令-》微程序机器
- 高级语言向机器语言转换的两种方式
- 编译器:将源程序一次性翻译成可执行的机器语言,再执行
- 解释器:翻译一次、执行一次
数据的表示和运算(3小时没学完)
进位计数制:
- 基数:每个数码位用到的符号个数
- 转换:
-
任意进制-》十进制 √
-
十进制-》任意进制:
(整数部分:除基取余法)
(小数部分:乘基取整法)
-
二进制《-》八进制:
-
- 二进制《-》十六进制
字符和字符串:
- 英文
- 0-31:控制字符
- 32-126:可印刷字符
- 127:delete
- 中文
- 区位码:0-93 0-93
- 国标码:+32个控制符,即区位码+2020H(20H=32)
- 汉字内码:首位0-》1,即国标码+8080H(80H=128)
原、反、补、移:
- 补码的作用:用补码表示负数,进行计算,使减法变为加法
- 移码的作用:方便比较大小
定点数:
- 定点数的表示:
- 无符号数(整数): n位:0-2^n-1(2的n次方个数)
- 有符号数:
- 整数(小数点隐藏在末尾):
- 用原码表示:n+1位:-(2的n次方-1) - (2的n次方-1)(2的n+1次方-1个数,因为1000…和0000都表示0)
- 用反码表示:正数的原码不变,负数的原码数值位取反
- 用补码表示:原码的1000…和0000…都表示0,而1000…所对应的补码=0000…所对应的补码,所以把1000…这个补码表示大小-2^n,故其范围为:-(2的n次方) - (2的n次方-1)
- 小数(小数点隐藏在符号位后)
- 用原码表示:n+1位:-(1-2的-n次方)-(1-2的-n次方)(也有+0和-0两种表示)
- 用反码表示:正数的原码不变,负数的原码数值位取反
- 用补码表示:原码的1.000…和0.000…都表示0,而1.000…所表示的补码=0.000…所对应的补码,所以把1.000…这个补码表示大小-1,故其范围为-1 - (1 - 2的-那次放)
- 整数(小数点隐藏在末尾):
- 原-》补,补-》原一摸一样,都是正不变、负数值位取反+1
- 移码:补的符号位取反
定点数的运算:
扫描二维码关注公众号,回复:
13232833 查看本文章
- 移位运算:
- 算数移位:
- 正数:
- 原、反、补,左右移都补0
- 负数:
- 原码:左右移动补0
- 反码:左右移动补1
- 补码:左移补低位补0,右移高位补1
- 正数:
- 逻辑移位:无符号,补0
- 循环移位:
- 算数移位:
- 加减运算:
- 溢出:
- 上溢:正+正 -》负
- 下溢:负+负 -》正
- 判断溢出:
- 方法一:
- 方法二:
- 方法三:
- 方法一:
- 溢出:
- 类型转换(以补码形式):
- 有符号-》无符号,直接转
- 长字长-》短字长,高位直接截断
- 短字长-》长字长,高位补符号位(正时,补0;负时,补码高位与反码保持一致,补1)
数据的存储与排序:
- 小端:最高有效字节放在高地址,最低有效字节放在低地址
- 大端:最高有效字节放在低地址,最低有效字节放在高地址
- 边界对齐:空间换时间
- 边界不对齐:时间换空间
浮点数:
- 组成:阶符、阶码的数值部分、数符、尾数的数值部分
- 规格化:
- 左规:尾数左移,阶码-1 (循环多次)
- 右规:尾数右移,阶码+1(循环多次)
- 原码的规格化:
- 正数:0.1XX,最小为1/2,最大为1-2的-n次方
- 负数:1.1XX,最小为2的-n次方-1,最大为-1/2
- 补码的规格化:
- 正数:和原码一致
- 负数:1.0XX,最小为-1,最小为-1/2-2的-n次方
存储系统
存储器的层次化结构:
- 寄存器
- cache:为了解决CPU和主存的速度不匹配
- 主存
- 辅存:为了解决主存的容量不够
- 外存
- 从上往下,容量↑,访问速度↓,价格↓
存储器分类:
- 介质:
- 半导体
- 磁性材料
- 光
- 存取方式:
- 相联存储器:既可以按照内容又可以按照地址访问
- 随机(RAM):
- DRAM:栅极电容,主存,破坏性读出,速度更慢。DRAM中的电荷一会儿就会消失,需要采取地址线复用,需要刷新:
- 多久刷新一次?2ms
- 每次刷新多少个存储单元? 行存储单元(n位地址,译码器需要2的n次方跟地址线,可分为行、列译码器,减小地址线个数,不过片选线要分成行通选+列通选)
- 刷新方法:
- 分散刷新
- 集中刷新
- 异步刷新
- SRAM:双稳态触发器,cache,非破坏性读出,速度更快,不需要采取地址线复用
- DRAM:栅极电容,主存,破坏性读出,速度更慢。DRAM中的电荷一会儿就会消失,需要采取地址线复用,需要刷新:
- 顺序:磁带
- 直接: 磁盘、光盘
- 信息可更改性:
- 读写
- 只读(非易失)(ROM):
- 掩膜式只读存储器(MROM):
- 一次可编程只读存储器(PROM):
- 可擦除可编程(RPROM):
- 闪存(Flash:U盘)
- 固态硬盘(SSD)
- 信息可保存性:
- 易失
- 非易失
存储器的性能指标:
- 存储容量:存储字数 x 存储字长
- 单位成本:每一个位的价格
- 数据传输率:数据带宽(字长)/ 存储周期(每存储一个字长需要的时间)
- 存储周期 = 存取时间 + 恢复时间
存储芯片的组成:
- 译码器:把输入的地址进行移码
- 存储矩阵:nxm,n表示存储单元个数,m表示字长
- 控制电路
- 片选线
- 读写线
- 数据线
- 地址线
存储器和CPU的链接:
-
位拓展,充分利用CPU的数据宽度
-
字拓展,充分利用CPU的地址线(把地址线用于片选线)
- 线选法(one-hot):n个高位地址线-》片选n个存储元
- 译码片选法:n个高位地址线-》片选2^n个存储元
-
字位同时拓展:
Cache:加快访问物理地址的速度
- cache的性能分析:
- cache和主存同时被访问:Hxt1 + (1-H)(t2)
- 先访问cache再访问主存:Hxt1 + (1-H)(t1+t2)
- cache和主存之间的映射:
- 块: 考虑4MB的主存,按字节编址。假设一个块有1KB,则有2^12块。则将原来,4M–>22位的地址分成前12位的块号,和后10位的块内地址。
- 映射关系:
- 全相联映射(全):cache块中可能存放任意的主存块
- 直接映射(直接):主存块号 % cache块号 --》放哪一块
- 组相连映射(组间直接,组内全):将cache进行分组,主存块号 % cache组号–》放哪一组
- 如何知道cache中存的是主存中的哪一块?
- 标记位+有效位。
- 特别的,如果是直接映射,第i块的主存块需要对cache块号进行取余,假设cache块号为2^n,则主存地址=块号 | 块内地址,而块号的后n位就是其所对应的cache块号,前面的就是cache中需要保存的标记位。
- 同样的,如果是组相联映射,假设cache组号为2^n,则主存地址=块号 | 块内地址,而块号的后n为就是其所对应的cache的组号。
- cache的替换算法(如果cache满了怎么办?直接映射不存在替换算法)
- 随机算法
- 先进先出算法:抖动现象:刚刚被换出的马上又被访问
- 最近最少使用算法:
- 最不经常使用算法:
- cache的写策略
- 能够命中:
- 写回法:需要设置脏位,表明某cache块是否被修改,被修改的cache块只有被替换出时,才会写回
- 全写法:实时同步
- 写缓冲
- 不能命中:
- 写分配法:先读入,再改cache。cache和主存。
- 非写分配法:直接写主存。cache之间
- 一般写分配法和写回法搭配;非写分配法和全写法搭配。
- 能够命中:
虚拟存储:
- 页式存储:把程序划分成和主存块大小一样大小的“页”,然后离散存储。此时对于一个程序而言,其逻辑地址的后n位表示表示页内地址,前几位表示页号。存在一个页表(主存),存放着页号到主存块号的映射,主存块号+页内地址=物理地址。
- 快表:存放部分页表项,加快获得物理地址的速度
- 页式虚拟存储器:辅存和主存之间的映射。通过页表来实现:
- 通过程序的页号来访问页表项,一个页表项:
- 有效位:当前页(块)是否在主存中
- 脏位:当前页是否被修改过
- 磁盘块号 or 主存块号
- 段式存储: