计组(七)存储系统:地址映射
文章目录
地址映射
1.总结
(1)主存:
-
主存地址
用题目的主存容量
求出的位数,如 4 M B = 2 22 B 4MB=2^{22}B 4MB=222B,对应22位的主存地址。 -
块内地址
块内地址
的位数对应Cache每块的大小,如Cache每块4KB,对应 2 12 2^{12} 212,12位。
-主存地址格式
(2)Cache:
-
Cache的总块数、Cache的总容量、Cache的每块的容量
-
Cache地址格式
(3)相联存储器:
存
储
单
元
的
个
数
=
一
个
C
a
c
h
e
的
总
块
数
存储单元的个数=一个Cache的总块数
存储单元的个数=一个Cache的总块数
记录着地址变换表,行数就是存储单元的个数,地址号
对应Cache的块号
。
(4)关联知识
一个具有16KB直接相连映射cache的32位微处理器,cache的块为4个字(字长32位),内存为256MB。
问: (1) 主存地址为多少位(按字节编址),各字段如何划分?
(2)主存地址为ABCDEF8H的单元调入cache中的位置?
[知识点]:bit位(简写b)、Byte字节(简写B)、字。
[分析]:
- 字:有16、32、64位的,题目会给出 “字对应的几位bit”。
- 这篇说的“内存容量”、“cache容量”等等,他们的单位是“B字节”。
- 1Byte=8bit。
所以这道题就是,cache容量=4个字= 4 ∗ 32 b i t = 4 ∗ 32 / 8 B = 16 B = 2 4 B 4*32 bit=4*32/8 B=16 B=2^4B 4∗32bit=4∗32/8B=16B=24B,也就是对应4位。
2.全相联
(1)意思
将主存以Cache每块的容量划分。
主存的每一块均可以装入 Cache的任一块中,所以地址变换表中要得有可以存储主存块号总数那么长的位数。
(2)题
主存容量为 1MB,高速缓存的容量为 4KB,分为 4 块每块 1KB,全相联地址映像方式。求主存地址为 88888H 时,高速缓存地址为 ?。
解:
①划分位数
主存容量为 1MB,即
2
20
2^{20}
220,则主存地址共20位。
Cache每块1KB,即
2
10
2^{10}
210,则块内地址共10位。
则主存块号为20-10=10位。(或者主存块号数=主存容量÷Cache每块容量=1MB÷1KB=
2
10
2^{10}
210,则主存块号为20-10=10位。)
②拆分主存地址
88888H
=1000 1000 1000 8H 8H
块内地址
:对应后10位00 8H 8H
主存块号
:对应前10位1000 1000 10
=10 0010 0010
=222H
③查地址变换表
主存块号对应地址变换表中下标1,表示为01
④合成Cache地址
01
00 1000 1000
=0100 1000 1000
=488H
3.直接映射
(1)意思
将主存以Cache总量划分成区,各区内再划分为每块。
主存块号与Cache 块号永远是一致的,所以只要看看地址变换表中下标为块号的那行存储的内容是否是主存区号。
(2)题
主存容量为 64MB,高速缓存的容量为 32KB,分为 8块每块 4KB,直接映射地址映像方式。求主存地址为 28B57A4H时,高速缓存地址为 ?
①划分位数
主存容量为 64MB,即
2
6
+
20
2^{6+20}
26+20,则主存地址共26位。
Cache每块4KB,即
2
2
+
10
2^{2+10}
22+10,则块内地址共12位。
块号数即Cache块数8,则块号共3位。
则主存区号共26-12-3=11位。(或者主存区号数=主存容量÷Cache总容量=64MB÷32KB=
2
26
÷
2
5
+
10
=
2
11
2^{26}\div2^{5+10}=2^{11}
226÷25+10=211,则主存区号共11位。)
②拆分主存地址
28B57A4H
=10 1000 1011 0101 7H AH 4H
块内地址:对应后12位7H AH 4H
块号:对应其中3位101
主存区号:对应前11位10 1000 1011 0
=101 0001 0110
=516H
③查地址变换表
地址变换表地址101
的确存在着516H
④合成Cache地址
101
7A4H
=57A4H
4.组相联
(1)意思
将 Cache 先分组,组内再分块;而主存是先以 Cache 的总容量分区,区内按Cache 的方法分组,组内再分块。
主存的某号组只能装入 Cache 的同号组中,而组内的块可以装入同组号的任意一块中。
(2)题
主存容量为 1MB,高速缓存的容量为 8KB,分为两组,每组4块,每块 1KB,组相联地址映像方式。求主存地址为 ABCDEH时,高速缓存地址为 ?
①划分位数
主存容量为 1MB,即
2
20
2^{20}
220,则主存地址
共20位。
Cache每块1KB,即
2
10
2^{10}
210,则块内地址
共10位。
主存块号数即Cache每组块数4,则主存块号
共2位。
组号共2组,则组号
共1位
则主存区号
共20-10-2-1=7位。(或者主存区号数=主存容量÷Cache总容量=1MB÷8KB=
2
20
÷
2
3
+
10
=
2
7
2^{20}\div2^{3+10}=2^{7}
220÷23+10=27,则主存区号共7位。)
②拆分主存地址
ABCDEH
=1010 1011 1100 DH EH
块内地址
:对应后10位00 DH EH
主存块号
:对应其中2位11
组号
:对应其中1位1
主存区号
:对应前7位1010 101
③查地址变换表
拼接:主存区号
+主存块号
=1010 101
11
=1 0101 0111
=157H
在地址变换表中第1
组中找,157H
对应地址变化表中组内块号
下标2,表示10
④合成Cache地址
1
10
00 DH EH
=1 1000 DH EH
=18DEH
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)