当前位置: 首页 > news >正文

进程地址空间(虚拟地址空间)

目录

引入问题

测试代码

引入地址空间

故事1:

 故事二:

解决问题

为什么有虚拟地址空间

扩展

扩展1(没有地址空间,OS如何工作)

 扩展2 (代码只读深入了解)   

 扩展3(malloc本质)

 扩展4 重新理解地址空间


引入问题

 

我们引入一个问题,这种模型如果不是内存,那应该是什么?

 

测试代码


#include <stdio.h>
#include <assert.h>
#include <unistd.h>int g_value =100;//全局变量int main()
{pid_t id =fork(); assert(id>=0);if(id==0){//childwhile(1){printf("我是子进程,我的id是:%d,我的父进程是:%d,g_value:%d, &g_value: %p\n",\getpid(),getppid(),g_value,&g_value);sleep(1);g_value++;//只有子进程会进行修改}}else {//fatherwhile(1){printf("我是父进程,我的id是:%d,我的父进程是:%d,g_value:%d, &g_value: %p\n",\getpid(),getppid(),g_value,&g_value);sleep(2);}return 0;}
}

引入地址空间

故事1:

假设有一个有10亿美金的大富翁,其有四个私生子,且彼此不知道彼此不存在人,四个都以为自己是唯一继承人,富翁跟A说:“好好努力做生意,以后我的家产都是你的”;富翁跟B说:“好好努力,以后我的家产都是你的”;富翁跟C说:“好好努力,以后我的家产都是你的”;富翁跟D说:“好好努力,以后我的家产都是你的”,跟ABCD画大饼,画的饼也要管理起来,先描述,再组织,饼->进程地址空间,本质就是一个内核数据结构,struct mm_struct{}

 

 故事二:

小花VS小胖,两个小学生,闹了矛盾,最后在桌子上化了个线,画线的本质:区域划分!

区域划分:对线性区域进行1指定的start和end即可完成区域划分

 

        两人相安无事了一阵子,过了一段时间,双方中的一方通过暴力扩张,已经占有整个桌面的70%甚至80%,该种行为我们称为扩大区域 ,修改start\end值即可。

解决问题

        我们知道数据和代码真正只能在内存中!

 

        fork在返回的时候,父子都有了,return两次,id是不是pid_t类型定义的变量呢?返回的本质就是写入、谁先返回,谁就让OS发生写实拷贝  

        同一个变量,地址相同,其实是虚拟地址相同,内容不同其实是被映射到了不同的物理地址

 

 

为什么有虚拟地址空间

1 防止地址随意访问,保护物理内存与其他进程

2 将进程管理和内存管理进行解耦合

3 可以让进程以统一的视角,看待自己的代码和数据

扩展

扩展1(没有地址空间,OS如何工作)

        如果没有虚拟地址空间,OS如何工作??

        这种没有虚拟地址空间的,会依靠代码存储在物理空间的具体位置来进行工作。

        进程管理与内存管理耦合

如果有虚拟地址空间,进程工作并不关心其存储在物理内存中的具体位置,解耦合

 扩展2 (代码只读深入了解)   

          代码是只读的(深入了解)——代码所限定的区域是正文代码,虚拟地址空间经过页表映射,其权限位写的都是r,对应的只能读取

 扩展3(malloc本质)

         申请空间成功但是暂时不用,闲置状态,也会造成浪费

malloc先申请一个空间,假设我们在堆区上申请一个空间,即将堆区扩大,往上申请,然后将虚拟地址填入页表,但是物理地址暂时不填,同时也不在物理地址中申请空间,调用malloc就直接返回。采用缺页中断的方式

 

 扩展4 重新理解地址空间

        我们的程序在被编译的时候,没有被加载到内存,但是我们的程序内部也有地址

       

         虚拟地址这样的策略不止会影响OS,我们的编译器也遵守这样的规则!

在Linux中可编译程序ELF格式,源代码被编译的时候,就是按照虚拟地址空间的方式对代码和数据早早地编好了对应的编制

        操作系统在执行main函数之前,还有一定的函数,例如startup函数,所以起点在用户角度看来像是main函数,但是实际不是

 

 进程的代码和数据必须一直在内存中吗?(X)

相关文章:

进程地址空间(虚拟地址空间)

目录 引入问题 测试代码 引入地址空间 故事1&#xff1a; 故事二&#xff1a; 解决问题 为什么有虚拟地址空间 扩展 扩展1&#xff08;没有地址空间&#xff0c;OS如何工作&#xff09; 扩展2 &#xff08;代码只读深入了解&#xff09; 扩展3&#xff08;malloc本质…...

【项目精选】基于Vue + ECharts的数据可视化系统的设计与实现(论文+源码+视频)

今天给小伙伴们推荐一款超优秀的全新Vue3.0大数据系统Vue3-bigData。 点击下载源码 vue3-bigdata 基于vue3.0echarts构建的可视化大屏图表展示系统。包括各种可视化图表及Vue3新API使用。 功能 柱状图、饼图、词云图、漏斗图 水球图、折线图 仪表盘、雷达图 矩形树图、关系…...

JavaScript Window Screen

文章目录JavaScript Window ScreenWindow ScreenWindow Screen 可用宽度Window Screen 可用高度JavaScript Window Screen window.screen 对象包含有关用户屏幕的信息。 Window Screen window.screen对象在编写时可以不使用 window 这个前缀。 一些属性&#xff1a; screen…...

【双重注意机制:肺癌:超分】

Dual attention mechanism network for lung cancer images super-resolution &#xff08;肺癌图像超分辨率的双重注意机制网络&#xff09; 目前&#xff0c;肺癌的发病率和死亡率均居世界恶性肿瘤之首。提高肺部薄层CT的分辨率对于肺癌筛查的早期诊断尤为重要。针对超分辨…...

各种中间件的使用

init background 这一部分我们学习一些常用的&#xff0c; 但是不需要深入理解的中间件 &#xff0c; 例如kafka ,分布式文件系统。 summary Content what is kafka? What time to used it ? 其实消息队列就是解决系统之间复杂交互例如聊天系统和交易系统&#xff0c; …...

Systemverilog覆盖率的合并和计算方式

在systemverilog中&#xff0c;对于一个covergroup来说&#xff0c;可能会有多个instance&#xff0c;我们可能需要对这些instance覆盖率进行操作。 只保存covergroup type的覆盖率&#xff0c;不需要保存instance-specified的覆盖率coverage type和instance-specified的覆盖率…...

(周末公众号解读系列)2000字-视觉SLAM综述

参考链接&#xff1a;https://mp.weixin.qq.com/s?__bizMzg2NzUxNTU1OA&mid2247528395&idx1&sn6c9290dd7fd926f11cbaca312fbe99a2&chksmceb84202f9cfcb1410353c805b122e8df2e2b79bd4031ddc5d8678f8b11c356a25f55f488907&scene126&sessionid1677323905…...

力扣29-两数相除

29. 两数相除 给你两个整数&#xff0c;被除数 dividend 和除数 divisor。将两数相除&#xff0c;要求 不使用 乘法、除法和取余运算。 整数除法应该向零截断&#xff0c;也就是截去&#xff08;truncate&#xff09;其小数部分。例如&#xff0c;8.345 将被截断为 8 &#x…...

【MindSpore】安装和使用MindSpore 2.0.0版本简单实现数据变换Transforms功能

本篇文章主要是讲讲MindSpore的安装以及根据官方提供的例子实现数据变换功能。 昇思MindSpore是一款开源的AI框架&#xff0c;旨在实现易开发、高效执行、全场景覆盖三大目标。 目录1、加入MindSpore社区2、安装前准备2.1、获取安装命令2.2、安装pip2.3、确认系统环境3、安装Mi…...

PRML笔记4-绪论中推断和决策小结

在推断阶段使用训练数据学习后验概率p(Ck∣x)p(\mathcal{C_k}|\boldsymbol{x})p(Ck​∣x)的模型&#xff1b;在决策阶段使用后验概率进行最优的分类&#xff1b;亦或是同时解决推断和决策问题&#xff0c;简单的学习一个函数f(x)f(\boldsymbol{x})f(x)&#xff0c;将输入x\bold…...

DSPE-PEG-Streptavidin;Streptavidin-PEG-DSPE;磷脂聚乙二醇链霉亲和素,科研用试剂

DSPE-PEG-Streptavidin 中文名称&#xff1a;二硬脂酰基磷脂酰乙醇胺-聚乙二醇-链霉亲和素 中文别名&#xff1a;磷脂-聚乙二醇-链霉亲和素&#xff1b;链霉亲和素PEG磷脂 英文常用名&#xff1a;DSPE-PEG-Streptavidin&#xff1b;Streptavidin-PEG-DSPE 外观&#xff1a;粉…...

Java中的Stream

Stream流的特点 中间操作返回的是Stream类型&#xff0c;终结操作返回的是void 中间操作的这个Lazy指的是增加待处理操作&#xff0c;而不会真的处理&#xff08;放队列里&#xff09;&#xff0c;集合中的数据并未实际改变&#xff0c;到终结操作的时候才会把这些放队列里的操…...

【数据库】关系数据理论

第六章关系数据理论 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-r9ETJ75y-1677334548439)(imgs/image-20220508202554924.png)] 数据依赖 是一个关系内部属性与属性之间的一种约束关系 函数依赖多值依赖 函数依赖 [外链图片转存失败,源站可…...

初阶C语言——结构体【详解】

文章目录1. 结构体的声明1.1 结构的基础知识1.2 结构的声明1.3 结构成员的类型1.4 结构体变量的定义和初始化2. 结构体成员的访问3. 结构体传参1. 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 …...

盘点:9款身份和访问管理工具

身份和访问管理&#xff08;IAM&#xff09;长期以来一直是安全领导者职业生涯的关键“试炼场”&#xff0c;许多人在身份技术部署方面做出了事关成败的决定。 确保安全访问和身份管理是网络安全态势的两大基础 。同时&#xff0c;人员、应用程序和系统登录的方式以及它们彼此集…...

Linux下的进程地址空间

Linux下的进程地址空间程序地址空间回顾从代码结果推结论引入进程地址空间页表为什么要有进程地址空间重新理解进程地址空间程序地址空间回顾 我们在初学C/C的时候&#xff0c;我们会经常看见老师们画这样的内存布局图&#xff1a; 可是这真的是内存吗&#xff1f; 如果不是它…...

Web Spider Ast-Hook 浏览器内存漫游 - 数据检索

文章目录一、资源下载二、通过npm安装anyproxy模块三、anyproxy的介绍以及基本使用1. anyproxy的功能介绍2. anyproxy的基本使用四、给浏览器挂代理五、实操极验demo案例总结提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、资源下载 Github&#x…...

开源启智,筑梦未来!第四届OpenI/O启智开发者大会开幕

2023年2月24日&#xff0c;第四届OpenI/O启智开发者大会在深圳顺利开幕。本次活动由鹏城实验室、新一代人工智能产业技术创新战略联盟&#xff08;AITISA&#xff09;主办&#xff0c;OpenI启智社区、中关村视听产业技术创新联盟&#xff08;AVSA&#xff09;承办&#xff0c;华…...

CS144-Lab6

概述 在本周的实验中&#xff0c;你将在现有的NetworkInterface基础上实现一个IP路由器&#xff0c;从而结束本课程。路由器有几个网络接口&#xff0c;可以在其中任何一个接口上接收互联网数据报。路由器的工作是根据路由表转发它得到的数据报&#xff1a;一个规则列表&#…...

最好的个人品牌策略是什么样的

在这个自我营销的时代&#xff0c;个人品牌越来越受到人们的重视。您的个人品牌的成功与否取决于您在专业领域拥有的知识&#xff0c;以及拥有将这些知识传达给其他用户的能力。如果人们认为您没有能力并且无法有效地分享有用的知识&#xff0c;那么您就很难获得关注并实现长远…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

ESP32读取DHT11温湿度数据

芯片&#xff1a;ESP32 环境&#xff1a;Arduino 一、安装DHT11传感器库 红框的库&#xff0c;别安装错了 二、代码 注意&#xff0c;DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...

LLM基础1_语言模型如何处理文本

基于GitHub项目&#xff1a;https://github.com/datawhalechina/llms-from-scratch-cn 工具介绍 tiktoken&#xff1a;OpenAI开发的专业"分词器" torch&#xff1a;Facebook开发的强力计算引擎&#xff0c;相当于超级计算器 理解词嵌入&#xff1a;给词语画"…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Mobile ALOHA全身模仿学习

一、题目 Mobile ALOHA&#xff1a;通过低成本全身远程操作学习双手移动操作 传统模仿学习&#xff08;Imitation Learning&#xff09;缺点&#xff1a;聚焦与桌面操作&#xff0c;缺乏通用任务所需的移动性和灵活性 本论文优点&#xff1a;&#xff08;1&#xff09;在ALOHA…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...