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

 
✨✨ 欢迎大家来访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…

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

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

Keepalived+LVS构建高可用集群

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

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

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

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

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

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

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

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

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

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…

20个Python函数程序实例

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

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…

全天候购药系统(微信小程序+web后台管理)

PurchaseApplet 全天候购药系统&#xff08;微信小程序web后台管理&#xff09; 传统线下购药方式存在无法全天候向用户提供购药服务&#xff0c;无法随时提供诊疗服务等问题。为此&#xff0c;运用软件工程开发规范&#xff0c;充分调研建立需求模型&#xff0c;编写开发文档…

Java输入和输出处理

一、Java I/O 文件、内存、键盘--->程序--->文件、内存、控制台 二、文件 相关记录或放在一起的数据的集合 思考&#xff1a; Java程序如何访问文件属性&#xff1f; 解答&#xff1a; Java API:java.io.File类 三、File类 File类的常用方法 方法名称说明boole…

maven项目结构管理统一项目配置操作

一、maven分模块开发 Maven 分模块开发 1.先创建父工程&#xff0c;pom.xml文件中&#xff0c;打包方式为pom 2.然后里面有许多子工程 3.我要对父工程的maven对所有子工程进行操作 二、解读maven的结构 1.模块1 <groupId>org.TS</groupId><artifactId>TruthS…

黑马点评-分布式锁业务

分布式锁原理和实现 分布式系统部署了多个tomcat&#xff0c;每个tomcat都有一个属于自己的jvm&#xff0c;那么假设在服务器A的tomcat内部&#xff0c;有两个线程&#xff0c;这两个线程由于使用的是同一份代码&#xff0c;那么他们的锁对象是同一个&#xff0c;是可以实现互…

2024 PhpStorm激活,分享几个PhpStorm激活的方案

文章目录 PhpStorm 公司简介我这边使用PhpStorm的理由PhpStorm 2023.3 最新变化AI Assistant 预览阶段结束 正式版基于 LLM 的代码补全测试代码生成编辑器内代码生成控制台中基于 AI 的错误解释 Pest 更新PHP 8.3 支持#[\Override] 特性新的 json_validate() 函数类型化类常量弃…

142.环形链表II

142.环形链表II 力扣题目链接(opens new window) 题意&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 为了表示给定链表中的环&#xff0c;使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0…

Linux性能分析之CPU实战

本课程专注于教授学员如何利用各种工具和技术来分析Linux系统中的CPU性能问题。通过实际操作和案例研究&#xff0c;学员将深入了解CPU性能优化和故障排除&#xff0c;提升其在Linux环境下的技能水平。 课程大小&#xff1a;1.9G 课程下载&#xff1a;https://download.csdn.…

例行性工作(at,crontab)

目录 单一执行的例行性工作at 语法 选项 时间格式 at的工作文件存放目录 at工作的日志文件 实例 命令总结&#xff1a; 循环执行的例行性工作crond 语法 选项 crontab工作调度对应的系统服务 crontab工作的日志文件 用户定义计划任务的文件所在目录 动态查看 crontab文件格式 文…

尤雨溪:Vue 未来展望新的一轮

十年&#xff0c;一个既漫长又短暂的时光跨度&#xff0c;对于技术世界来说&#xff0c;更是沧海桑田的瞬间。在这十年里&#xff0c;Vue.js 从无到有&#xff0c;从默默无闻到蜚声全球&#xff0c;不仅改变了前端开发的面貌&#xff0c;更成为了无数开发者手中的得力工具。 在…