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

news2024/11/23 21:44:32

顾得泉:个人主页

个人专栏:《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.coloradmin.cn/o/1266110.html

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

相关文章

Java-多线程基本知识学习总结

多线程 前言一、线程的创建1、继承Thread类2、实现Runnable接口 二、线程的生命周期三、操作线程的方法1、线程的休眠2、线程的加入3、线程的礼让4、线程的优先级 四、线程同步End 前言 Java是支持多线程的编程语言&#xff0c;所谓多线程就是程序能够同时完成多种操作。 计算…

MSB3541 Files 的值“<<<<<<< HEAD”无效。路径中具有非法字符。

MSB3541 Files 的值“<<<<<<< HEAD”无效。路径中具有非法字符。 一般来说出现这个问题是因为使用git版本控制工具合并代码出现了问题&#xff0c;想要解决也很简单。 如图点击错误后定位到文件&#xff0c;发现也没有什么问题。 根据错误后边的提示&a…

GoWeb学习-第二天

文章目录 从零开始学Go web——第二天一、安装Go语言二、建立web目录2.1 创建GO语言包目录2.2 创建Go web文件 三、编译并运行Go web应用3.1 编译并运行3.2 查看结果 从零开始学Go web——第二天 ​ 第一天我们了解了与web息息相关的HTTP协议&#xff0c;聊了聊Go与web的关系等…

深度解读:为什么要做数据合规?如何做到数据合规?

数据资源“入表”在即&#xff0c;企业更需筑牢数据合规防线。但企业主企业购买数据、获取数据到底是否合法合规&#xff0c;入表如何防范合规风险&#xff1f;上周三&#xff0c;亿信华辰邀请到北京鑫诺律师事务所高级合伙人、管委会副主任武婕将和大家分享《数据入表法律合规…

扩散模型DDPM学习笔记

扩散模型DDPM 文章目录 扩散模型DDPM如何运作基本概念训练过程推理过程&#xff1a; 目标损失函数推导评估标准 论文地址&#xff1a; Denoising Diffusion Probabilistic Models (DDPM) 如何运作 ​ 从guassian distribution进行采样得到一个噪声的图片&#xff0c;图片大小…

使字符串的单词倒序输出表示

题目 任务描述 本关任务&#xff1a;请实现函数 revWordoder&#xff0c;能够将 pa 指向的单词表字符串中的所有单词&#xff0c;按相反顺序放入 pb&#xff0c;同时去除多余的空格&#xff0c;单词之间只留一个空格. 例如 pa 中为 red blue, 则调用函数后&#xff0c;pb 中为b…

如何通过Portal实现消息集成

在数字化时代浪潮下&#xff0c;信息的流通与交互已变得至关重要&#xff0c;不论是在企业内部日常协作&#xff0c;还是与外部客户的紧密沟通&#xff0c;信息的快速、准确、实时传递都成为了确保业务顺畅进行的关键因素、决策精准的核心要素。 为了满足这种日益增长的需求&a…

学生护眼灯怎么选?2023备考护眼台灯推荐

近期&#xff0c;许多“护眼台灯是否是智商税”的帖子频繁出现&#xff0c;引起了许多群众的关注&#xff0c;作为一名护眼台灯资深使用者&#xff0c;在这里声明一下&#xff0c;护眼台灯绝对不是智商税。护眼台灯是通过调节光线亮度和色温&#xff0c;降低蓝光辐射&#xff0…

苹果提醒事项怎么用?几个简单步骤就能学会!

苹果提醒事项可以帮助你轻松管理待办事项&#xff0c;让你更好地安排自己的时间和工作。但是&#xff0c;有些小伙伴可能对如何使用这个功能还有一些疑问。苹果提醒事项怎么用&#xff1f;不要担心&#xff0c;小编将为大家提供使用提醒事项的方法&#xff0c;帮助你学会如何使…

代码随想录算法训练营第四十九天【动态规划part10】 | 121. 买卖股票的最佳时机、122.买卖股票的最佳时机II

121. 买卖股票的最佳时机 题目链接&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 求解思路&#xff1a; 动规五部曲 确定dp数组及其下标含义&#xff1a;使用一个二维数组dp[i][2]&#xff0c;dp[i][0]代表持有股票的最大收益&…

【VRTK】【VR开发】【Unity】9-瞬移

课程配套学习资源下载 https://download.csdn.net/download/weixin_41697242/88485426?spm=1001.2014.3001.5503 【移动的种类】 瞬移只是VR中移动的一种种类,其它还有连续移动,物理移动,摔臂移动等等。 瞬移自身也有多个分类,本篇介绍: 即时瞬移冲刺瞬移定点瞬移【瞬…

一篇教会你java内存图怎么画

首先我们要知道&#xff1a; 线程的本质是栈&#xff1b;程序执行时&#xff0c;在java栈中&#xff0c;成立一个线程栈&#xff0c;调用方法时方法不断压栈出栈&#xff0c;这个压栈出栈的过程就是线程执行的过程。方法执行 拷贝入栈 &#xff0c;执行完成 出栈&#xff0c;从…

leetcode刷题详解十一

⭕️583. 两个字符串的删除操作 思路&#xff1a;核心代码就是最长公共子序列&#xff0c;但是需要注意的是结果 就是如果说公共子序列为0&#xff0c;则需要两个字符串长度的才行 如果有&#xff0c;就是 n m ∗ 2 d p [ n ] [ m ] nm*2dp[n][m] nm∗2dp[n][m] int minDist…

企业人力资源公司抖音直播招聘断播怎么处理?

企业人力资源公司抖音直播招聘断播怎么处理&#xff1f; 最直接的处理方式就是进行抖音直播招聘报白&#xff0c;报白后在直播和视频中发布招聘和企业信息&#xff0c;不用担心被封禁和限制流量。 可以通过抖音直播进行招聘&#xff0c;也可以在视频中添加小程序&#xff0c;…

服务器数据恢复—服务器重装系统导致逻辑卷发生改变的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌linux操作系统服务器&#xff0c;服务器中有4块SAS接口硬盘组建一组raid5阵列。服务器中存放的数据有数据库、办公文档、代码文件等。 服务器故障&检测&#xff1a; 服务器在运行过程中突然瘫痪&#xff0c;管理员对服务器进行了重装…

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

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

数字人透明屏幕是如何工作的?

数字人透明屏幕是一种令人兴奋的科技产品&#xff0c;它结合了人脸识别、全息影像技术以及透明屏幕&#xff0c;为人们带来了全新的互动体验。本文将详细介绍数字人透明屏幕的工作原理以及其应用场景。 工作原理 数字人透明屏幕的工作原理主要包括人脸识别和全息影像技术。人脸…

解决ant-design-vue中Select组件v-model值为空字符串不显示placeholder的bug

方法一&#xff1a; 1.找到node_modules/ant-design-vue/es/vc-select/SingleSelector.js文件 搜索renderPlacehoder方法 将其修改为 const renderPlacehoder () > {const list props.values.filter(val > val.value ! );if (list[0]) {return null}... }2.在此文件中…

浅谈硬件连通性测试几大优势

硬件连通性测试是确保硬件系统正常运行、提高系统可靠性和降低生产成本的关键步骤。在现代工程和制造中&#xff0c;将连通性测试纳入生产流程是一个明智的选择&#xff0c;有助于确保硬件产品的质量和性能达到最优水平。本文将介绍硬件连通性测试的主要优势有哪些! 一、提高系…

区域人员定位管理系统功能

人员定位管理系统是集计算机软硬件、信息采集处理、无线数据传输、网络数据通讯等技术多学科综合应用为一体的自动识别信息技术产品&#xff0c;实现对不同物体&#xff08;包括人&#xff09;在不同状态&#xff08;移动、静止&#xff09;下的自动识别&#xff0c;特定区域人…