进程——环境变量及软件地址空间

news/2025/10/7 8:42:58/文章来源:https://www.cnblogs.com/wzzkaifa/p/19128172

目录

环境变量

概念

补充:命令行参数

引入

其它环境变量

理解

程序地址空间

引入

理解

虚拟地址存在意义


 

 

环境变量

概念

    环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数。打个比方,就像你布置房间,这些参数就类似房间里的布置规则,决定了东西怎么摆放、怎么用,能让操作系统在合适的“环境”下正常运转 。

 

补充:命令行参数

   有参数的。就是命令行参数是在运行命令行程序时,跟随在代码名称之后输入的额外参数。这些参数用于控制程序的行为等。大家可能认为main是没有参数,实则不然实际上它

    上面的argv表示命令行参数的数组,argc表示数组里内容的个数。下面是它的运行结果:

    其实通过上面的大家能够发现我们在命令行输入的指令,其实是字符串。

    在执行该可执行文件时,bash会创建一个子进程用来执行该程序。命令行参数会被bash解析和切分,继而bash会利用内部的机制来处理和传递这些参数信息给要执行的软件,由程序自身来存储和处理命令行参数。

通过这样实现的,通过上面就能够建立在一个函数里有不同的子功能。就是    上面是运行结果是不是感觉很熟悉,其实我们平时运用的指令,它里的选项就

 

引入

    不知道大家有没有想过,为什么在执行系统程序时不同写路径,而我们自己写的软件就要写路径?

放在~/.bash_profile里。就是    缘于存在环境变量——PATH,它的作用是告诉体系去哪里查找。env:查看所有环境变量,echo $环境变量名:查看指定环境变量。环境变量默认

    我们能够添加路径:PATH=$PATH:新路径。不要PATH=新路径否则会替换原有路径!

    其大概过程是,倘若没有指定路径bash会先查看是不是内建命令,要是不是它就会去PATH里所有路径下找,如果找到了就执行该记录,没找到就会显示错误信息。补充:内建命令是在bash里面的,它是bash自己解释处理的,不需要创建子进程。

从配置文件里来的,每次从新登陆就会从配置文件里读取一次。就是    环境变量一般

其它环境变量

下面我介绍几个常用的环境变量:

    这里我不知道为什么我没有。

    这里我不知道为什么我没有。

理解

访问环境变量的全局变量。就是    其实依据getenv(name)也可以具体查看某环境变量,还有environ它

    在bash里有一张环境变量表,它是行被子进程继承的,并且子进程的修改不影响父进程。因此环境变量具有全局性和独立性。在main函数里还有一个参数它是用来存储环境变量表(main函数里最多三个参数)。

    通过export可以自己导入环境变量,unset取消自己导入的环境变量。

bash亲自执行的。就是    我上面所说的都是bash里的环境变量。但大家有没有想过export它是一个子进程啊,我用export导了一个环境变量那不是应该在子进程里吗?怎么会到bash里呢?其实export它是内建命令,它

通过    命令行是可以定义变量的(命令行定义),这种变量被称为本地变量(承受该运行有一点原因是要支撑脚本),它不会被继承,只能在当前的进程里使用。用set可以显示环境变量和本地变量,用unset也能够取消本地变量。

    注意不要有空格,否则就是命令了。本地变量是可以变成环境变量的。

 

程序地址空间

引入

    大家先看下面的代码:

    是不是感觉不可思议,一块地址上竟然有两个值!实际上我们看到的地址是虚拟地址并不是物理地址,真正的物理地址用户是看不到的。

理解

    一个进程有一个虚拟地址空间通过,一套页表。页表是虚拟地址到物理地址映射。于是上面的代码就能够这么理解。

一个父进程就是    首先

(上面写错了是命令参数环境变量)继而fork一个子进程,子进程会复制父进程的PCB和页表,并自己做出一些修改

    当子进程对val修改后

    虚拟地址空间的大小在32位机器上是4G,一般是用户用3G,内核用1G。进程会以为自己占据了整个内存。它里面的区域划分包括如代码段、数据段、堆、栈等。环境里的每个进程都会有自己的进程地址空间。

通过    补充:能够简单认为进程地址空间和虚拟地址空间是一回事。但严格来说,虚拟地址空间是机制,进程地址空间是实例。也就是说进程地址空间是虚拟地址空间在单个进程中的具体实现。

    操作系统会对进程地址空间进行管理,那怎么管理呢?依然是先描述在组织,所以PCB里有mm_struct,它是对进程地址空间的描述。

    mm_struct是Linux内核中用于描述进程内存空间的数据结构。它包含了进程虚拟地址空间的各种信息。它里面主要是记录区域的开始位置和结束位置。当想调整某区域时,只需要改变起始位置和结束位置即可。

堆,其它的区域也会用vm_area_struct表示区域范围。vm_area_struct通过双链表和红黑树管理起来。就是    堆是不连续的,我们需要记录每一个堆的开始和结束位置。但是在mm_struct里只有一对用于记录堆的开始和结束位置,那如果我又用malloc开辟了一段空间,那该怎么办呢?其实在mm_struct里有vm_area_struct它表示一个独立的虚拟内存区域。所以不管开辟多少空间只要求用vm_area_struct连接起来即可。其实不仅

更细致地表示虚拟地址空间中的每一个具体的、独立的虚拟内存区域,它描述了每个区域的具体属性。就是    mm_struct是对进程整个虚拟地址空间进行宏观的,整体的描述和管理。 vm_area_struct

    int有4个字节,它占据了4个虚拟地址。在取它地址时为什么只返回一个地址?其实系统会返回地址最小的那种值,剩下的可以通过偏移量来计算出来,因此才会有类型这一说。

虚拟地址存在意义

  • 工具的各个部分(如代码段、数据段等)在物理内存上的存储位置可能是不连续、无序的,但我们通过虚拟地址来看就是有序的。
  • 在地址的转化过程中,会对你的地址和管理进行合法性判断,从而保护物理内存。

比如:

    当你拿野指针去查页表,页表里面并没有该地址,应用就会崩溃(也不是说一定会崩溃,可能你的野指针正好在页表里,这其实比崩溃还可怕)。

    当执行char* str = "hello"; *str = 'H'; 时,查页表时会发现str只有只读权限没有修改权限,程序就会崩溃。

  • 让进程管理和内存管理进行一定程度的解耦和。

通过    有了虚拟地址之后我们就不用把所有的代码和数据给一次性都给加载到物理内存里,而是分批次加载,甚至能够不加载,让进程只有PCB和页表,这时去查页表时如果物理地址为空就会发生缺页中断,进程会停下来等页表补充完后再次执行。

 

 

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

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

相关文章

软件开发与网站开发的区别网站落地页如何做

/*java中的集合类 实现了 Connection接口ArrayList这个集合类 java.util.*这个包的类toArray()方法可以返回一个 Object类型的对象数组我们部队 ArratList进行泛型规范那么就会警告 但是还是可以运行的这是因为JDK1.5中引进了泛型,但是你的ArrayList却没有采用&a…

高唐做网站建设的公司小皮怎么创建网站

目录 题目答案运行结果 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组…

自己可做以做网站吗天元建设集团有限公司商票兑付情况

520这一天,也是网络情人节。就在那天,如果没有女朋友的自己,如何假装自己是有朋友的!如何在朋友圈“秀恩爱。女生版:image很有感觉有木有~~男生版:imageimage其实这些都是小意思啦~~这些都是假装自己有女朋…

【HarmonyOS 5】鸿蒙Taro跨端框架 - 教程

【HarmonyOS 5】鸿蒙Taro跨端框架 - 教程2025-10-07 08:31 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block…

遵义祥云平台网站建设中国企业500强排名2021

《童年》是高尔基自传体小说三部曲中的第一部,讲述的是高尔基幼年丧父、母亲改嫁,他跟随日渐破落的小染坊主外公以及外婆生活的童年经历。小说通过一个儿童天真无邪的眼光,向读者生动地展示了19世纪中叶俄罗斯社会底层人民的生活状态&#xf…

学习unigui【37】nginx的反向代理 ,程序中的重新定向

学习unigui【37】nginx的反向代理 ,程序中的重新定向默认port:9077 希望IP:81后访问9077。于是就采用nginx。问题当点击下载文件或浏览文件等时,怎么知道用户是通过81口访问的? UniGUI 没有暴露 RequestHeader(s),…

php空间放多个网站做好的网站如何上线

如果聊起国内的智能机市场,我想大多数人的印象就是疯狂内卷。卷影像、卷屏幕、卷快充、卷性能……客观地说,国内的3C产品还是很有质价比的。不过在没有如此内卷的日本市场,各种小屏手机仍旧是主流。 除了苹果外,日本本土品牌的夏普…

我和宠物做朋友教案小精灵网站iis怎么使用来建设一个网站

https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 开头先分享个有趣的哈哈哈 承包了我一天的快乐秧 点击此处…

wordpress建的大型网站吗云适配 网站

刷题 309.最佳买卖股票时机含冷冻期 题目链接 | 文章讲解 | 视频讲解 题目:给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。 设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多…

wordpress手机网站个人网站建设收费标准

一、前言 前面有相关系列文章介绍了ES的基本概念和各种版本SDK的使用,ES现在已升级到8.5版本,有些概念和SDK用法都有很大变化,后续ES相关的文章会以8.3版本为基准介绍一些实际中应用需要掌握的概念以及一些比较实际的例子。 二、映射 ES环…

北京SEO网站优化公司郑州网站推广公司

给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。 叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum 22 输出&a…

单页面推广网站模版汉语网站建设心得

JL-8集成电路电流继电器 系列型号 JL-8A/11集成电路电流继电器;JL-8B/11集成电路电流继电器; JL-8A/12集成电路电流继电器;JL-8B/12集成电路电流继电器; JL-8A/13集成电路电流继电器;JL-8B/13集成电路电流继电器; JL-8A/21集成电路电流继电器;JL-8B/21集成电路电流继电器; JL-…

关于网站开发的商业计划书四川省建设厅注册中心网站

这是第三部分&#xff08;第一&#xff0c;第二部分&#xff09;&#xff0c;非常有意思的问答&#xff0c;值得仔细琢磨。 这里只是一些和程序员发展&#xff0c;面试&#xff0c;优秀程序员的特点等相关的部分。 有些想法和 MSF 中的原则也很相似 &#xff08;见 <移山之…

解决Docker存储空间不足问题 - 指南

解决Docker存储空间不足问题 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco…

长沙市做网站的网站图标在哪里做修改

背景 有序列表换行后自动开启下一个标号&#xff0c;让人苦恼。 操作 操作系统换行操作 1. 【Enter】键是硬回车&#xff0c;即段落标记。回车后文字属于下一段落 2. 【shiftEnter】是软回车快捷键。即人工换行符。回车后文字仍属于前一段落&#xff0c;只不过重新换行。 …

深圳高端网站建设公司人工智能培训心得体会

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一.目录和文件的操作 1.cd 命令 切换到d盘 2.目录分为相对路径和绝对路径 3. dir命令 用于显示目录和文件列表 4. md 或 mkdir 创建目录 5. rd 用于删…

如何在网站开发国外大客户怎么做网站注册的网页

IDEA 软件设置Settings页面Settings是对软件本身的一些属性进行配置&#xff0c;例如字体 主题 背景图 插件等。如何打开Settings设置页面Settings设置页面结构详解结构Appearance & Behavior 外观和行为Keymap 快捷键Editor 编辑器设置Plugins 插件Version Control 版本控…

深入解析:C++ 内存泄漏检测器设计

深入解析:C++ 内存泄漏检测器设计2025-10-07 08:11 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impo…

实用指南:实践篇:利用ragas在自己RAG上实现LLM评估②

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

完整教程:数据结构:递归的种类(Types of Recursion)

完整教程:数据结构:递归的种类(Types of Recursion)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&…