• 【Linux】进程优先级(PRI,NI)和进程切换


    1、进程优先级

    无论是外设还是CPU,所能提供给操作系统的资源很少,而操作系统中的进程又非常多,安排谁先使用资源,就需要进程优先级的存在。

    • 查看进程优先级

    ps -al 查看当前运行进程的优先级信息。
    在这里插入图片描述

    ps -al | grep test 配合管道查看指定进程优先级信息。
    ps -al | head -1 显示对应标题。
    在这里插入图片描述
    这么多的信息,我们只需要关注几个。
    UID,PID,PPID我们很熟悉,对应用户ID,该进程ID,父进程ID。

    PRI:老的优先级。(这个值默认都是80)
    NI:在进程中,进行优先级调整的,都是通过修改NI值。(也称为nice值)
    最终优先级 = PRI + NI,两者相加大的就是优先级高的。

    • 进程优先级的范围

    通过sudo top,可以动态地持续监听进程地运行状态,并且还提供了一个交互界面,可以供用户操作。

    进入top界面,输入r(表明修改nice值),再输入对应进程PID,再输入NI值。
    在这里插入图片描述

    在这里插入图片描述

    先将NI设为100,通过查看进程优先级,发现NI只设为19,只变成了99。
    在这里插入图片描述
    再将NI设为-100,查看优先级,发现NI只设为-20,只变成了60。
    在这里插入图片描述

    结果来看,NI的范围只有[-20,19],所以最终优先级范围也就[60,99]

    NI的范围小,对应进程优先级的区间小,那么多的进程,为什么这个区间不设大一点呢?
    如果区间设置的很大或是无限制,要是出现恶意进程故意修改优先级使得其它进程无法正常运行,所以这样设置还是有道理的。

    目前这个阶段,对进程优先级的感知还不强,也没有什么需要调整进程优先级的场景,具体看需求,现在认识一下。

    2、进程切换

    在此前,先来介绍几个概念:

    1. 独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。(父子进程,子进程死亡不影响父进程)。
    2. 并行: 一个CPU每时只有一个进程正在运行,多个CPU在任何一个时刻有多个进程同时进行运行,这就称为并行。
    3. 并发: 多个进程在一个CPU下采用进程切换的方式,在一段时间内,让多个进程都得以推进。(一个进程不是在CPU里运行完了就退出,而是可能运行个10ms,就进行等待状态或进入运行队列,再进行下一个进程,这样比如1s就能跑100个10ms的进程代码。)

    下面进程切换就看具体做了什么。

    首先,CPU的构成中有许多的寄存器,这些寄存器保存着当前运行的进程的数据。

    寄存器被所有进程共享,寄存器内的数据,是属于当前运行进程的,这个数据也被称为 — 上下文数据

    一个进程在CPU上单次运行的一段时间称为时间片

    常见的寄存器eip(pc指针),存储当前指令下一条指令的地址。

    当操作系统想要运行一个进程,会将对应进程PCB地址传给CPU的某一个寄存器。让CPU能找到这个进程PCB,从而找到对应代码和数据。

    CPU是很 “ 笨 ” 的只能靠指令集读取指令,当进程运行将指令传给CPU,CPU靠指令集分析指令运行对应代码,当进程的时间片结束后,操作系统将保存此时CPU中寄存器内的数据,当再次轮到这个进程后操作系统将原本数据加载到寄存器中,eip就可以通过下一条指令地址让代码继续运行。

    进程退出CPU,操作系统保留寄存器里的数据,进程回到CPU,操作系统将原本数据恢复到寄存器中。这就完成了进程切换。
    在这里插入图片描述

  • 相关阅读:
    SpringBoot中ElasticsearchRestTemplate的使用示例,(增删改查、高亮查询、id查询、分页查询、时间范围查询、多条件查询)
    【相同数字的积木游戏1】python实现-附ChatGPT解析
    拥抱新技术?你需要考虑的方面
    Oracle根据时间查询
    CASIO4800线路坐标计算程序(1)
    Maven上传本地离线依赖
    王兴投资5G小基站
    如何裁剪视频画面尺寸?快把这些方法收好
    jQuery动态添加元素后,元素注册事件失效
    shell_76.Linux使用 return 命令
  • 原文地址:https://blog.csdn.net/Ahaooooooo/article/details/128031433