51-52 - 进程状态设计

news2024/12/31 5:58:13

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

文章目录

  • 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.coloradmin.cn/o/360459.html

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

相关文章

字节跳动DevOps交付流程演进之路

近年来,各企业都已在实践 DevOps 的流程、方法和工具,来提升业务价值交付的效率。不同企业的业务团队背景和基础各不相同,因此都在走自身的 DevOps 之路,往往伴随着成功的经验和失败的教训,了解和学习不同背景下的 Dev…

Qt 某光谱仪程序开发

某光谱仪程序开发 文章目录某光谱仪程序开发摘要安装驱动注册COM组件导出.h和.cpp在Qt 中添加源文件开发打包程序关键字: Demo、 Qt、 COM、 dumpcpp、 C摘要 今天接到一个临时小任务,写一个的项目子模块的Demo,以供和专家们交流一下项目技…

游戏蓝牙耳机什么牌子好?游戏蓝牙耳机性价比品牌

为了提升游戏体验,多数人都会选购一副蓝牙耳机,在网上找了当前热销的蓝牙耳机,终于整理出了当前热销性价比高的蓝牙耳机品牌,今天就带大家一起看看这几款耳机的优点,希望这篇文章能帮助大家选择。 一、南卡小音舱蓝牙…

JavaScript随手笔记---对比数组差异

💌 所属专栏:【JavaScript随手笔记】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#…

Mybatis源码分析系列之第二篇:Mybatis的数据存储对象

前言:SQLSession是对JDBC的封装 一:SQLSession和JDBC的对照说明 左边是我们的客户端程序,右边是我们的MySQL数据仓,或者叫MySQL实例 Mybatis是对JDBC的封装,将JDBC封装成了一个核心的SQLSession对象 JDBC当中的核心对…

【IoT】做短视频之前,你需要先做好内容定位

现在做内容无疑要从垂直领域入手,否则你就很难出圈。 干货类或者说垂直领域方向的内容,往往都偏向于枯燥,并且会涉及很多专业性的名词,读者理解起来会困难很多,阅读的兴趣也自然会降低。 这也是笔者个人开始做短视频…

分析过程:服务器被黑安装Linux RootKit木马

前言 疫情还没有结束,放假只能猫家里继续分析和研究最新的攻击技术和样本了,正好前段时间群里有人说服务器被黑,然后扔了个样本在群里,今天咱就拿这个样本开刀, 给大家研究一下这个样本究竟是个啥,顺便也给…

linux系统开机文段释义

第一段Version 2.01.1204. Copyright (C) 2010American Megatrends, Inc.Press <DEL> or <F2> to entersetup. Press <F7> for BBS POPUP Menu.设备上电&#xff0c;提示按DEL键或者F2键进入BIOS设置。按F8可以调出启动设备列表&#xff0c;可以选择性的启动…

软件工程 | 第一章:软件工程学概述

软件工程学概述一、前言二、软件危机1.典型表现2.产生原因3.消除危机途径三、软件工程1.概述2.软件本质特征3.软件工程基本原理4.软件工程方法学1️⃣传统方法学2️⃣面向对象方法学四、软件生命周期五、结语一、前言 本文将讲述软件工程导论的第一章相关知识点&#xff0c;主…

Lesson7---数字图像基础

7.1 数字图像基本概念 有人说&#xff1a;计算机视觉是人工智能的大门计算机视觉成为人工智能应用方面的领头羊本课实例都是与图像有关的 7.1.1 图像的离散化 7.1.1.1 连续图像和数字图像 连续图像&#xff1a;人眼直接感受到的图像数字图像&#xff1a;把连续的图像数字化…

【论文阅读】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开…

【LeetCode】剑指 Offer(6)

目录 写在前面&#xff1a; 题目&#xff1a;剑指 Offer 12. 矩阵中的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 写在前面&#xff…

Java代码加密混淆工具有哪些?

在Java中&#xff0c;代码加密混淆工具可以帮助开发者将源代码进行加密和混淆处理&#xff0c;以增加代码的安全性和保护知识产权。以下是一些流行的Java代码加密混淆工具&#xff1a; 第一款&#xff1a;ProGuard&#xff1a;ProGuard      ProGuard&#xff1a;ProGuard…

Springboot接口多个DTO入参的Postman上传方式

在Java中使用Spring Boot框架时&#xff0c;可以同时使用多个DTO作为方法参数。 TO&#xff08;Data Transfer Object&#xff09;是一个常见的设计模式&#xff0c;用于封装数据传输对象。它通常用于将数据从一个层传递到另一个层&#xff0c;例如将数据从服务层传递到控制器…

2023 年 1 月区块链操作系统的开发回顾

副标题&#xff1a;查看 Cartesi Machine、Cartesi Rollups 和 Noether 的更新正在寻找区块链操作系统组件的最新进展&#xff1f;你找对地方了&#xff01;正如在我们的路线图文章中所描述的那样&#xff0c;我们一直在朝着定期且频繁的更新方向发展着&#xff0c;以便让我们的…

阅读笔记——Feature-Point Matching for Aerial and Ground Images方法

阅读笔记——Feature-Point Matching for Aerial and Ground Images 1.应用背景 在三维重建应用中&#xff0c;常用的是航空影像&#xff0c;但在城市环境中&#xff0c;面对大量的高层建筑物&#xff0c;航空影像往往不能很好的重建出完整的三维模型。因为航空影像视角约束以…

DataGear 4.5.0 发布,数据可视化分析平台

DataGear 4.5.0 发布&#xff0c;带来数据集计算属性新功能&#xff0c;具体更新内容如下&#xff1a; 新增&#xff1a;数据集属性新增计算表达式功能&#xff0c;可对原始数据进行二次计算处理&#xff1b;新增&#xff1a;HTTP接口数据集新增文本、XML请求体类型支持&#…

Hadoop HDFS的架构、高可用与容错机制

本次整理的学习笔记的是Hadoop HDFS的架构、高可用与容错机制&#xff0c;供大家参考学习&#xff0c;enjoy~~ 一、HDFS的架构 1&#xff0c;NameNode &#xff08;1&#xff09; 存储文件的metadata&#xff0c;运行时所有数据都保存到内存&#xff0c;整个HDFS可存储的文件数…

V4L2操作流程

打开设备–>获取设备capability–>选择视频输入–>设置视频制式及帧格式–>向驱动申请帧缓冲(不超过5个)–>申请物理地址–>开始视频采集–>出队列取得已经采集数据的帧缓冲&#xff0c;获得原始采集数据–>停止视频采集–>关闭视频设备。 常用数据…

轻量级SSH实现之Dropbear

轻量级SSH实现之Dropbear dropbear简介 Dropbear是一个轻量级的SSH服务器和客户端的实现。它运行在 各种 UNIX 平台。 Dropbear 是开源实现&#xff0c;MIT 分发 许可证。 Dropbear在嵌入式Linux&#xff08;或其他Unix&#xff09;系统广泛应用&#xff0c;例如无线路由器。…