linux:历程优先级、环境变量、地点空间

[复制链接]
发表于 2026-2-4 23:51:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
历程优先级

什么叫历程优先级?
历程优先级是指历程获取某些资源的先后序次
上文中的task_struct,也叫历程控制块(PCB),本质上是布局体,我们的优先级就被写在布局体内里(内部字段)
  1. int prio = ??
复制代码
在Linux下,历程的优先级是用数字表现的。数字越小,优先级越高
怎样检察历程的优先级?

来,先创建一个历程
  1. #include<stdio.h>
  2. #include<unistd.h>
  3. int main(){
  4.     while(1){
  5.         printf("i am a process,pid:%d\n",getpid());
  6.         sleep(1);
  7.     }
  8.     return 0;
  9. }
复制代码
另有该步伐对应的makefile
  1. bin = myprocess.exe
  2. src = myprocess.c
  3. $(bin) :$(src)
  4.         @gcc -o $@ $^
  5.         @echo "compiled $(src) to $(bin)..."
  6. .PHONY:clean
  7. clean :
  8.         @rm -f $(bin)
  9.         @echo "clean project"
复制代码
然后我们用之前学的检察历程的下令来检察历程:
  1. ps -l
复制代码


但是我们发现能检察的历程只有两个,而且没有我们运行的谁人历程,这是为什么?
由于我们在运行历程和检察历程的时间使用了两个终端。这个下令只能检察当前终端的历程,以是检察不到另一个终端的历程。此时我们必要使用下面的下令:
  1. ps -al//a是all的意思
复制代码

PID:25485就是我们的历程
这里的PRI 就是我们表现优先级的标识,NI就是对优先级举行修改的值,可以资助我们在启动前大概运行时做动态调解(没错,优先级是可以修改的)
   UID : 代表实验者的身份
  PID : 代表这个历程的代号
  PPID :代表这个历程是由哪个历程发展衍生而来的,亦即父历程的代号
  PRI :历程可被实验的优先级(默认优先级),其值越小越早被实验
  NI:当进步程优先级的修正数据,nice值,新的优先级=优先级+nice,到达对于历程优先级动态修改的过程
  在下令行行中输入renice:

然后输入:
  1. top//top命令经常用来监控监控linux的系统状况,是常用的性能分析工具,能够实时显示系统中各个进程的资源占用情况。
复制代码
(top也可以用CTRL+C/q(quit)来克制)

来先看看我们的历程在哪?此时NI为0

输入r,输入你想要输入的值(我输了100)

为什么呢?
着实是由于nice值不可恣意调解,是有范围的(为了包管均衡)
那范围是多少呢?
一样平常来说,nice值是[-20,19],统共四十个数字,以是刚调成一百实际上是把nice值酿成19了(选取最靠近的取值范围的数,究竟100弘大于19)
再修改一个

欸,为什么不可以了?
由于名为平常用户是更改历程优先级的次数是有限定的,历程优先级是不支持被频仍修改的。固然超等用户root是不受限定的
关于优先级的调解,我们每次调解的时间都是从80开始的,在80的根本上对数据做修正(固然并不保举改优先级)
当只有一个CPU,一套寄存器时,多历程在特定时间范围内被调治时必要通过上下文切换的方式包管多个历程的代码得以推进,我们把这个过程叫做并发(CPU运行速率很快,能在很短的时间内将这些东西都举行一遍)(卡顿本质是CPU调治历程操纵不外来,以是不要挂太多背景)
   并发和并行的区别:
  并发: 多个历程在一个CPU下采取历程切换的方式,在一段时间之内,让多个历程都得以推进
  并行:多个历程在多个CPU下同时运行
  并发和并行也是可以同时存在的
优先级的特点和意义

我们知道历程访问的资源(CPU)始终都是有限的,通常都是很多历程在争几个或一个CPU
   竞争性: 体系历程数目浩繁,而CPU资源只有少量,乃至1个,以是历程之间是具有竞争属性的。为了高效完成任务,更公道竞争相干资源,便具有了优先级
  独立性: 多历程运行,必要独享各种资源,多历程运行期间互不干扰
  操纵体系关于调治和优先级的原则:分时操纵体系,包管根本的公平,如果历程长时间不被调治,就会造成饥饿标题
   饥饿标题:思量一台打印机分配的例子,当有多个历程必要打印文件时,体系按照短文件优先的战略排序,该战略具有均匀期待时间短的优点,似乎非常公道,但当短文件打印任务源源不绝时,长文件的打印任务将被无穷期地推迟,导致饥饿以至饿死。
  下令行参数

我们的main函数也是带参数的:
  1. #include<stdio.h>
  2. int main(int argc,char* argv[])
  3. {
  4.         return 0;
  5. }
复制代码
不外寻常没写,那阐明main函数的参数可带可不带
那么这些参数都是干啥的呢?
上图的意思是:反面不加-a这种东西的时间,./process.out就是一个参数,反面的-a等等也是参数
也就是说:main函数的参数是包罗步伐名称在内及其他参数
什么意思呢?
main函数是我们的主函数,是步伐实验的出发点,也是尽头,有且仅有一个;以是他的参数比力特别
argv[0]生存自身运行的目次路径和步伐名,从argv[1]开始才是指向对应的参数,以是我们的main函数一样平常都是这么写的:
  1.  int main (int argc,char *argv[]){...}//指针数组
  2.  int main (int argc,char **argv){...
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表