花钱买不到系列-深刻理解进程地址空间

news2024/9/22 1:35:31

花钱买不到系列—linux虚拟地址空间-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/weixin_49529507/article/details/141272458?spm=1001.2014.3001.5501       在上一篇文章中,引出了虚拟地址这块,也用大富翁给儿子们画饼的例子解释,通过大富翁的例子,也知道了进程觉得自己是独占内存的,上一篇最后一个话题,操作系统如何给进程画的饼。

        比如你在公司上班,老板给你画饼,完成这个项目就提升你为经理,或者说拿下这个订单你就是销售主管。可能老板不止对你一个人这样说,可能对其他人也这样说,公司上市后给您多少股份?所以老板要不要记住给每一个员工画的饼?肯定要呀,不然到时候就会搞出大乌龙,所以老板就在自己的小本本里面记着。

        所以操作系统也一样,给每一个进程,都画了大饼,进程都觉得自己独占了内存。所以操作做系统也要记着这些饼,所以还是之前的一个理念,"先描述,后组织"。

        所以老板的小本本里面就是描述,对谁? 目标?什么职位?多少钱?描述起来,所以在老板的小本里面,就是有一个struct 蓝图。方便管理。

         所以,操作系统里面有那么多的进程,进程要被管理,那地址控制要不要被管理?肯定的,所以地址空间的本质:就是内核的一种数据 mm_struct,跟pcb一样,要被管理。它是我们进程的地质空间的描述的最核心的结构。

        接下来,是如何给进程画大饼的啊?

        可是我看到这个地址空间,那么它上面是有各个区域的,有代码区。已初始化数据区未初始化数据区,堆区还有栈区,它有这么多的区域的话,它是一个内核的数据结构。那么它是一个内核的数据结构的话,那么我最关心的就是这个数据结构里面的成员有哪些,先不关心和进程是怎么关联起来的,对里面的成员感兴趣

 

         开始聊之前来确定一下共识,所以我们来聊聊这个地址

        那么地址,比如0x00000000~0xffffffff,这些编号有什么意义,其实没什么,地址最大的意义,只要保证唯一性就可以了。

        我们要表示2的32次方个地址。怎么做到我们能够有2的32个次方地址?而且彼此之间还不重复呢啊,其实我们要表示它的地址。我们用32位的数据即可啊,也就是说呢,我们32位的数据32个比特位就可以了。那么为什么呢?因为任何一个比特位,它的一个那么要么为零,要么为1。所以32位的那么比特位,它的排列组合的个数就是二的32次方。从全0到全1,排列,这个就叫编址。

       可是我们常识告诉我们地址空间上面呢,有各种各样区域啊,这什么堆区栈区?那么,请问这些区域我该怎么去理解呢?操作系统要管理这个地址空间,它必须先描述再组织,而且还要保证这上面的各个区域都是有的,是怎么做到的,下面来了解一下。

 

 不知道大家有没有这样的经历,小学的时候基本是男女混坐的,你是一个小女生,你非常讨厌你的同桌,你就在桌子上面上面画了一根线,假设桌子100cm。小女孩警告小男孩别越界。

         所以这个时候男孩子的桌子的范围是[1,50],小女孩的范围就是[51,100],所以她的区域就划分好了,那么其中这个女孩所做的在桌子上划分的三八线的这个过程,我们把它可以称之为这就叫做区域划分啊。不要因为各种区域很复杂其实很简单,就类型这样。画一根线就可以了,换成计算机的表达就是下图这个样子。默认100cm。 这就叫做区域的划分。

 

        有一天,小男孩和女孩说,我每次越界你就打我,有时候我不是故意的呀,后面女孩子觉得也有道理,做出了改变,重新划分,每个人让出5cm,作为缓冲区,到缓冲区不理你,超过缓冲区就打你。

        

        那计算机如何调整。所以调整就是对它的start和end做调整就可以了

        后来 , 小男孩天天欺负小女孩,然后小女孩就把缓冲区给取消了,直接个30小男孩,超过就直接打你。所以重新划分,所以小女孩的区域就增大了

 

         所以在计算机里面就类似于下面这样。所以应一个区域有多个数字,每一个数字都是代表着桌子的一个位置。

       上面的这些啊code_start code_end,它就叫做区域的起始地址。我们称之为叫做区域的。好,那么两个区域中间部分,那么就有无数个地址可以被我们对应的,那么用户所使用了。这一部分区域之间的这无数个地址,包括我们每个区域的地址,我们都称之为叫做虚拟地址

         

        这个代码区啊,我自己编好成了,代码区加载到内存代码区,它占多少大小?它是固定的。因为代码区不会被调整啊,以初始化未初始化全局数据区,它也是固定的,它不会变化。但是,堆区和栈区不一样,它是可以不断的。我去malloc调整我的大小栈区呢,它也可以不断入栈。我们定局部变量,在函数内定义变量等等。我们的堆栈之间的区域也不断在做调整呀,那么所以堆栈之间啊,那么其中堆栈之间,它们的区域做调整,所谓的区域调整啊,本质就是修改啊,那么各个区域的。的end或者是我们的start啊。

 这个地址空间就是操作系统给进程画的大饼,让进程觉得自己独占4g内存空间,所以进程需要记得操作系统画的饼,就像员工也会记着老板画的饼,所以进程pcb里面有一个指针指向mm_struct,方便使用。

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

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

相关文章

内存管理篇-03物理内存管理-32位

正片从现在开始了。 1.结构体关联 当DDR初始化后,整个内存就可以访问了。但是需要合理的管理,防止内存碎片以及安全相关的问题。因此需要对物理内存进行严格的管理。 物理内存分为:页, 分区,内存节点。DMA需要连续的内…

配置PXE预启动执行环境:Kickstart自动化无人值守安装

文章目录 实现 Kickstart 无人值守安装1. 安装Kickstart和配置应答文件(图形化界面)2. 配置 PXE 菜单支持 Kickstart 无人值守安装3. 验证 Kickstart 无人值守安装4. 拓展:命令行配置应答文件(命令行界面) 实现 Kickst…

猜数3次-python

题目要求: 定一个数字(1-10,随机产生,通过3次判断来猜出数字) 数字随机产生,范围1-10有三次机会猜测数字,通过3层嵌套判断实现每次猜不中会提示大了或者小了 ps:补充随机函数 imp…

client网络模块的开发和client与server端的部分联动调试

客户端网络模块的开发 我们需要先了解socket通信的流程 socket通信 server端的流程 client端的流程 对于closesocket()函数来说 closesocket()是用来关闭套接字的,将套接字的描述符从内存清除,并不是删除了那个套接字,只是切断了联系,所以我们如果重复调用,不closesocket()…

合合信息文档解析Coze插件发布,PDF转Markdown功能便捷集成

近日,TextIn开发的PDF转Markdown插件正式上架Coze平台。 在扣子搜索“pdf转markdown”,或在Coze平台搜索“pdf2markdown”,即可找到插件,在你的专属智能体中便捷使用文档解析功能。 如果想测试解析插件在你需要的场景下表现如何&…

R语言VAR模型的多行业关联与溢出效应可视化分析

全文链接:https://tecdat.cn/?p37397 摘要:本文对医疗卫生、通信、金融、房地产和零售等行业的数据展开深入研究。通过读取数据、计算收益率、构建 VAR 模型并进行估计,帮助客户进一步分析各行业变量的影响及残差的协方差与相关矩阵&#xf…

xml打印模板解析-SAAS本地化及未来之窗行业应用跨平台架构

一、为何要自己设置打印模板系统 1.确保自由知识产权 2.支持跨平台:物联网,自助终端,电脑,web,C#,jsp,android,java,php 等多种语言 二、xml 代码解析 package CyberWinPHP.Cyber_Plus;import java.io.…

2024下半年软考有哪些科目开考?该怎么选?

近年来,软考(软件水平考试)的难度逐渐攀升,这并非源于题目本身的复杂化,而是官方对通过率的调控策略所致。整体通过率维持在13%左右,高级别考试更是低至10%以下,考生需慎重对待。以湖南2024年上…

数据仓库建模的步骤-从需求分析到模型优化的全面指南

想象一下,你正站在一座巨大的图书馆前。这座图书馆里存放着你公司所有的数据。但是,书籍杂乱无章,没有分类,没有索引。你如何才能快速找到所需的信息?这就是数据仓库建模要解决的问题。本文将带你深入了解数据仓库建模的主要步骤,让你掌握如何将杂乱的数据转化为有序、高效、易…

Java | Leetcode Java题解之第367题有效的完全平方数

题目&#xff1a; 题解&#xff1a; class Solution {public boolean isPerfectSquare(int num) {double x0 num;while (true) {double x1 (x0 num / x0) / 2;if (x0 - x1 < 1e-6) {break;}x0 x1;}int x (int) x0;return x * x num;} }

监控摄像头能看到电脑屏幕内容吗?监控摄像头VS电脑屏幕监控软件!告别盲区,让您的企业管理无死角!

在企业管理中&#xff0c;监控摄像头和电脑屏幕监控软件都是重要的工具&#xff0c;但它们在监控电脑屏幕内容方面存在显著差异。本文将深入探讨监控摄像头在捕捉电脑屏幕内容时的局限性&#xff0c;并对比介绍安企神——电脑屏幕监控软件的优势及其功能策略&#xff0c;帮助企…

在Windows下安装设置Node.js 20.16.0

文章目录 一、下载Node.js二、安装Node.js三、设置Node.js四、更换npm源 一、下载Node.js 官网地址&#xff08;中文网&#xff09; 或者使用直链下载 二、安装Node.js 打开下载好的安装包&#xff0c;点击下一步 同意用户协议后下一步 选择安装目录后下一步 可以根据自…

02 tkinter有趣项目-头像制作-界面设计

头像制界面设计 **avatar.png** **界面** 界面分析 背景图片: 顶部中央位置显示一个小孩背着书包的图片。这个图片是程序的背景&#xff0c;占据了大部分的窗口空间。 标题和按钮: 在图片上方&#xff0c;有一个标题栏&#xff0c;显示文本“在线姓氏头像制作”&#xff0c;使…

vue+fastadmin跨域请求问题

记录一个 vuefastadmin项目api 访问跨域问题 前端页面使用的是 axios 发起请求&#xff0c;api 是 fastadmin 写的&#xff0c;遇到跨域错误&#xff1a; 解决办法&#xff1a; 控制器代码中加入check_cors_request()实现跨域检测 fa 官网对跨域的说明 &#xff1a;跨域配置 -…

乐凡三防高亮屏工业平板电脑的应用场景

随着科技的发展&#xff0c;三防高亮屏工业平板电脑在越来越多的领域中得到广泛应用。下面探讨一下三防高亮屏工业平板电脑的应用场景及其在不同领域中的优势。 物流行业 在物流行业中&#xff0c;三防高亮屏工业平板电脑可以用于仓库管理、货物跟踪、运输调度等多个方面。在阳…

在Ubuntu22.04使用PySide6或PyQt5的文件选择框时,无法显示文件夹中的文件问题的解决方案

摘要&#xff1a;在使用PySide6或PyQt5开发图形用户界面&#xff08;GUI&#xff09;应用程序时&#xff0c;我们经常会使用 QFileDialog 来让用户选择文件或文件夹。然而&#xff0c;有时候会遇到一个奇怪的问题&#xff0c;即在打开文件选择对话框时&#xff0c;某些文件类型…

Vue3的三种样式控制及实现原理

你好&#xff0c;我是沐爸&#xff0c;欢迎点赞、收藏和关注。个人知乎 Vue3中一共有三种样式控制&#xff0c;分别是全局样式控制、局部作用域样式控制和深度样式控制&#xff0c;今天我们一起看下这三种样式控制的使用&#xff0c;以及实现的原理是什么。 一、全局样式控制…

数据恢复技术-手动修复MBR-/NTFS分区

前言 本文只作为本人学习笔记&#xff0c;不做他用&#xff0c;转载请注明原处谢谢&#xff01; 本文教大家如何手工修复MBR引导分区&#xff0c;找回丢失的数据&#xff0c;先附加题目镜像&#xff08;右键我的电脑或win标&#xff0c;选择管理/磁盘管理---操作---附加VHD&…

笔记整理—uboot启动过程(2)BL1低级初始化

lowlevel_init看名字就知道是关于初级方面的初始化&#xff0c;其中可用将其干的事情分为11个步骤&#xff1a; &#xff08;1&#xff09;push {lr} 也就是lr压栈。 &#xff08;2&#xff09;检测复位状态&#xff1a;如冷上电、热启动、睡眠等。冷上电要初始化DDR后才能使用…

MS2232/MS2232T——±20kV ESD 保护、3V-5.5V 供电、真 RS-232 收发器

MS2232/MS2232T 芯片是集成电荷泵、具有 20kV ESD 保护的 RS-232 收发器&#xff0c;包括两路接收器、两路发送器。芯 片满足 TIA/EIA-232 标准&#xff0c;为异步通信控制器和串口连接器 提供通信接口。 芯片采用 3V-5.5V 供电&#xff0c;电荷泵仅用 4 个 0.1-0.47μF 小…