当前位置: 首页 > news >正文

操作系统系列学习——多级页表与快表

文章目录

  • 前言
  • 多级页表与快表


前言

一个本硕双非的小菜鸡,备战24年秋招,计划学习操作系统并完成6.0S81,加油!
本文总结自B站【哈工大】操作系统 李治军(全32讲)
老师课程讲的非常好,感谢
【哈工大】操作系统 李治军(全32讲)

多级页表与快表

在这里插入图片描述
在这里插入图片描述多级页表和块表,以及前面的分页机制合起来成为一套比较完善的内存访问机制

为了提高内存利用率,页应该小,页小了,页表项就多了,页表就大了;(页是4K,每个段最多浪费4K)

CPU执行指令关键花的时间就在于通过总线访问内存,这个速度是慢的
在这里插入图片描述
页号必须要连续,这样才可以立即定位到页表项
在这里插入图片描述
用多级页表既实现连续,又让页表占的内存变少

页目录表(章)+页表(节)

多级页表优点:

多级页表既保证了页表表项的连续性,使得查找起来非常快(时间复杂度O(1));
又保证了内存中存储的页表少了,减少了内存浪费,提高了内存使用率;

多级页表缺点

多级页表增加了访存速度,特别64位系统(因为64位系统的多级页表有5,6级);

多级页表,每增加一级,访存次数就会加1; 所以 64位系统的多级页表访存次数约为5,6次;
多级页表的级数越多,访存越多,效率越低(级数越多,类比书的多层目录),这会造成指令执行效率低;
在这里插入图片描述
快表:

  • 也叫TLB,TLB是一组相联快速存储,是寄存器;
  • TLB,即Translation lookaside buffer,又称为翻译后备缓冲区寄存器;
  • 通过TLB可以快速找到最近使用的逻辑页映射的物理页号;

基于快表的地址翻译步骤

步骤1: 根据逻辑地址的页号,查询一次TLB寄存器就可以得到页框号(物理页号);
步骤2: 若快表TLB不存在页框号(未命中),则查询多级页表,并把查询结果送入TLB存储作为缓冲用于后续地址翻译;
小结:快表+多级页表合在一起形成的结构,保证了查询(翻译物理地址)时间快,页表项连续,减少了内存资源浪费;

这也充分体现了操作系统折中思想;通过把一些技术组合在一起,使得访问时间不错,空间利用也不错;具体是:

多级页表是减少了空间浪费,降低了空间复杂度,访问时间还可以,但还想提高页表查询速度;
TLB是提高了页表查询速度,降低了时间复杂度;
TLB可以弥补多级页表(特别64位系统)访存耗时,慢的缺点;

在这里插入图片描述
TLB越大越好, 但TLB很贵,折中处理是 TLB可以存储的页表项数量范围是 [64,1024];

原因:

  • 程序的地址访问存在局部性
  • 因为访问局部性,所以程序用的是固定的那几个逻辑页号;
  • 最近访问的逻辑页与物理页映射关系会送入TLB存储,所以TLB的命中率会很高;
  • 补充:程序多体现在循环,顺序结构;

相关文章:

  • k8s入门到实战(十四)—— Helm详细介绍及使用
  • Java实现猜数字游戏:编程入门之旅
  • 数学建模常用的代码
  • Jmeter 从登录接口提取cookie 并 跨线程组调用cookie (超详细)
  • 游戏本笔记本更换@添加内存条实操示例@DDR5内存条
  • Linux 基于HAProxy+KeepAlived实现
  • 安防监控视频汇聚平台EasyCVR启用图形验证码之后如何调用login接口?
  • linux入门级学习指南
  • docker-compose(mysql5.6、mysql8、neo4j3.5、redis)
  • Nodejs运行vue项目时,报错:Error: error:0308010C:digital envelope routines::unsupported
  • 自动化测试:Selenium中的时间等待
  • AD学习笔记
  • SPI机制详解
  • 学习JavaEE的日子 Day29 yield,join,线程的中断,守护线程,线程局部变量共享,线程生命周期
  • I.MX6ULL_Linux_系统篇(25) buildroot文件系统构建
  • Asm.js的简单介绍
  • CSS魔法堂:Absolute Positioning就这个样
  • Docker 1.12实践:Docker Service、Stack与分布式应用捆绑包
  • ECMAScript入门(七)--Module语法
  • github指令
  • iOS 颜色设置看我就够了
  • Java基本数据类型之Number
  • java取消线程实例
  • mongodb--安装和初步使用教程
  • puppeteer stop redirect 的正确姿势及 net::ERR_FAILED 的解决
  • Swoft 源码剖析 - 代码自动更新机制
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • Webpack入门之遇到的那些坑,系列示例Demo
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 复习Javascript专题(四):js中的深浅拷贝
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 排序算法之--选择排序
  • 入门到放弃node系列之Hello Word篇
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 微服务框架lagom
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • #13 yum、编译安装与sed命令的使用
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (175)FPGA门控时钟技术
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (差分)胡桃爱原石
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (学习日记)2024.01.09
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转) Face-Resources
  • (转)ORM
  • ***监测系统的构建(chkrootkit )
  • .Net CF下精确的计时器
  • .NET Core中的去虚
  • .NET/C# 编译期能确定的字符串会在字符串暂存池中不会被 GC 垃圾回收掉