首页 > 系统相关 >Linux系统编程·进程优先级

Linux系统编程·进程优先级

时间:2022-11-14 14:32:14浏览次数:65  
标签:优先级 Linux 编程 PRI 寄存器 进程 CPU nice


Linux系统编程·进程优先级_linux

你好,我是安然无虞。

文章目录

  • ​​自学网站​​
  • ​​基本概念​​
  • ​​查看系统进程​​
  • ​​PRI vs NI​​
  • ​​其他概念​​
  • ​​竞争性​​
  • ​​独立性​​
  • ​​并行​​
  • ​​并发​​
  • ​​练习题​​

自学网站

推荐给老铁们两款学习网站:
面试利器&算法学习:​​​牛客网​​​ 风趣幽默的学人工智能:​​人工智能学习​

基本概念

什么是优先级, 什么又是权限呢?
我们知道, 权限是能与不能的问题, 而优先级呢, 是"你能, 只不过是先还是后"的问题.

进程优先级指的是进程获取资源的先后顺序.

为什么会存在进程优先级呢?
排队的本质叫做确认优先级, 我们的系统里面永远都是进程占大多数, 而资源是少数, 说到底, 终归是资源不够, 所以进程竞争资源是常态.

查看系统进程

我们输出 ps -l 命令会看到:

Linux系统编程·进程优先级_数据_02


其中的 PRI 是 priority, NI 是 nice.

我们平时在查看进程优先级时, 可以使用如下命令:

ps -la

在Linux中, 要更改进程的优先级, 需要更改的不是 PRI, 而是 NI( nice 值是进程优先级的修正数据, 所以我们改的是 nice 值)

PRI vs NI

  • PRI : 代表这个进程可被执行的优先级, 且其值越小越早被执行(PRI默认值是80, 其值越小, 进程优先级越高).
  • NI : 代表这个进程的 nice 值.

PRI 还是很好理解的, 所以我们主要说的是NI, nice 值表示进程可被执行的优先级的修正数据, 注意哦, PRI(new) = PRI(old) + NI, 也就是说当 nice 值为负数的时候, 该进程的优先级就会变小, 即优先机会变高, 也就越快的被执行.

所以,在Linux中, 如若要调整进程的优先级, 需要改变的是进程的 nice 值. 不过注意哦, nice 值是有范围的, 它的取值范围是 -20 到 19. 这个我们也能理解, 因为Linux下是不允许无节制的设置优先级, 每次设置优先级时, PRI 都会先恢复至 old , 再做计算.

所以, 这两值的取值范围是:

  • nice : [-20, 19]
  • PRI : [60, 99] (因为PRI默认值是80)

这里我就不做实验演示了, 因为这部分内容了解即可, 并不是特别重要. 如果有老铁想更改进程优先级, 可以使用 top 命令哦.

其他概念

下面我们说说进程的其他概念:

竞争性

我们知道系统中进程数目众多,而CPU资源只有少量, 甚至只有一个, 所以进程之间是具有竞争属性的, 故而有了优先级的概念.

可能有老铁会问了, 操作系统就是简单的根据运行队列来进行先后调度的吗? 有没有可能突然来了一个优先级更高的进程呢?

不知道老铁有听过抢占式内核的概念吗, 我们正在运行的低优先级进程, 如果来了一个优先级更高的进程, 我们的调度器会直接把这个正在运行的低优先级进程从CPU上剥离, 放上优先级更高的进程, 这叫进程抢占

独立性

多进程运行, 需要独享各种资源, 而且多进程运行期间互不干扰. 进程具有独立性, 不会因为一个进程挂掉或异常导致其他进程出问题.

并行

多个进程在多个CPU下, 分别同时运行叫做并行.

Linux系统编程·进程优先级_数据_03


可能有老铁会问了, 诶, 不对呀, 我的电脑是单CPU的, 但是我的电脑上好多个进程都在跑啊, 比如我一边在VS上敲代码, 一边打开QQ音乐听歌, 这是为什么呢?

我要强调的是: 多个进程在你的系统中运行 != 多个进程在你的系统中同时运行.

并发

多个进程在CPU下采用进程切换的方式, 在一段时间之内, 让多个进程都得以推进, 我们称之为并发.

关于并发, 我们需要注意的是, 不要以为进程一旦占用CPU资源, 就会一直执行到结束, 才会释放CPU资源, 我们遇到的大部分的操作系统都是分时的.

分时? 这是什么意思呢? 也就是说OS会给每一个进程, 在一个调度周期中, 赋予一个时间片的概念.

Linux系统编程·进程优先级_linux_04


在一个时间片内, 多个进程都会通过进程切换交叉的方式, 让多个进程代码在一段时间内都得到推进, 这种现象叫做并发.

关于进程切换我们需要了解的的是:

我们知道CPU内部是有一些寄存器的:

Linux系统编程·进程优先级_数据_05


CPU内的寄存器, 可以临时的存储数据, 非常少, 但是很重要.

当进程在被执行的过程中, 一定会存在大量的临时数据, 会被暂存在CPU的寄存器中.

那寄存器中数据的到底有多重要呢?
(想想当兵保存学籍和恢复学籍的例子)

注意哦, 我们把进程在运行过程中产生的各种寄存器数据, 叫做进程的硬件上下文数据.
当前进程被剥离, 需要保存该进程的上下文数据;
当前进程被恢复, 需要将曾经保存的上下文数据恢复到寄存器中.

上下文数据在哪里保存呢?
当然是task_struct.

最后我们还要准确区分: 寄存器和寄存器中的数据
寄存器有一套, 而寄存器中的数据有多份.

练习题

1.关于 linux 的进程,下面说法不正确的是
A.僵尸进程会被 init 进程接管,不会造成资源浪费;
B.孤儿进程的父进程在它之前退出,会被 init 进程接管,不会造成资源浪费;
C.进程是资源管理的最小单位,而线程是程序执行的最小单位。Linux 下的线程本质上用进程实现
D.子进程如果对资源只是进行读操作,那么完全和父进程共享物理地址空间。

解析:
僵尸进程指的是进程退出后不会完全释放资源,会造成系统资源泄漏;

孤儿进程在父进程退出后,父进程成为init进程,进程退出,孤儿进程的资源将被init进程释放;

操作系统通过pcb实现对程序运行调度控制;

fork系统调用通过复制父进程创建一个子进程,父子进程数据独有,代码共享(在数据不发生改变的情况下父子进程资源指向同一块物理内存空间(写时拷贝技术)

2.在抢占式多任务处理中,进程被抢占时,哪些运行环境需要被保存下来?[多选]
A.所有cpu寄存器的内容
B.全局变量
C.页表指针
D.程序计数器

解析:
所有cpu寄存器的内容 cpu上正在处理的数据;

全局变量 程序内的数据(并不一定正在被处理);

页表指针 程序切换时会将页表起始地址加载到寄存器中;

程序计数器 下一步程序要执行的指令地址


标签:优先级,Linux,编程,PRI,寄存器,进程,CPU,nice
From: https://blog.51cto.com/u_15495449/5849100

相关文章

  • 响应式编程(反应式编程)的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)
    响应式编程的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)文章目录​​响应式编程的来龙去脉(同步编程、多线程编程、异步编程再到响应式编程)​​​​简介​​​​......
  • 在安卓手机上运行arm汇编程序
      效果图手机安装gcc.datamsg:.asciz"hello,gnuasm\n"len=.-msg.text.globalmainmain:push{r0,r1,r2,lr}ldrr1,=msgmov......
  • Linux命令之sar命令用例
    一、命令简介  sar(SystemActivityReporter系统活动情况报告)命令用于收集、报告或保存系统活动信息。sar命令将操作系统中选定的累积活动计数器的内容写入标准输出。会计......
  • Linux sar命令详解:分析系统性能
    sar命令很强大,是分析系统性能的重要工具之一,通过该命令可以全面地获取系统的CPU、运行队列、磁盘读写(I/O)、分区(交换区)、内存、CPU中断和网络等性能数据。sar命令的基本......
  • Linux配置node环境
    1.下载安装包https://nodejs.org/en/download/releases/官网下载需要的版本,我这里下的16版本mac本通过电脑自带远程传输sftp进行本地上传安装包,window需要自行百度一下......
  • 90 条简单实用的 Python 编程技巧,建议收藏
    编码原则建议1:理解Pythonic概念—-详见Python中的《Python之禅》建议2:编写Pythonic代码避免不规范代码,比如只用大小写区分变量、使用容易混淆的变量名、害怕......
  • javascript 高级编程 之 Array 用法总结
    引用类型是一种数据结构,用于将数据和功能联系起来。创建对象的方式:1.new操作符vararray=newArray();2.字面量表示法创建vararray=[];Array检测数组:检测数组......
  • Linux系统出现cannot create temp file for here-document: Read-only file system解
    打开终端输入命令比如mkdir、cd等等,会出现如下提示cannotcreatetempfileforhere-document:Read-onlyfilesystem解决办法如下:mount-oremount,rw/原文:https:......
  • 第一章 linux-shell命令入门
      本人目前正在学习linux驱动开发,利用我想记录我Linux的学习过程,并分享出来,为大家提供一些经验,同时加强我对知识的总结能力,希望我的博客能为大家提供帮助。废话不多说,我......
  • Linux shell脚本执行后出现语法错误: 未预期的文件结尾
    Windows环境下编写了一个shell脚本,上传到Linux环境中执行,Linuxshell脚本执行后出现语法错误:未预期的文件结尾。出现了此错误提示,进行了如下的检查:1、检查Shell脚本的......