当前位置: 首页 > news >正文

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

 
✨✨ 欢迎大家来访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. 如果被唤醒的进程比当前运行进程的优先级更高则设置重新调度标志。

​​

希望对你有帮助!加油!

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

相关文章:

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

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua,在这里我会分享我的知识和经验。&#x…...

Java面试(4)之 Spring Bean生命周期过程

一, 整个加载的完整链路图 更详细的生命周期函数链路图(仅供参考) 二, Bean实例化的四种方式: 1, 无参构造器(默认且常用)6 2, 静态工厂方法方式(factory-method指定实例化的静态方法) 3, 实例工厂方法方式(factory-bean指定bean的name,factory-method指定实例化方法) 4, 实…...

JavaSE——面向对象高级一(1/4)-static修饰成员变量、应用场景,static修饰成员方法、应用场景

目录 static修饰成员变量 类变量的应用场景 static修饰成员方法 static修饰成员方法的应用场景 static 叫静态,可可以修饰成员变量、成员方法。 成员变量按照有无static修饰,分为两种: 类变量实例变量(对象的变量&#xff…...

轻量脚本语言Lua的配置与c++调用

文章目录 lua配置下载运行lua命令lua脚本的执行C++调用lua环境配置错误和警告测试c++程序lua脚本结果Lua是一种功能强大且快速的编程语言,易于学习和使用,并且可以嵌入到应用程序中。 Lua被设计成一种轻量级的可嵌入脚本语言。它被用于各种各样的应用程序,从游戏到web应用程…...

力扣每日一道系列 --- LeetCode 160. 相交链表

📷 江池俊: 个人主页 🔥个人专栏: ✅数据结构探索 ✅LeetCode每日一道 🌅 有航道的人,再渺小也不会迷途。 LeetCode 160. 相交链表 思路: 首先计算两个链表的长度,然后判断两个链…...

设计模式-建造者模式实践案例

建造者模式(Builder Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。当一个对象需要多个部分或许多步骤来创建,并且需要将创建过程与表示分离时,建造者模式非常有用。建造者模式旨在找到一个解决方案&…...

freeRTOS_20240308

1.使用ADC采样光敏电阻数值,如何根据这个数值调节LED灯亮度。 HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_3); while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */HAL_ADC_Start(&hadc);adc_val HAL_ADC_GetValue(&hadc);printf("adc_va…...

利用chatgpt写论文使用教程

ChatGPT是人工智能技术的一种,可帮助人们综合运用和分析各种语言技巧,从而优化实验结果、加速研究流程以及提高文章质量。以下是利用ChatGPT写论文的使用教程: 综上所述,利用ChatGPT写论文涉及到一些技巧和方法,需要合…...

SMiC矩阵将于3月6日正式上线,开启数字化经济新纪元

在数字化浪潮的推动下,全球瞩目的SMiC矩阵将于2024年3月6日正式上线。这一里程碑式的事件标志着数字化经济迈入了一个全新的时代,为思洣客、合作伙伴和整个经济生态带来了前所未有的机遇和挑战。 SMiC矩阵作为引领数字化经济的新力量,始终致…...

备战蓝桥杯---动态规划的一些思想2

话不多说,直接看题: 1.换根DP: 我们肯定不能对每一个根节点暴力求,我们不妨先求f[1],我们发现当他的儿子作为根节点时深度和为f[1](n-cnt[i])-cnt[i](cnt[i]表示以i为根的节点数),这样子两遍DFS…...

卫星导航 | 坐标系---地理坐标系与UTM坐标系

卫星导航 | 坐标系---地理坐标系与UTM坐标系 世界坐标系地理坐标系UTM坐标系 全球卫星导航系统(Global Navigation Satelite System,GNSS),简称卫星导航,是室外机器人定位的一个主要信息来源。 卫星导航能给机器人提供什么信息? 正常工作时&…...

JavaEE之volatile关键字

一.内存可见性问题 什么是内存可见性问题 计算机运行的程序/代码,往往需要访问数据。这些数据往往存在于内存中。 cup使用此变量时,就会把内存中的数据先读出来,加载到cpu寄存器中,再去参与运算。 但是,关键是cpu读…...

代码学习记录10

随想录日记part10 t i m e : time: time: 2024.03.03 主要内容:今天的主要内容是深入了解数据结构中栈和队列,并通过三个 l e e t c o d e leetcode leetcode 题目深化认识。 20. 有效的括号1047. 删除字符串中的所有…...

java——2024-03-03

String类的对象能被修改吗?如果不能需要用什么修改?StringBuilder和StringBuffer的区别?equals和区别谈谈对面向对象的理解重载和重写的区别说一下ArrayList,LinkedList底层实现以及区别什么是哈希冲突?hashMap和conCu…...

Ubuntu安装conda以后,给jupyter安装C++内核

前言 大家都知道,jupyter notebook 可以支持python环境,可以在不断点调试的情况下,打印出当前结果,如果代码错了也不影响前面的内容。于是我就想有没有C环境的,结果还真有。 参考文章: 【分享】Ubuntu安装…...

【谈判】核心思想(抓大放小)

谈判交换(抓大放小) 一、明确目的 事:must: 非要不可,才会签字 want: 有很好, give: 放掉 三者,会变化 二、明确对象 人:我跟谁谈? 时: 国际形势、国家的政策、他的心…...

洛谷P5908 猫猫和企鹅 做题反思(2024.3.7)

猫猫和企鹅 题目传送门 题目描述 王国里有 n n n 个居住区,它们之间有 n − 1 n-1 n−1 条道路相连,并且保证从每个居住区出发都可以到达任何一个居住区,并且每条道路的长度都为 1 1 1。 除 1 1 1 号居住区外,每个居住区住…...

常见的验证码

一、短信验证码 前端: 用户填写手机号,点击按钮发送请求用户短信得到验证码后,用户填写表单提交 form 表单,进行验证 后台: 随机生成几位验证码并将生成时间、手机号、验证码存储起来,可以存到session、…...

11. C语言标准函数库

C语言制定了一组使用方式通用的函数,称为C语言标准函数库,用于实现编程常用功能,标准函数库由编译器系统提供,并按功能分类存储在不同源代码文件中,调用标准库内函数时需要首先使用 #include 连接对应的源代码文件。 【…...

2016年认证杯SPSSPRO杯数学建模C题(第一阶段)如何有效的抑制校园霸凌事件的发生解题全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 C题 如何有效的抑制校园霸凌事件的发生 原题再现: 近年来,我国发生的多起校园霸凌事件在媒体的报道下引发了许多国人的关注。霸凌事件对学生身体和精神上的影响是极为严重而长远的,因此对于这些情况我们应该…...

2.Vue编写一个app

1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Java + Spring Boot + Mybatis 实现批量插入

在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法&#xff1a;使用 MyBatis 的 <foreach> 标签和批处理模式&#xff08;ExecutorType.BATCH&#xff09;。 方法一&#xff1a;使用 XML 的 <foreach> 标签&#xff…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

Pydantic + Function Calling的结合

1、Pydantic Pydantic 是一个 Python 库&#xff0c;用于数据验证和设置管理&#xff0c;通过 Python 类型注解强制执行数据类型。它广泛用于 API 开发&#xff08;如 FastAPI&#xff09;、配置管理和数据解析&#xff0c;核心功能包括&#xff1a; 数据验证&#xff1a;通过…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...