[操作系统] 分段

操作系统 内存管理 分页/分段/段页式管理 前言 上篇介绍了内存管理的连续分配方式,本文介绍非连续分配方式。 非连续分配方式 连续分配方式的缺点: 固定分区分配:缺乏灵活性,会产生大量内存碎片,内存的利用率极低。 动态分区分配:会产生很多外部碎片,虽然可以用紧凑技术来处理,但是紧凑的时间代价很高。 非连续分配 如果可以将一个进程分散的装入到许多不相邻的分区中,便可以充分的利用内存,而无需再进行紧凑。于是变产生了非连续分配方式。 连续分配:为用户进程分配的是一个连续的内存空间; 非连续分配:为用户进程分配的是一些分散的内存空间; 分页式存 阅读详情

分段



1. 为什么要使用分段

在分页系统中,虚拟内存都是一维的,虚拟地址从0到最大地址,一个地址接着另一个地址。但对于某些问题,例如,程一个程序可能存在多个表:程序正文表、符号表、变量表、语法表和堆栈表,其中的某几个表可能不可预计的增长或缩小。在一维存储器中,这5个表只能被分配到虚拟地址的连续块中。

分页

很有可能,随着了程序的运行,两个表碰撞在一起,无法继续运行,但其实还有许多可用的空间。

所以我们可以在机器上使用多个互相独立的称为段的地址空间。每个段由一个从0到最大的线性地址序列构成。各个段的长度可以是0到某个允许的最大值之间的任何一个值。不同段的长度可以不同,并且可以在运行期间动态改变。

因为每个段都是独立的地址空间,所以它们的增长和减小不会影响其他的段。可以把段看成一个二维存储器,想要访问其中的地址,需要提供段号和段内地址。与页不同的是,段是一个逻辑实体。

除此之外,我们可以将程序中的每个过程放在不同的段中,这样即使在后来的版本中,过程改变了大小,也不会对其他过程造成影响。但在一维地址中,一个过程的修改,就会造成其他过程修改地址。

分段还有助于进程间的共享过程和数据,在分段中可以将共享库单独放入一个段中,从而不需要每个进程在地址空间中保存一份。并且每个不同的段可以有不同的保护类型。

分页与分段

2. 分段与分页的结合

如果一个分段过大,甚至大到无法整个保存在内存中。我们就需要对这个段进行分页。

分段与分页结合

参考书目:现代操作系统第三版

【操作系统】第三章内存管理之——非连续分配管理方式(分页管理、分段管理) 前言: 连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。 如果允许将一个进程直接分散地装入到许多不相邻接 的分区中,则无须再进行“紧凑”。基于这一思想而产生了离散分配方式。如果离散分配的 基本单位是页,则称为分页存储管理方式;如果离散分配的基本单位是段,则称为分段存 储管理方式。 在分页存储管理方式中,如果不具备页面对换功能,则称为基本的分页存储管理方式,或称为纯分页存储管理方式,它不具有支持实现虚拟存储器的功能,它要求把每个作业全 部装入内存后方 阅读详情

相关推荐

操作系统存储管理之分段存储

需求从固定分区到动态分区,从分区方式到分页方式发展提高了主存空间利用率。 而分段存储管理的引入,则满足用户(程序员)编程和使用上的要求,这些要求其它各种存储管理技术难以满足。需求解析: 在分页存储管理中,经连结编辑处理得到了一维地址结构的可装配模块,这是从0开始编址的一个单一连续的逻辑地址空间,虽然操作系统可把程序划分成页面,但页面与源程序无逻辑关系,也就难以实现对源程序以模块为单位进行分配、共享

总结沉淀 6593

操作系统学习笔记十三(分段)

导图 1.分段机制的引入 在分段存储管理的系统中,程序员使用二维的逻辑地址,一个数用来表示段, 另一个数用来表示段内偏移。 相对于分页机制,引入分段机制的主要目的是易于实现信息共享。 引入分段机制的优点:方便编程、分段共享、分段保护、动态链接,以及动态空间的增长。 2. 分段的概念 进程的地址空间被划分成若干个段。 每个段定义了一组逻辑信息,每个段的大小由相应的逻辑信息组的长度确定,段的大小不一样,每个段的逻辑地址从0开始,采用一段连续的地址空间。 系统...

zheng2780071070的博客 2877

操作系统——内存管理——分段和分页

一、 物理地址和逻辑地址 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址。在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端。这些数字被北桥(Nortbridge chip)映射到实际的内存条上。物理地址是明确的、最终用在总线上的编号,不必转换,不必分页,也没有特权级检查(no translation, no paging, no privilege c...

zhaohong_bo的专栏 2496

《操作系统导论》 知识总结 第16章 分段

利用基址和界限寄存器将不同进程重定位到不同的物理内存区域存在一个问题:栈和堆之间,有一大块“空闲”空间。

jzb的博客 1290

内存管理:操作系统的分段

因此,对于正在执行的进程,CPU 必须将不止一页加载到帧中,以便完整的相关代码可以执行。图像分割是将图像划分为多个区域或片段的过程,每个区域或片段代表图像的有意义的对象或部分。:系统数据段包含一个段的详细信息,例如进程的当前目录、进程的用户 ID (UID)、进程的组 ID (GID)、文本大小、数据和堆栈等。分页(将内存划分为大小相等的页面)更加高效,因为它还可以作为一种内存保护方式,因为运行的程序只能访问进程的指定页面。或者我们可以说,正在运行的程序只能访问属于当前正在执行的进程的段。

新华编程特战队 295

操作系统领域分段技术的发展趋势

本文旨在全面解析操作系统中的分段技术,包括其基本原理、实现方式、优缺点以及在现代和未来操作系统中的发展趋势。我们将重点关注分段技术在内存管理中的作用,以及它如何与其他内存管理技术(如分页)协同工作。文章将从分段技术的基本概念开始,逐步深入到其实现原理、现代应用和未来趋势。我们将通过代码示例、架构图和实际案例来帮助理解这一技术。分段(Segmentation):一种内存管理技术,将程序的内存划分为逻辑上相关的段,如代码段、数据段、堆栈段等。段描述符(Segment Descriptor)

操作系统内核探秘的博客 850

【操作系统导论】内存篇——分段

最佳适应算法和最坏适应算法的开销较大。首次适应算法和邻近适应算法的开销较小;

Skylar Lin的博客 1611

操作系统——分段式内存管理

操作系统——分段式内存管理分页式的优点从计算机的角度出发,提高了内存的利用率,提升了计算机的性能,以分页通过硬件机制实现,对用户透明分段式的优点考虑到用户和程序员,已满足方便编程、信息保护和共享、动态增长、动态链接等多方面需求分段式内存管理分段:按照用户进程中的自然段划分逻辑空间,例如:用户的进程由主程序、两个子程序、栈和一段数据组成,五部分划分为 5 个段,每段都从 0 开始编址,并分配一段连续的

MISAYAONE的博客 8204

操作系统导论——第16章 分段

到目前为止,我们一直假设。利用基址和界限寄存器,操作系统很容易将不同进程重定位到不同的物理内存区域。。从图16.1 中可知,如果我们,那么。因此,另外,如果剩余物理内存无法提供连续区域来放置完整的地址空间,进程便无法运行。这种基址加界限的方式看来并不像我们期望的那样灵活。因此怎样支持大地址空间,同时栈和堆之间(可能)有大量空闲空间?在之前的例子里,地址空间非常小,所以这种浪费并不明显。但设想一个32位(4GB)的地址空间,通常的程序只会使用几兆的内存, 但需要整个地址空间都放在内存中。

Zhang_Qin123的博客 871

操作系统课程设计1、分页方式的地址换算2、分段方式的地址换算

一、 课程设计目的 本课程设计是学生学习完《计算机操作系统》课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。 二、课程设计的内容 1、分页方式的地址换算 2、分段方式的地址换算 3、段页式的地址换算 三、程序运行 1、 分页式地址转换: 数据: 逻辑地址:223、页面大小:23 2、 分段式地址转换 数据: 逻辑地址段号:223、段内地址:23 3、 段页式地址换算 逻辑地址的段号:2、页号:3 四、程序源代码 #include #include int page(int A,int L ); int Segment(int sn,int sl); int SegPagt(int sn,int pn,int pd); typedef struct segtable { int segf[256]; int segl[256]; }segtable; struct segtable st; typedef struct segpagt { int segf[256]; int segl[256]; int ptl[256]; int pt[256]; int pf[256]; int pl; }segpagt; struct segpagt sp; int main() { int code; int pl,pa,sn,sd,pd,pn; //const int ptl ; int temp; do{ printf("----------------地址换算过程----------------------------\n\n"); printf(" 1.分页式地址换算\n"); printf(" 2.分段式地址换算\n"); printf(" 3.段页式地址换算\n"); printf(" 4.结束运行\n\n"); printf("----------------------------------------------------------\n"); printf("请输入您的选择:"); scanf("%d",&code); switch(code) { case 1:{ printf("注意:请演示设定页表长度小于\n"); printf("请输入换算的逻辑地址:\n"); scanf("%d",&pa); printf("页面大小(B):\n"); scanf("%d",&pl); page(pa,pl); }break; case 2:{ printf("请演示设定段表长度小于\n"); printf("请输入逻辑地址的段号:\n"); scanf("%d",&sn); printf("段内地址:\n"); scanf("%d",&sd); Segment(sn,sd); }break; case 3:{ printf("预设定段表长为,页面大小为\n"); printf("请输入逻辑地址的段号:\n"); scanf("%d",&sn); printf("页号:\n"); scanf("%d",&pn); printf("页内地址:\n"); scanf("%d",&pd); SegPagt(sn,pn,pd); }break; case 4:{}break; } }while (code<4); } int page(int A,int L) { int d,P,kd,i; int WD; int PT[256]; for(i=1;iL) printf("页号大于页表长度,越界中断\n\n");//如果页号大于页表长度,输出越界中段 else { printf("页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n",P,d);//输出页号和页内地址 kd=PT[P];//根据页号随机产生快号 printf("根据页号%d得到块号%d\n",P,kd); WD=kd*L+d;//计算物理地址的公式 printf("物理地址=块号%d*页面大小%d+页内地址%d\n",kd,L,d);//输出物理地址=块号*页面大小+页内地址 printf("逻辑地址%d换算后的物理地址为%d\n\n",A,WD);//输出物理地址的结果 return (0); } }

LABVIEW学习之MODBUS-TCP通讯

LABVIEW学习之MODBUS-TCP通讯 1,MODBUS-TCP通讯介绍: MODBUS通讯是工业上面经常用到的一种通讯协议。该协议的原理及介绍不在此累述,下面直接介绍LABVIEW对此协议的应用。 2,MODBUS通讯所需的函数: 安装了DSC模块之后可以在数据通信内找到相关函数 3 ,主VI 主要思路就是使用状态机来进行连接 读取 写入 断开。使用枚举类型来选择状态: 1,连接 2,写入多个M继电器: 3,写入单个M继电器 4,写入双字节D...

风动9527的博客 2万+

操作系统中的分页和分段管理

就像图书馆的书架被分成固定大小的格子,每本书拆成等大的页存放。找书时通过目录(页表)快速定位格子位置,不需要的书可以暂时收进仓库(硬盘)腾出空间。操作系统的内存管理中的分页和分段是两种核心技术,它们分别以不同方式解决内存分配和程序运行的问题。比如把小说、工具书、笔记本分别放进不同的抽屉,每个抽屉大小不同,但内部连续。现代系统(如Linux、Windows)主要采用分页,但结合了分段的部分特性(如权限控制)。操作系统通过两者的结合,既保证了内存利用率,又兼顾了程序逻辑的清晰性。

2301_79711797的博客 627

并网逆变器学习笔记5---三电平DPWM

三电平DPWM

圆桌骑士的博客 1万+

计算机操作系统 - 分段

大家好呀!我是小笙,本章我主要分享计算机操作系统 - 分段学习总结,希望内容对你有所帮助!!

Al_tair的博客 1130

瑞芯微RV1109平台GT911触摸屏驱动调试记录1

很明显这里可以看到系统已经配置了i2c-0、i2c-1、i2c-3、i2c-4、i2c-5,当开机的时候系统已经将相应的I2C节点注册成功了,说明I2C部分是没有问题的。

bingdund的博客 297

Agent Harness Engineering: AI Agent 执行管控与安全沙箱 原理与最佳实践

我们正站在计算范式转移的历史节点上。2024-2026 年间,AI 系统从被动的内容生成器(Generative AI)演变为主动的行动执行者(Agentic AI)。这一转变的根本特征是:根据 2026 年初的行业数据:然而,能力的提升伴随着风险的指数级增长。2024-2026 年间发生的多起标志性安全事件揭示了 Agent 系统的脆弱性:案例 1:Slack AI 数据外泄事件(2024 年 8 月)案例 2:制造业供应链攻击(2026 年 Q3)案例 3:Arup 深度诈骗案(2026 年 9 月)这

AI天才研究院 1667

操作系统-分段存储管理

分段存储管理是一种以程序逻辑单元为单位进行内存管理的方案。它通过引入段表、二维逻辑地址和越界检查,实现了对程序结构的自然映射和有效的内存保护。其最大的挑战是外部碎片问题,这导致了它在现代系统中通常与分页结合使用,形成了功能强大且高效的段页式内存管理架构。

Lowjin_的博客 847

百度百科 X-Bk-Token 算法还原

百度百科 X-Bk-Token 算法还原

自成背后的博客 1万+

操作系统的内存管理机制--分页和分段 及 分页和分段的区别

1.什么是分页机制 操作系统为了高效管理内存,减少内存碎片,所以采用分页机制 逻辑地址和物理地址分离的内存分配管理方案 程序的逻辑地址划分为固定大小的页(Page) 物理地址划分为同样大小的帧(Frame) 通过页表对应逻辑地址和物理地址 图解:左边是用户程序,对于用户程序关心的是逻辑地址,通过页表来获取物理地址。页表里面映射了逻辑地址和物理地址的对应关系,通过中...

晓康的博客 5403

【华为OD机试真题】141、租车骑绿岛 | 机试真题+思路参考+代码解析(C++、Java、Py、C语言、JS)

题目描述 >部门组织绿岛骑行团建活动。租用公共双人自行车,每辆自行车最多坐两人,最大载重M。 给出部门每个人的体重,请问最多需要租用多少双人自行车。

KJ.JK 1959

RK3588 实战级 YOLOv5 Android 全解析:NPU 量化 + 多线程 + 跟踪算法,源码一次买齐

本文将带你完成一个完整的AI视觉项目:在搭载RK3588芯片的Android开发板上运行实时目标检测与跟踪应用。实战目标:成功运行官方YOLOV5摄像头实时检测案例技术深度:深入理解RKNN开发框架和源码实现核心技能:掌握NPU推理、多线程并发、目标跟踪等关键技术。

FJN110的博客 156

操作系统分页、分段

操作系统

m0_50435987的博客 960

Rockchip开发系列 - 3.4.GPIO扩展芯片AW95xx和PCA953X(2)

Rockchip开发系列 - 3.3.GPIO扩展芯片AW95xx和PCA953X(2)

fulinux的博客 999

操作系统_保护模式和分段机制

操作系统_保护模式和分段机制一,前置知识二,操作系统的中的不同模式实模式保护模式新名词引入量汇总三,分段分页存储管理机制分段存储管理机制1.段概述>2.分段机涉及4个关键内容:2.1逻辑地址转换物理地址2.2段描述符2.3全局描述符表2.4选择子保护模式下的特权级1.概述>2.内核指令数3.数据段选择子->DS和CS段寄存器4.CPU保护内存过程CPL、RPL和DPL总结新名词汇总 一,前置知识 intel_80386基本架构 二,操作系统的中的不同模式 实模式 概述> 在bootl

个人笔记 1693

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

现代操作系统中程序为什么要分段

  现在PC平台的文件格式,主要是Windows下的PE和Linux的ELF,它们都是COFF格式的变种。COFF在目标文件里引入了段机制,不同的目标文件可以拥有不同数量及不同类型的段。   Linux已经基本弃用了段式内存管理,段基址都为0,大小为整个虚拟空间,直接把整个虚拟内存看成一整个段,那么编译后的目标文件中为什么还要分段呢。 主要有以下几个原因: 数据和指令被划分到两个虚拟内存区域,方便进行访问权限控制,防止程序指令被有意无意的改写。 对于现代CPU来说,有着极为强大的缓存体系,一般CPU的缓存

qq_40012479的博客 2124

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

《操作系统导论》第16章读书笔记:分段

到目前为止,我们一直假设将所有进程的地址空间完整地加载到内存中。利用基址和界限寄存器,操作系统很容易将不同进程重定位到不同的物理内存区域。但是,对于这些内存区域,你可能已经注意到一件有趣的事:栈和堆之间,有一大块“空闲”空间。从图 16.1 中可知,如果我们将整个地址空间放入物理内存,那么栈和堆之间的空间并没有被进程使用,却依然占用了实际的物理内存。因此,简单的通过基址寄存器和界限寄存器实现的虚拟内存很浪费。另外,如果剩余物理内存无法提供连续区域来放置完整的地址空间,进程便无法运行。

小勇博客 1277

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: [操作系统] 分页系统的实现问题
下一篇: [操作系统] 文件系统基本概念
LLLZHLIU
博客等级 码龄10年 19粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值