OS | 【三 内存管理】存储管理及大题解构

本文详细解析了有效访问时间的概念,特别是在分页存储管理中的应用。介绍了基本分页存储和引入快表后的有效访问时间计算,强调了快表在减少内存访问次数上的作用。同时,讨论了地址转换过程,包括一级页表、二级页表与TLB的交互,以及在系统调用中的数据传递。此外,还涉及了页表始址的保存和TLB页面调出内存的处理策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、小题注意点

 

有效访存时间的计算

 

从进程发出指定逻辑地址的访问请求,经过地址变换,到在内存中找到对应的实际物理地址单元并取出数据,所需花费的总时间,称为内存的有效访问时间(Effective Access Time, EAT)

 基本分页存储管理 方式中:

有效访问时间分为第一次访问内存时间(即查找页表对应的页表项所消耗的时间t)与第二次访问内存时间(即将页表项中的物理块号与页内地址拼接成实际物理地址所耗费的时间t)之和:

  ETA = t + t = 2t

引入快表的分页存储管理 方式中:

通过查询快表可直接得到逻辑页所对应的物理块号,由此拼接形成实际物理地址,减少了一次访问内存,缩短了进程访问内存的有限时间。

   ETA = α x λ + ( t + λ )( 1 - α ) + t

             = 2t + λ - t x α

其中  λ :表示查找快表所需的时间

       α :表示查找时的命中率

             t :表示访问一次内存所需要的时间

注:由于快表的容量限制,不可能将一个进程的整个页表全部装入快表,所以在快表中查找到所需表项存在着命中率的问题。所谓命中率,是指使用快表并在其中成功查找到所需表项的比率。

例:

  一具有快表的分页系统中,逻辑地址访问内存的时间是100毫秒,访问快表的时间是20毫秒。

    问:设从快表中查找到所需页表项的概率为85%,计算CPU存取一个数据时的有效访问时间。

    ETA = α x λ + ( t + λ )( 1 - α ) + t

      = 20 x 0.85 + ( 100 + 20 )( 1 - 0.85 ) + 100

      = 135

或      ETA = 2t + λ -t x α

       = 2 x 100 + 20 - 100 x 0.85

       = 135

 


 

 二、大题解构

 

1. 各种概念之间的推导计算

Key : 熟悉掌握各种概念之间的关系(做题的时候注意总结)

        • 一级页表 +TLB+ 请求分页

        • 二级页表 + 请求分页 +TLB

                • 页目录号的位数 + 每个页目录项的大小 → 页目录表的大小?

                • 页目录号 + 页目录表的起始地址 + 页目录项的长度 → 页目录项 的物理地址?

        注意箭头的单向与双向。

        若系统采用一级页表,页表索引与页号是一个概念。

        若系统采用二级页表,页目录号为顶级页表的页号。

        页目录表:在二级页表当中,顶级的页表。由于每个页目录表大小固定。

        总虚页号→查块表TLB。

        页号/页表索引 + 页表项长度 → 每个(二级)页表的大小

        页表的起始物理地址 + 页号/页表索引 + 页表项长度 → 页表项的物理地址

        页表项的物理地址 → 页表项具体内容

2. 从示意图图中挖掘出隐含信息

Key : • 多做题, 多看, 多积累, 熟悉各种常见图示

        • 特别注意: TLB 组相联映射、 全相联映射的图示画法

        • 深入理解组相联映射、 全相联映射方式下查询 TLB 的原理区别

3. 基于地址转化过程的分析

Key : 自己手绘流程图, 捋一遍

        • 熟悉各种状况下地址转化的过程(自己画图复习)

        • 一级页表 + 虚拟内存 + TLB

        • 二级页表 + 虚拟内存 + TLB

地址翻译的过程 操作系统部分过程:(本例为 全相连TLB,系统使用二级页表)

虚拟地址转换为物理地址

        ①虚拟页号查TLB:

                ②与TLB标记字段进行对比,若匹配成功且有效位为1,TLB命中。

                取出页框号,拼接虚拟地址末尾的页内偏移量,即物理地址。

        ③若TLB为命中,则虚拟页号查慢表:(此时页目录号被拆分为页目录号+二级页号)

                根据 页目录号和页目录表始址 查询页目录表(一级页表),页目录号进行对比,且有效位为1,得到页框号(二级页表的存储地址)

                根据 所得页框号和二级页号 查询二级页表,对比标记字段,且有效位为1。

                取出页框号,拼接虚拟地址末尾的页内偏移量,即物理地址。

注:

        1、若一个系统采用二级页表,即内存中的慢表分两级,但查TLB依旧是一级。

        2、若快表命中,则必不是缺页,若快表为命中,查询慢表可能出现缺页。


1)实际情况中,磁盘块大小与页框大小不同。但考试老师还是比较温柔,我们认为磁盘块大小与页框大小相同。

2)进程间通信:

        1、进程虚拟地址空间

  • 进程虚拟地址空间:低地址部分或高地址部分会映射到OS内核代码、OS数据区,进程会有自己的代码和数据区。
  • 可能会有一些页面是没有数据的。

        2、若进程运行时,发出系统调用

  • 会导致CPU从用户态进入内核态,此时依旧是这个进程,只是运行在内核态,具有OS内核的属性。
  • 举例来讲,P1进程想进行进程通信 (IPC),发送10B数据给P2进程。则:
    • ① P1发出IPC,从用户态进入内核态,执行内核代码。
    • ② 执行内核系统代码 会将数据 写到 内核数据区 。
    • ③ P2发出IPC,从用户态进入内核态,执行内核代码。
    • ④ 从内核数据区 复制 一份到 用户数据区 。可以 char[10]=此10B数据。

        3、总结

  • 所有进程的内核代码和内核数据区是共享使用的,内核区的页面会被映射到同一个物理页框中。进程和进程间通信采用系统调用的方式,数据传递到内核数据区。
  • 以上过程即为第五章IO的内容:数据的转移要从内核区转到用户区。

3)CPU执行指令时若要访问 VA虚拟地址,进行地址转换

        1、若TLB未命中,查询慢表发生缺页

  • 发生缺页导致缺页故障/页故障 → 异常处理 →调页(读磁盘)
  •         通过页表项可知 外存地址(磁盘块号),从而需要读入此磁盘块。
  •                 若有空闲页框 → 直接调入,并修改有效位。
  •                 若无空闲页框 → 进行页面置换 → 淘汰的页面:看脏位,若脏位为1,需写回磁盘,且修改有效位 → 调入的页面 换入内存 → 修改调入对应的PCB页框号、有效位、脏位。
  • 异常处理完毕后,重新执行此条指令
  • 异常处理完毕后,有些操作系统会同时更新TLB,即下次访问直接命中。(408默认,注意访问TLB次数问题)
  • 注意:若TLB未命中,查慢表后,TLB的页表项也会同步更新(慢表复制一份)。

                例:若一个进程想要访问int a[1024]数组的每个元素 占满4KB的页面,则需访问内存多少次。 (不考虑访问Cache情况)

                注:int *a;C语言中我们定义的指针指向的是VA。1025次。

                

        2、OS如何记录页表始址?

  • 当进程正在运行时,则页表始址寄存器保存的内容即为页表的起始地址。
  • 若进程不运行下处理机时,则页表起始地址将会被OS保存到PCB,当再次被调度上处理机时,OS会将PCB中的起始地址存放到页表始址寄存器中(可能是页框号也可能是起始地址)。

        3、拓展:TLB的页面被调出内存的两种处理方式:

        ① 调入页面直接覆盖

        ② 覆盖有效位为0的页面

        做题时,只要知道 TLB 命中的一定不会缺页即可。


部分内容参考于

little red book @杳一白

访问内存的有效时间 - 咩咩的咣咣 - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西皮呦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值