进程之舞:操作系统中的启动、状态转换与唤醒艺术

 
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭
~✨✨

🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。

我是Srlua,在这里我会分享我的知识和经验。🎥

希望在这里,我们能一起探索IT世界的奥妙,提升我们的技能。🔮

记得先点赞👍后阅读哦~ 👏👏

📘📚 所属专栏:操作系统

欢迎访问我的主页:Srlua小谢获取更多信息和资源。✨✨🌙🌙

目录

进程队列

1.线性方式

2.链接方式

3.索引方式

进程管理

进程图

进程创建

1.引起创建进程的事件:

2.进程的创建过程(创建原语)

进程终止

1.引起进程终止的事件

2.终止进程的主要操作过程!

进程阻塞

1.引起进程阻塞的事件

2.进程阻塞的过程

进程唤醒

唤醒过程


进程队列

为了便于查找,系统把所有的PCB用适当的方式组织起来,一般有以下三种形式

(1)线性方式

(2)链接方式

(3)索引方式

1.线性方式

优点:管理简单,不需要额外的开销,容易实现。

缺点:限定了最大进程数目;降低调度效率,挑选一个适合运行的PCB须对表项扫描,平均要花费查半个PCB表长的时间;不适合频繁进程调度。

早期的UNIX系统就是采用这种方式。


2.链接方式

  • 把处于同一状态的进程按照一定方式链接成一个队列。

>就绪队列

>阻塞队列:根据不同的阻塞原因组织成多个阻塞队列

  等待磁盘I/0队列

  • 等待磁带I/O队列每一个队列有一个专用队列指针指出该队列中第一个进程PCB所在位置。 
  • 现代Unix采用这种方式。

 ​ 

  • 链接方式优点

管理方便,PCB进程数目不受限制,使用灵活,检索速度和内存使用效率可以提高

  • 链接方式缺点

动态分配内存的算法比较复杂;队列的操作(如挂链,摘链)也花费时间


3.索引方式

用索引表记载进程的PCB地址

相同状态的进程在同一索引表中;

不同状态的,分别设置各自的PCB索引表

  • 就绪索引表
  • 阻塞索引表

 ​ 

  • 索引方式优点

索引方式是线性表方式的改进,克服了线性表的缺点,检索速度快

  • 索引方式缺点

通常须采用多张索引表,增加所占内存空间;加大管理难度

  • 由于单CPU的计算机系统中,任何时候只有一个进程处于运行状态。
  • 系统专门设置一个指针指向当前运行进程的PCB。
  • UNIX系统中就有一个CURPRO指针,指向现运行进程的PCB。

进程管理

进程图

进程图(进程家族图)--Process Graph

  • 描述进程家族关系的有向树一棵进程树表示一个家族,根结点是祖先。
  • 一个子进程只有一个父进程
  • A——B: A是B的父进程   B是A的子进程

进程创建

1.引起创建进程的事件:

(1)系统初始化:当开机引导OS时,会创建许多进程

(2)派生新进程:应用进程利用系统调用创建一个或多个进程,使新进程以并发方式完成特定任务,

(3)用户请求:为完成用户提出的某些请求

(4)调度新作业:批处理系统中为每个提交的作业创建相应的进程

2.进程的创建过程(创建原语)

        PCB是进程存在的唯一标识,所以创建一个进程的主要任务是为其建立一个PCB。

使用创建原语创建进程的过程

  • 申请一个空闲的PCB
  • 为新进程分配空间
  • 初始化PCB
  • 将新进程插入就绪队列

UNIX/Linux中的fork()系统调用实现进程创建功能。

​ 

进程终止

1.引起进程终止的事件

(1)正常终止

(2)异常终止

(3)外部干扰:进程应外界的请求而终止运行

2.终止进程的主要操作过程!
  • 找到指定进程的PCB,终止该进程的运行
  • 回收该进程所占用的全部资源
  • 终止其所有子孙进程,回收它们所占用的全部资源。
  • 将被终止进程的PCB从原来队列中摘走,以后由父进程从中获取数据,并释放它

进程阻塞

1.引起进程阻塞的事件

        处于运行状态的进程,在其运行过程中期待某一事件发生,当被等待的事件还没有发生时,由进程自己执行阻塞原语,使自己由运行态变为阻塞态。

  • 等待键盘输入:
  • 等待磁盘的数据传输完成;
  • 等待其它进程发送一个信息

当某进程期待的事件已经到来时,唤醒进程

2.进程阻塞的过程
  • 立即停止当前进程的执行
  • 将现行进程的CPU现场保存
  • 将该进程的现行状态由“运行”改为阻塞
  • 转到进程调度程序

进程唤醒

处于阻塞状态的进程不能唤醒自己,必须由它的合作进程用唤醒原语唤醒它。

唤醒过程

唤醒原语执行过程如下:

  1. 把阻塞进程从相应的阻塞队列中摘下。

  2. 将现行状态改为就绪状态,然后把该进程插入就绪队列中。

  3. 如果被唤醒的进程比当前运行进程的优先级更高则设置重新调度标志。

​​

希望对你有帮助!加油!

若您认为本文内容有益,请不吝赐予赞同并订阅,以便持续接收有价值的信息。衷心感谢您的关注和支持!

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

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

相关文章

解决QT cc1plus.exe: error: out of memory allocating

QT中增加资源文件过大时,会编译不过,报错: cc1plus.exe: out of memory allocating 1073745919 bytes 使用qrc资源文件,也就是在QT的工程中添加资源文件,就是添加的资源文件(如qrc.cpp)会直接被…

简明固体物理--晶体的形成与晶体结构的描述

简明固体物理-国防科技大学 chapter 1 Formation of Crystal Contents and roadmapQuantum Mechanics and atomic structureElectronsOld quantum theoryMethod of Quantum MechanicsDistributing functions of micro-particles BindingCrystal structure and typical crystal…

Compose基础之State状态

Compose基础之State状态 Stateless和Stateful什么是Stateless&#xff0c;让我看下面代码Stateless它有什么特点呢Stateless它是如何实现避免无效重组的呢什么是Stateful&#xff0c;让我看下面代码 Compose中的State<T>State子类之MutableState 状态的恢复与持久化remem…

Go-Gin-example 第五部分 加入swagger

上一节链接 swagger 为什么要用swagger 问题起源于 前后端分离&#xff0c; 后端&#xff1a;后端控制层&#xff0c;服务层&#xff0c;数据访问层【后端团队】前端&#xff1a;前端控制层&#xff0c;视图层&#xff0c;【前端团队】 所以产生问题&#xff1a;前后端联调…

Keepalived+LVS构建高可用集群

目录 一、Keepalive基础介绍 1. Keepalive与VRRP 2. VRRP相关技术 3. 工作原理 4. 模块 5. 架构 6. 安装 7. Keepalived 相关文件 7.1 配置组成 7.2 全局配置 7.3 VRRP实例配置&#xff08;lvs调度器&#xff09; 7.4 虚拟服务器与真实服务器配置 二、Keepalived…

HTML静态网页成品作业(HTML+CSS)——花主题介绍网页设计制作(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

C语言:基于单链表实现的泊车管理系统

一、需求 &#xff08;1&#xff09;管理员方账号登录&#xff1b; &#xff08;2&#xff09;车位管理显示&#xff1a;车位状态&#xff1b; &#xff08;3&#xff09;收费管理&#xff1a;小轿车 5元/小时&#xff0c;面包车6元/小时&#xff0c;大货车或客车7元/小时&a…

node.js 下 mysql2 的 CURD 功能极简封装

此封装适合于使用 SQL 直接操作数据库的小型后端项目&#xff0c;更多功能请查阅MySQL2官网 // 代码保存到单独的 js 文件const mysql require(mysql2/promise)const debug true let conn/*** 执行 SQL 语句* param {String} sql* param {*} params* returns {Array}*/ const…

ChatGPT提示技巧——零,一和少量示例提示

ChatGPT提示技巧——零&#xff0c;一和少量示例提示 ​ 零样本(zero-shot)、少样本(few-shot)和单样本(one-shot)提示是用于在最少或没有示例的情况下从ChatGPT生成文本的技巧。这些技巧用于当某个具体任务有限定数据的时候或者任务是新的并且没有很好的定义的时候。 提示格…

JVM的各种垃圾回收器(GC)

1. Serial GC Serial GC 是用于单线程环境的垃圾回收器&#xff0c;它使用复制算法&#xff08;Copy&#xff09;进行年轻代的垃圾回收&#xff0c;而老年代则使用标记-整理&#xff08;Mark-Compact&#xff09;算法。由于它在进行垃圾回收时会暂停其他所有的工作线程&#xf…

严密的逻辑会不会影响创新

严密的逻辑可以对创新产生积极的影响&#xff0c;也可能对创新产生负面的影响。以下是两种可能的情况&#xff1a; 积极影响&#xff1a;严密的逻辑可以帮助创新者更好地理解问题&#xff0c;并找到解决问题的方法。它可以帮助人们分析和评估不同的创新想法&#xff0c;以确定哪…

设计模式之——简单工厂模式

上图为简单工厂模式的架构图。 1&#xff0c;产品&#xff08;Product&#xff09; 将会对接口进行声明。 2&#xff0c;具体产品&#xff08;Concrete Products&#xff09;是产品接口的不同实现。 3&#xff0c;创建者&#xff08;Concrete Creators&#xff09;将会重写基…

二刷代码随想录算法训练营第十五天 |层序遍历 10、 226.翻转二叉树 、101.对称二叉树 2

目录 一、102. 二叉树的层序遍历 二、226. 翻转二叉树 三、101. 对称二叉树 一、102. 二叉树的层序遍历 题目链接&#xff1a;力扣 文章讲解&#xff1a;代码随想录 视频讲解&#xff1a; 讲透二叉树的层序遍历 | 广度优先搜索 | LeetCode&#xff1a;102.二叉树的层序遍历…

TCP传输收发

TCP通信: TCP发端: socket connect send recv close TCP收端: socket bind listen accept send recv close 1.connect int connect(int sockfd, const struct sockaddr *addr, socklen_t ad…

先缓存第二集抖音接入 ,最近加班猛,就分享简单的知识,如何使用:关于使用replace的用法正则表达式

1、需求&#xff1a;比如在cocos creator策划让你制作一个预制体&#xff0c;标题要读取配置&#xff0c;然后中间显示的内容要滚动的&#xff0c;要做成一个通用的&#xff0c;然后给到的配置表是这样子的: 配置表&#xff1a;假设字段是这样子的 content "内容标题&…

Intel 历代 CPU 型号

以下所有型号均为一整个系列&#xff0c;加上前缀、后缀啥的&#xff0c;差异化早在1970年代就被美国资本家玩明白了&#xff0c;充分地占领了市场。 CPU型号时间位数频率内存寻址地址总线说明400419714位740KHz640B4001(ROM)&#xff0c;4002(RAM)&#xff0c;4003(register)…

20个Python函数程序实例

前面介绍的函数太简单了&#xff1a; 以下是 20 个不同的 Python 函数实例 下面深入一点点&#xff1a; 以下是20个稍微深入一点的&#xff0c;使用Python语言定义并调用函数的示例程序&#xff1a; 20个函数实例 简单函数调用 def greet():print("Hello!")greet…

寻找最近的公共父视图

题目 求两个视图的最近公共父视图 暴力解法 采用的是两个 while 循环嵌套迭代来查询最近的公共父视图, 时间复杂度 O(n), 详见 Masonry 的实现&#xff1a; - (instancetype)mas_closestCommonSuperview:(MAS_VIEW *)view {MAS_VIEW *closestCommonSuperview nil;MAS_VIEW *…

css-vxe-form-item中输入框加自定义按钮(校验位置错误)

1.浮动错误效果 提示内容不对 2.不使用浮动&#xff0c;使用行内块元素 代码如下 <vxe-form-item title"yoyo:" field"assembleWorkNo" span"8"><template #default><vxe-input style"width:70%;display:inline-block;&quo…

NLP神器Transformers入门简单概述

在这篇博客中,我们将深入探索 🤗 Transformers —— 一个为 PyTorch、TensorFlow 和 JAX 设计的先进机器学习库。🤗 Transformers 提供了易于使用的 API 和工具,使得下载和训练前沿的预训练模型变得轻而易举。利用预训练模型不仅能减少计算成本和碳足迹,还能节省从头训练…