计组(七)存储系统:地址映射


地址映射

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 432bit=432/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

  • 59
    点赞
  • 231
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Linux操作系统的地址映射是指将虚拟地址映射到物理地址的过程。在Linux中,每个进程都有自己的虚拟地址空间,这个空间是由操作系统分配的,进程只能访问自己的虚拟地址空间,而不能访问其他进程的地址空间。当进程访问虚拟地址时,操作系统会将虚拟地址转换为物理地址,然后访问物理地址。这个过程是由硬件的内存管理单元(MMU)完成的。MMU会将虚拟地址分为页,然后将每个页映射到物理地址。这样,进程就可以访问物理内存了。Linux中的地址映射是通过页实现的,每个进程都有自己的页,页中记录了虚拟地址和物理地址的映射关系。当进程访问虚拟地址时,MMU会根据页将虚拟地址转换为物理地址。 ### 回答2: Linux 操作系统中的地址映射是指将进程的虚拟地址映射到物理地址的过程。在 Linux 内核中,每一个进程都有自己独立的虚拟地址空间,这样可以使不同的进程之间互不干扰地运行,达到更好的安全性。具体的实现过程是通过页面结构来实现的。 在 Linux 中,虚拟地址空间被分成了若干个页面(Page),每个页面的大小为4KB。这些页面会被分为若干个区域,如内核区域、用户空间区域等。 进程要访问内存中的数据时,会生成一个虚拟地址。这个虚拟地址需要经过两次转换才能被映射到物理地址:首先,通过页的查询,将虚拟地址转化成内存页面的地址;其次,通过页面地址和偏移量计算出物理地址。这个过程中,Linux 内核将会分配一部分内存作为页来存储这个映射关系。 具体来说,系统内核在进程启动的时候会为其建立一个页结构,用来记录虚拟地址与物理地址的映射。页结构的层次分为三层,分别是页目录、页和页面。当进程产生虚拟地址时,CPU 会将虚拟地址的高 10 位作为页目录的索引,中间的 10 位作为页的索引,低 12 位示物理页面的偏移量。这样就可以找到虚拟地址对应的物理地址了。 Linux 内核的页结构可通过 /proc 文件系统中的 /proc/[pid]/maps 文件查看。对于每一个进程来说,这个文件存储了该进程所占用的虚拟地址空间与物理地址的映射关系,包括代码段、栈、堆、共享库等信息。 总之,Linux 操作系统的地址映射通过页的建立和管理实现,可以实现进程之间的隔离,提高系统安全性。对于开发者来说,了解 Linux 中地址映射的原理可以更好地调优程序,提高代码执行效率。 ### 回答3: Linux 操作系统的地址映射是一种将虚拟地址映射到物理地址的过程。在 Linux 中,虚拟地址代着应用程序对物理内存的需求,而物理地址则代着实际存在的内存地址。 为了实现地址映射,Linux 操作系统采用了分页机制。分页机制将虚拟地址划分为固定大小的页(通常为 4KB),每个页可以映射到物理内存的任意位置。操作系统会将虚拟地址按照页的大小进行分段,并为每一段分配一个物理地址。因此,每个虚拟地址都可以通过对应的物理地址进行访问。 在进行地址映射时,操作系统会将虚拟地址转换为页项,页项中保存了该虚拟地址对应的物理地址。如果在页中没有找到相应的页项,则会触发一次缺页中断,操作系统会根据程序的需求自动加载相应的页面到内存中。 为了提高地址映射的效率,操作系统还会使用 TLB(Translation Lookaside Buffer)缓存页项。TLB 是一种硬件缓存,用于快速查找页项,避免每次访问内存时都需要遍历页。当访问某个虚拟地址时,操作系统会先在 TLB 中查找对应的页项,如果 TLB 中没有,则会从内存中加载。 总的来说,Linux 操作系统的地址映射是一个复杂的过程,需要依赖分页机制、缺页中断和 TLB 缓存技术实现。通过这些技术的支持,Linux 能够为应用程序提供高效、安全的内存管理服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值