【Linux】--进程(优先级)

embedded/2024/11/18 22:53:55/

大家好呀,我是残念,希望在你看完之后,能对你有所帮助,有什么不足请指正!共同学习交流哦
本文由:残念ing原创CSDN首发,如需要转载请通知
个人主页:残念ing-CSDN博客,欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:[残念ing 的【Linux】系列专栏——CSDN博客]

请添加图片描述

目录

  • 对上一次学习的补充
    • 进程退出
    • Z-僵尸状态
  • 孤儿进程:
  • ***进程优先级***
    • 进程的优先级是什么?
    • 为什么要有优先级?
    • 修改优先级(不建议修订 )
  • 切换过程和理解
  • 4 进程切换的核心
  • 5 关于每个进程的上下文数据
  • 6 Linux真实的调度算法
  • Linux中的双链表结构

今天的学习内容
1 对上一次学习的补充
2 孤儿进程
3 进程的优先级
4 切换过程和理解
5 关于每个进程的上下文数据
6 Linux真实的调度算法
7 Linux中的双链表结构

对上一次学习的补充

进程退出

  1. 代码不会执行了—首先可以立即释放的就是进程对应的程序信息数据
  2. 进程退出,要有退出信息(进程的退出码)保存在自己的task_struct内部
  3. 管理结构task_struct 必须被OS维护起来,方便用户未来进行获取进程退出的信息

Z-僵尸状态

维护自己的task_struct,方便未来进程读取退出状态,但是如果没有人管(默认没人管),就会一直僵尸,task_struct会一直消耗内存(这样会导致内存泄漏),后面一般需要父进程读取子进程信息,子进程才会自动退出
在这里插入图片描述

孤儿进程:

当父进程退出,子进程还在的这种进程就是孤儿进程,这样的子进程会被领养,会被系统自动领养
在这里插入图片描述

进程优先级

进程的优先级是什么?

进程的优先级是:获得CPU资源的先后顺序,比如:排队的本质就是在确认优先级。

为什么要有优先级?

因为一般目标资源(CPU资源)是比较少的
优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用,可以改善系统性能。
还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整
体性能

修改优先级(不建议修订 )

  1. 指令 top->r->根据建议来输入
  2. 代码

切换过程和理解

  1. 你的进程在运行的时候,会有很多的临时数据,都在CPU的寄存器中保存。
    在这里插入图片描述

  2. CPU内有很多个寄存器,它们构成了一整套寄存器,寄存器!=寄存器里面的数据

4 进程切换的核心

进程切换的核心就是进程上下文数据的保存和恢复。
保护就是单时间片或者其他进程进入之前,先将相关寄存器的内容保存起来(这个保存的地方是不在CPU中的)。
恢复就是当要继续这个进程时,将历史保存的寄存器的数据,恢复到寄存器中
每次的切换都保证了CUP在运行下一个进程时都是全新的。

进程在CUP中的切换过程

  1. 根据pc取指令
  2. 更新pc
  3. 分析执行指令
    pc=当前地址+读进来的指令的长度
    在这里插入图片描述

5 关于每个进程的上下文数据

CPU寄存器内部是存储上下文数据的,这套寄存器是被多个进程共享使用的。
在这里插入图片描述

6 Linux真实的调度算法

在这里插入图片描述
每个进程会被根据自己的优先级,被分配到一个类似于哈希桶中,相同优先级的进程会被链到一起,然后依次等待调用。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
饥饿问题:
优先级很高,表示一定要一直优先吗?
优先级很低,表示一定不会被调度吗?

调度器是要非常均衡的进行进程调度的,不是优先级越高,就会一直优先,也不是优先级越低,就不会被调度到。

active队列永远都是一个存量进程竞争的情况即:
active队列中进程只会越来越少,不会增多

解决饥饿问题的方法

  1. CPU调度只会从active队列中选择进程来进行调度
  2. 调度有三种情况
    a. 运行退出,(active进行删除)
    b. 不退出,但是时间片到了(根据优先级加入到expire队列)
    c. 有新的进程产生(根据优先级加入到expire队列)
  3. 单active队列为空时,进行swap(&active,&expired)
    a. 之前:按照优先级调度
    b. 之后:给了其他优先级的进程的调度机会

补充知识:
1 所有的进程都要链表连接
2 进程可以在调度队列中,阻塞队列中

Linux中的双链表结构

在Linux中的双链表结构只有连接字段,没有属性字段
在这里插入图片描述
这样设计的意义?
在这里插入图片描述
一个进程,既可以在全局链表中,又可以在任何一个其他数据结构中,只要加节点字段即可

原理是什么呢?

struct A
{int a;char b;double c;float d;
}

原理:(struct A*)(&c-偏移量)
在这里插入图片描述

#define who(type, x)((type *)(&x-&(type*)0->x))
task struct, link
who(struct task struct, link)->pri-> pid

http://www.ppmy.cn/embedded/138642.html

相关文章

UDP/TCP 简述

文章目录 一、TCP协议概述二、UDP协议概述三、TCP与UDP的主要区别 UDP/TCP 简述 传输控制协议(TCP)和用户数据报协议(UDP)作为最常用的两种协议,各自具有独特的特点和适用场景。本文旨在简要介绍这两种协议的基本概念、…

c++入门基本语句/算法——第八章-unit3:指针与数组的关系

hellơ̴̢̢̧̡̨̧͇̮̭͎̞̫̲̣̰̯̤̺̖͙̟͉̮͙̖͇̳̟̫̼̜̰̼̹͉̟̬̖̺̫͉̼͚̣͍͖͙͚͚̲̭̫͎̖̪̦̥̻̲̦͕̇̄̄́̋͋̔̎͂̎̆̂̀̅̎̉̔̉̄͛̔̆̿̓̿͋͌͛̿͌͒͋̆̏̽̀̓̂̂̑̓̆̀͛̄̿̍̍̓̊̓̿͌̄̚͘͘͜͠͝͝ͅͅ…

STL序列式容器之list

相较于vector的连续性空间&#xff0c;list相对比较复杂&#xff1b;list内部使用了双向环形链表的方式对数据进行存储&#xff1b;list在增加元素时&#xff0c;采用了精准的方式分配一片空间对数据及附加指针等信息进行存储&#xff1b; list节点定义如下 template<clas…

如何在 Ubuntu 上安装 RStudio IDE(R语言集成开发环境) ?

RStudio 是一个功能强大的 R 语言集成开发环境(IDE)&#xff0c;R 是一种主要用于统计计算和数据分析的编程语言。任何从事数据科学项目或任何其他涉及 R 的类似任务的人&#xff0c;RStudio 都可以使您的工作更轻松。 本指南将引导您完成在 Ubuntu 系统上安装 RStudio 的过程…

Apache Doris:高级数据导入导出与外部系统集成

引言 在前几篇文章中&#xff0c;我们已经介绍了 Apache Doris 的基本概念、安装配置、性能优化和数据建模最佳实践。本文将进一步探讨 Doris 的高级数据导入导出功能、数据安全与权限管理&#xff0c;以及如何与外部系统集成。通过本文&#xff0c;读者将能够更全面地了解 Do…

2024年了,TCP分析工具有哪些?

TCP分析工具广泛应用于网络调试、性能分析和协议学习。以下是一些常用的TCP分析工具&#xff0c;它们各有特点&#xff0c;适用于不同的场景&#xff1a; Wireshark - 这是一个非常强大的网络协议分析器&#xff0c;支持图形界面&#xff0c;可以捕获和分析TCP流量&#xff0c;…

linux基础笔试练习题笔记(2)

在Linux系统上&#xff0c;下面那个命令不可以用来查看文件内容&#xff08;&#xff09; A.cat B.ls C.less D.more 答案解析&#xff1a; cat命令用用于一次性显示文件的所有内容&#xff0c;一般文件内容较多时一般会使用more或less命令。 more:分页显示文件内容&#xf…

JSON.stringify的应用说明

前言 JSON.stringify() 方法将 JavaScript 对象转换为字符串,在日常开发中较常用&#xff0c;但JSON.stringify其实有三个参数&#xff0c;后两个参数&#xff0c;使用较少&#xff0c;今天来介绍一下后两个参数的使用场景和示例。 语法及参数说明 JSON.stringify()&#xf…