3.1_10 段页式管理方式

news2025/1/12 10:43:50

3.1_10 段页式管理方式

image-20240315104635671

(一)分页、分段的优缺点分析

image-20240315104807033

image-20240315104915465

  基于分页、分段的优缺点,人们想出了将分页、分段结合,就产生了段页式管理。段页式管理具备了分页、分段各自的优点。

(二)分段+分页=段页式管理

image-20240315105135002

  将进程按逻辑模块分段,再将各段分页(如每个页面4KB)。

  再将内存空间分为大小相同的内存块/页框/页帧/物理块。

(三)段页式管理的逻辑地址结构

  分段系统的逻辑地址结构由段号和段内地址(段内偏移量)组成。如:

image-20240315110104166

  对于段页式管理,我们知道,一个进程在被分段之后,还会被再次分页。

  段页式系统的逻辑地址结构由段号、页号、页内地址(页内偏移量)组成。如:

image-20240315110221441

  此处的“页号+页内偏移量”其实就是分段管理当中的“段内地址”。是对“段内地址”进行再拆分的一次结果。

  段号的位数决定了每个进程最多可以分几个段

  页号位数决定了每个段最大有多少页

  页内偏移量决定了页面大小、内存块大小是多少

  在上述例子中,若系统是按字节寻址的,则

  段号占16位,因此在该系统中,每个进程最多有 2 16 = 64 K 2^{16}=64K 216=64K个段。

  页号占4位,因此每个段最多有 2 4 = 16 2^4=16 24=16页。

  页内偏移量占12位,因此每个页面大小(也即每个内存块大小)为 2 12 = 4096 = 4 K B 2^{12}=4096=4KB 212=4096=4KB

  在段页式存储当中,“分段”对用户是可见的,程序员编程时需要显式地给出段号、段内地址。而将各段“分页”对用户是不可见的。系统会根据段内地址自动划分页号和页内偏移量。——即,对于用户来说,他只需向系统提供:段号、段内地址。

  因此段页式管理地址结构是二维的

  与之相应的,段式管理的地址结构也是二维的;页式管理的地址结构是一维的。

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

(四)段表、页表

  进程当中的各个段会分别对应段表当中的一个段表项。

image-20240315111601714

  由于内存块号的大小是固定的,因此,通过查询段表项,找到页表存放的块号,就能找到页表存放的地址。

  如上图,我们要查找0号段的段表项,可知0号段的页表存放在内存中的1号块的位置。从而就可以从内存当中读出0号段对应的页表信息。

  此外,由于0号段大小是7KB,而每个页面的大小是4KB,所以它会被分成两个页面。相应地,这两个页面就会依次对应0号段的页表当中的两个页表项。每一个页表项记录了每一个页面对应的内存块号是多少。

  每个段表项由段号、页表长度、页表存放块号(页表起始地址)组成。每个段表项长度相等,段号是隐含的

  每个页面对应一个页表项,每个页表项由页号、页面存放的内存块号组成。每个页表项长度相等,页号是隐含的。

  在段页式管理中,段表的结构,与段式管理中的段表是不一样的。段式管理当中的段表记录的是(段号, 段的长度, 段的起始地址);而段页式管理当中的段表记录的是(段号, 页表长度, 页表存放块号)。而对于页表而言,段页式管理、分页管理的页表结构基本上一样,都是记录页号到物理块号的映射关系。

  此外,无论是段表还是页表,由于每个段表项/页表项的大小是相等的,因此无论是段号、页号,都是隐含的。

  一个进程会对应一个段表,但是一个进程有可能会对应多个页表。

(五)地址转换

image-20240315113428763

  首先,系统当中也会有一个“段表寄存器”的硬件。在进程上处理机运行之前,会从PCB当中读出段表始址F和段表长度M。

  第一步,根据逻辑地址得到段号、页号、页内偏移量。

  第二步,要把段号和段表长度进行对比,检查是否越界。

  第三步,根据段表始址、段号,从而计算出这个段号对应的段表项在内存当中的存放位置。就找到了我们想要找的段表项。

  第四步,需要注意的是,由于各个段的长度是不一样的,所以各个段在分页之后,可能分为数量不等的不同页面。(比如有的段长一些,就会分为2个页面;有的段短一点,只需1个页面)因此,这个地方我们也需要对页号的合法性进行检查,看看页号是否越界。——总之,通过段表项,我们读出了这个段对应的页表,存放在内存块的哪个位置,从而读出该页表。

  第五步,已知这个段对应的页表信息,以及页号是多少,就可以找到相应的页表项,从而找到这个页面对应的内存块号,再结合页内偏移量,即可得知最终的物理地址。


  因此,在段页式存储管理当中,进行逻辑地址的转换,总共需要三次访存。

  第一次访存——访问内存当中的段表;

  第二次访存——访问内存当中的页表;

  第三次访存——访问最终的目标内存单元。

  之前也介绍过,在分页、分段管理方式中,也都是可以引入快表机构的。

  同样地,在段页式管理方式中,也可以引入快表机构,用段号和页号作为查询快表的关键字。若快表命中,则仅需一次访存。

总结

image-20240315113928047

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

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

相关文章

JavaScript 中实现请求并发控制

文章目录 浏览器并发请求限制数(图)实现代码三方插件 假设有 30 个待办任务要执行,而我们希望限制同时执行的任务个数,即最多只有 3 个任务能同时执行。当正在执行任务列表 中的任何 1 个任务完成后,程序会自动从 待办…

Flink程序员开发利器本地化WebUI生成

前言 在flink程序开发或者调试过程中,每次部署到集群上都需要不断打包部署,其实是比较麻烦的事情,其实flink一直就提供了一种比较好的方式使得开发同学不用部署就可以观察到flink执行情况。 上代码 第一步:开发之前需要引入在本…

【C/C++】C语言开发者必读:迈向C++的高效编程之旅

🧑 作者简介:阿里巴巴嵌入式技术专家,深耕嵌入式人工智能领域,具备多年的嵌入式硬件产品研发管理经验。 📒 博客介绍:分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方…

虚拟机 VMware下载及安装

centos官网:CentOS Mirror 虚拟机vmware官网:VMware 官网 一直点下一步就好了,有些配置按需修改即可 创建新的虚拟机 处理内核总数不能大于自己主机的逻辑处理器 安装操作系统:引入centos镜像 然后就可以点击开启此虚拟机&#xf…

操作系统(OS)

文章目录 前言一、操作系统是什么?二、用户对资源的访问三、操作系统是怎么做到管理的? 前言 任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。冯诺依曼体系结构中的硬件单元提供的功能,这些硬件由操作系统来控制与管…

Rocket MQ 从入门到实践

为什么要使用消息队列,解决什么问题?(消峰、解藕、异步) 消峰填谷 客户端》 网关 〉 消息队列》秒杀服务 异步解耦 消息队列中的重要概念理解。(主题、消费组、队列,游标?) 主题&…

C++向函数传递函数

函数指针的定义格式为&#xff1a; <函数返回类型> (*指针变量)(<函数形参列表>) 例如&#xff1a; 下面定义了一个函数指针变量fp: double (*fp)(int);这意味着fp可以指向返回类型为double,参数类型为int的任何函数 比如&#xff1a; double func(int x){...}获…

基于springboot的购物商城管理系统

1.项目简介 1.1 用户简介 用户主要分为管理员和用户端&#xff1a; 管理员&#xff1a; 管理员可以对后台数据进行管理、拥有最高权限、具体权限有登录后进行首页轮播图的配置管理、商品的配置、新品家具商城的配置管理、、家具商城分类管理配置、家具商城详情商品管理、用户…

【Rockchip 安10.1 默认给第三方apk默认开启所有权限】

Rockchip 安10.1 默认给第三方apk默认开启所有权限 问题描述解决方法 郑重声明:本人原创博文&#xff0c;都是实战&#xff0c;均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Rockchip 3229 OS:Android 10.1 Kernel: 4.19 问题描述 有些第三方或者主界面&…

openEuler学习总结1(仅供学习参考)

华为的openEuler内核是源于Linux。 openEuler操作系统安装流程 第一步&#xff1a;开启虚拟化 第二步&#xff1a;安装一个虚拟化软件virtualbox 第三步&#xff1a;镜像 第四步&#xff1a;配置 设置虚拟机所在的目录 把网卡类型选择成桥接网卡 挂载镜像 设置完成&#xff0…

Git——修改历史记录详解

目录 Git1、修改历史信息1.1、启动互动模式1.2、修改Commit信息的影响1.3、取消Rebase 2、多个Commit合并位一个Commit3、一个Commit拆解成多个Commit4、在某些Commit之间插入新的Commit5、删除Commit6、调整Commit的顺序7、Revert指令7.1、取消Commit7.2、取消Revert1、再开一…

9. 综合案例-ATM系统 (1~7节知识综合练习)

ATM系统_综合大练习 今天的任务是对之前所有的学习的知识, 进行一个综合性的大练习. 老师说的好, 键盘敲烂 这个项目我写了大量的注释给大家参考, 如果有同学是跟着我的系列学习的, 一定动手练一练. 下面的代码只要按着敲是可以直接运行起来的, 我也把完整代码上传到了CSDN上…

17.WEB渗透测试--Kali Linux(五)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;16.WEB渗透测试--Kali Linux&#xff08;四&#xff09;-CSDN博客 1.ettercap简介与使用…

【技术类-04】python实现docx表格文字和段落文字的“手动换行符(软回车)”变成“段落标记(硬回车)”

作品展示&#xff1a; 背景需求&#xff1a; 把python实现docx表格文字和段落文字的“手动换行符&#xff08;软回车&#xff09;”变成“段落标记&#xff08;硬回车&#xff09;合并在一起统计数量 【技术类-02】python实现docx段落文字的“手动换行符&#xff08;软回车&a…

C语言 数据在内存中的存储

目录 前言 一、整数在内存中的存储 二、大小端字节序和字节序判断 2.1.练习一 2.2 练习二 2.3 练习三 2.4 练习四 2.5 练习五 2.6 练习六 三、浮点数在内存中的存储 3.1 浮点数存的过程 3.2 浮点数取的过程 总结 前言 数据在内存中根据数据类型有不同的存储方式&#xff0c;今…

ElasticSearch常见用法,看这一篇就够了(文末送书)

2024送书福利正式起航 关注「哪吒编程」&#xff0c;提升Java技能 文末送3本《一本书讲透Elasticsearch&#xff1a;原理、进阶与工程实践》 大家好&#xff0c;我是哪吒。 ElasticSearch是一款由Java开发的开源搜索引擎&#xff0c;它以其出色的实时搜索、稳定可靠、快速安…

PCIE问题定位000:PCIe需要的定位手段

1、PCIe debug环境说明 本文将以PCIe EP用户逻辑举例&#xff0c;描述PCIe可以添加哪些定位手段。 如图所示&#xff0c;PCIe IP作为endpoint与RC对接&#xff0c;用户实现了应用逻辑&#xff0c;与PCIe IP进行交互&#xff0c;交互信号中data格式为TLP报文格式&#xff0c;且…

单链表-合并两个集合的数

bb都在代码里哈哈哈哈 对了这里有个要求&#xff0c;不能破坏原来的链表 #include<iostream> #include<cstring> using namespace std;typedef struct LNode {int data;struct LNode* next; }LinkNode; void Create(LinkNode*& L, int a[], int l)//首先建链…

mongodb查询大全mongo语句-MongoDB语句与MySQL语句对比

mongodb查询大全mongo语句 以前版本官网:https://www.mongodb.com/ 现在版本2021年12月7日官网:https://www.mongodb.com 直通车:https://docs.mongodb.com 一、前言 虽然这些语句在开发当中不会使用,因为springdataMongoDB封装的非常完美了。但是这里的语句思想和关系型…

惯导系统静止初始化方法与代码实现并在gazebo中测试

惯导系统静止初始化方法与代码实现并在gazebo中测试 前言静止初始化方法惯导静止初始化实现代码在gazebo中进行测试 前言 在进行GPS加IMU的组合导航或者Lidar加IMU的组合导航时&#xff0c;用EKF或者ESKF的滤波方法时&#xff0c;需要提前知道惯导的测量噪声、初始零偏、重力方…