进程切换和是Linux2.6内核中进程调度的算法

正文开始前给大家推荐个网站,前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

进程切换

进程并发就需要做到进程切换,一个CPU一套寄存器但是需要运行的进程有很多,CPU内是内置的有时间片的,当时间片到之后,上面的进程就会被从CPU上剥离下来,开始调度下一个进程,所以被剥离下来的进程就需要保存CPU中寄存器的内容,然后等到下一次被调度的时候再把内容放上去,接着执行,寄存器上的内容不需要清零,直接进行覆盖就行,因为下一个进程来的时候,这时寄存器的内容是上一个进程的并且已经保存带走了。所以进程在被调度的时候是会进行上下文保护的,不然下一次调度就会不知道从哪里开始。这就是进程切换。

O(1)调度算法

在这里插入图片描述
我们可以看到运行队列有140个位置,每个位置就表示一个优先级,0 ~ 99我们不用考虑,而100 ~ 139是普通优先级,正好对用我们普通用户可以修改的40个优先级。每一个需要运行的进程都会被放在运行队列中,我们会发现其中有两个运行队列,这是怎么回事?
两个运行队列我们分为活跃队列和过期队列,其中void* active 指向的是活跃队列,void* expired指向的是过期队列,CPU只调度活跃队列,这样做有什么好处,因为CPU要保证每个进程较为公平的都能够得到调度,如果只有一个队列的话,如果已经在调度100位置的优先级了,此时如果前面插入了一个优先级高的进程,那CPU就得拐回去调度它,如果加入的优先级高的进程很多的话,会导致优先级低的一直无法导致调度,从而导致进程饥饿问题,所以当一个进程没有别调度完,就去过期队列排队,所以活跃队列的进程一定会越来越少,如果CPU把活跃队列中的所有优先级的进程都调度完了,就进行swap(active,expired)操作,然后持续进行这样的操作,来保证每个进程进行较为公平的调度。

我们看到还有一个bitmap的东西,它其实是一个int的数组,可以表示160个比特位,所以就可以映射每个优先级是否有进程,利用这样的位图可以大大的提高查找非空队列的效率。

nr_active就表示这个整个队列queue总共有多少个运行状态的进程。

那么今天的分享就到这里了,有什么不懂得可以私信博主,或者添加博主的微信,欢迎交流。

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

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

相关文章

基于cy7c68013的逻辑分析仪nanoDLA全套软件linux下编译测试

0. 环境 - win10 - ubuntu22 - nanoDLA 提前获取到源码:-> 浏览器打开 https://github.com/wuxx/nanoDLA -> Download as zip. 硬件就直接用taobao买到的,原理图是 1. win10出厂测试 1.1 安装pulseview nanoDLA-master\software\pulseview-0.4.…

014集:python访问互联网:网络爬虫实例—python基础入门实例

以pycharm环境为例: 首先需要安装各种库(urllib:requests:Openssl-python等) python爬虫中需要用到的库,大致可分为:1、实现 HTTP 请求操作的请求库;2、从网页中提取信息的解析库;3、Python与…

外贸货源怎么找?9大优质货源渠道分享!

近几年跨境电商无货源模式大火了一把,让不少人都跃跃欲试。毕竟这种模式投资少,门槛低,回本快,想增加额外收入或创业的人们都争相涌入。但是要想做得好,选好货源渠道就是关键了。如果不小心选错了供应商,可…

关键词提取

在自然语言处理领域中,处理海量文本信息的关键在于把用户关心的问题提取出来。而关键词是能够表达文档中心内容的词语,更是表达文档主题的最小单位。因此,文本关键词的提取对于文本信息的理解是至关重要的。 关键词提取是文本挖掘领域下的一个…

javacv和opencv对图文视频编辑-java项目搭建1

要搭建javacv项目,你需要按照以下步骤进行操作: 下载并安装OpenCV库:访问OpenCV的官方网站(https://opencv.org/)并下载适合你系统的版本。安装完成后,将OpenCV的库文件添加到你的项目中。 添加JavaCV库&a…

MybatisPlus框架入门级理解

MybatisPlus 快速入门入门案例常见注解常用配置 核心功能条件构造器自定义SQLService接口 快速入门 入门案例 使用MybatisPlus的基本步骤: 1.引入MybatisPlus的起步依赖 MybatisPlus官方提供了starter,其中集成了Mybatis和MybatisPlus的所有功能&#…

如果你正在学自动化测试,那么请你仔细看完这篇文章

接触了不少同行,由于他们之前一直做手工测试,现在很迫切希望做自动化测试,其中不乏工作5年以上的人。 本人从事软件自动化测试已经近5年,从server端到web端,从API到mobile,切身体会到自动化带来的好处与痛楚…

python面试题

python装饰器 装饰器的本质就是一个函数能为其它函数增加额外功能 装饰器不加参数 #coding:utf-8 from time import time#装饰器函数 def elapsed(target):"统计目标函数执行的耗时"def decorated(*args,**kwargs):start time()r target(*args,**kwargs)end tim…

NXP-RT1176开发(一)——环境搭建(MCUXpressoIDE/VSCode)

目录 1. 安装IDE 1.1 官方开发的IDE软件 1.2 Config工具下载 1.3 说明(需先有SDK) 2. 下载SDK 3. VScode环境下编译 3.1 安装插件 3.2 确保本地有交叉编译工具链和CMAKE 3.3 加载本地SDK 3.4 导入例程编译 1. 安装IDE 该处理器编译规则可以MDK…

FlinkAPI开发之水位线(Watermark)

案例用到的测试数据请参考文章: Flink自定义Source模拟数据流 原文链接:https://blog.csdn.net/m0_52606060/article/details/135436048 Flink中的时间语义 哪种时间语义更重要 从《星球大战》说起 数据处理系统中的时间语义 在实际应用中&#xff0c…

vue cli 配置了productionSourceMap: true 开启source-map 没有生成map文件

因为UglifyJsPlugin导致生成map失败,可以将其注释即可 也可以加上 new UglifyJsPlugin({sourceMap:true })

用python实现给出关键字查找并标注pdf文件中关键字

要在Python中标注PDF文件中的关键字,可以使用Python的PDFMiner库和Python的matplotlib库。 首先,需要安装这两个库。可以使用pip命令进行安装: shell 复制代码 pip install pdfminer.six matplotlib 接下来,可以使用以下代码实现…

基于Java+SSM运动会管理系统详细设计和实现【附源码】

基于JavaSSM运动会管理系统详细设计和实现【附源码】 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统 …

java解析json复杂数据的第四种思路

文章目录 一、概述二、数据预览1. 接口json数据 三、代码实现1. 核心代码2. 字符串替换结果3. 运行结果 一、概述 接前两篇 java解析json复杂数据的两种思路 java解析json复杂数据的第三种思路 我们已经有了解析json数据的几种思路,下面介绍的方法是最少依赖情况下…

C++写二进制文件

源文件 #include <iostream> #include <fstream> #include <sstream> #include <cmath>void convert2() {// 打开输入文本文件std::ifstream inputFile("mask.txt");// 打开输出二进制文件std::ofstream outputFile("mask.dat", …

Dubbo分层设计之Serialize层

前言 Dubbo 框架采用 微内核 插件 的基本设计原则&#xff0c;自身功能几乎也都通过 SPI 扩展点实现&#xff0c;可以方便地被用户自由扩展和更换。 Dubbo 框架采用分层设计&#xff0c;自上而下共分为十层&#xff0c;各层均为单向依赖&#xff0c;每一层都可以剥离上层被复…

GO——单元测试(test)

go test用来做什么 做单元测试&#xff0c;测试函数是否符合预期 go test在哪个包 testing 如何使用 参考&#xff1a; https://geektutu.com/post/quick-go-test.html 以my_func.go中的Add方法为例 在同一个文件夹下添加my_func_test.go文件 测试文件以_test.go为结尾里…

远程视频会议卡顿!如何改善企业网络连接质量?

您的企业是否有这样的组网挑战&#xff1f; 要将不同分公司/店铺的监控画面汇总到服务器或者平台系统上&#xff0c;却由于地理位置过于分散&#xff0c;而且监控部署环境复杂多样&#xff0c;不同分公司/店铺部署的网络也不一样&#xff0c;有些甚至还是家用网络&#xff0c;…

现在00后开发人员不晓得加班为何事嘛?

我招了两个做HTML5开端开发的人员&#xff0c;是从培训机构招来的&#xff0c;按理说他们应该很努学很用样才对的。他们上班第一天我就跟他们讲&#xff0c;我们不需要上、下班打卡&#xff1b;你们也不必太过担心迟到或早退。因为我们搞开发的人员首先是按自己的工作任务完成情…

【部署LLaMa到自己的Linux服务器】

部署LLaMa到自己的Linux服务器 1、Llama2 项目获取方法1&#xff1a;有git可以直接克隆到本地方法2&#xff1a;直接下载 2、LLama2 项目部署3、申请Llama2许可4、下载模型权重5、运行 1、Llama2 项目获取 方法1&#xff1a;有git可以直接克隆到本地 创建一个空文件夹然后鼠标…