【Linux】详谈进程优先级进程调度与切换

一、进程优先级

1.1、为什么要有优先级        

        进程要访问某种资源,进程通过一定的方式排队,确认享受资源的优先顺序。计算机中资源过少,所以进程访问某种资源时需要排队。

1.2、优先级的具体表示

        进程的优先级其实就是PCB中的一个整形变量(int PRI)。Linux中进程的默认优先级是80,这个默认优先级是可以被修改的。Linux中优先级的范围是[60,99]。数字越小,进程优先级越高。Linux系统允许用户调整优先级,但是不能直接让你修改PRI的值,而是修改nice值。nice值不是进程的优先级,而是优先级的修正数据。PRI值每次在重新设置的时候都是从80开始。

        对进程优先级设置范围,本质是防止常规进程很难享受到资源的情况,为了防止产生进程饥饿问题。任何的分时操作系统,在进程调度上,都要进行较为公平的调度。

二、进程的调度与切换

        进程被加载到CPU上运行的时候,并不是必须一口气把代码跑完,现代操作系统,都是基于时间片轮转执行的

竞争性: 系统进程数目众多,而CPU资源只有少量,甚至1个,所以进程之间是具有竞争属性的。为了高 效完成任务,更合理竞争相关资源,便具有了优先级。

独立性: 多进程运行,需要独享各种资源,多进程运行期间互不干扰。

并行: 多个进程在多个CPU下分别,同时进行运行,这称之为并行。

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

 2.1进程的切换

        进程在运行的时候,会产生大量的临时数据,这些临时数据会保存在CPU对应的寄存器中。当一个进程在CPU上的一个时间片跑完时,CPU上寄存器中的数据都会被保存在进程的PCB中(保护上下文)CPU内部的所有临时数据,我们叫做进程的硬件上下文。所有的保存都是为了恢复,所有的恢复都是为了在上次的运行位置继续运行。当进程被二次调度时,将曾经保存的硬件上下文进行恢复,放到CPU上再次运行。

        虽然寄存器数据放在了一个共享的CPU设备里面,但是所有的数据,其实都是被进程私有的。CPU内某一时刻的数据只属于一个进程。

2.2进程的调度

        CPU实现进程调度的算法需要考虑优先级,饥饿问题以及效率问题。CPU的运行队列中有一个queue的task_struct结构体指针数组,该数组的100到139下标正好对应了进程60到99的四十个优先级,比如说有一个优先级为60的进程要被CPU调度了,CPU就会将其链入queue数组的100号下标中(类似于哈希表的结构),每一个队列都对应一个特定的优先级。这样,CPU在调度的时候就可以根据进程的优先级由高到低地调度进程了。如下图所示:

        在图中我们可以看到一个bitmap[5]的数组,该数组每个元素的类型为int,也就是说该数组一共可以表示成160个比特位,比特位的位置表示哪一个队列,比特位的值表示该队列是否为空。所以CPU检测哪一个队列中是否有进程就变成了检测对应的比特位是否为零 这样就可以解决进程判断进程优先级以及效率问题。

        从图中我们还可以看到,蓝色方框和红色方框里的内容是一样的。这其实就涉及到活跃队列和过期队列的概念了。在图上还有两个指针,active指针和expried指针,这两个指针分别指向运行队列和过期队列。当CPU在运行一个活跃队列里面的进程时,可能会不断地有新进程产生,这时CPU会把新产生的进程插入到过期队列中(当一个进程的时间片到了它也会被链入过期队列中)等待活跃队列中的进程都执行完了,交换active指针和expried指针的值,就相当于活跃队列和过期队列互换了,而CPU永远只会执行活跃队列里的进程,所以这种方法可以有效地解决进程饥饿问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756318.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识学习app

管理端: (1)登录 (2)首页数据报表:1.数据概括2.一周数据走势 (3)内容管理: 1.分类管理:新增,修改,删除,排序 2.八股文&…

红帽rhce认证含金量怎么样?红帽认证好考么?

红帽RHCE认证是Red Hat Certified Engineer的简称,中文为红帽认证工程师。作为全球范围内广受认可的Linux认证,红帽RHCE认证证明了持有者具备了在生产环境中部署、管理和优化红帽企业级Linux系统的能力。 红帽RHCE认证含金量的高低主要取决于以下几个方…

Vue.js+SpringBoot开发学校热点新闻推送系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 新闻类型模块2.2 新闻档案模块2.3 新闻留言模块2.4 新闻评论模块2.5 新闻收藏模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 新闻类型表3.2.2 新闻表3.2.3 新闻留言表3.2.4 新闻评论表3.2.5 新闻收藏表 四、系统展…

ARM day4 代码

.text .global _start _start: 设置PE10输出&#xff1a; 使能GPIOE的外设时钟 RCC_MP_AHB4ENSETR的第[4]设置为1即可使能GPIOE时钟 LDR R0,0X50000A28 指定寄存器地址 LDR R1,[R0] 将寄存器原来的数值读取出来&#xff0c;保存到R1中 ORR R1,R1,#(0x1<<4) …

Linux课程五课---git的使用

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

springboot与elasticsearch-7.16.2的基础CRUD使用——入门向

highlight: an-old-hope 基于elasticsearch-7.16.2 &#xff0c;使用的是旧版的高级客户端 restHighLevelClient springboot版本2.6.13 项目原代码地址 https://gitee.com/kenwm/es7demo.git 参考博客 1、SpringBoot集成ElasticSearch&#xff0c;实现模糊查询&#xff0c;批…

湖北省地质灾害分布数据 崩塌滑坡泥石流空间分布地质灾害详查等数据集

地质灾害是指在自然或者人为因素的作用下形成的&#xff0c;对人类生命财产造成的损失、对环境造成破坏的地质作用或地质现象。地质灾害在时间和空间上的分布变化规律&#xff0c;既受制于自然环境&#xff0c;又与人类活动有关&#xff0c;往往是人类与自然界相互作用的结果。…

前端 - 基础 表单标签 -- 表单元素( input - type属性) 文本框和密码框

表单元素 &#xff1a; 在表单域中可以定义各种表单元素&#xff0c;这些表单元素就是允许用户在表单中输入或选择 的内容控件。 表单元素的外观也各不一样&#xff0c;有小圆圈&#xff0c;有正方形&#xff0c;也有方框&#xff0c;乱七八糟的&#xff0c;各种各样&#xf…

01 龙芯平台openstack部署搭建-控制节点环境准备

#!/bin/bash 控制节点-环境准备 基本规划 控制节点计算节点10.130.0.3110.130.0.87 一、环境准备 1.hostname主机名配置 hostnamectl set-hostname controller exec bash #添加host controller_ip“10.130.0.31” computer_ip“10.130.0.87” echo “ c o n t r o l l e r …

每日学习笔记:C++ STL 的map、multimap

定义 特点 操作函数 意思就是&#xff0c;使用tuple中的元素来初始化pair&#xff0c;即string(“hello”)、complex(3.4,7.8) 元素的移除讨论

Deepspeed的机制学习以及ZeRO-1、ZeRO-2和ZeRO-3的区别

目录 DeepSpeed 机制 1. 分布式训练 2. 模型并行性 3. 内存和带宽优化 4. 高效的数据加载和预处理 5. 易用性和兼容性 6. 微调和超参数优化 ZeRO-1、ZeRO-2和ZeRO-3的区别 ZeRO优化级别概述 ZeRO-1 ZeRO-2 ZeRO-3 总结 DeepSpeed 机制 1. 分布式训练 DeepSpeed …

egg学习记录2

普通路由设置 router.get("路由",controller.文件.函数) //方法1 router.get("路由","文件.函数") //方法2路由重定向 router.redirect("新路由","旧路由") 插件的使用 安装好插件后&#xff0c;默认是没有启动该插件的…

大数据架构技术选型

OLAP数据库选型对比&#xff1a; AnalyticDB(阿里&#xff09;、Hologres&#xff08;阿里&#xff09;、Doris、StarRocks、ClickHouse、Hbase AnalyticDB技术架构 db是融合数据库、大数据技术于一体的云原生企业级数据仓库服务、支持高吞吐的数据实时增删改查低延时的实时分…

重载、重写(覆盖)和隐藏的区别

提示&#xff1a;文章 文章目录 前言一、背景二、 2.1 2.2 总结 前言 前期疑问&#xff1a; 本文目标&#xff1a; 一、背景 最近 二、 2.1 重载、重写&#xff08;覆盖&#xff09;和隐藏的区别 重载Overloading重写/覆盖Override隐藏Overwrite同一个类父子类关系父子…

stm32f103c8t6学习笔记(学习B站up江科大自化协)-USART串口-软件部分

前言&#xff1a; 本文属于软件部分&#xff0c;具体的串口硬件部分可见http://t.csdnimg.cn/afh48&#xff0c;对于串口的工作原理以及各个寄存器工作流程的记录十分详细。 一、接线图 二、stm32发送-电脑串口助手接收 1.USART初始化流程图 1.开启时钟 把需要使用的USART和…

【java-spring】spring AOP原理

Spring AOP&#xff08;面向切面编程&#xff09;是Spring框架的一个重要组成部分&#xff0c;它允许开发者将通用功能&#xff08;如日志记录、事务管理等&#xff09;从业务逻辑中分离出来&#xff0c;从而提高代码的可维护性和重用性。下面&#xff0c;我们将深入探讨Spring…

golang面试题总结

零、go与其他语言 0、什么是面向对象 在了解 Go 语言是不是面向对象&#xff08;简称&#xff1a;OOP&#xff09; 之前&#xff0c;我们必须先知道 OOP 是啥&#xff0c;得先给他 “下定义” 根据 Wikipedia 的定义&#xff0c;我们梳理出 OOP 的几个基本认知&#xff1a; …

13 龙芯平台openstack部署搭建-nova-controllercomputer部署(单节点)

一、创建Nova相关数据库、凭据与API端点 1.创建数据库并授权 #nova-controller先决条件 mysql -uroot -ploongson -e “CREATE DATABASE nova_api;” mysql -uroot -ploongson -e “CREATE DATABASE nova;” mysql -uroot -ploongson -e “CREATE DATABASE nova_cell0;” my…

leetcode 402. 移掉 K 位数字

题目链接&#xff1a;leetcode 402 1.题目 给你一个以字符串表示的非负整数 num 和一个整数 k &#xff0c;移除这个数中的 k 位数字&#xff0c;使得剩下的数字最小。请你以字符串形式返回这个最小的数字。 2.示例 1&#xff09;示例 1 &#xff1a; 输入&#xff1a;num …

操作系统设备管理

操作系统实现对外接设备的管理功能&#xff0c;主要是I/O设备&#xff0c;unix适用将外部设备抽象为特殊文件&#xff0c;用户用与外部文件相同的方法操作外部设备&#xff0c;具体又可以分为&#xff1a; 人机交互类外部设备&#xff0c;如鼠标键盘等&#xff0c;这类设备数据…