OS复习笔记ch7-1

存储的基本管理需求

重定位

重定位(Relocation):需要解决可执行文件中地址(指令和数据)和内存地址的对应。

一般有两种比较常见的重定位方式:

  • 静态重定位(static relocation):当程序被装入内存时,一次性实现逻辑地址到物理地址的转换,以后不再转换。
    • 缺乏保护,可能会被其他程序非法访问
    • 运行时无法再次定位:无法移动、对换
  • 动态重定位(Dynamic Relocation):在程序运行过程中要访问内存时再进行地址变换
    • 需要硬件支持
    • 需要OS参与

重定位是一个比较有意思的话题,在操作系统和计算机组成原理,甚至编译原理、汇编原理都会提到。简单地说,就是把我们代码中数据和指令的相对地址重新定位到实际内存地址,后面也会涉及到。

保护

即:未经许可,进程不能访问其他进程的内存位置(范围保护)

不过,在编译时不可能检查绝对地址,只能在运行时检查。


原因很简单,因为编译的时候我们拿不到实际的绝对地址,只有在实际运行的时候才会有,一般编译是得到机器代码,链接是得到逻辑地址,装入的时候才会确定实际的物理地址。

共享

即:允许多个进程访问同一内存区域(代码、数据)
举一个很简单的例子,绝大多数OS都有的剪贴板。当你复制了一份内容,你可以粘贴到微信,也可以粘贴到WPS甚至任何可以读取它的进程。

逻辑组织

逻辑组织可以看成是一种线性组织,一般是程序员自己为了模块化编程的需要组织起来的,所以称之为“逻辑”组织。有以下几个特点

  • 有一些模块可以修改,有些不能(类似int和const int)
  • 不同模块提供的保护不同(类似private和protected)
  • 进程之间共享模块(类似公共的函数/数据区)
  • 分段存储有助于逻辑组织(比如常见的代码段、数据段等)

物理组织

物理组织的话至少就有两个层次:主存和辅存。之前学习过组原的朋友都知道,主存一般指的内存,而辅存指的是外存。
如果OS的物理组织不好,程序、数据可用内存不足,搞不好就会卡死,甚至蓝屏。
对于后端程序员来说由于内存不可见,编程的时候粗心可能就会导致服务器内存泄漏,最后宕机。

内存划分

固定分区

等大分区:
内存被切成一个个相同大小的块

  1. 程序太大,无合适分区(一份米饭男生不够吃)
  2. 内存利用率不高(同样一份米饭女生吃不完)
  3. 内碎片问题严重(每个分区利用不全,产生内部碎片)

不等分区:
小程序放入小分区,减少内碎片;大程序放入大分区,避免无法分配。
在算法实现上变得更加复杂,需要选择合适的放置算法。此外,还有一些遗留问题:

  1. 活动进程的数目受限于系统
  2. 大量小进程无法有效利用空间

动态分区

按需分配,整体上提高了利用率

  • 根据程序的运行的情况动态分区,每段内存按照程序需求的
  • 分区与分区之间的外碎片的数量很多,虽然每一个占用空间不多,浪费也不少
    →这时候就有了压缩技术,把已分配的分区向一个方向移动,将外碎片压缩。为了提高效率,还可以在分区的起始和截止地方存储分区的信息

然后,让我们来了解一下动态分区的放置算法

  1. 最佳适配算法
    image-20231009083950375

时间效率低下,由于要维护地址空间链表(B+树),每次放置之后由于需要再次排序导致复杂度高。并且由于像41KB这种不好分配的内存,可能会导致碎片更碎。

  1. 首次适配算法
    image-20231009084357227
    每次从头开始寻找第一个足够大的分区,前端重复搜索,后端空闲较多
  2. 循环首次适配算法

image.png
每次从上次放置位置往后扫描第一个满足的内存分区,最大的分区容易被分割,需要压缩来获得新的大分区。
4. 最坏适应算法(worst-fit):找到最大的空闲分区
基本不留下小空闲分区,但较大的空闲分区不被保留。
5. 快速适应算法(quick-fit):为常用长度的空闲区建立单独的空闲区链表
可快速找到所需的空闲区,但是归还时合并复杂

看一个例子
image.png
如图所示,我们此时需要16M的内存,first-fit从上往下找到第一个满足的分区(指向22M的分区),best-fit找到最接近的分区(指向中间18M分区),而next-fit找到上次分配指针之后的第一个满足的分区(指向36M分区)。

还有一种基于伙伴系统的分区算法,简单了解即可
image.png

image-20231009085720727

重定位

  • 程序加载后实际(绝对)内存地址才确定
  • 进程可能占据不同分区,即执行期间有不同绝对内存地址

首先了解一下几个概念,学过汇编的应该都知道

  • 逻辑地址:与当前数据分配到的物理内存地址无关的访问地址
  • 相对地址:表示为相对某个已知点的地址
  • 物理或绝对地址:主存中的绝对地址或实际位置
  • 地址映射:将用户程序中的逻辑地址转换为运行时由机器直接寻址的物理地址。

重定位图示如下
image.png
这里的重定位就像是组原的基址变址寻址。图中有一个基址寄存器,记录了开始地址,还有界限寄存器记录了结束地址。当进程加载或换入时设置寄存器值,程序传入相对地址,OS通过“基址+相对地址=绝对地址”计算出实际地址同界限寄存器值比较,如果越界就发生中断,反之去内存找数据。

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

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

相关文章

【头歌】计算机网络DHCP服务器配置第四关配置路由器子接口答案

头歌计算机网络DHCP服务器配置第四关配置路由器子接口操作步骤 任务描述 本关任务:配置路由器的子接口。 操作要求 在第一关的拓扑图的基础上,配置路由器及 PC 机,具体要求如下: 1、打开路由器物理接口 F0/0 ; 2、配置…

NSSCTF中的pop、babyupload、cve版本签到、奇妙的MD5、easy_html

目录 [SWPUCTF 2021 新生赛]pop [NISACTF 2022]babyupload ​编辑[GKCTF 2020]cve版签到 [SWP5UCTF 2022 新生赛]奇妙的MD5 [HNCTF 2022 Week1]easy_html 今日总结&#xff1a; [SWPUCTF 2021 新生赛]pop 1.代码审计 <?phperror_reporting(0); show_source("…

装机必备——360压缩安装教程

装机必备——360压缩安装教程 软件下载 软件名称&#xff1a;360压缩 软件语言&#xff1a;简体中文 软件大小&#xff1a;3.38M 系统要求&#xff1a;Windows7或更高&#xff0c; 32/64位操作系统 硬件要求&#xff1a;CPU2GHz &#xff0c;RAM4G或更高 下载通道①迅雷云盘丨…

DINO结构中的exponential moving average (ema)和stop-gradient (sg)

DINO思路介绍 在 DINO 中&#xff0c;教师和学生网络分别预测一个一维的嵌入。为了训练学生模型&#xff0c;我们需要选取一个损失函数&#xff0c;不断地让学生的输出向教师的输出靠近。softmax 结合交叉熵损失函数是一种常用的做法&#xff0c;来让学生模型的输出与教师模型的…

Docker安装Oracle11g数据库

操作系统&#xff1a;centOS9使用此方法检查是否安装Docker&#xff1a;docker --help&#xff0c;如果有帮助文件则证明安装成功使用此语句检查Docker是否正在运行&#xff1a;docker images&#xff0c;实际上是查看本地镜像如果发现未运行则开启Docker&#xff1a;systemctl…

MyCat2之安装与配置文件介绍

安装 1.新建文件夹tools mkdir tools&#xff0c;并进入tools 2.下载MaCat wget http://dl.mycat.org.cn/2.0/install-template/mycat2-install-template-1.21.zip wget http://dl.mycat.org.cn/2.0/1.21-release/mycat2-1.21-release-jar-with-dependencies.jar 3.解压zip u…

怎样打造一份个性化画册呢?我来教你

在这个数字化的时代&#xff0c;传统的照片已经不能满足我们对个性化回忆的需求。个性化画册&#xff0c;不仅能够承载我们的记忆&#xff0c;还能展现自我风格。今天&#xff0c;就让我来教你如何打造一份属于自己的个性化画册。 1.要制作电子杂志,首先需要选择一款适合自己的…

kafka3.6.1版本学习

kafka目录结构 bin linux系统下可执行脚本文件 bin/windows windows系统下可执行脚本文件 config 配置文件 libs 依赖类库 licenses 许可信息 site-docs 文档 logs 服务日志 启动ZooKeeper 进入Kafka解压缩文件夹的config目录&#xff0c;修改zookeeper.properties配置文件 #t…

【吊打面试官系列】Java高并发篇 - Java 死锁以及如何避免?

大家好&#xff0c;我是锋哥。今天分享关于 【Java 死锁以及如何避免&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; Java 死锁以及如何避免&#xff1f; Java 中的死锁是一种编程情况&#xff0c;其中两个或多个线程被永久阻塞&#xff0c;Java 死锁情况出现至…

【每日刷题】Day50

【每日刷题】Day50 &#x1f955;个人主页&#xff1a;开敲&#x1f349; &#x1f525;所属专栏&#xff1a;每日刷题&#x1f34d; &#x1f33c;文章目录&#x1f33c; 1. 654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 2. 119. 杨辉三角 II - 力扣&#xff08…

MATLAB system identification系统辨识app的使用

系统辨识 前言系统辨识第一步 选取时域数据到app第二步 分割数据第三步 设置传递函数的参数第四步 Estimate第五步 结束 前言 接上节&#xff1a;simulink-仿真以及PID参数整定 系统模型的辨识工作&#xff0c;在控制领域&#xff0c;一般用于开发控制器的先手工作。一般而言…

调整图片和表格尺寸的命令:resizebox

\resizebox 是 LaTeX 中的一个命令&#xff0c;用于调整插入的内容&#xff08;如图像、表格、文本等&#xff09;的大小。它的语法如下&#xff1a; \resizebox{<width>}{<height>}{<content>}其中&#xff1a; <width> 和 <height> 分别表示…

IDEA提示Untrusted Server‘s certificate

如果你用的是Intellij系列IDE&#xff08;GoLand, PHPStorm, WebStorm, IDEA&#xff09;&#xff0c;突然弹出个提示『Untrusted Servers certificate 』 莫慌&#xff0c;这是因为你用了破解版的 IDE&#xff0c;破解过程中有个hosts绑定的操作&#xff1a; 0.0.0.0 account.…

代数拓扑学

啊&#xff0c;哈喽&#xff0c;小伙伴们大家好。我是#张亿&#xff0c;今天呐&#xff0c;学的是代数拓扑学 代数拓扑学是拓扑学中主要依赖 [1]代数工具来解决问题的一个分支。同调与同伦的理论是代数拓扑学的两大支柱&#xff08;见同调论&#xff0c;同伦论&#xff09;。 …

K8s集群调度续章

目录 一、污点&#xff08;Taint&#xff09; 1、污点&#xff08;Taint&#xff09; 2、污点组成格式 3、当前taint effect支持如下三个选项&#xff1a; 4、查看node节点上的污点 5、设置污点 6、清除污点 7、示例一 查看pod状态&#xff0c;模拟驱逐node02上的pod …

消费增值的真面目!绿色积分的合理运用!

各位朋友&#xff0c;大家好&#xff01;我是吴军&#xff0c;来自一家备受瞩目的软件开发企业&#xff0c;担任产品经理一职。今天&#xff0c;我非常荣幸能有机会与大家分享一种在市场上备受瞩目的新型商业模式——消费增值模式。 随着环保和可持续发展理念日益深入人心&…

对象解构与迭代器的猫腻?

前言 变量的解构赋值是前端开发中经常用到的一个技巧&#xff0c;比如&#xff1a; // 对象解构 const obj { a: 1, b: 2 }; const { a, b } obj; console.log(a, b)数组解构 const arr [1, 2, 3]; const [a, b] arr; console.log(a, b)工作中我们最经常用的就是类似上面…

轻松拿捏C语言——自定义类型之【结构体】

&#x1f970;欢迎关注 轻松拿捏C语言系列&#xff0c;来和 小哇 一起进步&#xff01;✊ &#x1f389;创作不易&#xff0c;请多多支持&#x1f389; &#x1f308;感谢大家的阅读、点赞、收藏和关注&#x1f495; &#x1f339;如有问题&#xff0c;欢迎指正 1. 结构体类型的…

echarts-象形柱图

象形柱图 一般的柱图都是纯色柱图&#xff0c;使用象形柱图可以给柱图定义自己的样式。 样式的调节与柱图一样&#xff0c;核心在于symbol调节柱图的组成。 let options {tooltip: {},xAxis: {type: "category",data: ["d1", "d2", "d3&qu…

具有固定宽度的盒子:\makebox, \parbox

makebox \makebox 是 LaTeX 中的一个命令&#xff0c;用于创建一个具有固定宽度的盒子&#xff0c;并在该盒子内放置内容。这个命令可以用于控制文本或对象的位置和对齐。 语法如下&#xff1a; \makebox[<width>][<alignment>]{<content>}其中&#xff1…