深入篇【Linux】学习必备:进程环境变量/进程切换

news2024/11/20 21:32:52

深入篇【Linux】学习必备:进程环境变量/进程切换

  • Ⅰ.环境变量
  • Ⅱ.深层意义
  • Ⅲ.全局属性
  • Ⅳ.进程切换

Ⅰ.环境变量

1.环境变量是什么?:环境变量是系统提供的一组name/value形式的变量,不同的环境变量有不同的用户。
一般是用来指定操作系统运行环境的一些参数。
2.比如我们在写C/C++时,在链接时,我们并不知道所链接的动静态库在哪里,但是照样可以链接成功。这就是由于相关环境变量帮助编译器进行查找。
3.环境变量是具有全局属性的。

常见的环境变量有PATH,HOME,SHELL等。

PATH:linux下系统的指令的默认搜索路径
HOME:记录当前用户的家目录
USER:记录当前用户是谁。

通过学习环境变量,我们可以解决下面这个问题:
【问题】为什么系统的指令,可以直接执行呢?而我们写的程序,需要加上当前程序的路径才可以执行呢?
因为已经将系统的指令的所有路径都添加到环境变量PATH里了,而程序执行会默认到默认路径里先查找一遍。找到了就直接执行,找不到就报错。

如何获取到环境变量,或者修改环境变量呢?

1.env:显示所有环境变量
2.echo:用来显示某个环境变量值
3.export:用来创建一个环境变量。
4.set:显示本地顶部关于的shell变量和环境变量。

Ⅱ.深层意义

每一个程序其实都需要环境变量,那么环境变量在哪存着呢?
环境变量存储在一张表里,叫环境表,环境表是一个指针数组,数组里的每个指针指向一个环境变量。

在这里插入图片描述

其实我们的main函数是具有参数的,那么这些参数代表着什么意思呢?

#include <stdio.h>
int main(int argc, char *argv[], char *env[])
{
 int i = 0;
 for(; env[i]; i++){
 printf("%s\n", env[i]);
 }
 return 0;
}

首先我们可以想一想这个问题:
【问题】指令为什么后面可以加上选项呢?
我们的main函数其实一旦执行就是一个程序了。所以main函数也就对应一个程序进程。而平常的指令我们说也是一个进程,也就是说指令的实现从底层来说也是用main函数实现的。
而正常我们的main函数是不用带参数也可以执行,那么后面的参数代表着什么意思呢?
由指令后面可以带选项我们可以推断出,main函数后面的参数就是用来命令选项的。
1.其中第一个参数argc 是命令的名称。
2.第二个参数char* argv[]是命令的参数。
3.第三个参数char* env[]就是进程的环境变量了。

其实我们写的程序都是子进程,bash才是父进程。而我们在输入指令时,bash会将命令行分散成一个个字符,会将这个字符给指针数组初始化。这样就可以给指令,工具软件等提供命令行选项支持。

而我们写的程序在执行之前,bash也会给main函数里的指针数组初始化。其实main也是一个函数,它也被调用的,至于是谁调用的,这个我们可以认为是操作系统调用的,当调用main函数时,会将自己的环境变量,命令参数什么的给main函数进行初始化。
所以一个程序必须要有两个核心向量表:

1.命令行参数表
2.环境变量表。

我们运行的程序都是子进程,bash才是父进程,bash本身在启动时会从操作系统的配置文件中读取环境变量信息,子进程会继承父进程的环境变量。
这两张表是由操作系统维护的,在程序启动时是操作系统自动初始化的,

所以我们要理解:main函数也是一个被调用的函数,操作系统会将两个表传给main函数的参数进行初始化。

我们可以通过系统调用来获取到环境变量:getenv获取指定的变量。

Ⅲ.全局属性

为什么说环境变量具有全局属性呢?
因为环境变量是可以被子进程继承下去的。父进程的环境变量可以直接拷贝一份给子进程,也就是子进程继承了父进程的环境变量。所以对应环境变量来说,通常是要具有全局属性。而对于一些普通变量是可以不需要有全局属性的。

Ⅳ.进程切换

我们要知道操作系统里有很多进程,而CPU只有一个,这就说明多个进程使用一个CPU。那这个是如何实现的呢?
这个操作需要两大核心:

1.进程切换
2.时间片

也就是操作系统采用基于进程切换基于时间片轮转的调度算法来使用CPU。
在理解进程切换之前,我们需要理解以下问题:
【问题1】函数的返回值是如何在外部拿到的呢?

函数的返回值通常是局部变量,函数销毁就没有了,操作系统通常会将这个返回值放入一个CPU寄存器中存着。

【问题2】系统是如何得知我们进程当前执行到哪一行代码呢?

进程中有一个叫程序计数器pc,可以记录当前进程正在执行指令的下一行指令的地址。

【问题3】CPU中存在很多寄存器,这些寄存器扮演着说明角色呢?

1.可以提高效率。
①将进程高频数据放入寄存器中。
②CPU寄存器中保存的是进程相关的数据,这样进程就可以随时随地被CPU快速访问修改了。
2.所以CPU寄存器里保存的是进程的临时数据。而这些临时数据被称为当前进程运行时的上下文。

当时间片结束时,进程从CPU上离开时,要将直接的上下文数据保存好甚至带走(为什么呢?因为该进程可能还没有执行完整,因为时间片的原因而结束,等下次再到这个进程运行时就要从刚刚结束的地方开始运行)而保存数据的目的就是为了下次进程回来切换时,进程原来的数据可以恢复。

所以进程在切换时有两大核心:

一是保存当前进程的上下文,保存在进程的PCB中。
二是恢复将要切换的进程的数据,从进程的PCB中获取。

并发的本质就是很多进程在CPU上以时间片的方式进行来回切换,人整段代码在一定时间内,都得以推进,切换的速度很快CPU执行也很快,时间片一到,首先将当前进程的上下文保存,然后让该进程去等待队列里排队,等将活跃队列运行完,再将轮转队列放上来,这样CPU就可以周而复始的轮转调度了。

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

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

相关文章

【QT开发笔记-基础篇】| 第四章 事件QEvent | 4.9 右键菜单事件

本节对应的视频讲解&#xff1a;B_站_链_接 【QT开发笔记-基础篇】 第4章 事件 4.9 右键菜单事件 本章要实现的整体效果如下&#xff1a; QEvent::ContextMenu ​ 在窗口/控件上点击鼠标右键时&#xff0c;触发该事件&#xff0c;它对应的子类是 QContextMenuEvent 首先&…

无人值守变电站运维技术模式及应用-安科瑞黄安南

近年来&#xff0c;市场电子资源需求量的逐步上升&#xff0c;使变电系统建设逐步向复杂环境拓展。为保障变电系统运行稳定性及人员管理安全性&#xff0c;无人值班变电站技术运用势在必行&#xff0c;是解决复杂条件下变电设备运行不稳定及人员设备管理效益低下问题的重要核心…

打工人神器(随时会删,抓紧看)

今天是一期打工人神器&#xff0c;相信大家在工作上多多少少都遇到过一些这样的难题&#xff0c;比如找不到素材&#xff1f;写不出文案&#xff1f;等等之类&#xff0c;如果你遇到过以上这些情况&#xff0c;那么今天的干货分享一定要看完&#xff01; 一、犀牛视频下载器 视…

k8s-----10、Controller-Deployment

Controller-Deployment 1、什么是controller2、 pod和controller关系3、Deployment控制器应用场景3.1 部署时yaml文件书写3.2 实际部署应用3.3 升级回滚3.3.1 升级3.3.2 回滚 3.4 弹性伸缩 1、什么是controller 在集群上管理和运行容器的对象 2、 pod和controller关系 pod是…

怎么用一个二维码展示多个内容?二维码汇总一个的方法

怎么将多个二维码内容组合到一个二维码中呢&#xff1f;最近有些小伙伴在问&#xff0c;在让别人扫码展示内容时&#xff0c;如何将其他二维码内容做成列表的形式&#xff0c;被浏览信息的人选择点击跳转到其他二维码展示对应的内容。比如制作旅游景点攻略&#xff0c;点击对应…

Python基础教程:列表(List)的常用操作

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 列表是Python中最基本的数据结构&#xff0c;列表是最常用的Python数据类型&#xff0c;列表的数据项不需要具有相同的类型。 列表中的每个元素都分配一个数字 -…

java--赋值运算符

1.基本赋值运算符 1.1.就是“”&#xff0c;从右边往左看。 2.扩展赋值运算符 注意&#xff1a;扩展的赋值运算符隐含了强制类型转换。 byte x 10; byte y 20; x x y ;//这样写会报错 x y;/*这样不会报错&#xff0c;原因是java默认的都是int形式的 &#xff0c;然后上面…

HIMA F3236 Z7138 Z7116全面的边缘人工智能解决方案

HIMA F3236 Z7138 Z7116全面的边缘人工智能解决方案 这一联合、完整的edge AI解决方案将结合Variscite的i.MX 8平台和Hailo的迷你PCIe AI模块&#xff0c;使企业能够更高效、更可持续地运行基于全面深度学习(DL)的应用&#xff0c;同时大幅降低成本。 Variscite的DART-MX8M-…

MAC地址修改工具 WiFiSpoof 简体中文

WiFiSpoof的功能优势主要在于其能够伪装和修改设备的MAC地址&#xff0c;以及支持随机生成MAC地址。这使得用户可以在连接Wi-Fi网络时隐藏自己的真实设备身份&#xff0c;增加网络安全性和隐私保护。同时&#xff0c;该功能还具有简单易用、兼容性强等特点&#xff0c;适用于多…

2023新版软件测试八股文及答案解析

前言 前面看到了一些面试题&#xff0c;总感觉会用得到&#xff0c;但是看一遍又记不住&#xff0c;所以我把面试题都整合在一起&#xff0c;都是来自各路大佬的分享&#xff0c;为了方便以后自己需要的时候刷一刷&#xff0c;不用再到处找题&#xff0c;今天把自己整理的这些…

3D模型格式转换工具HOOPS Exchange助力SIMCON搭建注塑项目

行业&#xff1a;设计与制造 / 注塑成型 / 模拟 挑战&#xff1a;注塑成型商面临着以高效的方式为客户生产零件的挑战。需要大量的试验才能生产出适合的零件&#xff0c;同时模具需要进行多次物理修改&#xff0c;每次修改周期最长需要四个星期&#xff0c;成本高达四到五位数…

接口自动化测试小结

一、接口测试的概念 1、接口&#xff1a;指系统或组件之间的交互点&#xff0c;通过这些交互点可以实现数据之间的交互。(数据交互的通道) 2、接口测试&#xff1a;对系统或组件之间的接口进行测试&#xff0c;主要用于检测外部系统与系统之间以及系统内部之间的数据交换、传…

PKU 概率论+数理统计+建模 期中考复习总结

目录 计算条件概率计算概率&#xff08;放回与不放回&#xff09;生成随机数算法Linear Congruential Method判断是否是full period Uniformity (test of frequency)1.Chi-Square testmethodreminderexample 2.Kolmogorov-Sminov testmethodexample Independence (test of auto…

vscode远程连接服务器+Xming:图形化界面

背景 用本地电脑连接服务器跑代码&#xff0c;服务器运行出现图形化的界面&#xff08;例如plt.show()是一张图片&#xff09;&#xff0c;本地电脑端显示不出来。因此&#xff0c;我们利用Xming解决这个问题。 主要步骤参考&#xff1a;link 注意点&#xff1a; 虽然&#x…

星途星纪元 ES,用艺术思维表达工程技术

10月8日&#xff0c;星途星纪元ES携手世界级成都爱乐首席乐团、旅德青年钢琴家王超&#xff0c;在成都打造了一场“万物星声”超舒适音乐会视听盛宴。这是星途星纪元首次跨界音乐圈、牵手音乐挚友&#xff0c;共同演绎音乐和汽车的美学协奏曲&#xff0c;开启高端超舒适美学新纪…

Ansys Zemax | 用于眼睛像差评估的Shack‑Hartmann传感器建模

介绍 无论是在研究中还是通过工业设备开发后用于临床目的&#xff0c;Shack‑Hartmann 传感器被广泛应用于测量人眼所产生的像差。 原理 这种装置的基本原理可以描述如下&#xff1a;光束聚焦在用作光扩散器的视网膜上&#xff0c;尽管出于安全考虑优选使用近红外进行测量&am…

Android手机连接电脑弹出资源管理器

如图所示&#xff0c;很讨厌 关闭方法&#xff1a;

如何编译运行C程序

1. 打开终端&#xff0c;进入C程序所在的目录。 2. 编译C程序文件&#xff0c;生成可执行文件。 命令&#xff1a;gcc -o [可执行文件名称] [C程序文件名称] 列如&#xff1a;gcc -o hello hello.c 3. 运行生成的可执行文件。 命令&#xff1a;./[可执行文件名称] 例如&a…

kepler笔记:Trip

Trip图层可以显示动画路径 1 数据格式 目前Trip图层支持一种特殊的GeoJSON格式&#xff0c;其中坐标线串有一个表示时间戳的第4个元素 为了使路径动画化&#xff0c;GeoJSON数据需要在其特征的几何形状中包含LineString&#xff0c;并且LineString中的坐标需要有4个元素&…

【广州华锐互动】三维全景3D消防科普展馆

在我们的日常生活中&#xff0c;火灾安全是一个不容忽视的重要问题。然而&#xff0c;由于缺乏对火灾的了解和应对技巧&#xff0c;许多人在面对火灾时往往感到无助和恐慌。为了解决这个问题&#xff0c;广州华锐互动开发了三维全景3D消防科普展馆&#xff0c;它是一个以虚拟现…