我是小康小白,一个平平无奇的Java小白。热爱有趣的文字,生活和远方。
个人博客:https://blog.csdn.net/weixin_45791445
有问题欢迎QQ联系:1059320343 (记得备注CSDN)
- 例如在32位处理器中,如果Cache大小为16KB,块大小为32字节,求Offset,index,tag的位数?
-
首先看一张图
-
一个完整的地址由Tag,Index,Offset组成
注:上图是笔者自己的理解,如果有问题,希望大家指出来。
-
其次理解Tag,Offset,index都是用来干什么的?
Tag:用来对比地址,如果相同就发出命中信号。
Offset:储存在Cache块中,是块内地址,所以块的大小决定了Offset的大小。
Index:索引Cache,用作地址来访问Cache块,根据块的数量来确定。首先三者相加是处理器的位数, 因为2^5=32,(块的大小是32)所以Offset是5位(此时位的单位是字。这里8位就是指8个位置,每个位置是2字节),(Offset的位数只与Cache块的大小有关) 因为Cache大小为16KB,块大小为32字节,所以一共有512个Cache块。 如果是直接相连结构,因为2^9=512(直接相连时是完整的),所以index是9位,所以tag=32-5-9=18, 如果是全相联结构,index为0,所以tag=32-5=27位, 如果是二路组相联结构,因为2*2^8=512(二路组是Cache被分为了两组,所以要再消个二),所以index=8位,所以tag=32-5-8=19位。
-
注意:不同的处理器字对应字节的转换关系是不同的。16位的处理器,一个字是2字节。32位的处理器,一个字是4字节。64位的处理器,一个字是8字节。
-
小白上面的这道题是以字节作为位的单位。有的题是以字作为位的单位,与上题的思路相同,或者可以将它转换为位(Bit)来进行计算。
-
其次对于全相联,没有对应关系,数据可以随便放,没有index。
对于直接相联,小白的理解是一对一的关系,所以有index。
对于几路组相联的这种,小白的理解是一对多的关系,一条数据可以放到不同路的对应位置,所以对于index来讲,就需要减去路的位数。
-
有符号数扩展位数:
补码:负数往前补1,非负数补0;
原码:符号位前移到首位,其余位补0,不分正负。 -
在内存中数字大的是高位。
例如:0x44332211,在内存中按小尾端(小尾端是:数字的高位存储在内存的高位,数字的低位存储在内存的地位。)是 0x11,0x22,0x33,0x44 -
对于时钟周期和拍数的理解。
单片机时间单位编辑(来自于百度百科)
在MCS-51中时钟周期也称振荡周期,振荡周期也称为晶振周期,振荡周期是单片机的基本时间单位。8051把一个振荡周期定义为一个节拍(用P表示),两个节拍为一个状态周期。
振荡器脉冲信号经过时钟电路二分频之后产生的单片机时钟信号的周期(用S表示)称为状态周期。故一个状态周期S包含2个节拍,前一时钟周期称为P1节拍,后一时钟周期称为P2节拍。
若时钟晶振的振荡频率为fosc,则振荡周期Tosc=(1/fosc)。
如:晶振频率为12MHZ,则振荡周期Tosc=(1/12us)。
个人对于上文的理解是:
在单周期处理器中一次时钟状态的变换(这就是一个振荡周期),在一个振荡周期中完成了一条指令。但到了多周期处理器中,使用的分频时钟,以书上的为例,每一个振荡周期对应的指令的一个阶段,在五个振荡周期完成了一条指令,这五个振荡周期合起来叫就是状态周期。而一个振荡周期对应的就是一拍。
单周期处理器
一个周期完成一条指令。
多周期处理器
将指令分为五个阶段。并使用分频时钟来控制这五个阶段。提高了处理器的频率。
未
待
续
完
未待续完
未待续完