线程调度的基本过程

news2024/11/29 10:51:27

进程的基本调度过程


文章目录

  • 进程的基本调度过程
  • 一.什么是进程
    • 我们先用官方的话语去解释一下,大家先看我们对这个定义的一个结果如下:
  • 二.进程的特征
  • 三.进程的三种基本状态
  • 四.进程的管理
    • 4.1 什么是PCB
    • 4.2 PCB中的信息
      • 4.2.1 pid
      • 4.2.2 内存指针
      • 4.2.3文件描述符
      • 4.2.4 进程调度信息


一.什么是进程

我们先用官方的话语去解释一下,大家先看我们对这个定义的一个结果如下:

进程(Process)是计算机中正在执行的一个程序实例。进程是操作系统进行资源分配和调度的基本单位,每个进程都拥有独立的内存空间、程序计数器、栈、寄存器和其他系统资源,它们之间互相独立,互不干扰。一个进程可以包含多个线程,这些线程共享进程的资源。

在操作系统中,进程的创建、撤销、调度和同步等操作都由操作系统内核负责。当操作系统启动一个程序时,会为其创建一个进程,并为该进程分配一定的系统资源。进程可以处于运行、就绪、阻塞等不同的状态,操作系统根据进程的状态和优先级来调度进程的执行,保证系统资源的合理利用和各个进程的公平竞争。进程还可以通过进程间通信机制进行数据交换和协作.

如果我们觉得进程不好解释的话,我们就换个思路来说,大家都玩过电脑吧,大家都在电脑上打过游戏之类的吧,你打开的每一个游戏,或者说,每一个应用就是一个进程.


二.进程的特征

当然了,我们打开应用的时候,自然这个进程会有啥特征,这也是在所难免的,接下来我们可以来介绍一下这些特征,这可能有些枯燥,但是大家可以先看看,别太担心,其实没有什么大不了的.

  1. 动态性:进程是动态的,它可以创建、撤销和调度,进程的生命周期可以包含从创建、就绪、运行、阻塞和终止等不同的状态。
  2. 独立性:进程是系统资源分配和调度的基本单位,每个进程拥有独立的内存空间、程序计数器、栈、寄存器和其他系统资源,它们之间互相独立,互不干扰。
  3. 并发性:在多道程序设计环境下,多个进程可以同时存在于系统中,并发地执行。由于CPU资源是有限的,因此需要操作系统进行进程调度,保证各个进程的公平竞争和系统资源的合理利用。
  4. 共享性:在进程中可以共享系统资源,如打开同一个文件、使用同一段内存等。这样可以提高系统资源的利用率和进程间通信的效率。
  5. 拥有者性:进程是由用户或程序所创建的,每个进程都有一个创建者和拥有者,进程的资源和行为受到其拥有者的控制和限制。
  6. 动态优先级:进程的优先级可以根据其当前状态和执行情况进行动态调整,保证系统资源的合理分配和公平竞争。进程间通信:不同的进程之间可以通过进程间通信机制进行数据交换和协作,实现更加复杂的应用

针对进程的特征,有一个特征,我们得好好的去解释解释,就是并发性,为什么我们要去讨论一下并发呢?因为还有另外一个词语并行.
并行:
同一时刻,两个核心,同时执行两个进程.此时这俩进程就是并行执行的~~
并发:
一个核心,先执行进程1,执行一会之后,再去执行进程2,再执行一会之后,再去执行进程.此时只要这里的切换速度足够快,看起来,进程123就是“同时”执行
此时,虽然咱们只有16个核心,也可以同时执行142个任务了通过并发+并行的方式来完成
我还是举个例子:
假设有一个园丁在花园里工作。他有多个任务需要完成,如修剪草坪、浇水、除草等等。这个园丁可以采用两种方式来完成这些任务:并行和并发。
如果园丁采用并行的方式,他会同时进行多项任务。比如,他可以在修剪草坪的同时浇水或者除草,这样可以更快地完成任务。这就好比园丁拥有多双手,能够同时处理多个任务,从而提高效率。这就是并行。
如果园丁采用并发的方式,他会交替地执行多项任务。比如,他可以先修剪草坪,然后浇水,再去除草。虽然这些任务不能同时进行,但是园丁可以在不同任务之间快速切换,以达到同时处理多个任务的效果。这就好比园丁只有一双手,但是能够快速地在多个任务之间切换,从而提高效率。这就是并发。

因此,可以将并行理解为同时进行多个任务,而并发则是交替执行多个任务。在实际的计算机系统中,这两种方式也有类似的应用。例如,多核处理器可以同时执行多个任务来提高效率,这就是并行;而单核处理器也可以采用时间片轮转的方式交替执行多个任务,实现并发。

三.进程的三种基本状态

就绪态(Ready):指进程已经准备好运行,但是还未分配到CPU资源。就绪态的进程会排队等待CPU调度。

运行态(Running):指进程正在执行,占用CPU资源。在同一时刻,只能有一个进程处于运行态。

阻塞态(Blocked):指进程因为某些原因,如等待I/O操作完成或等待资源的分配等,暂时不能继续执行,需要等待某些事件的发生。阻塞态的进程会被放入阻塞队列中,等待事件发生后再重新进入就绪态

四.进程的管理

其实我们这里对进程的了解不是很深,只是简单的出入了解一下,所为进程的管理,自然就是进程多了,我们就需要进行管理,我们把进程的管理,简单的分为了俩个步骤:
1.描述一个进程:使用及结构体类,把一个进程有哪些信息表述出来.
2.组织这些进程:使用数据结构,把这些结构体对象放到一起.

这就是进程的管理的大概思路,不过为了尽可能的描述进程管理,我们就要引入另外一个定义,PCB,大家看到这个东西,是不是又很懵逼了,不过不要着急,我们为了更系统的描述进程的管理的描述,操作系统专门定义了一个数据结构,自然就是PCB了.接下来就让我们来看看这个数据结构是个怎么回事,我们肯定是介绍不完的,我们大概介绍一下,就行了.


4.1 什么是PCB

PCB 存储了操作系统对进程的管理和控制所需的所有信息,包括进程的标识符、状态、优先级、内存地址、寄存器、资源需求、父子关系等。每个进程都有一个对应的 PCB,在进程创建时由操作系统分配和初始化。

当操作系统需要对进程进行管理和控制时,通过 PCB 来访问进程的相关信息。例如,当进程从就绪态转换到运行态时,操作系统需要从就绪队列中选择一个进程,将其对应的 PCB 加载到 CPU 中,并恢复进程的上下文信息,使其可以继续执行。

PCB 的使用使得操作系统能够高效地管理和控制多个进程的运行,实现资源的合理分配和公平竞争。同时,PCB 的信息也为调试、监视和统计进程提供了必要的支持。

4.2 PCB中的信息

4.2.1 pid

这个东西是什么呢,进程标识符号,简单来说,我们每一个人都有一个身份,自然每一个进程就有个标识符.

4.2.2 内存指针

这个东西就是展示进程使用的是内存的哪一个地方.

4.2.3文件描述符

比如,我拿文件举个例子
文件:比如硬盘上存储的数据,往往就是以文件为单位进行整理的~ 进程每次打开一个文件,就会产生一个“文件描述符”(标识了这个被打开的文件)一个进程可能会打开很多文件,对应了一组文件描述符.把这些文件描述符放到一个顺序表这样的结构里,就构成文件描述符表.

4.2.4 进程调度信息

a)进程状态
记录进程当前的状态,例如就绪态、运行态、阻塞态等。
如果,你不好理解的话,我们可以举个例子,假设哈,这里有个人叫小明,他认识了很男生,每周给这三个小哥哥,安排,时间表假设,
A给我说,他要出差一个月
默认情况下,这三个小哥哥都是随叫随到,
我在排时间的时候就非常灵活.
于是A就相当于阻塞状态.B和C就是就绪状态
周一到周四,和B
周五周六和C周天继续放假
我这么举例子,大家就明白了吧,

b)进程的优先级
进程之间一定还是有先后顺序的,进程之间的调度也就不是公平的,我这里还是给大家用故事的形式,去给大家讲解,进程优先级.

在某个时刻,由于一些原因,工作量突然变得非常紧急,工厂的管理人员需要尽快完成这个任务,以便及时交付给客户。此时,管理人员要求工人 A 和 B 尽快完成这个任务,但是由于工人 B 技能不如 A,他的工作速度相对较慢,可能需要更长的时间来完成任务。
为了解决这个问题,管理人员可以通过提高工人 A 的优先级来确保他的工作被更快地执行。例如,管理人员可以让工人 A 的任务优先级比工人 B 更高,这样在资源紧张的情况下,系统会优先分配给工人 A 更多的资源(例如 CPU 时间),以确保他的工作能够及时完成。
通过提高进程优先级来分配更多的系统资源,可以确保重要的任务能够得到优先处理,同时也能够提高系统的性能和效率。但是,在设置进程优先级时,需要权衡不同进程的相对重要性和优先级,以避免低优先级进程被永久忽略。

c)进程的上下文
上下文,就是描述了当前进程执行到哪里这样的“存档记录"进程在离开CPU的时候就要把当前运行的中间结果,“存档”.
等到下次进程回来CPU上,再恢复之前的“存档",从上次的结果继续往后执行
我说完以后,如果还是理解的话,其实我们还是可以通过故事的方式去理解这个问题.
如果说,有一天,你认识了三个小哥哥,有一天,小哥哥A,说我带你去海南岛玩,然后你回答他,我准备一套性感的泳衣
小哥B给你讲,他妈妈最近要过生日了,你回答他说,那你准备一部手机给妈妈当做礼物.
但是过了一段时间以后,小哥哥A来问你准备好了吗?你回答我买好手机了,小哥哥B来问你,你准备好了吗?你回答说,你买了一套性感的泳衣,一旦这样回答,其实就是牛头不对马嘴.
为了避免上述穿帮的情况,我就需要在排时间表本本上记录一下:和他们都做了啥样的事情,有啥是需要进一步完成的
这个时候,我们就引入了进程上下文.,再来深入的理解什么是进程上下文.
所谓的上下文具体指就是进程运行过程中, CPU内部的一系列寄存器的值.
寄存器有很多种
其中最典型的作用
就是保存当前进程执行的中间结果
包括进程运行到哪一条指令
在这里插入图片描述

d)进程的记账信息
简单的解释就是下面这种解释.
统计了每个进程,在CPU上执行了多久了,可以作为调度的参考依据
我再来举个故事的例子,大家可以参考再考
比如,按照之前的优先级,每周只给C排一天时间
过了几个月之后,我就发现,C对我的态度逐渐冷淡了舔的也力不从心的~~
此时排查之前的时间表原来个C的时间太少了难怪感情就淡了
接下来的时间里给C多排点时间多给他尝点甜头,由不得他舔的不卖力[暂时]

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

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

相关文章

【Android】aliyun云构建自动化打包

先贴出 阿里云移动研发平台EMAS-云构建的文档地址 一切以文档为主 简介 云构建服务支持通过流水线进行多端应用的编译构建任务,支持包签名、平台托管证书等能力,提升研发效率,规范研发流程。 提升研发效能,缩短交付周期 提升研发…

【专项训练】布隆过滤器和LRU缓存

布隆过滤器:与哈希表类似 哈希表是一个没有误差的数据结构! 有哈希函数得到index,会把要存的整个元素放在哈希表里面 有多少元素,每个元素有多大,所有的这些元素需要占的内存空间,在哈希表中都要找相应的内存大小给存起来 事实上,我们并不需要存所有的元素本身,而是只…

C++模拟实现红黑树

目录 介绍----什么是红黑树 甲鱼的臀部----规定 分析思考 绘图解析代码实现 节点部分 插入部分分步解析 ●父亲在祖父的左,叔叔在祖父的右: ●父亲在祖父的右,叔叔在祖父的左: 测试部分 整体代码 介绍----什么是红黑树 红…

5.2 对射式红外传感器旋转编码器计次

对射式红外传感器1.1 接线图VCC GND分别接电源的正负极DO数字输出端,随意选择一个GPIO口1.2 硬件原理当挡光片或者编码盘在对射式红外传感器中间经过时,DO就会输出电平变化信号,电平跳变信号触发STM32 PB14号口中断,在中断函数中执…

01: 新手学SpringCloud前需知道的5点

目录 第一点: 什么是微服务架构 第二点:为什么需要学习Spring Cloud 第三点: Spring Cloud 是什么 第四点: SpringCloud的优缺点 1、SpringCloud优点 2、SpringCloud缺点 第五点: SpringCloud由什么组成 1&…

数据结构——链表OJ题目讲解(2)

作者:几冬雪来 时间:2023年3月10日 内容:数据结构链表OJ题目讲解 来源:牛客网和力扣 目录 前言: 刷题: 1.反转链表: 1.改变指向的解法: 2.取头结点插入到新链表: …

参考 | 辨别真假笔记本三星内存条 (ddr4)

参考 | 辨别真假笔记本三星内存条 (ddr4) 文章目录参考 | 辨别真假笔记本三星内存条 (ddr4)1. 三星内存条标签纸上编码的含义2. 三星内存颗粒上编码的含义3. 辨别内容参考1. 三星内存条标签纸上编码的含义 内存条贴张上面有两串值得注意的编码, 其中编码的具体意义参考三星官方…

docker-compress 配置

文章目录docker-compress下载安装常用命令Docker Compose配置常用字段docker compose案例yml 配置指令参考versionbuildcap_add,cap_dropcgroup_parentcommandcontainer_namedepends_ondeploydevicesdnsdns_searchentrypointenv_fileenvironmentexposeextra_hostshe…

【3.10】操作系统进程管理、KMP算法

多线程冲突了怎么办? 由于多线程执行操作共享变量可能会导致竞争状态,因此我们将此段代码称为临界区(*critical section*),它是访问共享资源的代码片段,一定不能给多线程同时执行。 我们希望这段代码是互斥…

cadence skill 记录FPM不能保存问题

;FPM skill by Richard L. version0.08 fpmontrealgmail.com;Tree:杂项(Chinese)/简单范例;Desc:范例如何建立一个简单的二极管封装;Vendor:Richard L.;Count:1;CVG64:示意图字段(测试中);Datasheet:pL12.7 ;引脚间距pA7.6 pB3.5 pH3.5 ;长宽高pPad2.0 pHole1.2 ;焊盘直径和孔径…

论文阅读《Block-NeRF: Scalable Large Scene Neural View Synthesis》

论文地址:https://arxiv.org/pdf/2202.05263.pdf 复现源码:https://github.com/dvlab-research/BlockNeRFPytorch 概述 Block-NeRF是一种能够表示大规模环境的神经辐射场(Neural Radiance Fields)的变体,将 NeRF 扩展到…

渗透测试——信息收集(详细)

信息收集:前言:信息收集是渗透测试除了授权之外的第一步,也是关键的一步,尽量多的收集目标的信息会给后续的渗透事半功倍。收集信息的思路有很多,例如:页面信息收集、域名信息收集、敏感信息收集、子域名收…

Redis学习【12】之Redis 缓存

文章目录前言一 Jedis 简介二 使用 Jedis2.1 测试代码2.2 使用 JedisPool2.3 使用 JedisPooled2.4 连接 Sentinel 高可用集群2.5 连接分布式系统2.6 操作事务三 Spring Boot整合Redis3.1 创建工程3.2 定义 pom 文件3.3 完整代码3.4 总结四 高并发问题4.1 缓存穿透4.2 缓存击穿4…

全方位解读智能中控屏发展趋势!亚马逊Alexa语音+Matter能力成必备

随着智能家居行业逐步从碎片化的智能单品阶段,迈向体验更完整的全屋互联阶段,智能中控屏作为智能家居最佳的入口之一,在年轻人青睐全屋智能装修的风潮下,市场潜力彻底被引爆。 一、为什么是智能中控屏? 在智能音箱增…

诗一样的代码命名规范

有文化:落霞与孤鹜齐飞,秋水共长天一色;没文化:太阳落山的时候,看见一只鸟在水上飞;日常编码中,代码的命名是个大的学问。能快速的看懂开源软件的代码结构和意图,也是一项必备的能力…

Docker入门建议收藏 第二部分

二、Docker 容器技术与虚拟机的区别 Docker 到底是个什么东西呢?我们在理解 Docker 之前,首先得先区分清楚两个概念,容器和虚拟机。 虚拟机 虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在…

单链表的头插,尾插,头删,尾删等操作

前言顺序表要求是具有连续的物理空间,并且数据的话是在这些空间当中是连续的存储。但这样会带来很多问题,比如说在头部或者说中间插入的话,效率不是很高;并且申请空间可能需要扩容,并且越往后一般来说都是异地扩容&…

优思学院|精益生产中的“单件流”真的能够做到吗?

精益生产中提到的“一个流”(One Piece Flow)是一种生产方式,它的核心理念是通过合理配置作业场地、人员和设备,使产品从投入到成品产出的整个制造加工过程中始终处于不停滞、不堆积、不超越,按节拍一个一个地流动。 …

Idea+maven+spring-cloud项目搭建系列--11 整合dubbo

前言: 微服务之间通信框架dubbo,使用netty (NIO 模型)完成RPC 接口调用; 1 dubbo 介绍: Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提…

渲染十万条数据就把你难住了?不存在的!

虚拟列表的使用场景如果我想要在网页中放大量的列表项,纯渲染的话,对于浏览器性能将会是个极大的挑战,会造成滚动卡顿,整体体验非常不好,主要有以下问题:页面等待时间极长,用户体验差CPU计算能力…