【操作系统篇】什么是分段和分页

在这里插入图片描述

什么是分段和分页

  • ✔️ 典型解析
    • ✔️分页
    • ✔️页表
    • ✔️分段(Segmentation)
    • ✔️ 分段和分页的区别
    • ✔️分页和分段哪个更耗资源
    • ✔️它们对性能的影响是怎样的
    • ✔️分段和分页分别适合什么场景


✔️ 典型解析


在操作系统中,分段和分页是两种不同的内存管理技术,用于管理和分配进程的内存空间。它们的主要目标是提供对物理内存的有效和安全访问,但它们采用了不同的方法来实现这一目标。


✔️分页


大部分虚拟内存系统都会使用分页技术。分页技术把物理内存按照固定大小分为页面(一般是4KB)。通过分页,我们可以更细粒度的管理物理内存和虚拟空间的映射,也可以更高效的利用物理内存。对于一个64KB的虚拟地址和32KB的物理地址来说,如下图所示:


在这里插入图片描述

如果用户访问到的虚拟地址还没有分配物理地址,那么系统就会发生缺页中断。将需要访问的页面装载到页框中,修改MMU中的映射关系,重新返回。


✔️页表


对于虚拟地址和物理地址的映射关系的存储,我们一般是通过页表来完成的。页表中会记录虚拟地址的虚拟页号和偏移量,以及其对应的实际页框号。从数学角度说,页表是一个函数,它的参数是虚拟页号,结果是物理页框号。


同时,因为增加了页表的映射,中间就一定会有空间和时间的损耗,有两个问题:


1 . 虚拟地址到物理地址的映射需要时间,这个时候就需要引入快表 (TLB)加速页表的访问。


2 . 如果虚拟地址空间很大,页表也会很大,可能会浪费空间。假设64it的操作系统,虚拟地址的大小为2 ^ 64,如果每页是4KB,那么需要的记录数就是2^ 64/2^ 12=2^52项。同时,因为每个进程都有一个独立的虚拟地址,所以每个进程都有自己独立的页表,那么这种情况下,记录的项目就会变得非常多。


对于第二种情况,我们可以采用多级页表和倒排页表的方式来解决。


多级页表的核心就在于避免把所有的页表全部保存在内存中,如果是不需要的页表,就不会保留。倒排页表常用于64bit的计算机中,往往需要和TLB结合使用才可以。


✔️分段(Segmentation)


有了分页之后,一个进程就可以享受很大的,独立的虚拟地址了。但是有一个问题我们没有考虑到,个进程中一定会包含代码,常量,以及代码在运行时所产生的变量。那么,用户的程序如何保证这些代码所在的空间不和代码运行时候的堆栈空间冲突呢?


如果我们知识简单的将虚拟内存按照一维的方式将空间分给这些堆栈,代码片段等,就很难保证空间的有效利用,如下图所示:


在这里插入图片描述

此时,我们发现,程序的堆栈空间已经用完了,但是代码段还有很多没有用。这个时候就需要程序手动管理这些一维空间,无疑的比较复杂且困难的。


所以就有了分段技术的产生。它可以让每个段独享一部分可以自然增长的空间,且和其他段相互隔离如下所示:


在这里插入图片描述


✔️ 分段和分页的区别


在这里插入图片描述

✔️分页和分段哪个更耗资源


分页和分段在资源消耗方面有各自的特点,具体取决于使用场景和需求。


分段在某些方面可能更耗资源。例如,在分段系统中,程序员在编程和使用上有多方面的要求,而且存在外碎片问题,这可能导致性能损失。此外,分段中一个进程可占用多个“分区”,不要求一个进程占用的多个“分区”连续,这增加了管理的复杂性。


然而,分段克服了分页存在的问题,如数据结构的动态增长、动态链接、保护和共享等。因此,分段在某些方面可能更高效。


分页的优点在于没有外部碎片,最后一页可能有内碎片但不大。程序不必连续存放,便于改变程序占用空间大小。此外,分页可以缩短查找时间,提高访问速度。但分页可能会产生小的内碎片,且无论数据有多少,都只能按照页面大小分配,可能造成浪费。


综上所述,分段和分页各有优缺点,哪种更耗资源取决于具体的应用场景和需求。在实际使用中,它们通常会结合使用,以实现更好的内存管理功能。


✔️它们对性能的影响是怎样的


分段和分页对性能的影响如下:

分段可以提高内存利用率,并方便实现信息的共享和保护。它允许程序按逻辑模块进行划分,方便了程序员的开发和使用。然而,分段也存在一些问题,如无法利用碎片、必须搬移内存等,这可能导致性能损失。


分页可以缓解内存压力,设计简单且效率高。它没有外部碎片,最后一页可能有内碎片但不大。程序不必连续存放,便于改变程序占用空间大小。此外,分页可以缩短查找时间,提高访问速度。但分页可能会产生小的内碎片,且无论数据有多少,都只能按照页面大小分配,可能造成浪费。


分段和分页各有优缺点,对性能的影响取决于具体的应用场景和需求。在实际使用中,它们通常会结合使用,以实现更好的内存管理功能。


✔️分段和分页分别适合什么场景


分段和分页各有适用的场景:

分段适合于处理具有不同逻辑意义的程序,主要为了实现虚拟内存,获得更大的地址空间,从而使程序和数据可以被划分为逻辑上独立的地址空间,并有助于共享和保护。分段可以更好地实现共享,根据用户的需要划分,因此段对用户是可见的。

分页适合于处理大型程序,其中内存需求很高且需要随时调整内存大小的情况。分页是为了实现非连续分配,以便解决内存碎片问题,或者说分页是由于系统管理的需要,其对用户是透明的。

总的来说,分段和分页都是为了更好地管理内存和提高内存利用率,但它们的实现方式和主要目的有所不同。在实际使用中,它们通常会结合使用,以提供更好的内存管理功能。

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

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

相关文章

在做题中学习(43):长度最小的子数组

LCR 008. 长度最小的子数组 - 力扣(LeetCode) 解法:同向双指针-------滑动窗口算法 解释:本是暴力枚举做法,因为全部是正整数,就可以利用单调性和双指针解决问题来节省时间 思路: 如上面图&am…

ES -极客学习

Elasticsearch 简介及其发展历史 起源 Lucene 于 Java 语言开发的搜索引擎库类创建于 1999 年,2005 年成为 Apache 顶级开源项目Lucene 具有高性能、易扩展的优点Lucene 的局限性 只能基于 Java 语言开发类库的接口学习曲线陡峭原生并不支持水平扩展原生并不支持水…

如何找到 niche 出海细分市场的 IDEA

先说结论就是:看榜单 Why:为什么看榜单? 大家会问为什么?原因很简单: 熟读唐诗三百首,不会作诗也会吟不天天看榜单上相关的优秀同行,你想干啥 心法就是下苦功夫坚持,量变引起质变…

Nginx 文件名逻辑漏洞(CVE-2013-4547)

目录 Nginx 文件名逻辑漏洞(CVE-2013-4547) 1.cd到CVE-2013-4547 2.执行docker-compose up -d 3.查看靶场是否开启成功 4.访问浏览器 5.上传含有一句话木马的图片 6.burp抓包 7.在shell.gif加空格 8.放包 9.访问路径 10.继续抓包 11.在aa后面…

优化器(一)torch.optim.SGD-随机梯度下降法

torch.optim.SGD-随机梯度下降法 import torch import torchvision.datasets from torch import nn from torch.utils.data import DataLoaderdataset torchvision.datasets.CIFAR10(root./data, trainFalse, downloadTrue,transformtorchvision.transforms.ToTensor()) data…

2、Excel:基础概念、表格结构与常见函数

数据来源:八月成交数据 数据初探 业务背景 数据来源行业:金融行业(根据应收利息和逾期金额字段来判断) 可以猜测: 业务主体:某互联网金融公司(类似支付宝)也业务模式:给…

群晖安装MariaDB

群晖安装MariaDB 在套件中心安装MariaDB给root开启远程访问权限使用工具连接数据库 在套件中心安装MariaDB 给root开启远程访问权限 # ssh 登陆群晖后执行下面操作 $ mysql -uroot -p[数据库密码] $ use mysql; $ select User,authentication_string,Host from user; # 查看账…

一文弄懂电力系统101、103、104、modbus和61850规约

目录 101规约103规约104规约iec101、iec103和iec104有什么异同点?modbus规约61850规约 101规约 IEC 101(International Electrotechnical Commission 101)是一种用于远程监控和控制系统的通信协议。它是国际电工委员会(IEC&#…

【数据结构—排序—交换排序】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一、排序的概念及其运用 1、排序的概念 2、排序运用 3、 常见的排序算法 二、交换排序 1、冒泡排序 1.1算法讲解 1.2冒泡排序的实现: 1.2.1头文件的…

web前端开发技术复习问答题

目录 1.简述常见单标签和双标签有哪些? 2.常见块级元素和行级元素有哪些? 3.简述常见的列表有哪些?他们有什么区别? 4.简述超链接的href属性值如何设置?有什么区别 5.CSS基本语法 6. css中常见的引入方式有几种&…

找不到模块 “path“ 或其相对应的类型声明

src别名的配置 在开发项目的时候文件与文件关系可能很复杂,因此我们需要给src文件夹配置一个别名 // vite.config.ts import {defineConfig} from vite import vue from vitejs/plugin-vue import path from path export default defineConfig({plugins: [vue()],r…

程序员做私活赚外快的好地方,今天推荐几个

你们当程序员不会都拿着几千、万把块钱的死工资吧,今天为大家分享一些可以接私单的平台,我反正已经赚麻了。 如果你的工作相对没那么费时间,可以空闲的时候去接点私活。或者是还没有找工作之前,可以通过一些平台接一些兼职&#…

【STM32】PWR电源控制

1 PWR简介 PWR(Power Control)电源控制 PWR负责管理STM32内部的电源供电部分,可以实现可编程电压监测器和低功耗模式的功能 可编程电压监测器(PVD)可以监控VDD电源电压,当VDD下降到PVD阀值以下或上升到P…

167. 木棒(dfs剪枝,经典题)

167. 木棒 - AcWing题库 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过 50 个长度单位。 然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度。 请你设计一个程序&#xff0…

回首2023,厉兵秣马,启航2024

目录 回首风波的20232023,感恩相遇暂停发文发文狂潮感恩有你备战2024学习之余跆拳道比赛做手工diy 学习心路年初学习伊始心路其后学习后来心路 必须看配图说明 未知的2024Flag 回首风波的2023 2023,感恩相遇 还记得,22年末,23年…

基于gitlab 12.8.0版本的完整镜像过程

目前已在一台服务器上安装了gitlab 12.8.0,并且稳定运行了有几年了,其上面也创建了大量的项目。目前要求对该gitlab及其上面的所有仓库做一个完整的镜像。具体操作过程如下: 1、确认现有的gitlab的版本号 2、到gitlab官网下载相同版本号的gi…

GitLab添加SSH key

SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。 SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。 利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。 ssh-keygen 从客户端来看,SSH提供两种级…

线程间的通信方式

线程间通信是多线程编程中非常重要的⼀个概念。在多线程编程中,有时候需要让线程之间进⾏数据交换、协作⼯ 作。以下是几种线程间通信的方式: 共享内存:线程之间通过访问同⼀块共享内存区域来实现数据交换 消息队列:⼀个线程向消…

寒假刷题记录,第一天(重刷题目)

PTA甲级&#xff1a; 1003 Emergency 经典迪杰斯特拉算法 #include<iostream> #include<cstring>using namespace std;const int N 510 , INF 0x3f3f3f3f; int dist[N] , cnt[N] , g[N][N]; int helper[N] , way[N]; bool st[N]; int n , m , c1 , c2;int mai…

Triple Fault的捕获与处理

前面有文章说Triple Fault无法捕获&#xff0c;经过几天资料搜寻&#xff0c;对于这个问题还是有办法的。如果可以&#xff0c;对于捕获Triple Fault&#xff0c;最简便的方法就是使用虚拟机来进行操作&#xff0c;这样在发生Triple Fault时影响的只是虚拟机&#xff0c;在host…