linux多线(进)程编程——(5)虚拟内存与内存映射

news2025/4/15 20:33:09

前言(前情回顾)

进程君开发了管道这门技术后,修真界的各种沟通越来越频繁,这天进程君正与自己的孩子沟通,进程君的孩子说道:
“爸爸,昨天我看他们斗法,小明一拳打到了小刚的肚子上,小刚痛的直接投降了,看得我都肚子都疼,小明下手也太狠了”。
进程君笑道:“哈哈,你是不会疼的,因为虽然都是肚子,但是在你的身上和他的身上的不是一个器官,当然你也不会痛了,就像是你也有脑子,小美也有脑子,可你会知道小美再想什么吗?哈哈哈”。
进程君说完这句话飘然而去,留下他的孩子在哪里若有所思。

翻译成计算机语言

我有两个程序A和B,在两个程序中都向内存申请了一块空间,巧合的是A和B申请到的空间的地址都是0x0008。A和B同时内存中写入了自己的数据,且都写入成功了,请问为什么在相同的地址写入数据确没有冲突呢?这就是我们今天要讨论的话题:操作系统的虚拟内存。

进程的内存模型

记得我在前面的文章身外化身fork()里面提到过,进程的官方解释是:
进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。。。
问题来了,什么是资源?
内存就是资源
linux会给每一个进程分配一块内存空间,这个空间的结构为:
在这里插入图片描述
图中可以看到,对于不同的进程,操作系统会在物理内存(内存条)上申请空间,并将物理空间与内核空间进行映射。我们实际编程中不需要关心实际的物理地址是多少,因为这些物理地址被操作系统,或者说MMU(内存管理单元)映射到了0x0到0xFFFFFFFF上。但我们编写程序时操作一个地址0xFFF,实际上我们操作的就是虚拟地址,而不是内存条中实际的0xFFF的真实物理地址。想要知道物理地址,我们需要将 虚拟地址 + 偏移量 才能得到实际物理地址。
必须声明一点,我们实际进行内存映射时是很难在内存条中直接申请到连续的物理地址的,我们得到的应该是一个断断续续的物理地址空间,这些空间被MMU管理,实现了物理内存到连续的虚拟内存的映射。
此外假设我有一个3.5G的内存条,但是我仍然可以申请4G的空间,虚拟内存技术可以让程序把一些不常用的部分放入硬盘中,把需要的部分映射到内存中,当需要硬盘中的部分时,可以通过页置换来实现部分内存的重新映射。

内存映射对进程的影响

操作系统的内存管理是很深刻的一门学问,研究的过于深入不利于我们的主线学习,目前大家只需要了解基本概念即可。
这里我们来看一下内存映射对进程的影响。当我开始一个进程,操作系统会为他分配资源,进行虚拟地址映射,这样我们就可以实现进程间的内存隔离。及时在内存中同时操作地址编号相同的虚拟地址空间也不会发生数据冲突。
但是这也带来了一个弊端,就是进程间难以通过普通手段进行通信。因为两个进程的内存空间在物理上隔离。
之前介绍的匿名管道与命名管道可以完成进程间的通信,但是这些手段依赖于文件操作,需要系统调用,开销较大,如何才能实现一个低成本的沟通呢?有没有办法将两个进程的虚拟地址映射到同一片物理地址上呢?
这个问题我们下一节再说。

小结

这篇文章里我们简单介绍了操作系统的内存管理机制
主要涉及
(1)进程的内存模型
(2)虚拟地址与物理地址的映射
再次提醒
操作系统内存管理是很深刻的一门学问,研究的过于深入不利于我们的主线学习,目前大家只需要了解基本概念即可。如果特别感兴趣可以去查阅相关资料。

下一节:linux多线(进)程编程——(6)共享内存

结束语

祝各位道友早日神功大成
(线程君的儿子好像最近有了一个机缘,已经去闭关修炼了。他会给我们带来什么惊喜呢?让我们拭目以待吧!)

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

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

相关文章

SpringBoot 动态路由菜单 权限系统开发 菜单权限 数据库设计 不同角色对应不同权限

介绍 系统中的路由配置可以根据用户的身份、角色或其他权限信息动态生成,而不是固定在系统中。不同的用户根据其权限会看到不同的路由,访问不同的页面。对应各部门不同的权限。 效果 [{"id": 1,"menuName": "用户管理"…

[dp8_子数组] 乘积为正数的最长子数组长度 | 等差数列划分 | 最长湍流子数组

目录 1.乘积为正数的最长子数组长度 2.等差数列划分 3.最长湍流子数组 写代码做到,只用维护好自己的一小步 1.乘积为正数的最长子数组长度 链接:1567. 乘积为正数的最长子数组长度 给你一个整数数组 nums ,请你求出乘积为正数的最长子数…

【图像处理基石】什么是通透感?

一、画面的通透感定义 画面的通透感指图像在色彩鲜明度、空间层次感、物体轮廓清晰度三方面的综合表现,具体表现为: 色彩鲜明:颜色纯净且饱和度适中,无灰暗或浑浊感;层次分明:明暗过渡自然,光…

无锡无人机超视距驾驶证怎么考?

无锡无人机超视距驾驶证怎么考?在近年来,无人机技术的迅猛发展使得无人机的应用场景变得愈发广泛,其不仅在环境监测、农业喷洒、快递配送等领域展现出真金白银的价值,同时也推动了无人机驾驶证的需求。尤其是在无锡,随…

213、【图论】有向图的完全联通(Python)

题目描述 原题链接:105. 有向图的完全联通 代码实现 import collectionsn, k list(map(int, input().split())) adjacency collections.defaultdict(list) for _ in range(k):head, tail list(map(int, input().split()))adjacency[head].append(tail)visited_…

图像形态学操作对比(Opencv)

形态学基于图像的形状进行操作,用于处理二值化图像,主要包括腐蚀和膨胀两种基本操作。这些操作通常用于去除噪声、分隔或连接相邻的元素以及寻找图像中显著的最大点和最小点。 1. 形态学操作 import cv2 import numpy as np import matplotlib.pyplot …

复刻系列-星穹铁道 3.2 版本先行展示页

复刻星穹铁道 3.2 版本先行展示页 0. 视频 手搓~星穹铁道~展示页~~~ 1. 基本信息 作者: 啊是特嗷桃系列: 复刻系列官方的网站: 《崩坏:星穹铁道》3.2版本「走过安眠地的花丛」专题展示页现已上线复刻的网…

Linux:进程理解1(查看进程,创造进程,进程状态)

进程理解 (一)查看进程通过系统调用获取进程标示* (二)创造进程(fork)1. 创造的子进程的PCB代码数据怎么来?2.一个函数为什么有两个返回值?3. 为什么这里会有 两个 id值?…

异形遮罩之QML中的 `OpacityMask` 实战

文章目录 🌧️ 传统实现的问题👉 效果图 🌈 使用 OpacityMask 的理想方案👉代码如下🎯 最终效果: ✨ 延伸应用🧠 总结 在 UI 设计中,经常希望实现一些“异形区域”拥有统一透明度或颜…

如何为您的设计应用选择高速连接器

电气应用的设计过程需要考虑诸多因素,尤其是在设计高速网络时。许多连接器用户可能没有意识到,除了在两个互连之间组装导电线路之外,还需要考虑各种工艺。在建立高速连接并确保适当的信号完整性时,必须考虑蚀刻、公差、屏蔽等因素…

【论文阅读】UniAD: Planning-oriented Autonomous Driving

一、Introduction 传统的无人驾驶采用了区分子模块的设计,即将无人驾驶拆分为感知规划控制三个模块,这虽然能够让无人驾驶以一个很清晰的结构实现,但是感知的结果在传达到规划部分的时候,会导致部分信息丢失,这势必会…

upload-labs二次打

1(前端js绕过) 弹窗,先看看有没有js有,禁用js 禁用后就可以上传php文件了,然后我们就去访问文件,成功 2(MIME绕过) 先上传一个php文件试试,不行,.htaccess不行, 试试MIME类型&am…

提权实战!

就是提升权限,当我们拿到一个shell权限较低,当满足MySQL提权的要求时,就可以进行这个提权。 MySQL数据库提权(Privilege Escalation)是指攻击者通过技术手段,从低权限的数据库用户提升到更高权限&#xff…

ChromeOS 135 版本更新

ChromeOS 135 版本更新 一、ChromeOS 135 更新内容 1. ChromeOS 电池寿命优化策略 为了延长 Chromebook 的使用寿命,ChromeOS 135 引入了一项全新的电池充电限制策略 —— DevicePowerBatteryChargingOptimization,可提供更多充电优化选项&#xff0c…

javaSE.Lambda表达式

如果一个接口中有且只有一个待实现的抽象方法,那么我们可以将匿名内部类简写为Lambda表达式。 简写规则 标准格式: (【参数类型 参数名称,】...) -> {代码语句, 包括返回值} 只有一行花括号{}可以省略。…

【随身wifi】青龙面板保姆级教程

0.操作前必看 本教程基于Debian系统,从Docker环境。面板安装,到最后拉取脚本的使用。 可以拉库跑狗东京豆,elm红包等等,也可以跑写自己写的脚本,自行探索 重要的号别搞,容易黑号,黑号自己负责…

Android 之美国关税问题导致 GitHub 403 无法正常访问,责任在谁?

这几天各国关税问题导致世界动荡不安,如今GitHub又无法正常访问,是不是Google到时候也无法正常使用了。

4月13日星期日早报简报微语报早读

4月13日星期日,农历三月十六,早报#微语早读。 1、北京处置倒伏树木843棵,已全部处置完毕; 2、山西大同“订婚强奸案”本月16日二审宣判,一审男方被判3年刑; 3、今年我国快递业务量已突破500亿件&#xf…

动态路由, RIP路由协议,RIPv1,RIPv2

动态路由 1、回顾 路由:从源主机到目标主机的过程 源主机发送数据给目标主机,源主机会查看自身的路由信息 如果目标主机是自己同网段,源主机查看的是直连路由 如果目标主机和自己不同网段,源主机查看的是静态路由、动态路由、默…

【已更新完毕】2025泰迪杯数据挖掘竞赛B题数学建模思路代码文章教学:基于穿戴装备的身体活动监测

基于穿戴装备的身体活动监测 摘要 本研究基于加速度计采集的活动数据,旨在分析和统计100名志愿者在不同身体活动类别下的时长分布。通过对加速度数据的处理,活动被划分为睡眠、静态活动、低强度、中等强度和高强度五类,进而计算每个志愿者在…