存储系统知识大全

一.此文章题目(假设前提)

假设:某36位系统,按字节编制,每个⻚⾯⼤⼩为 4KB。则⻚内偏移量占 12 bit,虚拟⻚号24bit。 物理地址空间⼤⼩为 4GB,因此物理地址共32bit,前 20bit 表示物理⻚框号。

1.这里解释一下按字节编址,它是一种计算机内存的编制方式。

在按字节编址的系统中,为每8个字节编一个地址。

而按字编址是另一种内存编址方式,在按字编址的系统中,为一个字的存储空间编一个地址,即一个地址单元对应于一个字(通常是32位或64位)。这意味着每个地址单元会包含多个字节。

2.接下来我们文章的重点是,从虚拟地址到物理地址的转化,然后再利用这个物理地址去访问主存。

二.从虚拟地址到物理地址的转化

1.总述

首先在主存中每个进程都有一张页表,该页表记录了虚拟页号和物理页框号的映射关系。

虚拟地址在逻辑上分为虚拟页号+页内偏移量

1)我们先用虚拟页号查快表,如果快表命中,则直接得到页号

若快表未命中,用虚拟页号查慢表,总而言之,即欲根据虚拟页号获得物理⻚框号

2)将页框号拼接上页内偏移量(还是那12bit)即可得到完整的物理地址

2.查快表过程

首先根据虚拟页号查快表,这里以全相联映射的方式为例,则我们需要遍历并比较标记(用虚拟页号和TLB标记比较),才能判断所需的页表项是否在快表中。

若快表命中,则直接得到页框号。

若快表未命中,则用虚拟页号查慢表。

可以看到在下面的例子中,在快表中并没有存在TLB标记为985211H的记录,这意味着快表未命中,我们需要到慢表中去查看是否有对应的(虚拟块号,物理页框号)映射的记录。

3.查慢表过程

1)我们通常会在系统中设置一个页表寄存器(PTR),存放页表在内存中的起始地址F 和页表长度M。 进程未执行时,页表的始址和页表长度放在进程控制块(PCB)中,当进程被调度时,操作系统内核会把它们放到页表寄存器中。

2)因为每个页表项的长度是相同的,所以页号是“隐含”的,即如果你已经知道了页表在内存中存放的起始地址是X,每个页表项的大小又是相同的,那你自然能够知道其他的页表项的地址,因此页号可以隐含。(各页表项会按顺序连续地存放在内存中)

3)如下图所示,我们先在页表中查看有无页号为985211H的页号,发现存在,则定位到相应的记录,取出其对应的页框号为A3866H

4.查二级页表过程

1)二级页表存在的意义
  • 在操作系统中,每个进程都有自己的虚拟地址空间,这意味着每个进程可能需要管理大量的页表项,以将虚拟地址映射到物理内存地址。

  • 单级页表(即一级页表)的问题在于,它需要连续存放,因此当页表很大时,需要占用很多个连续的页框。这会导致内存浪费。

  • 此外,没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面。

综上,我们可以使用多级页表来优化页表结构。

2)二级页表介绍

a.二级页表是一种多级页表结构,将长长的页表进行分组,使每个内存块刚好可以放入一个分组,再将各组离散地放到各个内存块中。

b.逻辑地址结构为(一级页号,二级页号,页内偏移量)这里我们可以根据逻辑地址位数,页面大小,页表项大小来确定这几part所占的位数

d.地址转化过程:从PCB中读出页目录表始址,根据一级页号查页目录表,找到下一级页表在内存中的存放位置,再根据二级页号查二级页表表,找到最终想访问的内存块号,最后结合页内偏移量得到想要的物理地址。

这里我要重点重申: 1)采用二级页表结构的一级页号,二级页号是虚拟页号的细分

2)查询一级页表得到的是二级页表的其实地址(重点)

查询二级页表是根据二级页号去匹配的(重点)

三.用物理地址访问主存

1.总述

首先根据物理地址访问cache,若cache命中,则直接得到目标数据。

若Cache未命中,则⽤物理地址访问主存。

2.访问Cache过程

我们以访问主存物理地址为 10101110100001100110100 110 010110 的数据的访问过程为例。这里以2路组相联的映射方式访问Cache为例的方式为例。

1)在2路组相联映射中,Cache被分成多个组,每个组内有2块(或行)。这意味着每个组内有两个Cache行可以存放数据,主存中的每个块可以映射到Cache的某个组中的任意一个行。

2)假设CaChe块的大小为64B,则CaChe块字块内地址占6bit,再往前数3位(得到110)即为该物理地址对应的组号,找到对应的分组号后,找到分组中相匹配的CaChe标记,若其有效位为1,则表示CaChe命中。

这里成功找到对应的记录,我们亦拿到了其对应的主存的数据副本。

四.慢表与快表

1.慢表:

  • 慢表和段表都是存放在主存中的。

  • 当收到虚拟地址后,操作系统首先要访问主存,查询页表或段表,以进行虚实地址转换。

  • 慢表的访问速度较慢,因为它需要从主存中获取数据。

  • 每个进程对应一个页表

2.快表:

  • 快表是一种高速缓冲存储器,用于存放常用的页表项。

  • 它提高了变换速度,因为它存储了当前访问的一部分页表项。

  • 快表的访问速度比慢表快得多

3.辨析快表与Cache的联系与区别:

快表用于虚拟存储技术,加快辅存(主存与辅助存储器)之间的地址映射速度,通常集成在CPU内部,由于存储在CPU内部,访问速度非常快 。

而Cache是为了解决CPU与主存速度不匹配的问题,它存放的事 存放最近访问的数据块,以减少对主存的频繁访问。

五.地址映射方式

当谈到高速缓存存储器(Cache)中的地址映射方式时,我们通常会遇到三种不同的方式:全相联映射、组相连映射和直接映射。

全相联映射

主存中的任意一个块可以映射到Cache中的任意一行中

Cache中的每一行需要增加一个标记部分,用于存放该行内容的主存块的块号。

评价:灵活性好, 要Cache中有空行,就可以调入所需的主存数据块 。但因为存在一个标志位,导致利用效率不高。另每次 访问Cache时,需要遍历并比较标记,才能判断所需主存的字块是否在Cache中 ,即速度较慢。

组相连映射

每个主存块只能复制到Cache中的一个特定行中

映射关系: 主存块号对Cache总行数取模,计算出主存块在Cache中存放的位置 。

评价:这种方式灵活性差,每个主存块只有一个固定的行可以存放,容易发生冲突,频繁替换,效率降低。

直接映射

主存块号对Cache中有多少组取模,计算出主存块在Cache中存放的组,然后在组内可以随意放。

评价:组内有一定的灵活性,空间利用率较高,是全相联和直接映射的折中方案。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值