Linux详解 — 进程管理1 (进程概念 / 进程优先级)

进程管理一览

 接下来的几篇博客,我将主要按照这个思维导图的划分去进行讲解。
在这里插入图片描述
思维导图获取
提取码: kfiq


· 管理
  在理解什么是进程管理之前,我想我们可以先理解一下什么是管理!
问题:什么是管理?
管理的过程就是:“先描述,再组织” —> 也就是用信息(数据)去构建数据结构的过程
                                —>管理者就是对数据结构的管理
【所有事情都可以被分类为:决策 和 执行】
管理的三个角色:
  被管理者(学生/软硬件资源):
  执行者(老师/驱动的角色):执行
  管理者(校长/操作系统OS) :决策
-> 决策的依据是什么?
  信息(数据)
-> 信息量太大怎么办?
  对信息进行分类,将同类的数据放在一起。
  将这些信息放在一个结构体中。也就是抽象出一个结构体struct
  即,这个结构体能够“描述一个对象的信息 [面向对象]

结论:
· 被管理者和管理者可以不需要直接沟通。
· 管理者做管理就是对数据进行先描述,再组织。也就是对数据结构进行管理的过程。
  
  

进程概念

问题:什么是进程?我们该如何理解进程?
  把程序加载到内存后,它就是进程了。 (方便理解,这里的定义是不准确的)
#换句话说,就是一个程序运行起来后,它就变成了进程。
前面我们提到了,管理就是要先描述再组织,那么对进程的管理该如何描述和组织呢?
  其实在将程序的代码和数据加载到内存后,OS还会为其创建对应的数据结构-----进程控制块(process control block).

描述进程 — PCB (进程控制块)

  进程控制块(PCB)本质就是一个结构体,它里面存储着进程的相关信息。(所以它可以用来描述进程)
  在Linux中,进程控制块的具体名称是:task_struct
  

task_struct中所包含的内容

  • 标识符:pid,它是一个进程的唯一标识符,每个进程都不一样
  • 状态:包含进程状态、退出码、退出信号等
  • 优先级:相对于其他进程的优先顺序 (我会在下面细说)
  • 上下文信息:一个进程在执行的时候,处理器的寄存器中的数据。
  • 时间片:描述一个进程能执行多久
  • 程序计数器:程序中即将被执行的下一条指令的地址
  • I/O状态信息:包括显式I/O请求、分配给进程的I/O设备和被进程使用的文件列表等
  • 记账信息:包括处理器时间总和、使用的时钟数总和、时间限制、记账号等

     我接下来介绍一些task_struct中经常涉及的一些内容:

进程标识符

· 进程ID   —> getpid()
· 父进程ID —> getppid()
 在代码中,我们可以调用上面的两个接口去获取当前进程的pid和ppid。

	包含于<sys/types.h><unistd.h>
	pid_t getpid(void);
	pit_t getppid(void);

上下文信息

  在进程切换的时候,当前进程若没执行结束,则会将CPU中的执行的信息保存到上下文数据中。
  保存上下文信息的目的是为了下一次使用时能恢复到之前的状态。

简述进程的切换

  在程序被加载到内存中时,操作系统会为其创建对应的task_struct结构体用于描述进程的信息。
  由于CPU内部只有一套寄存器,计算时需要将内存数据移动到CPU内的寄存器中,形成当前的上下文数据。
  当进程被切换时:(被切换的情况:①时间片到了 ②来了更高优先级的进程,当前进程被抢占了)
  因此在进程切换前,会先保存上下文信息。以便于下一次恢复上下文。

进程优先级

问题:进程优先级是什么?
  CPU资源分配的先后顺序,就是指进程的优先级。
问题:为什么要有优先级?
  存在优先级后,可以把进程运行到指定的CPU上,这样一来,就可以把不重要的进程安排到某个CPU上,可以极大地改善系统的整体性能。
问题:怎么设置/修改优先级?
  利用PRI和NI调整优先级。

PRI与NI

  在弄清楚PRI和NI之前,我们先来熟悉一条Linux中的指令!

	ps -l     //查看当前进程的优先级方面的信息(主要用来看优先级的)    //ps -al 也可以

在这里插入图片描述
通过这个图,我们的聚焦点主要集中在我圈出的这几列。
UID:执行者的身份
PID:代表该进程的pid(标识符)
PPID:代表该进程的ppid,也就是父进程的pid
PRI: 代表这个进程可被执行的优先级,PRI的值越小代表越早被执行
NI: 代表这个进程的nice值。

优先级的数据计算与取值范围:

PRI: ps -l所显示的PRI值是经过计算后的新PRI。 PRI (new) = PRI (old) + nice;这里的PRI是new
NI: nice值的取值范围是 [-20, 19] 共40个级别,nice值是进程优先级的修正数据。

优先级的修改

  优先级的修改都是通过对nice值进行修改,从而间接的修改PRI的值的!
这里我们要介绍一下top命令了!

	top		#top命令相当于Windows中的任务管理器

概括修改优先级的流程:
            进入top后 —> 按 “r” —> 输入进程PID —> 再输入nice值即可修改    //没权限要sudo一下
注意:每次输入nice值后,都是对基础 PRI 值进行修改的!!!
      即:每次调整都是从起始值PRI ± nice 值的
我举个🌰,
   基础值PRI = 20,那么输入nice = 10后。 PRI —》30
  在此 基础上再输入 nice = -10后。        PRI —》-10
  解释:第二次也是在基础值PRI = 20的基础上进行±nice的!!!

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>