【计算机操作系统】基本分页存储管理

news2024/9/23 21:31:51

文章目录

  • 基本分页存储管理
    • 分页存储的概念
    • 重要的数据结构——页表
      • 页表项大小计算
      • 地址转换实现
    • 基本地址变换机构
    • 具有快表的地址变换机构
      • 快表(TLB)的概念
      • 引入快表后的地址变换
      • 局部性原理
    • 两级页表
      • 单级页表 vs 两级页表

基本分页存储管理

在这里插入图片描述

非连续分配:为用户进程分配的可以是一些分散的内存空间

分页存储的概念

固定分区会产生内部碎片,动态分区会产生外部碎片,这两种技术对内存的利用率都比较低。
我们希望内存的使用能尽量避免碎片的产生,这就引入了分页的思想:
把主存空间划分为大小相等且固定的分区,每个分区相对较小,作为主存的基本单位
每个进程也以块为单位进行划分,进程在执行时,以块为单位逐个申请主存中的块空间

内存空间被分为一个个大小相等的分区,每个分区就是一个“页框”,每个页框有一个编号,即“页框号”,页框号从0开始
(页框=页帧=内存块=物理块=物理页面)
(页框号=页帧号=内存块号=物理块号=物理页号)

为了把各个进程的数据存放到各个页框中,操作系统会将进程的逻辑地址空间也分为与页框大小相等的一个个部分,每个部分成为一个 ”“ 或 ”页面“ ,每个页面也有一个编号,即 ”页号“ ,页号也是从 0 开始

在这里插入图片描述

操作系统以页框为单位为各个进程分配内存空间,进程的每个页面分别放入一个页框中,也就是说,进程的页面与内存的页框一一对应的关系
各个页面不必连续存放,可以放到不相邻的各个页框中

重要的数据结构——页表

页表是一个存储在内存中的数据结构,用于将逻辑地址中的页号映射到物理内存中的页框号

为了能知道进程的每个页面在内存中存放的位置实现逻辑地址到物理地址的转换),操作系统要为每个进程建立一张页表(页表通常存在PCB(进程控制块)中)

在这里插入图片描述

  1. 一个进程对应一张页表
  2. 进程的每个页面对应一个页表项
  3. 每个页表项由 “页号” 和 “块号” 组成
    (注意:页表记录的只是内存块号,而不是内存块的起始地址, 物理页面的起始地址=物理页框号×页大小
  4. 页表记录进程页面和实际存放的 内存块(页框) 之间的映射关系

页表项大小计算

页表项占用字节大小 = 页号占用字节 + 块号占用字节,但是由于页表项是连续存放,因此页号可以是隐含的,不占存储空间(类比数组),故在物理上页表项占用的存储空间大小就是块号占用的存储空间大小

下面介绍如何计算每个页表项占用字节大小

】假设某系统物理内存大小为 4GB,页面大小为 4KB,则每个页表项至少应该为多少字节?

】内存块大小 = 页面大小 = 4KB = 2¹²B
➡️ 4GB 的内存总共会被分为 2³²/2¹² = 2²⁰ 个内存块
➡️ 内存块号的范围应该是 0 ~ 2²⁰-1
➡️ 内存块号至少要用 20bits 来表示
➡️ 至少要用 3B 来表示块号(3*8=24bits)
➡️ 由于页号是隐含的,因此每个页表占 3B,若页表有n个页表项,那么存储整个页表至少需要 3*(n+1)B

地址转换实现

之前介绍过进程在内存中连续存放时,操作系统是通过三种装入方式实现逻辑地址和物理地址之间的转换的,接下来介绍将进程地址空间分页之后,操作系统是如何实现逻辑地址到物理地址的转换的

分页存储的特点:虽然进程的各个页面是离散存放的,但是页面内部是连续存放的

如果要访问逻辑地址 A,则:
① 确定逻辑地址 A 对应的 “页号” P
② 找到 P 号页面在内存中的起始地址 (需要查页表,物理页面的起始地址=物理页框号×页大小)
③ 确定逻辑地址A的 “页内偏移量” W
逻辑地址A对应的物理地址 = P号页面在内存中的起始地址 + 页内偏移量W

】在某计算机系统中,页面大小是 50B,某进程逻辑地址空间大小为 200B,则逻辑地址 110 对应的页号、页内偏移量是多少?

在这里插入图片描述


用二进制表示逻辑地址:

由于在计算机内部,地址是用二进制表示的,如果页面大小刚好是 2 的整数幂,则计算机硬件可以很快速的把逻辑地址拆分为**(页号,页内偏移量)**

逻辑地址通常由两个部分组成:

  • 页号(Page Number, PN):逻辑地址的高位部分,用于索引页表,确定该逻辑地址对应的页在物理内存中的位置。
  • 页内偏移(Page Offset, PO):逻辑地址的低位部分,表示在该页内的具体偏移量

重点:知道页面大小就能知道页内偏移量位数,知道页内偏移量位数也能知道页面大小,就可以推出逻辑地址结构

】某计算机用 32 个二进制位表示逻辑地址,页面大小为 4KB = 2¹²B = 4096B

在这里插入图片描述

可以发现:后 12 位表示的就是页内偏移量前 20 位表示的就是页号

再用两道例题理解一下
在这里插入图片描述

在这里插入图片描述

结论:如果每个页面大小为 2 K B 2^KB 2KB ,用二进制数表示逻辑地址,则末尾 K 位即为页内偏移量,其余部分就是页号


用二进制表示物理地址:

在这里插入图片描述

结论:如果页面大小刚好是 2 的整数幂,则只需要把页表中记录的物理块号拼接上页内偏移量就能得到对应的物理地址 ,如果不是 2 的整数幂,那么就需要使用 物理页面的起始地址=物理页框号×页大小 的公式进行计算

基本地址变换机构

重点掌握基本地址变换机构的原理流程

基本地址变换机构是借助进程的页表将逻辑地址转换为内存中的物理地址的一组硬件机构

通常会在系统中设置一个页表寄存器(PTR),存放 页表在内存中的起始位置F页表长度M

进程未执行时,页表的起始位置和页表长度放在进程控制块(PCB)中
进程被调度时,操作系统内核会把他们放到页表寄存器中

注意:页面大小是 2 的整数幂

设页面大小为L,逻辑地址A到物理地址E的变换过程如下

在这里插入图片描述

【分析】
① 计算 页号P 和 页内偏移量W (如果用十进制数手算,则 P=A/L ,W=A%L ;但是在计算机实际运行时,逻辑地址结构是固定不变的,因此计算机硬件可以更快地得到二进制表示的页号、页内偏移量)
② 比较 页号P 和 页表长度M ,若 P≥M ,则产生越界中断,否则继续执行 (注意:页号是从 0 开始的,而页表长度至少是 1,因此 P=M 时也会越界)
③ 页表中 页号P 对应的 页表项地址 = 页表起始地址F + 页号P * 页表项长度 ,取出该页表项内容b,即为内存块号 (注意区分页表项长度、页表长度、页面大小的区别页表长度指的是这个页表中总共有几个页表项,即总共有几个页;页表项长度指的是每个页表项占多大的存储空间;页面大小指的是一个页面占多大的存储空间)
④ 计算 E=b*L+W,用得到的 物理地址E 去访存 (如果内存块号、页面偏移量是用二进制表示的,那么把二者拼接起来就是最终的物理地址了)

在这里插入图片描述

在分页存储管理(页式管理)的系统中,只要确定了每个页面的大小,逻辑地址结构就确定了
因此,页式管理中地址是一维的,即只要给出一个逻辑地址,系统就可以自动地算出页号、页内偏移量两个部分,并不需要显式地告诉系统这个逻辑地址中,页内偏移量占多少位

具有快表的地址变换机构

具有快表的地址变换机构是基本地址变换机构的改进版本

快表(TLB)的概念

由上面介绍的地址变换过程可知,若页表全部放在内存中,则存取一个数据或一条指令至少要访问两次内存:
第一次是访问页表,确定所存取的数据或指令的物理地址;
第二次是根据该地址存取数据或指令,
显然,这种方法比通常执行指令的速度慢了一半

为此,在地址变换机构中增设一个具有并行查找能力的高速缓冲存储器 一一 快表,又称联想寄存器(TLB),是一种访问速度比内存快很多的高速缓存(TBL不是内存!),用来存放最近访问的页表项的副本,可以加速地址变换的过程
与此对应,主存中的页表常称为慢表

寄存器、高速缓存、内存、外存之间的关系

在这里插入图片描述

引入快表后的地址变换

在这里插入图片描述

分析
① CPU给出逻辑地址,由某个硬件算得页号、页内偏移量,将页号与快表中的所有页号进行比较
② 如果找到匹配的页号,说明要访问的页表项在快表中有副本,则直接从中取出该页对应的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后访问该物理地址对应的内存单元,因此若快表命中,则访问某个逻辑地址仅需一次访存即可
③ 如果没有找到匹配的页号,则需要访问内存中的页表,找到对应页表项,得到页面存放的内存块号,再将内存块号与页内偏移量拼接形成物理地址,最后,访问该物理地址对应的内存单元,因此若快表未命中,则访问某个逻辑地址需要两次访存(注意:在找到页表项后,应同时将其存入快表,以便后面可能的再次访问,但若快表已满,则必须按照一定的算法对旧的页表项进行替换)

由于查询快表的速度比查询页表的速度快很多,因此只要快表命中,就可以节省很多时间
因为局部性原理,一般来说快表的命中率可以达到90%以上

局部性原理

  • 时间局部性

    如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行
    如果某个数据被访问过,不久之后该数据很可能再次被访问
    (因为程序中存在大量的循环)

  • 空间局部性

    一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能被访问
    (因为很多数据在内存中都是连续存放的)

基本地址变换机构中,每次要访问一个逻辑地址,都需要查询内存中的页表。由于局部性原理,可能连续很多次查到的都是同一个页表项,这就是为什么快表的命中率可以达到90%以上

两级页表

单级页表 vs 两级页表

单级页表两级页表
结构单级页表由一个直接的页表数组组成,其中每个条目对应一个页面帧,如果一个系统使用 32 位地址,并且页面大小为 4KB(即 12 位用于页面内偏移),则剩下的 20 位用于索引页表,单级页表包含的条目数为 2 20 2^{20} 220两级页表将页表划分为两级,分别为一级页表和二级页表,一级页表指向多个二级页表,二级页表再指向实际的物理页帧,这种方法可以减少单级页表中的空间浪费
操作当一个逻辑地址需要转换为物理地址时,逻辑地址的高位部分(逻辑页号)用于索引页表,然后页表中的条目提供物理帧号,物理帧号与逻辑地址的低位部分(页面内偏移)组合,得到最终的物理地址① 逻辑地址分为三个部分:一级页表索引、二级页表索引和页面内偏移;② 使用逻辑地址的高位部分(一级页表索引)从一级页表中找到二级页表的基址;③ 使用中间部分(二级页表索引)从二级页表中找到对应的物理页帧号;④ 将物理页帧号与逻辑地址的低位部分(页面内偏移)组合,得到最终的物理地址
优点结构简单,容易理解和实现更加节省内存,因为只有在使用到特定部分的逻辑地址时,才会分配对应的二级页表;更加灵活,适用于大地址空间
缺点① 页表必须连续存放,如果地址空间大,页表可能会非常大,占用大量内存;② 没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问某几个特定的页面相比单级页表,访问页表需要两次内存读取(一级页表和二级页表),增加了访问时间

【计算机操作系统】 专栏的文章 均有参考 《王道计算机考研 操作系统》 课程视频

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2053818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

使用Python编写AI程序,让机器变得更智能

人工智能(AI)是当今科技领域最热门的话题之一。随着Python编程语言的逐渐流行,它已经成为许多人工智能编程的首选语言。本文将介绍如何使用Python编写AI程序,让机器变得更智能。 首先,Python提供了大量的AI库和工具&a…

Easysearch 性能测试方法概要

(公众号用的是QQ音乐,可以随时听) INFINI Easysearch INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 衍生自基于开源协议Apache 2.0 的Elasticsearch 7.10 版本&#xff0…

4-1-2 直流电机(电机专项教程)

4-1-2 直流电机(电机专项教程) 4-1-2 直流电机主要参数尺寸参数额定电压额定电流空载转速 如何控制直流电机有刷直流电机转向控制H桥电路控制转向 如何控制电机转速PWM控制电机转速 4-1-2 直流电机 之前学习了有刷直流电机的基本结构个工作原理&#xff…

[数据集][图像分类]电力场景电力线固定处连接处腐蚀有鸟巢分类数据集1279张3类别

数据集类型:图像分类用,不可用于目标检测无标注文件 数据集格式:仅仅包含jpg图片,每个类别文件夹下面存放着对应图片 图片数量(jpg文件个数):1279 分类类别数:3 类别名称:["corrosion","nes…

SparkSQL遵循ANSI标准

ANSI简介 ANSI Compliance通常指的是遵循美国国家标准学会(American National Standards Institute, ANSI)制定的标准。在计算机科学和技术领域,这通常涉及到数据库管理系统(DBMS)对于SQL语言的支持程度。 ANSI为SQL…

FreeRTOS 快速入门(二)之内存管理

目录 一、概述二、FreeRTOS 中管理内存的 5 种方法1、Heap_12、Heap_23、Heap_34、Heap_44.1 内存申请4.2 内存释放 5、Heap_5 三、Heap 相关的函数1、pvPortMalloc/vPortFree2、xPortGetFreeHeapSize3、xPortGetMinimumEverFreeHeapSize4、malloc 失败的钩子函数 一、概述 在…

CDGA|数据治理,就像在厨房里炒一盘好菜

数据治理,就像在厨房里炒一盘好菜,是一门既讲究技巧又注重细节的艺术。在这个信息爆炸的时代,数据如同食材,是支撑企业决策、优化运营、驱动创新的基石。而数据治理,则是将这些纷繁复杂的数据“食材”精心挑选、清洗、…

使用NPS搭建socks5隧道 | 内网穿透

在看春秋云镜靶场的WP时碰到用NPS来做代理的,这里刚好看到这篇文章:https://www.cnblogs.com/cute-puli/p/15508251.html,学习一下。 GUI界面管理更加方便。 实验环境 网络拓扑: kali: VMnet1(公网&…

ORB-SLAM3演示及运行

ORB-SLAM安装完成后的运行案例 ros启动 1、修改双目部分文件,主要是图象订阅话题名称 因为我是用的双目灰度相机,需要修改ORB_SLAM3/Examples/ROS/ORB_SLAM3/src下的 ros_stereo.cc和 ros_stereo_intertial.cc. 把订阅的话题改为自己系统发布的图象…

盲盒小程序开发,创新市场收益渠道

对于年轻消费者来说,盲盒是一个具有超强惊喜感和刺激性的消费方式,盲盒也在各大社交平台迅速火爆,线下门店更是上演“大长龙”式的排队景观,盲盒成为了一个具有非常大发展前景的行业! 一、线上发展 盲盒的销售渠道除…

矩阵和神经网络的优雅与力量-《Python神经网络编程》读后感

《Python神经网络编程》是一本非常优秀的神经网络入门编程书,作者手把手从安装环境开始,每一行代码都是在树莓派上就能运行的,甚至可以说不需要什么第三方库,仅仅用了矩阵的优雅和力量,就能够在树莓派上顺利的运行。 …

并发编程 | CountDownLatch是如何控制线程执行流程

CountDownLatch 是 Java 并发编程中的一个同步工具类,这个工具经常用来用来协调多个线程之间的同步,下面我们就来一起认识一下 CountDownLatch。 CountDownLatch介绍 应用场景 CountDownLatch主要是用于让一个或多个线程等待其他线程完成某些操作后再…

鸿蒙Harmony实战开发知识:“UIAbility组件的3种启动模式”

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式: singleton启动模式 singleton启动模式为单实例模式,也是默认情况下的启动模式。 每次调用startAbility()方法时,如…

windows下的redis7.0.11的下载

天,我找redis7.0.11的安装包就找了好久,终于给我找到了。市面上好多是linux版本的。 安装包:Release Redis 7.0.11 for Windows zkteco-home/redis-windows GitHub 解压之后是这样的。 然后你要测试能不能启动: 1、指定配置文…

复现DOM型XSS攻击(1-8关)

目录 第一关:​ 分析代码: 第二关: 分析代码: 第三关: 分析代码: 第四关: 分析代码: 第五关: 分析代码: 第六关: 分析代码&#xff1…

volatitle-线程并发-小白一文速通

目录 简而言之 专业术语解释 1、可见性 原理简介 原理图解 其他方式 2、原子性 原理简介 结合实例分析 3、有序性 原理简介 线程安全问题 Volatile效果 1、保证可见性 2、保证有序性 3、无法保证原子性 Volatile底层的实现机制(重点掌握) 经典案例 Java双重检…

朗致面试----Java开发、Java架构师

一共三轮面试。第一轮是逻辑行测,第二轮是技术面试(面试官-刘老师),第三轮是CTO面试(面试官-屠老师)。第三轮Coding做完之后共享屏幕讲一个你自己负责过的项目(请提前准备好架构图,开…

【AI趋势8】具身智能

随着科技的飞速发展,人工智能(AI)已经从概念走向实际应用,深刻影响着我们的生产和生活方式。在众多AI技术载体中,人型机器人凭借其独特的类人形态和全身自由度,成为人工智能领域的终极载体之一。本文将深入…

系列:水果甜度个人手持设备检测-产品规划汇总与小结

系列:水果甜度个人手持设备检测 -- 产品规划汇总与小结 背景 接上一篇,我们从假设的用户需求出发,规划输出软硬件结合的一体化产品。在产品中搭载近红外光谱(NIR)、超声检测的模块,并针对不同的瓜果类型&#xff0c…

【开源分享】CommLite 跨平台文本UI串口调试助手

文章目录 1. 简介2. 编译3. 使用4. 借鉴&思考参考 1. 简介 CommLite是一款基于CSerialPort的文本UI串口调试助手。 gitee仓库 2. 编译 编译非常简单,按照文档操作即可: $ git clone --depth1 https://github.com/itas109/CommLite.git $ cd Comm…