由浅入深的了解进程(4)

news2024/11/14 2:36:55

进程

  • 1、优先级
    • 1、1、什么是优先级
    • 1、2、为什么需要优先级
    • 1、3、Linux优先级的特点和查看方式
  • 2、补充概念
  • 3、命令行参数
  • 4、环境变量

1、优先级

1、1、什么是优先级

和生活中的概念其实是差不多的。优先级在进程中的定义是指定进程获得CPU资源的先后顺序。如果换一个视角的话,优先级的本质也就是在操作系统中的进程PCB结构体中的一个变量表示的是优先级的先后,用整形来表示,几个不同的进程相互比较整形的大小就能够实现优先级的概念。数字越小的优先级越高。
优先级 vs 权限。权限问题是决定能不能,但是你有优先级了,也就是说明你已经能够有权限了。
例子: 假如你带着饭卡去食堂排队,这说明什么,你已经拥有饭卡,拥有能够在食堂吃饭的权利,所以你才有等待排队的过程,如果连饭卡都没有的话,那么也就相当于直接没有权限。这个排队的过程其实也能够看作是优先级的过程。

1、2、为什么需要优先级

进程访问的资源(CPU)始终都是有限的,但是系统中的进程大部分情况下都是有较多的。所以由于这种情况的存在是不可避免的,即使是多个CPU也不能直接解决问题,因为当拥有多个CPU的时候,你就会想着起更多的进程,完成更多的操作。
所以优先级是必须要存在的,只有有优先级的概念才能够合理的处理进程,让系统的效率提高。
例子: 就还像是学校食堂一样,如果说学校有一万个学生,难道就要开一万个窗口给每一个学生都是私人的窗口,私人的厨师吗?很显然,几乎没有学校会是这样,如果这样的话也太浪费资源了,类比一下学校的窗口也就像是计算机中的CPU,不可能给你那么多个的,只会存在较少的窗口,让更多的学生(进程)能够按照秩序排队才是解决问题的好方法。
操作系统关于调度和优先级的原则: 分时操作系统,保证基本的公平。如果进程因为长时间不调度,就会造成饥饿问,由于长时间得不到资源。就像是在食堂一样,如果老是有人来插队的话,就会导致后面的人一直排不到队,后面的人就会一直饿着一样,也会产生问题。

1、3、Linux优先级的特点和查看方式

我们想要在Linux系统下查看优先级的话可以通过

ps -l:能够显示优先级,不过只能显示当前窗口下的
ps -al:能够显示全部的优先级

在这里插入图片描述
UID:代表执行者的身份。
PID:代表进程的代号。
PPID:代表进程是由哪个进程发展衍生而来的,或者说是父进程的代号。
其中的这几个到底是哪一个才是表示的是优先级呢?
PRI(priority):进程优先级
NI(nice):进程优先级的修正数据
所以真正的优先级(PRI)=优先级+nice ,这样的话能够实现优先级的同时,还能够实现对于进程优先级的动态修改过程。


那我们能不能够直接进行优先级的调整呢。

top
//然后输入r,确定输入PID
//修改NI值

可是为什么我输入的NI数值为100的时候,和我之后查看到的NI的值确实不一样的呢?所以NI值不能随意调整,只能在范围内调整。因为要保证调度的公平!
NI可调整的范围是[-20,19]—40个数
每一次调整优先级,都是从80开始的。这也就是为什么,NI的值为19的时候NI为99,改变NI的值为-10的时候,NI的值为70。

2、补充概念

并发: 多个进程在一个CPU内采用进程切换的方式,在一段时间内,让多个进程都能够得以推进,称之为并发。
并行: 多个进程在多个CPU下,分别进行运行,这称之为并行
独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。
竞争性: 系统进程数数目众多,而CPU资源只有少量,所有进程之间是具有竞争属性的,为了高效完成任务,更合理的竞争相关资源,便具有了优先级。

3、命令行参数

问题提出:main函数能够含参数?
main函数参数可带可不带。

int main(int argc, char *argv[])
//其中argc是后面argv数组的元素的个数。

如果带参数的话,这些参数有什么意义?那我们先让这个main函数先把这个字符串打印出来看看,是什么玩意,我们再看看怎么理解这个东西
在这里插入图片描述在这里插入图片描述
直接看显示效果的话,main函数的参数表示的含义就是,如果直接执行可执行程序的话,数组长度是1,数组元素表示的就是可执行程序的名称。如果后面加上别的东西的话数组就会变长,其余下标就是后面添加的字符。
我们在命令行中输入的命令行参数,本质上是命令行字符串。第一个表示的是程序的路径和名称,其余后面的叫做和该进程匹配的选项。所以在放进数组的时候是分开存放的。并且这个字符串数组的最后一个元素存放的是NULL,如果想要证明的话也很简单,就报for循环的终止条件改为argv[i]即可,因为C语言中的NULL表示的就是0。

为什么需要main函数能够传两个参数?
在这里插入图片描述在这里插入图片描述
如果我们像这样子简单写一下这个myprocess,就能够实现像指令一样的功能,实现多功能。就像是我们平时用的ls的指令一样,我们通过多样的后续的指令,能够实现不同的功能一样,这篇文章中介绍了很多指令的,可以回顾一下。实现了一个程序通过不同的选项实现不同的功能
所以有命令行参数,本质是为了让程序能够有不同的选项,用来定制不同程序功能,所以才能够实现命令中会携带很多的选项。
谁干的?
当我们定义一个全局变量的时候,虽然子进程在main函数内部才创建,但是这个程序显示的结果,能够展示的是父进程的数据,子进程都能够看到并且访问。在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这说明父进程的父进程是bash。这也就说明,命令行中启动的程序,都会变成进程,并且其实还都是bash的子进程。
所以,bash是在命令行语句之前执行的,所以main函数的字符串数组就是bash的功劳,在程序还没运行前,就把命令行语句放在了main函数中,实现上一个讨论的效果。并且由于父进程的数据能够被子进程看到,所以bash存放字符串数组的时候,在子进程中也能够看到到底存了什么在argv[]之中。

4、环境变量

直接看现象的话,就是为什么像是ls或者别的命令明明也是可执行程序,那为什么我们刚刚自己写的myprocess程序还需要在前面加上我们的命令存储的地址,而ls能够直接使用,不需要再表明地址了?在这里插入图片描述
但是ls也能够通过绝对路径来运行在这里插入图片描述
这是为什么呢?这正就是因为Linux系统中存在一些全局的设置,这些全局的设置就是告诉命令行解释器,去哪些路径下去寻找可执行的程序。
PATH就是表示的是环境变量,如果想要打印环境变量中的内容,就需要$PATH。在这里插入图片描述这些配置在我们登录Linux的时候,就已经加载到bash进程中了(存在于内存中)。
这些地址就是将来bash在执行时候的默认的搜索的路径,必须要先搜索到才能够继续,因为要到CPU中进行解密等操作。如果默认的情况下没有找到的话,就会报错。找到的话就会进行加载和执行程序。
那我们如果也想像系统一样,我们自己写出来的程序也能够直接让bash直接找到并运行的话,我们该怎么做呢?
在这里插入图片描述
直接一个复制,让我们写的程序存在于PATH的目录之下就可以了。
则相当于就是我们把我们写的程序安装到Linux系统中了。
除了直接把我们写的程序加到PATH中的指定的目录下,能不能直接加上我们写的程序的目录呢?

PATH=/home/qzy/linux_study/jincheng3

这样可以吗?很显然可以是可以,但是当我们除了执行myprocess的时候能够执行,执行别的时候都执行不了了。那这又是为什么呢?因为PATH的内容全被覆盖了,只留下了我们刚刚才添加的部分,那这时我们该怎么办呢?其实不同慌张,因为PATH进程是内存级别的数据,也就是意味着,我们只需要重新的登陆一下系统就能够重新的配置PATH的路径了。
能不能不覆盖,就是添加呢?
在这里插入图片描述
这样子就行了,不是覆盖前面的PATH,而是在后面再加上我们需要添加的路径。
那添加成功了,但是此时的PATH是在内存中的,我怎么做能够做到让这样的改变能够一直存在下去呢?即使是重新登录也能够有这样的配置呢?由于PATH一开始不是在内存中的,而是在系统的对应的配置文件中的。所以想要修改得在系统配置文件中修改。

配置文件的位置在哪?
在这里插入图片描述
在这里插入图片描述
在每一个文件的家目录之下存在着配置文件。在这里插入图片描述
这就是PAHT配置文件存在的位置,我们在这里修改的话,就能够在以后重新登陆的话就不需要再次修改PATH了。

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

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

相关文章

ATF加载自定义镜像

实际上包含了两个问题: 如何把自定义的二进制文件打包到fip.bin中?如何在secure boot流程中load和认证自定义的二进制文件? 如何打包 证书创建工具和FIP打包工具是通过命令行传参的方式进行证书创建和打包的,如下: …

图新地球-新图源来一波(地表覆盖物、地表水、岩土圈)

0.序 以前的GlobalLand30图源不可访问了,很多需要地物分类的朋友很苦恼。 现在星图新上了一批图源,不仅包括地物分类、水域、还包括土壤酸碱度、有机碳、粘土、阳离子等各种岩土相关的地图服务。 这边全部配置成了图新地球可以直接加载的图源&#xff…

人生总会有自认为迈不过去的坎【西藏旅记1】

人生总会有自认为迈不过去的坎 孤独,也是人生一态。 有两个人说过我这样的性格,不会有真正的朋友,一个是旅行时的领队,另一个也是旅行时的领队。 以他们的视角,形形色色的人,应接不暇的景,他们修…

Github 2024-08-01 开源项目日报Top10

根据Github Trendings的统计,今日(2024-08-01统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量非开发语言项目3Go项目2Python项目2C项目1C#项目1Rust项目1TypeScript项目1编程面试大学:成为软件工程师的全面学习计划 创建周期:2859 天协议…

如何基于欧拉系统完成本地软件仓库安装

挂载 [rootlocalhost ~]# mount /dev/sr0/openeuler/ 查看一下 在脚本里添加以下两行 [rootlocalhost ~]# vim /etc/rc.d/rc.local 给一个可执行权限,并重启 [rootlocalhost ~]# chmod x /etc/rc.d/rc.local [rootlocalhost ~]# reboot 记住挂载点 切换到 /et…

CANoe系统变量模块里定义的结构体类型和变量从CAPL代码角度理解

CAPL里声明一个结构体类型: variables {struct DoIPMessage{byte version;byte inVersion;word type;dword length;byte payload[1500];};struct DoIPMessage doipMessage; }声明一个结构体类型DoIPMessage,定义了一个此结构体…

【C语言】C语言期末突击/考研--指针(一篇就够)

目录 一、指针的本质(间接访问原理) 1.1.指针的定义 1.2.取地址操作符与取值操作符,指针本质 二、指针的传递使用场景 2.1.什么是指针的传递 2.2.指针的传递使用场景 三、指针的偏移使用场景 3.1.指针的偏移 3.2.指针与一维数组 四…

风景视频素材高清无水印的网站有哪些?6个热门素材网站分享

高清无水印风景视频素材网站推荐,让您的视频内容独树一帜! 对于视频创作者来说,一段引人入胜的风景视频素材往往能够瞬间抓住观众的注意力,仿佛将他们带入了一个全新的世界。然而,很多创作者在实际拍摄过程中会面临时…

(二)springboot2.7.6集成activit5.23.0之集成设计器

引入官方流程设计器 1. activiti-webapp-explorer2-5.23.0.war项目并解压。 2.将文件夹diagram-viewer和editor-app以及modeler.html拷贝到项目resources/static目录下: 顺便说一下: 在Spring Boot中,静态资源的访问顺序是先找static&#…

QT 安装指南

简介 Qt 是一个跨平台的应用程序开发框架,被广泛应用于桌面、移动设备和嵌入式系统等领域。本文将详细介绍如何在 Windows 操作系统上安装 Qt 5.14.2 版本(这个版本较为稳定适用)。 安装前准备 操作系统: 确保您的计算机运行的是 Windows 10 或更高版本。硬件要求…

【数据结构初阶】二叉树与堆(一)

文章目录 一、树的基础概念1、节点与度数2、树的度与高度3、引入:数组下标为何从0开始4、祖先节点5、树是递归定义的6、树与非树的区别7、代码表示 二、二叉树2.1、满二叉树2.2、完全二叉树2.3、完全二叉树的存储 三、堆 一、树的基础概念 1、节点与度数 节点分为…

app逆向实战之定位关键代码

前言 在保证App能够正常使用的前提下,我们可以通过抓包查看是否存在抓包检测。如果可以进行抓包,我们首先进行登录代码定位,并伪造请求进行登录,然后实现App中的某个功能。本文以某嘟牛app为例,抓包结果如下&#xff…

【投标】运维服务方案(2024Word完整版)

1.项目情况 2.服务简述 2.1服务内容 2.2服务方式 2.3服务要求 2.4服务流程 2.5工作流程 2.6业务关系 2.7培训 3.资源提供 3.1项目组成员 3.2服务保障 软件资料清单列表部分文档: 工作安排任务书,可行性分析报告,立项申请审批表&a…

vue后台管理系统 vue3+vite+pinia+elementui+axios下

这篇文章来完成用户组件 也就是增删改查表格 用户页面信息页面由头部&#xff0c;表格,和弹框组成 <template><div class"user-header"><el-button type"primary" click"handleAdd">新增</el-button><el-form :inl…

(2024,LlamaGen,Llama,自回归下一token预测,模型扩展)自回归模型优于扩散:Llama 用于可扩展图像生成

Autoregressive Model Beats Diffusion: Llama for Scalable Image Generation 目录 0. 摘要 1. 引言 2. 自回归模型在图像生成中的应用 2.1 概述 2.2 图像 tokenizer 2.3 自回归模型生成图像 2.4 规模扩展 2.5 服务 3. 实验 5. 结论 0. 摘要 我们介绍 LlamaGen&…

使用mid360从0开始搭建实物机器人入门级导航系统,基于Fast_Lio,Move_Base

Introduction 本文原本只是自己在拿到mid360后&#xff0c;开始进行开发过程的一些问题和学习的记录。毕竟实物和仿真还是有很多不同&#xff0c;且由于碰到的问题也比较多&#xff0c;READEME也越来越详细&#xff0c;所以就干脆整合起来&#xff0c;做成了一篇使用mid360的搭…

嵌入式初学-C语言-十一

#接嵌入式初学-C语言-十,以及部分例题# 循环结构 break和continue break 功能&#xff1a; 1. 用在switch中&#xff0c;用来跳出switch的case语句&#xff1b;如果case没有break&#xff0c;可能会产生case穿透。 2. 用在循环中&#xff08;while、do..while、for..&#…

Linux压缩/解压缩工具:tar命令详解

目录 一、概述 二、基本概念 三、tar命令的基本语法 1、基本语法 2、常用选项 3、帮助获取 四、用法和示例 1. 创建归档文件 &#xff08;1&#xff09;用法 &#xff08;2&#xff09;示例 2. 解压缩归档文件 &#xff08;1&#xff09;用法 &#xff08;2&#…

经典非比较排序—计数排序的Java实现方式

目录 1.具体思路&#xff1a; 2.代码实现&#xff1a; 3.代码分析 4.示例测试&#xff1a; 测试源码&#xff1a; 测试结果&#xff1a; 计数排序&#xff0c;又被称为鸽巢原理&#xff0c;属于桶排序的一种&#xff0c;其本质是通过哈希映射思想&#xff0c;设定计数数组输入以…

音视频入门基础:WAV专题(5)——FFmpeg源码中解码WAV Header的实现

音视频入门基础&#xff1a;WAV专题系列文章&#xff1a; 音视频入门基础&#xff1a;WAV专题&#xff08;1&#xff09;——使用FFmpeg命令生成WAV音频文件 音视频入门基础&#xff1a;WAV专题&#xff08;2&#xff09;——WAV格式简介 音视频入门基础&#xff1a;WAV专题…