计组 :大端/小端,字地址/字节地址, 二进制补码...


前引

博主最近在准备计组的期末考试,在此记录一些对博主来说比较难以搞清楚的的知识点


一. 存储单元,存储字长,指令字长,机器字长,各种周期

以下均有博主自己理解的成分
机器字长: 表示CPU一次性能处理数据的大小,与字长一样,如32位计算机的机器字长/字长就是32bit。显然有以下关系:
运算器位数 = 寄存器宽度 = 数据总线宽度

存储单元: 编址单元,CPU访存的最小单位。即 存储容量/ 存储单元 = 寻址范围。显然CPU地址总线宽度为表示存储单元最大地址所需位数,地 址总线的每一个状态都对应一个存储单元。

存储字长: 表示存储单元的大小。为字节时,叫按字节编址;为字时,叫按字编址。既然CPU从存储单元中提取数据进行处理,那么显然有以下关系
存储字长<=机器字长,
通常情况下 存储字长 = 机器字长。即让cpu每一次访存都能刚好处理所有得到的数据

指令字长: 表示指令的长度,指令放在存储器中。结合存储单元是CPU最小访存单元,且为硬件设计简单,指令长度被设计为存储字长的整数倍。若指令字长为存储字长的n倍,那么显然CPU需要多次访问内存以取出该条指令,则取指周期会是机器周期(CPU完成一个操作所需时间)的n倍

机器周期: 也叫CPU周期,CPU完成一个基本操作的时间,如指令的取指。一般以存储周期为基准,由多个时钟周期组成
存储周期 : 启动存取 → \rightarrow 存取完 → \rightarrow 下次存取

时钟频率: 也叫CPU主频,它以“若干次周期每秒”来度量。如主频为50MHZ,表示1秒有50M个时钟周期。与时钟周期为倒数关系
时钟周期:一个时钟周期内控制器发出一条或多条同时执行的控制信号,而执行一个基本操作需要多个控制信号完成,所以多个时钟周期组成机器周期。

另外一些概念:
存储容量:存储器的总位数, 等于 存储单元数*存储单元字节数 *8bit (mK × n位:表示m个存储单元,每个存储单元n位)
存储元:一个门锁,存储一个bit的信息
寻址范围:一个数字范围,不带有单位
寻址空间:存储容量

参考
字长,寻址 --博客园
按字节编址按字编址


二. 补码

2.1 为什么需要补码

无符号数即正数,在计算机中可以直接用原码表示。但对有符号数,计算机需要区分正数和负数。因此引入二进制补码,前导位(符号位)为0表示正数,为1表示负数。正数和负数在计算机中分别用补码表示以达到区分的目的。(在寻址方式中可见补码,如相对寻址,基址寻址)

2.2 怎么得到补码

正数: 补码 = 原码
(原码:一个数的二进制表示,符号位+数值位;如 1 : 0001 -1:1001)
负数: 补码 = 相应正数的原码按位取反后 + 1后的结果 (基于《计算机组成原理:硬件/软件接口》的方法,与一般教材上讲述的:先写出原码然后符号位不变其余位按位取反+1所得到的结果一致)

2.3 为什么是取反+1

原因如下
首先,要知道一个数 x 与 其按位取反后的 x ‾ \overline{\text{x}} x 相加一定为-1

x = 10012
x ‾ \overline{\text{x}} x = 0110 2
x+ x ‾ \overline{\text{x}} x = 11112 = -110

因此有 x+ x ‾ \overline{\text{x}} x = -1
进而 x ‾ \overline{\text{x}} x + 1 = -x
所以对有符号数,无论正负,对其执行按位取反加一,得到就是其相反数。

2.4 真值和补码的转换

正数:就是该数的二进制表示
负数:
(1) 负数 → \rightarrow 补码
由对应的正数的补码按位取反后加一得到

求 -2的补码 :
① 先求出2的补码即原码 0010
②按位取反+1后得到:1110
③所以 -2 = 1110

(2)补码 → \rightarrow 负数
若该补码前导位为1,则判断为负数,进而对该补码求补码,负负得正,得到正数下的补码,按正数和补码的转换方法,得到 正数,则目标数为该正数的相反数。

1111 → 补 码 0001 1111 \stackrel{补码}{\rightarrow} 0001 11110001 → \rightarrow 1 → 取 相 反 数 − 1 1 \stackrel{取相反数}{\rightarrow} -1 11
因此 补码 1111 表示的是 十进制数 -1


三. 大端和小端

3.1 字节序:大端序/小端序

字节序:在内存中,占用多个字节的数据的字节排列顺序。
有以下两种模式:

① 大端模式: 高位字节在前(低地址),低位字节在后(高地址)。 数据的尾端在高地址。

② 小端模式: 低位字节在前,高位字节在后。 数据的尾端在低地址

理解字节序 -阮一峰

3.2 大端方式/小端方式

指令中的操作数存在占用多个字节的情况
那么如何表示操作数的地址呢?

①大端方式: 用操作数的最高有效字节MSB即最高位字节表示指令地址

②小端方式: 用操作数的最低有效字节LSB即最低位字节表示指令地址

最高有效字节: 最高位字节 如数据0x2211 中的22(第一个字节)
最低有效字节: 最低位字节 如数据0x2211 中的11

显然这里涉及了高位字节与低位字节,那么就与操作数的存储方式有关了,即与字节序有关。

按博主的理解,表示指令地址的方式与字节序应该有如下关系:

大端方式 ⟷ \longleftrightarrow 大端字节序

小端方式 ⟷ \longleftrightarrow 小端字节序

原因如下:
如数据0x2211 ,在内存中,
大端模式表现为: (低地址) 2211 (高地址)
小端模式表现为: (低地址) 1122 (高地址)

因为计算机从内存中读取数据是按从低地址到高地址的顺序读取,大端模式下只有以最高位字节(22)作为操作码地址才能完整的读取到操作码, 小端模式同理。


四. Cache 与 主存

4.1 概念

CPU访存时,会先用主存地址访问Cache,命中则从Cache中取回数据

主存地址结构: 标记位+索引+块内偏移 (索引,直接映射中为行号,相联映射中为组号)

Cache内容: 标记项(有效位+标记位)+块

Cache地址结构: 索引(n)+块内偏移(m)

4.2 关系

块大小是2 ^m个字节,则需要m位表示块内偏移(指明该主存地址的数据在块的第几个字节),对应主存地址的低m位 (为什么是低m位?此处博主暂未理解)

块的数量有2^n个,则需要n位索引(指明该主存地址在第几个块),对应主存地址的中间n位

此时主存地址还剩 32-n-m 位,表示标记位

可以得到以下三条结论:

1.主存地址的低 n+m位确定了数据在Cache中的位置,高32-n-m位确认是请求的数据

2.Cache容量 : 2kB ( k = m+n)

3…标志位位数 = 主存地址位数 - Cache地址位数 (主存容量比Cache大 2r 倍,则主存地址比Cache地址多 r 位 (?))

一个主存地址为 0x******的主存放入Cache地址(k位)应为主存地址的低k位(k = n+m

4.3 访存过程

直接映射:在这里插入图片描述
(图片摘自王道考研)

相联映射: 区别仅在 → \rightarrow 根据C位找到对应的Cache组,将主存地址的标记位与组内的所有行的标记进行比较

五.中断与DMA

中断源比较多可以对它们进行分类,每一类给定一个中断服务程序的入口,入口地址为中断向量。常见的分类有:
1.**机器校验中断:**高速程序发生了设备故障,比如电源故障,主存出错等,属于软中断,内中断
2.**访管中断:**用户程序需要操作系统介入,调用操作系统服务,由CPU状态由用户态(目态)转为内核态(管态)
3.**程序性中断:**包括指令和数据的格式错,程序执行中出现异常等
4.**外部中断:**来自机器外部,包括定时器中断,外部信号中断,中断键中断,包括I/O中断

好文:
I/O 操作的那些事儿:轮询 ,中断 , DMA ,通道
键盘敲入 A 字母时,操作系统期间发生了什么 -小林coding
不同的中断源

CPU用于某设备的I/O时间占整个CPU的百分比 :可通过计算1秒内CPU用于某设备的I/O时间占比得到,计算方法:中断次数*中断时间开销(中断响应+中断处理)/ CPU的主频

关于浮点数的好文:
计算机系统基础(四)浮点数

关于I/O设备中通道的好文:
I/O 方式 —— 通道控制方式
关于设备控制器和 I/O 通道的理解

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值