[Linux] 进程优先级 进程的调度与切换 环境变量详解

进程优先级 && 进程的调度与切换 && 环境变量

  • 1.进程优先级
    • 1.1查看进程
    • 1.2 PRI VS NI
    • 1.3用指令调整优先级
  • 2.进程的调度与切换
    • 2.1 进程切换
    • 2.2 linux实现进程调度的算法
  • 3.环境变量
    • 前言引入(main参数--命令行参数)
    • 3.1 环境变量
    • 3.2 PATH环境变量
    • 3.3 系统指令查看环境变量
    • 3.4用代码获取环境变量

1.进程优先级

优先级的前提也就是:访问某种资源的时候,通过一定的方式确定先后顺序;
这里我们先搞清楚两个概念
优先级 VS 权限
一个进程有了优先级的概念,那他就一定能被执行,也就是一定有权限。
简单来说权限是决定了能不能执行,优先级则是执行的先后顺序

优先级:cpu资源分配的先后顺序,进程的优先权(priority)

1.1查看进程

我们采用 ps -l 查看进程
在这里插入图片描述
在这里插入图片描述
这里面的PRI就是优先级,优先级也是一个整型变量。

  1. Linux的默认优先级是80;
  2. Linux的优先级是可以被修改的,优先级范围是[60, 99]—40
  3. 数字越小,优先级越高

1.2 PRI VS NI

这里的NI就是我们说的nice值,nice表示的是进程可被执行的优先级的修正数值
注意这里是修正数据

(new)PRI = (old)PRI + NI

nice的取值范围 -20到19
为什么linux调整优先级是一种受限状态?
因为优先级高的进程,先得到资源,常规进程很难享受到CPU资源,从而造成进程饥饿问题。

1.3用指令调整优先级

在这里插入图片描述

2.进程的调度与切换

进程在运行的时候,是基于时间片进行轮转执行的;时间片可以理解为OS给每个进程设定的最大执行时间,例如:1ms,一毫秒过去之后,不论这个进程有没有执行完毕,OS都会把这个进程调离出去,执行下一个进程

在这里插入图片描述
并发可以理解为一个大的CPU被分成了10个小的cpu每一个都去执行一个进程,但他们的效率都只有原本的十分之一。

2.1 进程切换

cpu有大量的寄存器,进程在cpu运行中,会产生大量的临时数据,放在cpu的寄存器中;这里面的临时数据衡量了进程当前的执行到了哪一行(PC指针),执行的结果……
cpu内部产生的临时数据,叫做进程的硬件上下文,让我们的进程进行保存(拷贝到PCB中)。
进程被二次调度的时候,将硬件的上下文进行恢复。

2.2 linux实现进程调度的算法

linux实现进程调度的算法,要考虑优先级,饥饿问题,效率.
这句话可以用下面的这张图来解释
在这里插入图片描述
首先一个运行队列中会有两个不同的队列,在这个队列中会有140个存放队列指针的数据,而我们只用后面的40——这个与上面的优先级相匹配,根据优先级,队列上面的进程根据优先级依次执行,这个是活跃队列的工作,而过期队列,存放的是新加入的进程,当活跃队列的进程都执行完毕之后,活跃队列和过期队列他们会交换,而交换的方式就是把他们指针所指向的位置进行交换,这里就体现出了他的效率性
我们在谈谈他是怎么遍历这些进程的,我们用位图来完成这个操作,比特位的位置表示一个队列,而比特位的内容表示这个队列是否为空

3.环境变量

前言引入(main参数–命令行参数)

main函数也是有参数的,

main(int argc,char *argv[],char *env[])
argv为指针数组(命令行参数表),argc是数组中元素的个数,env就是环境变量表

我们先来谈谈前面两个参数
在这里插入图片描述
在这里插入图片描述
这里就容易看出来了,argc就是指针函数argv的参数个数,argv就是命令行参数表
结论:通过不同的选项实现不同的功能;命令行参数是linux指令选项的基础。
为了方便理解我们可以写一个实现加减乘除的代码来解释一些

void Usage(char *process)
{   printf("Usage:\n\t%s [add|sub|mul|div] x y\n\n",process);
}
int main(int argc,char* argv[])
{// ./myprocess [add|sub|mul|div] x y//实现+-*/四种运算if(argc!=4){Usage(argv[0]);}int x=atoi(argv[2]);int y=atoi(argv[3]);if(strcmp("add",argv[1])==0){printf("%d + %d =%d\n",x,y,x+y);}else if(strcmp("sub",argv[1])==0){printf("%d - %d =%d\n",x,y,x-y);}else if(strcmp("mul",argv[1])==0){printf("%d * %d =%d\n",x,y,x*y);}else if(strcmp("div",argv[1])==0){printf("%d / %d =%d\n",x,y,x/y);}else {printf("none\n");}
}

在这里插入图片描述
这就是通过不同的选项实现不同的功能。

3.1 环境变量

概念:
在操作系统中用来指定操作系统运行环境的一些参数
不是一个,而是一堆彼此之间没有直接关系。系统的环境变量,本质就是系统直接开辟空间,给他名字和内容即可。

3.2 PATH环境变量

echo $PATH:打印环境变量的路径

在这里插入图片描述
为什么我们自己写的程序不加路径无法被找到,还要加上./才行呢?
因为我们的命令没有被添加到bash路径中。
我们可以采用以下两种方法
在这里插入图片描述

3.3 系统指令查看环境变量

  1. echo $[环境变量]
    在这里插入图片描述
  2. env查看系统全面的环境变量
    在这里插入图片描述
  3. 自己定义一个环境变量export 【要定义的内容】

3.4用代码获取环境变量

刚刚在提到main函数的参数,第三个参数就是环境变量表,我们就可以把他打印出来

int main(int argc,char* argv[],char *env[])//命令行参数个数,命令行参数表,环境变量表
{for(int i=0;env[i];i++){printf("%d---------------------------------%s\n",i,env[i]);}return 0;
}

在这里插入图片描述
在这里插入图片描述
第二种使用 getenv
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

题目:单调栈

1、关于栈的概述 栈是一种数据结构,遵循“后进先出”(LIFO, Last In, First Out)的原则。这意味着最后被插入栈中的元素会最先被移除。可以把它想象成一个垒盘子的情况,新的盘子总是放在最上面,而最上面的盘子会最先被…

4------维修手机工具 解锁 刷机 保资料修复 修改参数等多工具合集 工具预览与操作解析

此款工具可能很多维修技术都使用过。早期知名手机维修加密狗。目前已经修改为可以任何人使用。此工具集合了多个版本以及加密狗工具。所谓的这些手机维修仪器工具。只是把很多工具直接整合到他里面。然后按需运行。其实查看解压后的文件会在其中找到有些小工具集合。类似基带修…

英文翻译无忧:2024年四大翻译工具推荐!

在全球化时代,英语已成为国际交流的重要语言。对于许多英语非母语的伙伴来说,一款好用的英文翻译工具至关重要。今天,小编为大家盘点几款实用的英文翻译工具! 福昕在线翻译 直达链接:fanyi.pdf365.cn/ 福昕在线翻译…

基于51单片机的220V交流数字电流表proteus仿真

地址:https://pan.baidu.com/s/1QmpPLvDTuW7QG7P-JCLPPg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C52/AT89C51是一款经典的8位单片机,是意法半导体(STMicroelectron…

vulkano (rust) 画一个三角形 (vulkan 渲染窗口初始化 (Linux) 下篇)

上文说到, vulkan 相比 OpenGL (ES), 更加贴近底层硬件, 许多东西需要应用软件手动管理, 所以 vulkan 的初始化过程比较麻烦, 或者说学习曲线比较陡峭. 但是, 这种麻烦是一次性的, 一旦学会了, 就能开始享受 vulkan 的诸多好处啦 ~ 本文以绘制一个三角形为例, 介绍 vulkan 的初…

DBA运维小技巧之存储篇-Oracle服务器根目录满了怎么处理(2)迁移至新存储空间

1 前情提要 话说上次DBA小倩通过删除home lv,把空间扩给了/分区,问题暂时得到了解决。 没过几天,领导找到小倩下达任务,客户说数据库在本地磁盘空间太小了又快要满了,由于之前用的服务器本地磁盘,性能也比…

信息安全工程师(5)域名与域名解析

一、域名 1. 定义与功能 域名(Domain Name)是互联网上用于标识网站或服务器地址的名称,由一串由点分隔的字符组成,如“example.com”。域名的主要功能是提供一种便于记忆和输入的地址形式,以代替难以记忆的IP地址。域名…

【软件测试】肇新合同管理系统 需求说明书

1 引言 1.1 编写目的 本文档将列举实现合同管理系统所需要的全部功能,并对每个功能给出简单的描述。 本文档的预期读者包括:最终用户,项目负责人,评审人员,产品人员,软件设计开发人员,测试人员…

linux网络编程——UDP编程

写在前边 本文是B站up主韦东山的4_8-3.UDP编程示例_哔哩哔哩_bilibili视频的笔记,其中有些部分博主也没有理解,希望各位辩证的看。 UDP协议简介 UDP 是一个简单的面向数据报的运输层协议,在网络中用于处理数据包,是一种无连接的…

OpenAI o1:AI推理的未来,如何平衡性能与成本?

OpenAI o1:AI推理的未来,如何平衡性能与成本? 🚀人工智能的未来,已经悄然走向一个新的拐点!9月14日,OpenAI正式推出了两款新型模型——o1-preview与o1-mini。虽然这并非是GPT-4的简单升级版&am…

Python 从入门到实战19(函数参数)

我们的目标是:通过这一套资料学习下来,通过熟练掌握python基础,然后结合经典实例、实践相结合,使我们完全掌握python,并做到独立完成项目开发的能力。 上篇文章我们讨论了函数的基本介绍。今天我们继续学习一下函数参…

java坏境搭建

目录 安装 步骤1 步骤2 步骤3 步骤4 环境变量 1、在桌面“计算机”或“此电脑”图标上右键,选择“属性”,进入控制面板的计算机系统页面后,点击“高级系统设置”,不同操作系统可能界面不同: 2、点击“环境变量”…

铝型材及其常用紧固件、连接件介绍

铝型材介绍(包括紧固件和连接件以及走线) 铝型材 铝型材一般是6063铝合金挤压成型,分为欧标和国标两个标准。(左边国标,右边欧标,欧标槽宽一点) 由于槽型不一样,相关的螺栓和螺母也…

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found

VS Code终端命令执行后老是出现 __vsc_prompt_cmd_original: command not found。 如下图(vscode终端中): 解决方案: 1、vim ~/.bashrc 2、在~/.bashrc里面加入命令:unset PROMPT_COMMAND 3、source ~/.bashrc

GB28181在融合指挥调度系统应用方案探究和技术实现

GB28181规范在融合指挥调度系统主要围绕实现视频监控系统的互联互通、音视频数据的实时传输与控制、以及应急指挥调度的高效性展开。 一、GB28181规范概述 GB/T 28181是中国国家标准《安全防范视频监控联网系统信息传输、交换、控制技术要求》的编号,该标准规定了…

深度学习——微积分求导,反向传播

目录 一、导数二、自动微分,反向传播2.1 对向量求导的例子2.1 求和函数的梯度 一、导数 举一个关于导数的实例,定义一个函数 u f ( x ) 3 x 2 − 4 x uf(x)3x^2-4x uf(x)3x2−4x pip install matplotlibimport numpy as np from matplotlib_inline im…

拥有一个你说了算的人生—觉知

觉知,是最大的容器 觉知的力量 觉知,必然意味着对自身的了解,并且还会伴随着深刻的体验 觉知是光,而没有被觉知之物,就藏在黑暗中。一旦有觉知之光照进来,黑暗不仅无所遁形,而且黑暗中的动力还…

【滑动窗口】一题讲透滑动窗口!

🚀个人主页:一颗小谷粒 🚀所属专栏:力扣刷题 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1.1 题目要求 1.2 算法图解分析 1.3 代码实现 1.4 时间复杂度分析 1.5 算法思想总结 1.1 题目要…

【设计模式-桥接】

定义 桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们都可以独立地变化。桥接模式的关键在于将类的抽象部分与其实现部分解耦,以便两者可以独立地变化。这种设计模式的一个主要…

QT6 QML Image加载图片不显示的问题,编译方式CMake

前言 主要是记录QT6 QML Image加载图片不显示的问题,编译方式CMake 一、错误现象? 一直打开失败,代码如下 写法没得问题,路径是修改了的,和上面有个…一致,只是截图没改 二、解决方式 1.左侧工程找到CM…