51-52 - 进程状态设计

news/2024/4/26 7:41:02/文章来源:https://blog.csdn.net/weixin_36098975/article/details/129114453

---- 整理自狄泰软件唐佐林老师课程

文章目录

  • 1. 问题
  • 2. 进程状态设计
    • 2.1 任务生命周期
    • 2.2 任务的状态
    • 2.3 任务的生命周期与状态切换
    • 2.4 状态切换概要设计
      • 2.4.1 核心数据结构==>内核队列
      • 2.4.2 KillTask() 实现思路
      • 2.4.3 整体实现规划
      • 2.4.4 编程实验:任务生命周期状态实现
    • 2.5 思考
  • 3. 问题与方案
    • 3.1 当前问题
    • 3.2 解决方案
    • 3.3 新增任务数据结构成员
    • 3.4 新增应用数据结构成员
    • 3.5 调度流程设计
    • 3.6 编程实验:基于优先级的任务调度
    • 3.7关于优先级的一些扩展

1. 问题

  • 如何实现 KillTask() 函数?
  • KillTask:回收任务所占用的 系统资源,一个是占用 内存资源,另一个是占用 处理器资源

2. 进程状态设计

2.1 任务生命周期

任务从开始执行到结束执行经过的时间

2.2 任务的状态

任务在生命周期中会经历不同状态

2.3 任务的生命周期与状态切换

在这里插入图片描述

2.4 状态切换概要设计

  • 每种状态准备内核队列就绪队列,执行队列,等待队列
  • 任务创建后立即进入就绪队列
  • 调度器根据当前执行的任务数量决定 调度策略
    • 执行时间结束的任务进入就绪队列
    • 等待外部事件的任务进入等待队列
    • 等待队列中的任务必须先进入就绪队列才能继续执行

2.4.1 核心数据结构==>内核队列

在这里插入图片描述

  • 本质上:TaskNode变量的迁移(在不同的队列之间迁移)

2.4.2 KillTask() 实现思路

  • 当KillTask() 被调用时,意味着当前执行的任务结束
  • 因此:
    • 将当前任务从执行队列移除,并移入空闲TaskNode队列
    • 调度就绪队列中的任务进入执行队列(如果就绪队列存在任务)
    • 执行队列中的队首任务被调度执行(调度下一个任务执行)

2.4.3 整体实现规划

  1. 实现空闲TaskNode队列(填充预定义数量的TaskNode)
  2. 初始化预定义任务(调度进入就绪队列)
  3. 启动第一个任务(调度进入执行队列)
  4. 实现KillTask()
  5. ……

2.4.4 编程实验:任务生命周期状态实现

【参看链接】:51-52 - 进程状态设计 / 51

在这里插入图片描述

2.5 思考

  • 如果先被调度执行的任务不会结束,那么会发生什么?

3. 问题与方案

3.1 当前问题

  • 在任务结束后才从就绪队列调度其它任务执行
  • 当执行队列中的任务都不会结束时,其它等待的任务永远无机会执行

3.2 解决方案

  • 为每个任务提供 优先级,使得每个任务均有机会执行
  • 优先级的高低决定任务执行时间的长短

3.3 新增任务数据结构成员

在这里插入图片描述

3.4 新增应用数据结构成员

通过优先级priority计算任务每次调度执行的总时间数

在这里插入图片描述

3.5 调度流程设计

在这里插入图片描述
即:优先级越高,priority越小,total越大,能够执行的时间也就越长

3.6 编程实验:基于优先级的任务调度

【参看链接】:51-52 - 进程状态设计 / 52

在这里插入图片描述

3.7关于优先级的一些扩展

  • 决定任务是否被调度执行的因素可能不止一个
  • 需要将各个因素综合考虑后计算任务优先级
  • 优先级的高低只能决定获取处理器资源的多少
  • 任何设计方案都需要保证每个任务有机会执行

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

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

相关文章

Axios二次封装和Api的解耦

目录 一、axios三种基本写法 二、axios的二次封装 三、Api的解耦 一、axios三种基本写法 1)get方法(是最简单的): 写法二: 2)post: 3)axios请求配置 默认是get请求,如…

蓝海创意云vLive虚拟直播亮相2023昆山元宇宙产品展览会

2月15日-19日,由中国计算机行业协会“元宇宙创见未来”2023元宇宙产品展览会在江苏昆山隆重召开,共吸引了省内外32家企业参展,展出近百款元宇宙产品或技术,涵盖芯片、显示、VR、AR等硬件设备,以及工业、文旅、娱乐、教…

IDEA性能优化设置(解决卡顿问题)修改内存

在我们日常使用IDEA进行开发时,可能会遇到许多卡顿的瞬间,明明我们的机器配置也不低啊?为什么就会一直卡顿呢? 原来这是因为IDEA软件在我们安装的时候就设置了默认的内存使用上限(通常很小),这就…

火山引擎数智平台 ByteHouse 入围稀土掘金《Top10 年度创新产品》

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,国内开发者技术社区稀土掘金发布「2022 稀土掘金引力榜」,旨在盘点 2022 年在数字化转型领域内最具影响力、创新力及潜质的个人、企业、…

ASP.NET MVC | 简介

目录 前提 1.教程 2.MVC 编程模式 最后 前提 在学习学过很多课程,但是最主要学的还是ASP.NET MVC这门课程,工作也是用的ASP.NET MVC,所以写一点ASP.NET MVC的东西,大家可以来看看,我自己不会的时候也不用找别的地方…

「TCG 规范解读」第8章 TPM工作组 TPM 1.2中 SHA1的使用

可信计算组织(Ttrusted Computing Group,TCG)是一个非盈利的工业标准组织,它的宗旨是加强在相异计算机平台上的计算环境的安全性。TCG于2003年春成立,并采纳了由可信计算平台联盟(the Trusted Computing Platform Alli…

如何使用 ChatGPT 编写 SQL JOIN 查询

通过清晰的示例和解释,本文展示了 ChatGPT 如何简化和简化创建复杂 MySQL 查询的过程,使用户更容易与数据库交互并检索他们需要的数据。无论您是初学者还是经验丰富的开发人员,本文都提供了有关如何利用 ChatGPT 来增强您的 MySQL 查询编写技…

微信公众号抽奖怎么做_分享微信抽奖小程序制作的好处

在H5游戏中,抽奖是最受消费者喜爱的模式之一。将H5微信抽奖活动结合到营销中,可以带来意想不到的效果,带流量和曝光率,所以许多企业也会在做活动时添加上不同类型的H5微信抽奖活动。编辑那么,新手怎么搭建微信抽奖活动…

钓鱼网站+persistence植入后门程序+创建用户

本实验实现1: 利用MS14-064漏洞,会生成一个网址,诱导用户点击,打开后,会直接连接到发起攻击的主机上,即可攻击成功。 本实验实现2: 一旦入侵成功,则拿到控制目标主机的部分权限&…

【论文阅读】SSR-Net: 一个小型的 软分段回归网络 用于年龄估计

原始题目SSR-Net: A Compact Soft Stagewise Regression Network for Age Estimation中文名称SSR-Net: 一个小型的 软分段回归网络 用于年龄估计发表时间2018年7月13日平台IJCAI-18来源台湾中央研究院、国立台湾大学文章链接https://www.ijcai.org/proceedings/2018/0150.pdf开…

2023-02-20干活小计:

所以我今天的活开始了: In this paper, the authors target the problem of Multimodal Name Entity Recognition(MNER) as an improvement on NER(text only) The paper proposes a multimodal fusion based on a heterogeneous graph of texts and images to mak…

Renegade:基于MPC+Bulletproofs构建的anonymous DEX

1. 引言 白皮书见: Renegade Whitepaper: Protocol Specification, v0.6 开源代码见: https://github.com/renegade-fi/renegade(Renegade p2p网络每个节点的核心网络和密码逻辑)https://github.com/renegade-fi/mpc-bulletpr…

OpenShift 4 - 将 VMware 虚机迁移至 OpenShift Virtualization(视频)- 温迁移

《OpenShift / RHEL / DevSecOps 汇总目录》 说明:本文已经在支持 OpenShift 4.12 的 OpenShift 环境中验证 文章目录了解 Warm Migration为 VMware VM 配置 CBT用 Warm Migration 方式迁移 VMware VM创建 Migration plan执行 Migration plan演示视频了解 Warm Migr…

漫画 | Python是一门烂语言?

这个电脑的主人是个程序员,他相继学习了C、Java、Python、Go, 但是似乎总是停留在Hello World的水平。 每天晚上,夜深人静的时候,这些Hello World程序都会热火朝天地聊天但是,这一天发生了可怕的事情随着各个Hello wor…

小程序(十)签到业务流程分析

文章目录一、如何获取地理信息?二、如何判定某地区新冠疫情的风险等级?系统的人脸签到模块包含的功能非常丰富,不仅仅只有人脸识别的签到功能,而且还可以根据用户签到时候的地理定位,计算出该地区是 新冠疫情 的 高风险…

【可视化实战】Python 绘制出来的数据大屏真的太惊艳了

今天我们在进行一个Python数据可视化的实战练习,用到的模块叫做Panel,我们通过调用此模块来绘制动态可交互的图表以及数据大屏的制作。 而本地需要用到的数据集,可在kaggle上面获取 https://www.kaggle.com/datasets/rtatman/188-million-us…

【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断)

【STM32笔记】__WFI();进入不了休眠的可能原因(系统定时器SysTick一直产生中断) 【STM32笔记】低功耗模式配置及避坑汇总 前文: blog.csdn.net/weixin_53403301/article/details/128216064 【STM32笔记】HAL库低功耗模式配置&am…

UnsupportedOperationException

原因&#xff1a;返回值为list时&#xff0c;返回值类型应为具体的类型参考文章&#xff1a;(139条消息) mybatis中返回结果类型为集合类型&#xff08;List、Map&#xff09;_毒毒毒毒丶的博客-CSDN博客_mybatis返回list<map>集合UnsupportedOperationException 是用于表…

【算法基础】线性、二分法查找

问题&#xff1a; 现有数组int[] arr new int[]{1,3,5,63,2,55,78}&#xff0c;找出值为2的元素&#xff0c;并返回其下标。 1. 线性查找&#xff08;顺序查找&#xff09; 声明两个变量&#xff1a;查找的元素、保存索引的变量用for循环依次遍历 注意&#xff1a; 这里只查…

TCP的三次握手、四次挥手

文章目录前言一、一些重要字段的含义二、TCP总括图三、三次握手详细过程1.第一次握手2.第二次握手3.第三次握手三次握手小结4.为什么必须要进行三次握手&#xff0c;两次或四次就不行四、四次挥手1.第一次挥手2.第二次挥手3.第三次挥手4.第四次挥手四次挥手简述前言 一个TCP的…