进程切换与环境变量(一)

news2024/12/23 11:14:23

目录

一、进程切换

前提引入 

二、环境变量

1.查看环境变量的方法

2.什么是环境变量

3.一些常见的环境变量

1.PATH

2.HOME

3.USER

4.SHELL

4.和环境变量有关的指令

1.echo:

2.export

3. unset:

4.env

5.set

5.知识补充命令行参数 

为什么要有命令行参数 ?

6.环境变量也会被传入main函数

7.环境变量可被子进程继承并且有全局属性

注意点


一、进程切换

并发:多个进程在一个CPU下采用进程切换的方式,在一段时间之内,让多个进程都得以推进,称之为并发

前提引入 

为什么函数返回值会被外部拿到呢?因为通过CPU寄存器存放临时变量

return a(假设数值为10)   即  mov eax 10

系统如何的得知我们的进程当前执行到哪行代码了?

系统通过CPU中的寄存器eip(或者被称之为程序计数器pc),记录当前进程正在执行指令的下一行指令的地址

寄存器有很多,例如

通用寄存器:eax,ebx,ecx,edx

栈帧有关的寄存器 ebp,esp,eip

状态寄存器 status

为了提高效率,进程会将高频数据放入寄存器中

cpu内的寄存器里面保存的是 进程相关的数据(访问或者修改)

这些寄存器里保存的进程的临时数据被称为 进程的上下文

进程从cpu上离开的时候要将自己的上下文数据保存好带走,以便于未来再被调度的时候恢复上下文,保存的目的,未来都是为了恢复

进程在被切换的过程中不断在保存自身的上下文和将自身上下文恢复到cpu的过程中重复。

这些内容可以被保存在进程的pcb中 

二、环境变量

1.查看环境变量的方法

echo $NAME //NAME:你的环境变量名称 

2.什么是环境变量

环境变量是一组name=vaule形式的变量,不同的用户具有不同的环境变量,环境变量具有全局性

它的作用是帮助系统“认识你是谁”

3.一些常见的环境变量

1.PATH

 PATH : 指定命令的搜索路径

我们使用ls pwd等指令不需要带路径是因为系统默认会到PATH中的路径里面去寻找

修改(等号左右不带空格)

覆盖:PATH=路径     例如 PATH=/home/myh/test

添加:PATH=$PATH:路径    例如PATH=$PATH:/home/myh/test

2.HOME

因为有这个环境变量,在我们登录时,默认会处在我们的家目录下 

3.USER

用户是谁

4.SHELL

查看当前在哪个shell中

4.和环境变量有关的指令

1.echo:

显示某个环境变量值

2.export

设置一个新的环境变量

在命令行直接导入的name=vaule被称为本地变量,bash自己使用

我们要在前面添加export

例如export myh=0

3. unset:

清除环境变量

unset name   

例如unset myh

4.env

显示所有环境变量

再介绍一些环境变量 

HISTSIZE:系统能保存的历史命令条数

SSH_TTY:终端设备文件是谁

如图左右是两个终端,右边的终端文件为/dev/pts/25,在左边终端指定路径,字符就可以被输入到右边的终端中 

PWD:当前程序所在路径

OLDPWD:上次处在的目录

我们还可以通过系统调用接口来获取环境变量

在代码中getenv(环境变量名)即可 

5.set

显示本地定义的shell变量和环境变量

5.知识补充命令行参数 

第一个是指令+选项的数目,第二个参数是一个指针数组,每一个指针指向一个字符串 ,以NULL结尾

 通过实验,我们可以看到

我们的指令会被存入第一个位置,后续的选项会被存入后面的位置 

因此我们可以通过if else语句来实现不同的功能

为什么要有命令行参数 ?

为指令,工具,软件提供命令行选项的支持  

linux下大部分指令都是c写的,因此需要引入命令行参数来对指令提供选项支持 


6.环境变量也会被传入main函数

 

也会传入像argv一样的一个向量表 ,一样可以打印

 

7.环境变量可被子进程继承并且有全局属性

我们运行的进程都是子进程,bash本身在启动的时候会从操作系统的配置文件中读取环境变量信息 ,如果我们创建子进程,那么子进程就会基础父进程的环境变量

环境变量也是数据,默认情况下是父子共享的,但是如果子进程要修改数据,它不能影响到父进程,即要进行写时拷贝

注意点

bash并不是接收所有指令都会区创建子进程的

例如echo与cd

假设我们现在定义了一个本地变量,myh=0

我们echo myh,假设echo是bash的子进程,因为我们定义的是本地变量,因此echo的环境变量中是没有myh这个环境变量的

以及cd,每个进程都有当前的工作目录,如果cd创建子进程,那么修改的应该是子进程的路径,父进程的路径不会发生更改

因此我们有两批命令

1.常规命令--通过创建子进程完成的

2.内建命令--bash不创建子进程,而是由自己亲自执行,类似于bash调用了自己写的或者系统提供的函数

通过调用chdir,我们可以让程序自己改变自己的路径

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

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

相关文章

Nacos 初步认识和 Nacos 部署细节

Nacos 基本介绍 Nacos 是由阿里开发,用于服务发现、配置管理、DNS服务的 Spring Cloud 组件,Nacos 一个组件可以完成 Config、Eureka、Bus 三个组件的功能,在当下非常受开发者欢迎。 Nacos 官网 Nacos 官网 Nacos 安装包下载 Nacos Serv…

【pulp库】混合问题

问题描述 Whiskas 猫粮由 Uncle Ben’s 生产。 本叔叔希望尽可能便宜地生产他们的猫粮产品,同时确保它们符合规定的营养分析要求显示在罐头上。因此,他们希望改变每个的数量 使用的成分(主要成分是鸡肉、牛肉、羊肉、 大米、小麦和凝胶&#…

VPN 的入门介绍

VPN(虚拟专用网络) 简介 虚拟专用网络,简称虚拟专网(VPN),其主要功能是在公用网络上建立专用网络,进行加密通讯。在企业网络中有广泛应用。VPN网关通过对数据包的加密和数据包目标地址的转换实…

AI机器人在企业拓客上常见的功能有哪些

AI机器人具备多种功能,这些功能主要基于其被设计和训练的目的。整理了一些常见的AI机器人功能: 1. 语音识别与自然语言处理: - 语音识别:将用户的语音输入转换为文本,以便机器人可以理解和处理。 - 自然语言处理…

Xilinx FPGA:vivado关于fifo的一些零碎知识

一、FIFO概念 先进先出,是一种组织和操作数据结构的方法。在硬件应用中,FIFO一般由一些读写指针,存储和控制的逻辑组成。 二、xilinx中生成的FIFO的存储类型 (1)shift register FIFO : 移位寄存器FIFO,这…

Java锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁

说明 JDK1.6为了减少获得锁和释放锁所带来的性能消耗,引入了“偏向锁”和“轻量级锁”,所以在JDK1.6里锁一共有四种状态,无锁状态,偏向锁状态,轻量级锁状态和重量级锁状态,它会随着竞争情况逐渐升级。锁可以…

2 ECMAScript

JavaScript 概述 JavaScript 编程语言允许你在 Web 页面上实现复杂的功能;如果你看到一个网页不仅仅显示静态的信息,而是显示依时间更新的内容,或者交互式地图,或者 2D/3D 动画图像,或者滚动的视频播放器,等等——你基本可以确定,这需要 JavaScript 的参与 JavaScript 编程语言…

如何为你的PCB选择最佳的阻焊覆盖工艺?

随着电子产品向“轻、薄、短、小”的方向发展,PCB也向高密度、高难度的发展,因此有很多SMT、PCB,客户在安装元件时需要插孔;其工艺流程长,过程控制困难。那么,PCB电路板插接工艺为何这么重要? 通…

B端设计:任何不顾及用户体验的设计,都是在装样子,花架子

B端设计是指面向企业客户的设计,通常涉及产品、服务或系统的界面和功能设计。与C端设计不同,B端设计更注重实用性和专业性,因为它直接影响企业的效率和利益。 在B端设计中,用户体验同样至关重要。不顾及用户体验的设计只是空洞的表…

【Proteus仿真】基于Stm32的八路抢答器~

【Proteus仿真】基于Stm32的八路抢答器~ 文档资料在购买后即可获得(如有问题可通过微信公号或b站私信联系我) 资料包括: 1. Proteus仿真源文件2. keil源代码功能描述: 1. 抢答时间设置显示2. 选手得分用时显示3. 选手数据查询/清楚4.抢答…

排产排程问题【数学规划的应用(含代码)】阿里达摩院MindOpt

本文主要讲述使用MindOpt工具优化排产排程的数学规划问题。 视频讲解👈👈👈👈👈👈👈👈👈 一、排产排程问题 在实际生产过程中存在着各种各样的排产排程问题,…

【数据分析】Pandas_DataFrame读写详解:案例解析(第24天)

系列文章目录 一、 读写文件数据 二、df查询数据操作 三、df增加列操作 四、df删除行列操作 五、df数据去重操作 六、df数据修改操作 文章目录 系列文章目录前言一、 读写文件数据1.1 读写excel文件1.2 读写csv文件1.3 读写mysql数据库 二、df查询数据操作2.1 查询df子集基本方…

移动UI: 什么特征会被认为是简洁风格,用案例告诉你

什么是简洁风格,恐怕一百个人有一百个是理解,本文通过理论分析案例的方式进行探讨。 移动 UI 中的简洁风格通常具有以下几个特征: 1. 平面化设计: 简洁风格的移动 UI 善于运用平面化设计,即去除过多的阴影、渐变和立…

一家互联网 Web3 研发团队繁忙的一天

早晨:规划与准备 7:00 AM - 起床与新闻 Web3研发团队的成员们早起,通过区块链相关的新闻网站、论坛和社交媒体,了解最新的行业动态和技术发展。重点关注去中心化金融(DeFi)、NFT、DAO等领域的最新进展。 8:00 AM - …

Java | Leetcode Java题解之第219题存在重复元素II

题目&#xff1a; 题解&#xff1a; class Solution {public boolean containsNearbyDuplicate(int[] nums, int k) {Set<Integer> set new HashSet<Integer>();int length nums.length;for (int i 0; i < length; i) {if (i > k) {set.remove(nums[i - …

✅深入理解InnoDB中的页分裂与页合并

想要了解什么是页分裂&#xff0c;页合并&#xff0c;那么就要想知道 InnoDB 中的数据页是什么。 InnoDB 的数据页 InnoDB 的数据页是存储引擎中用于保存数据的基本单位。每个数据页是磁盘上的一个连续区域&#xff0c;通常大小为 16KB&#xff0c;当然&#xff0c;这个大小可…

map和set的原理、优劣势、应用场景和示例代码,统统告诉你。

map和set的原理都是基于哈希表实现的&#xff0c;通过哈希值来快速查找和插入元素&#xff0c;从而实现高效的数据存储和管理&#xff0c;那么他们之间有什么不同呢&#xff0c;该如何选择&#xff0c;本文带你了解。 一、map和set的原理 map和set都是数据结构&#xff0c;用…

新浪API系列:微博API探索社交数据价值(1)

微博API为创作者和开发者提供了一个探索社交数据价值的宝贵机会&#xff0c;助力他们在创新发展中取得成功。通过微博API&#xff0c;用户可以轻松访问和获取微博平台上丰富的社交数据。这些数据包括用户信息、关注列表、粉丝互动等&#xff0c;为创作者和开发者提供了深入了解…

基于CesiumJs的可视化大屏,效果不是一般的震撼。

CesiumJS是一个用于创建三维地理信息系统&#xff08;GIS&#xff09;应用程序的开源JavaScript库。它提供了强大的地理空间数据可视化和交互功能&#xff0c;可以用于构建虚拟地球、地图、飞行模拟等应用。 1. 三维地理空间可视化&#xff1a; CesiumJS支持将地理空间数据以三…

【紫外线发光器件小结】 UV-B LED 308nm

之前有介绍光的波长和频率计算。 波长小于390nm,频率高于770太赫兹的电磁波忙&#xff0c;或者光。基本有一段就叫做紫外线。 紫外线有分为UV-A/B/C;三小段&#xff1b; 如下图&#xff1a; 高压汞灯与UV LED的光谱&#xff1b;黑色线汞灯&#xff0c;蓝色LED