【哈工大_操作系统理论】L2223 多级页表与快表段页结合的实际内存管理

devtools/2024/10/17 23:05:25/

L3.3 多级页表与快表

一页大小是4K,最大的浪费其实就是一页都空着,所以最大浪费是4K。则为了避免浪费,页大小必须小一些。

1、问题:需要很大内存空间存放页表

  • 一般内存大小为4G,页大小为4K,则有1M个页表象(一百多万个,太大了)。
  • 每个页表象一般需要4个字节,则每个页表占4M大小。假设100个进程,则需要400M内存。
  • 实际上,程序虽然分为多个页,但并不是每个程序都很大包含很多页,却并不是每个页的逻辑地址都使用,则并不是每个页都需要有表象。并不是每个页表都要包含这1M个页表象,引出第一种方法。

2、第一种方法:只存放用到的页

  • 失败-因为页号不连续,导致每次需要比较查找页号以找到对应页框号,需要额外多次访问页表,效率低
  • 既要页号连续,又要让页表占用内存少 -> 多级页表

3、多级页表

原本1M个表象,每个表象4字节,需要4M的空间来存储页表。而现在:

  • 页目录号需要2^10个,每个4字节,需要4K

  • 其中只有3个目录占用,只需要3个页号目录,每个页号目录也是2^10,则目录指向的页表象是4K,三个则12K

  • 所以总共需要16K
    在这里插入图片描述

  • 多级页表提高了空间效率,降低了时间效率。每增加一级都要多访问一次内存

4、快表

TLB:相连快速存储,属于寄存器,存放在CPU中

  • 记录最近使用的页号;

  • 若不在TLB中,则再去查多级页表(快表+多级页表)
    在这里插入图片描述

  • TLB命中率越高越好,即TLB越大越好,但很昂贵,需要折中


L3.4 段页结合的实际内存管理

  • :用户程序通过分段管理虚拟内存(程序员希望用段)
  • 操作系统通过分页管理物理内存,高效利用内存(物理内存希望用页)

1、段面向用户,页面向硬件

用户程序 -> 分段存放到虚拟内存 -> 每段再分页存放到物理内存

  • 虚拟内存:无非就是割出了一段地址空间来存放段程序
  • 逻辑地址 -> 虚拟地址 -> 物理地址
    在这里插入图片描述

2、重定位(地址翻译)

段地址翻译 + 页地址翻译
在这里插入图片描述

3、实际的段、页式内存管理

  1. 在虚拟内存中割出一块区域(分配虚存)

  2. 建立段表,映射到虚拟内存
    在这里插入图片描述

  3. 在物理内存中找到空闲区域(分配内存)

  4. 建立页表

  • linux0.11中设计多个进程共用同一个页表,因为每个进程虚拟地址互不重叠,而使用32位虚拟地址前20位为页目录和页号,则页目录和页号不同,所以用同一套页表映射后物理地址是不同的
    在这里插入图片描述

  • 右移22位,得到页目录号,每个页目录号占4字节,所以乘4得到页目录号地址,则右移20位。(但是需要与一下,把后面两位清零,实现效果才一样)
    在这里插入图片描述

  • 在子进程位置创建一章(页目录号)

  • 在子进程的章上新建节(页号)get_free_page
    在这里插入图片描述

  • 把父进程这一节内容拷贝到子进程这一节上
    在这里插入图片描述

  1. 重定位具体使用内存
  • 通过内存管理单元 MMU 硬件实现地址自动转换
    在这里插入图片描述

http://www.ppmy.cn/devtools/126581.html

相关文章

灵当CRM data/pdf.php 任意文件读取漏洞复现

0x01 产品简介 灵当CRM是一款专为中小企业打造的智能客户关系管理工具,由上海灵当信息科技有限公司开发并运营。广泛应用于金融、教育、医疗、IT服务、房地产等多个行业领域,帮助企业实现客户个性化管理需求,提升企业竞争力。无论是新客户开拓、老客户维护,还是销售过程管…

利用Matlab处理回声信号(利用卷积运算产生一个带回声的信号)

一、.首先调用一个声音信号,以下是各种MATLAB自带的声音; 1. 鸟叫声 load chirp sound(y,Fs) 2. 敲锣声 load gong sound(y,Fs) 3. 哈利路亚 load handel sound(y,Fs) 4. 欢笑声 load laughter sound(y,Fs) 5. 啪哒声 load splat sound(y,Fs) 6. 火车声 …

点评项目-6-缓存更新策略、缓存穿透、雪崩

缓存更新策略 使用 redis 缓存记录的信息,有可能在数据库被信息被修改导致信息不一致,使用缓存更新来解决这个问题 缓存更新策略主要有三种: 1.内存淘汰(redis默认开启) 2.超时剔除(给key添加TTL时间) 3.主动更新(编写业务逻辑) 主动更新策…

ChatGPT与R语言融合技术在生态环境数据统计分析、绘图、模型中的实践与进阶应用

在短短一年多的时间里,GPT已经在多个领域展现出其独特的价值,特别是在数据统计分析领域。GPT的介入为数据处理、模型构建和结果解释带来了前所未有的便利。与此同时,R语言凭借其开源、自由、免费的特性,成为了统计分析和数据可视化…

qt creator 开发环境的安装

1.找官网 官网地址:Installation | Qt Creator Documentation 点 Parent Directory 继续点 Parent Directory 点 archive/ 2.下载在线安装器 点 online_ainstallers 选择在线安装器版本 选择对应版本后进入下载列表,根据自己的系统选择下载。 下载后…

C语言初阶小练习3(扫雷小游戏的代码实现及解读)

一、扫雷小游戏基本信息 1.1 游戏目标 游戏的主要目标是在最短的时间内,根据点击格子出现的数字找出所有非雷格子,同时避免踩到地雷。踩到一个雷即全盘皆输。 1.2 游戏玩法 游戏界面:游戏通常在一个由方格组成的网格中进行,网格…

了解Android中为什么需要多线程?

在Android开发中,多线程是一个至关重要的概念。理解并合理应用多线程,可以显著提升应用的性能和用户体验。 一、Android多线程的基本概念 1. 主线程与UI线程 在Android中,主线程也称为UI线程,它负责处理用户输入、事件分发、绘…

HTML快速入门--第二节--css选择器

一、基本概念 CSS:层叠样式表 样式:外观属性 层叠:一个标签对象,最终呈现出来的样子,多个样式共同作用 表:.css后缀文件 tr是列 td是行 div :能整齐装东西 空格td :后代 >td:子代 选择…