4.4、 Linux进程排队

个人主页:Lei宝啊 

愿所有美好如期而遇


前言

如果后续讲解看不懂,请移步先看完前导知识

Linux操作系统上icon-default.png?t=N7T8https://blog.csdn.net/m0_74824254/article/details/134385952?spm=1001.2014.3001.5501Linux操作系统下icon-default.png?t=N7T8https://blog.csdn.net/m0_74824254/article/details/134506893?spm=1001.2014.3001.5501Linux进程icon-default.png?t=N7T8https://blog.csdn.net/m0_74824254/article/details/134512685?spm=1001.2014.3001.5501


狭义上我们说,进程 = 内核数据结果 + 可执行程序代码和数据,进程排队,一定是进程在等待某种资源,可以是CPU,磁盘,键盘,也可以是软件资源,而且我们要明白,进程排队一定是他的task_struct在排队,不是可执行程序在排队。

进程不是一直都在运行,就算是已经放在了CPU上,CPU也不会一直去跑一个进程,我们写一个死循环并执行他,也只是有些卡顿,其他进程依然在跑,并不是说一直执行这个死循环,这里我们引入时间片这个概念,CPU执行进程是有一个时间的,就比如说给你执行1ms以后,去执行其他进程1ms,而不是一个进程一直跑,否则这个死循环占着CPU不下来一直执行,其他进程不就无法执行了吗,但现实是我们尽管卡了点,但是其他进程运行正常。

一个CPU只有一个运行队列,也就是说几个CPU,就有几个运行队列,我们一般人用的都是单CPU,所以只有一个运行队列。

我们前面说到可执行程序加载到内存中,操作系统要管理他,于是就先用task_struct描述起来,接着再用链表组织起来,这里的链表是双链表,而且不同于我们平常意义上的双链表,那么我们运行他,就必然要把他加入CPU的运行队列里,那么这个链表怎么办,难道移除不让操作系统管理了吗?

首先我们要说到的是task_struct可以被连入多个数据结构中,接下来看图

task_struct里可以通过增加listnode节点来找到其他进程,同时也让我们不用去以移除进程来达到连入运行队列的目的,但是你也许会有疑问,节点在中间,前面的数据你怎么找,如何拿到进程控制块的首地址?

这样我们就可以将进程连入任意数据结构中,而且还可以让操作系统很好的管理他们,不需要移除链表。

这样我们也就明白了进程是如何连入CPU运行队列的,我们要说到的是,只有在CPU运行队列里的进程,才是运行状态,等待资源,卡住不动的是阻塞或者挂起状态。

他们在CPU上如何排队我们也就知道了

那么当进程处于阻塞状态,比如一个可执行程序里有scanf函数,需要键盘资源,当运行到scanf时,就会处于阻塞状态,此时进程就会从运行队列里拿下来,连入到描述键盘的结构体,看图

等到键盘输入后,这个进程才会再次连入运行列表。

其实在我的理解中,CPU也是硬件,他也是device,所以他的结构应该和上图一样,只是叫做运行队列,更准确点,应该是这样

进程都是在需要某种资源,需要什么,就连入那里。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java开源ETL工具-Kettle

一、背景 公司有个基于Kettle二次开发产品主要定位是做一些数据ETL的工作, 所谓的ETL就是针对数据进行抽取、转换以及加载的过程,说白了就是怎么对原始数据进行清洗,最后拿到我们需要的、符合规范的、有价值的数据进行存储或者分析的过程。 一般处理ETL的…

Adiponectin 脂联素 ; T-cadherin +exosome

T-cadherin Adiponectin exosome T-cadherin Adiponectin exosome 代谢综合征中 外泌体、脂肪组织 和 脂联素 的器官间通讯-2019.pdf

基于SSM抗疫爱心小栈APP-计算机毕设 附源码 54553

SSM抗疫爱心小栈APP 目 录 摘要 1 绪论 1.1 背景及意义 1.2研究现状 1.3ssm框架 1.4论文结构与章节安排 2 2 抗疫爱心小栈APP系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3数据删除流程 2.3 系统功能分析 2.3.1功能性分…

Cache学习(2):Cache结构 命中与缺失 多级Cache结构 直接映射缓存

1 Cache名词解释 命中(hit): CPU要访问的数据在Cache中有缓存缺失(miss): CPU要访问的数据在Cache中没有缓存Cache Size:Cache的大小,代表Cache可以缓存最大数据的大小Cache Line&a…

玻色量子“揭秘”之集合划分问题与QUBO建模

摘要:集合划分问题(Set Partitioning Problem)是一种组合优化问题,其中给定一个集合S和其若干个不同的子集S1,S2,...,Sn后,需要找到子集的有效组合,使得集合S的每个元素正…

jupyter notebook 不知道密码,怎么登录解决办法

jupyter notebook 不知道密码,怎么登录解决办法 1、 windows下,打开命令行,输入jupyter notebook list : C:\Users\tom>jupyter notebook list Currently running servers: http://localhost:8888/?tokenee8bb2c28a89c8a24d…

浅学指针(2)数组函数传值调用

系列文章目录 文章目录 系列文章目录前言1. 指针的使⽤和传址调⽤结论:实参传递给形参的时候,形参会单独创建⼀份临时空间来接收实参,对形参的修改不影响实 参。那么这个时候,就要搬出指针大哥,在main函数中将a和b的地…

前端 计算机基础篇 ( 二 )

文章目录 websockt及原理ipv4和ipv6的区别线程和进程的区别cdn原理缓存所涉及的http状态码缓存的时候设置 no-store和no-cache和max-age0这几个有什么区别token一般存放在哪儿怎么设置强缓存和协商缓存强缓存:1. 使用 Cache-Control 头字段: 协商缓存&am…

解决:ImportError: cannot import name ‘Sequence‘ from ‘collections‘

解决:ImportError: cannot import name ‘Sequence‘ from ‘collections‘ 背景 在使用之前的代码时,报错: File “G:\research\code\MicroDE_py\plot_bcic_iv_4_ecog_trial.py”, line 262, in from skorch.helper import predefined_spl…

U盘启动制作工具Rufus

U盘启动制作工具Rufus 下载U盘启动制作工具Rufus,进入Rufus官网:http://rufus.ie/en/,打开之后往后滑动,找到download即可点击下载。 需要插入U盘 首先需要插入U盘,如果U盘有重要文件一定要备份,然后右键…

vue+SpringBoot的图片上传

前端VUE的代码实现 直接粘贴过来element-UI的组件实现 <el-uploadclass"avatar-uploader"action"/uploadAvatar" //这个action的值是服务端的路径&#xff0c;其他不用改:show-file-list"false":on-success"handleAvatarSuccess"…

不做机器视觉工程师,转行,转岗的建议与想法

正所谓外行看热闹&#xff0c;内行看门道。提前咨询前辈们&#xff0c;多问问&#xff0c;多看看。要做就做&#xff0c;一定要提前做好防范。 无论你是要转行或者是转岗&#xff0c;看你有没有本钱和试错成本 有些人&#xff0c;家庭好&#xff0c;可以一直去试错和从头再来。…

【python爬虫】scrapy在pycharm 调试

scrapy在pycharm 调试 1、使用scrapy创建一个项目 scrapy startproject tutorial 2、在朋友pycharm中调试scrapy 2.1 通过文件run.py调试 在根目录下新建一个文件run.py&#xff08;与scrapy.cfg文件的同一目录下&#xff09;, debug ‘run’即可 # -*- coding:utf-8 -*- …

MIT_线性代数笔记:列空间和零空间

目录 前言子空间综述列空间 Column space零空间&#xff08;或化零空间&#xff09;Nullspaceb 值的影响 Other values of b 前言 本节继续研究子空间&#xff0c;特别是矩阵的列空间&#xff08;column space&#xff09;和零空间&#xff08;nullspace&#xff09;。 子空间…

牛客 HJ106 字符逆序 golang实现

牛客题目算法连接 题目 golang 实现 package mainimport ("fmt""bufio""os" )func main() {str, _ : bufio.NewReader(os.Stdin).ReadString(\n)if len(str) 0 {return } else {newstr:""strLen:len(str)-1for i:strLen;i>0;i-…

数据结构与算法【B树】的Java实现+图解

目录 B树 特性 实现 节点准备 大体框架 实现分裂 实现新增 实现删除 完整代码 B树 也是一种自平衡的树形数据结构&#xff0c;主要用于管理磁盘上的数据管理&#xff08;减少磁盘IO次数&#xff09;。而之前说的AVL树与红黑树适合用于内存数据管理。存储一个100w的数…

4.常见面试题--操作系统

特点&#xff1a;并发性、共享性、虚拟性、异步性。 Windows 和 Linux 内核差异 对于内核的架构⼀般有这三种类型&#xff1a; ● 宏内核&#xff0c;包含多个模块&#xff0c;整个内核像⼀个完整的程序&#xff1b; ● 微内核&#xff0c;有⼀个最⼩版本的内核&#xff0…

docker国内镜像加速

创建或修改 /etc/docker/daemon.json 文件&#xff0c;修改为如下形式 {"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"] } Docker中国区官方镜像htt…

【广州华锐互动】VR线上课件制作软件满足数字化教学需求

随着科技的不断发展&#xff0c;虚拟现实&#xff08;VR&#xff09;技术在教学领域的应用逐渐成为趋势。其中&#xff0c;广州华锐互动开发的VR线上课件制作软件更是备受关注。这种工具为教师提供了便捷的制作VR课件的手段&#xff0c;使得VR教学成为可能&#xff0c;极大地丰…

python cv2.imread()和Image.open()的区别和联系

文章目录 1. cv2.imread()1.1 cv2.imread参数说明1.2 注意事项 2. Image.open()3. cv2.imread()与Image.open()相互转化3.1 cv2.imread()转成Image.open()&#xff1a;Image.fromarray()3.2 Image.open()转成cv2.imread()&#xff1a;np.array() 1. cv2.imread() cv2.imread()…