Linux系统---环境变量+内核进程调度队列(选学)

顾得泉:个人主页

个人专栏:《Linux操作系统》  《C/C++》

键盘敲烂,年薪百万!


一、环境变量

1.基本概念

       环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:

       我们在编写CI/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

       环境变量通常具有某些特殊用途,还有在系统当中通常具有全局特性

2.常见环境变量

       PATH:指定命令的搜索路径

       HOME:指定用户的主工作目录(即用户登陆到Linux系统中时,默认的目录)

       SHELL:当前Shell,它的值通常是/bin/bash。

3.如何查看环境变量

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

4.环境变量相关的命令

       1.echo:显示某个环境变量值

       2.export:设置一个新的环境变量

       3.env:显示所有环境变量

       4.unset:清除环境变量

       5.set:显示本地定义的shell变量和环境变量

5.环境变量的组织方式

       每个程序都会收到一张环境表,环境表是一个字符指针数组,每个指针指向一个以O'结尾的环境字符串。

6.通过代码获取环境变量

1.命令行第三个参数

#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;
}

2.通过第三方变量environ获取

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

       libc中定义的全局变量environ指向环境变量表environ没有包含在任何头文件中,所以在使用时要用extern声明。

7.通过系统调用获取或设置环境变量

#include <stdio.h>
#include <stdlib.h>int main()
{printf("%s\n", getenv("PATH"));return 0;
}

       常用getenv和putenv函数来访问特定的环境变量。

8.环境变量的全局属性

       环境变量通常具有全局属性,可以被子进程继承下去

#include <stdio.h>
#include <stdlib.h>int main()
{char * env = getenv("MYENV");if(env){printf("%s\n", env);}return 0;
}

       运行后直接查看,发现没有结果,说明该环境变量根本不存在

导出环境变量

        export MYENV=" hello world"

       再次运行程序,发现结果有了!

       说明:环境变量是可以被了进程继承下去的!


二、Linux内核进程调度队列

下图是Linux2.6内核中进程队列的数据结构,之间关系已经给大家画出来,方便大家理解

1.一个CPU拥有一个runqueue

        如果有多个CPU就要考虑进程个数的负载均衡问题

2.优先级

       普通优先级:100~139(我们都是普通的优先级,想想nice值的取值范围,可与之对应! )

       实时优先级:0~~99(不关心)

3.活动队列

       时间片还没有结束的所有进程都按照优先级放在该队列

       nr_active:总共有多少个运行状态的进程

       queue[140]:一个元素就是一个进程队列,相同优先级的进程按照FIFO规则进行排队调度.所以,数组下标就是优先级!

       从该结构中,选择一个最合适的进程,过程是怎么的呢?

        1.从0下表开始遍历queue[140]

        2.找到第一个非空队列,该队列必定为优先级最高的队列

        3.拿到选中队列的第一个进程,开始运行,调度完成!

        4.遍历queue[140]时间复杂度是常数!但还是太低效了!

        bitmap[5]:一共140个优先级,一共140个进程队列,为了提高查找非空队列的效率,就可以用5*32个比特位表示队列是否为空,这样,便可以大大提高查找效率!

4.过期队列

       过期队列和活动队列结构一模一样

       过期队列上放置的进程,都是时间片耗尽的进程

       当活动队列上的进程都被处理完毕之后,对过期队列的进程进行时间片重新计算

5.active指针和expired指针

       active指针永远指向活动队列

       expired指针永远指向过期队列

       可是活动队列上的进程会越来越少,过期队列上的进程会越来越多,因为进程时间片到期时一直都存在的。

       没关系,在合适的时候,只要能够交换active指针和expired指针的内容,就相当于有具有了一批新的活动进程!

6.总结

       在系统当中查找一个最合适调度的进程的时间复杂度是一个常数,不随着进程增多而导致时间成本增加,我们称之为进程调度O(1)算法!


结语:Linux系统关于环境变量和内核进程调度队列的分享到这里就结束了,没有进行展示的操作大家可以自行练习,希望本篇文章的分享会对大家的学习带来些许帮助,如果大家有什么问题,欢迎大家在评论区留言~~~ 

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

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

相关文章

Python 分解IP段获取所有IP(子网掩码)

需求 192.168.1.0/24,192.168.2.1-192.168.2.254,192.168.3.3 IP段格式已 "," 分割&#xff0c;获取所有IP 注意 1. 判断 IP 是否合规 2. 去除多余的字符&#xff0c;例如空格、换行符 3. 去重 代码 import re import ipaddressdef isIP(ip):p re.compile(^((…

考虑区域多能源系统集群协同优化的联合需求侧响应模型程序代码!

本程序参考中国电机工程学报论文《考虑区域多能源系统集群协同优化的联合需求侧响应模型》&#xff0c;文章使用关系矩阵来表示电、热、气的耦合关系&#xff0c;使用NSGA2方法对多目标优化方法进行求解&#xff0c;文章中考虑环境因素是目前研究的热点。程序中算例丰富&#x…

LINUX入门篇【11】---进程篇【3】---进程优先级,进程切换,进程调度

前言&#xff1a; 有了前面知识点的铺垫&#xff0c;本篇我们将围绕进程的三个方面来展开&#xff0c;即进程优先级&#xff0c;进程切换以及进程调度的问题&#xff0c;这里的进程调度其实本质就是CPU是如何去调度进程的。 进程优先级&#xff1a; 优先级的概念&#xff1a…

[Linux ] sed文本处理和免交互

一、sed 1.1 sed是什么 sed 是一种流编辑器&#xff08;stream editor&#xff09;&#xff0c;用于对文本数据进行文本转换和处理。它通常被用于在命令行中执行文本编辑任务&#xff0c;可以对输入的文本进行搜索、替换、删除等操作&#xff0c;并将结果输出。sed 是一个非交…

10.点赞 + 我收到的赞

1.点赞 点赞&#xff1a;支持对帖子、评论点赞&#xff1b;第1次点赞&#xff0c;第2次取消点赞首页点赞数量&#xff1a;统计帖子的点赞数量详情页点赞数量&#xff1a;统计点赞数量、显示点赞状态 1.1 生成 redis 工具类 将数据存入到 redis 中&#xff0c;以 key 为关键&…

Spring Boot 整合RabbitMQ

系列文章目录 第一章 Java线程池技术应用 第二章 CountDownLatch和Semaphone的应用 第三章 Spring Cloud 简介 第四章 Spring Cloud Netflix 之 Eureka 第五章 Spring Cloud Netflix 之 Ribbon 第六章 Spring Cloud 之 OpenFeign 第七章 Spring Cloud 之 GateWay 第八章 Sprin…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑不确定性的火电发电商现货-深度调峰市场优化决策》

标题涉及到电力行业的领域&#xff0c;尤其是火电发电商在电力市场中面对深度调峰需求时的决策问题。下面是对标题的解读&#xff1a; 考虑不确定性&#xff1a; 这指的是在制定优化决策时&#xff0c;考虑到环境的不确定性&#xff0c;可能包括但不限于电力市场的价格波动、发…

算法—双指针

双指针算法可以帮忙把时间复杂度降低一个维度&#xff0c;即原本O&#xff08;n2&#xff09;降为O(n)&#xff1b;将O(n)降为O(1) 移动零 移动零 题目解析 将所有0移动到末尾保持非0元素相对顺序对数组进行原地操作&#xff08;不开辟额外空间&#xff09; 算法原理 数组…

等保——密评技术要求

密评简介 密评定义&#xff1a;全称商用密码应用安全评估, 是指对采用商用密码技术、产品和服务集成建设的网络和信息系统密码应用的合规性、正确性、有效性进行评估。密评对象&#xff1a;重要信息系统、关键信息基础设施、网络安全等保三级及以上的系统。评测依据&#xff1…

IMO国际奥林匹克数学竞赛推出AI-MO,奖金高达1000万美元; SDXL Turbo: 新一代文本到图像模型

&#x1f989; AI新闻 &#x1f680; IMO国际奥林匹克数学竞赛推出AI-MO&#xff0c;奖金高达1000万美元 摘要&#xff1a;IMO国际奥林匹克数学竞赛推出新的AI竞赛AI-MO&#xff0c;旨在推动大语言模型的数学推理能力&#xff0c;鼓励开发能与人类数学天才相媲美的AI模型。比…

真空工艺腔内潮湿有什么危害?

在半导体制程中&#xff0c;真空工艺腔被广泛使用。薄膜沉积&#xff0c;干法刻蚀&#xff0c;光刻&#xff0c;退火&#xff0c;离子注入等工序均需要在相应的真空腔室中完成相应制程。真空工艺腔在半导体制程中起着至关重要的作用&#xff0c;它能够提供一个高度控制的环境&a…

在Springboot中操作Redis——五大数据类型

在Java中操作Redis Redis的Java客户端 前面我们讲解了Redis的常用命令&#xff0c;这些命令是我们操作Redis的基础&#xff0c;那么我们在java程序中应该如何操作Redis呢&#xff1f;这就需要使用Redis的Java客户端&#xff0c;就如同我们使用JDBC操作MySQL数据库一样。 Red…

电气制图用什么软件?CAD和Eplan哪个更胜一筹?

身为电气工程师&#xff0c;每天打交道最多的可能不是自家对象&#xff0c;而是时时刻刻攥在手里的电气图。目前市面上制作电路图的软件形形色色&#xff0c;但是AutoCAD Electrical和Eplan是目前大家使用率最高的两款电气制图软件。 EPLAN是一款专业的电气设计软件&#xff0…

UTONMOS:元宇宙时代已经来临

当我们站在这个新的人工智能时代的十字路口&#xff0c;不可避免地要面对一个问题&#xff1a;在这个技术革新的大潮中&#xff0c;区块链技术还有没有生存和发展的空间&#xff1f;本文将深入探讨这个问题&#xff0c;分析区块链在人工智能时代的优势、挑战以及未来的可能性。…

【算法刷题】Day7

文章目录 283. 移动零1089. 复写零 283. 移动零 原题链接 看到题目&#xff0c;首先看一下题干的要求&#xff0c;是在原数组内进行操作&#xff0c;平切保持非零元素的相对顺序 这个时候我们看到了示例一&#xff1a; [ 0, 1, 0, 3,12 ] 这个时候输出成为了 [ 1, 3, 12, 0, …

ground truth 在深度学习任务中代表的是什么意思?

1、概念 在深度学习领域&#xff0c;ground truth (中文意思是“地面真实值”或“基准真实值”&#xff0c;简单理解就是真实值) 是指用于训练和评估模型的准确标签或数据。它是机器学习算法的参考标准&#xff0c;用于衡量模型的性的和判断模型的准确性&#xff0c;本文将介绍…

泗博Modbus转Profinet网关TS-180对水表流量的监控应用

应用场景&#xff1a; 陕西某工程技术有限公司在一民生工程项目中&#xff0c;需要对公园直饮水进行净化保证其水质。直饮水净化装置需根据用水量不定期的维护&#xff0c;通过统计各个净化装置净化的直饮水的流量&#xff0c;来实现提前维护目的。 应用痛点&#xff1a; 项目…

4/150:寻找两个正序数组的中位数⭐

题目&#xff1a;寻找两个正序数组的中位数 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 题解1&#xff1a;暴力 暴力思路简介&#xff0c;…

基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析实践应用

生态系统服务是指生态系统所形成的用于维持人类赖以生存和发展的自然环境条件与效用&#xff0c;是人类直接或间接从生态系统中得到的各种惠益。联合国千年生态系统评估&#xff08;Millennium ecosystem assessment&#xff0c;MA&#xff09;提出生态系统服务包括供给、调节、…

项目中的svg图标的封装与使用

1.安装 npm install vite-plugin-svg-icons -D2.在vite.config.ts中配置 **所有的svg图标都必须放在assets/icons // 引入svg import { createSvgIconsPlugin } from vite-plugin-svg-iconsexport default defineConfig({plugins: [vue(),createSvgIconsPlugin({iconDirs: [p…