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通过“基址+相对地址=绝对地址”计算出实际地址同界限寄存器值比较,如果越界就发生中断,反之去内存找数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

刷代码随想录有感(81):贪心算法——分发饼干

题干&#xff1a; class Solution { public:int findContentChildren(vector<int>& g, vector<int>& s) {sort(g.begin(), g.end());sort(s.begin(), s.end());int index s.size() - 1;int res 0;for(int i g.size() - 1; i > 0; i--){if(index >…

SpringBoot使用redis结合mysql数据库(黑名单)渲染商品详情界面

目录 一、界面效果 二、前端代码 三、后端代码&#xff08;redisblacklist&#xff09; 3.1 ProducatController 3.2 ProductService 3.3 ProductDao 3.4 映射文件 一、界面效果 二、前端代码 商品详情前端代码 <template><van-nav-bartitle"商品详情&quo…

Redis 事件机制 - AE 抽象层

Redis 服务器是一个事件驱动程序&#xff0c;它主要处理如下两种事件&#xff1a; 文件事件&#xff1a;利用 I/O 复用机制&#xff0c;监听 Socket 等文件描述符上发生的事件。这类事件主要由客户端&#xff08;或其他Redis 服务器&#xff09;发送网络请求触发。时间事件&am…

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.…

Langchain-Chatchat之pdf转markdown格式

文章目录 背景开发环境loader文本解析步骤markdown格式的文本为什么选择markdown格式测试markdown格式提取表格原pdf表格markdown格式的表格 测试markdown格式的知识库运行项目修改文件加载器loader 其他问题运行项目报错查看系统当前的max_user_watches修改sysctl.conf配置 图…

【数据结构】直接选择排序详解!

文章目录 1.直接选择排序 1.直接选择排序 &#x1f427; begin 有可能就是 maxi &#xff0c;所以交换的时候&#xff0c;要及时更新 maxi &#x1f34e; 直接选择排序是不稳定的&#xff0c;例如&#xff1a; 9 [9] 5 [5]&#xff0c;排序后&#xff0c;因为直接选择排序是会…

【Python编程实战】基于Python语言实现学生信息管理系统

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

世界改变了我?还是我在改变着这个世界?-教育的魅力

目录 一、背景二、过程1.拥抱不确定性的心态2.应对变数的积极3.螺旋向上的能力4.突破自我的意志 三、总结 一、背景 现在这个时代唯一确定的就是不确定&#xff0c;社会发展太快了&#xff0c;尤其是中国的发展速度&#xff1b;大国生态人口生态。 有时候隐约中我自己也觉得和…

Linux源码编译安装MySQL + Qt连接MySQL

一、准备工作 1. 编译环境&#xff1a; 银河麒麟V10 飞腾D2000 CPU 2. 下载MySQL源码 这里编译的是5.7.44版本&#xff0c;带Boost库&#xff0c;这是官网的下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 3. 解压压缩包 tar -zxvf mys…

springcloud-服务拆分与远程调用

一 微服务 1.1简单了解 SpringCloud SpringCloud是目前国内使用最广泛的微服务框架。官网地址&#xff1a;Spring Cloud。 SpringCloud集成了各种微服务功能组件&#xff0c;并基于SpringBoot实现了这些组件的自动装配&#xff0c;从而提供了良好的开箱即用体验&#xff1a…

ChatGPT自然科学应用,R语言lavaan结构方程模型、copula函数

R语言lavaan结构方程模型&#xff08;SEM&#xff09; 结构方程模型&#xff08;Sructural Equation Modeling&#xff0c;SEM&#xff09;是分析系统内变量间的相互关系的利器&#xff0c;可通过图形化方式清晰展示系统中多变量因果关系网&#xff0c;具有强大的数据分析功能和…

大模型部署_书生浦语大模型 _作业2

本节课可以让同学们实践 4 个主要内容&#xff0c;分别是&#xff1a; 1、部署 InternLM2-Chat-1.8B 模型进行智能对话 1.1安装依赖库&#xff1a; pip install huggingface-hub0.17.3 pip install transformers4.34 pip install psutil5.9.8 pip install accelerate0.24.1…

微软为团队推出了 Copilot

微软希望使其生成式人工智能品牌对团队更有用&#xff0c;特别是跨公司和大型企业组织的团队。 在年度 Build 开发者大会上&#xff0c;微软宣布推出 Team Copilot&#xff0c;这是其 Copilot 系列生成式 AI 技术的最新扩展。 与微软之前的 Copilot 品牌产品不同&#xff0c;…

炸裂!AI五分钟模仿爆款IP故事,涨粉速度太绝了!

‍ ‍大家好&#xff0c;我是向阳。 今天我要分享一个利用AI技术模仿爆款账号的小技巧&#xff0c;帮助大家迅速增加粉丝。这个方法简单实用&#xff0c;尤其适用于副业和本地生活领域。接下来&#xff0c;我将为大家详细讲解操作步骤。让我们开始吧。 副业赚钱&#xff1a;模…

本地开发正常 线上CI/CD构建项目过程报错文件未能正确引用

问题快照 原因分析&#xff1a; 一般遇到这样的错误就是 文件路径或者文件名称未能正确匹配 或者文件不存在 会报这样的错误 以为很好解决 但这次 都排查 了 就是 没发现原因 不管怎么说还是要感谢 GPT的能力(分析问题的能力) 先上图 当我看到 第四步的时候 我立马 去仓库里查…

Go Redis 实现邮件群发

一、安装 go get github.com/go-redis/redis/v8二、邮箱服务配置,以QQ邮箱为例 三、示例代码 package mainimport ("context""fmt"redis "github.com/go-redis/redis/v8""gopkg.in/gomail.v2""gopkg.in/ini.v1"&quo…

怎样查看JavaScript中没有输出结果的数组值?

在JavaScript中&#xff0c;可以方便地定义和使用数组&#xff0c;对于已经定义的数组&#xff0c;怎样查看其值呢&#xff1f; 看下面的示例&#xff0c;并运行它。 上面的示例中&#xff0c;标签不完整&#xff0c;请补充完整再试运行。你知道少了什么标签么&#xff1f; 注…

SEC批准以太坊ETF了吗?

原创 | 刘教链 隔夜BTC击穿了5日均线&#xff0c;回落至67k一线。凌晨传来美SEC批准以太坊ETF的消息&#xff0c;但是ETH上下插针&#xff0c;杵在3.8k&#xff0c;微微下跌。定睛仔细一看&#xff0c;SEC批准了&#xff0c;但又没完全批准&#xff0c;这特么是薛定谔的批准哈&…

本地部署 MiniCPM-Llama3-V 2.5

本地部署 MiniCPM-Llama3-V 2.5 0. 引言1. 性能评估2. 典型示例3. 本地部署4. 运行 WebUI Demo5. vLLM 部署 0. 引言 MiniCPM-Llama3-V 2.5 是 MiniCPM-V 系列的最新版本模型&#xff0c;基于 SigLip-400M 和 Llama3-8B-Instruct 构建&#xff0c;共 8B 参数量&#xff0c;相较…

AWS迁移与传输之AMS/MGN

AWS Application Migration Service&#xff08;AWS Application Migration Service简称为AWS MGN&#xff0c;MGN是migration的缩写。&#xff09;是一项全面的迁移服务&#xff0c;旨在帮助企业将其本地服务器和虚拟机迁移到云端&#xff0c;包括AWS和VMware Cloud on AWS。 …