进程管理和进程调度的基本过程(详细版)

news2024/11/27 14:40:07

“无论你走得多慢,总比停下来要好。”

对于操作系统内核来说,里面包含的功能是非常多的,其中有一个功能和日常开发,息息相关。

进程管理:

进程(process/task):进程就是正在执行的应用程序。

说到一个应用程序,有两种状态:

  1. 没有运行的时候,是一个exe文件,存储在硬盘上的
  2. 运行的时候,exe就会被加载到内存中,并且CUP执行里面的指令  --> 进程

打开我们的任务管理器就可以看到我们正在运行的应用程序(进程)

这些进程,操作系统都要去执行的,执行进程里面的指令,是需要硬件资源的!

我们可以看见图中消耗了CPU,内存,硬盘,网络等资源的 .

进程是操作系统,进行资源分配的基本单位

进程管理:

  1. 描述  通过结构体/类,把进程中的各种属性,表示出来(主流系统差不多都是 c/c++实现的,广泛用到结构体 struct)  (对于 linux 操作系统来说,使用 "PCB" 这样的结构体来描述进程信息的).
  2. 组织  通过数据结构,把多个上面的结构体,串起来,并进一步的进行各种增删查改.(简单的认为,是通过链表的方式,把上述的多个 PCB 串到一起 )

创建新的进程,就相当于创建了一个 PCB 结构体,并且插入到链表中.销毁进程,就是把 PCB 从链表上删除掉,并且释放掉这个 PCB 结构体,查看进程链表,就是在便利这个链表,依次显示出对应信息.

PCB 其实是一个非常复杂的结构体,里面包含的属性是非常多的,这里就只讨论一些关键的信息:
1.PID 进程的标识符

同一时刻,一个机器上的多个进程之间, PID 是唯一的,不会重复.系统中的很多操作,都是通过 PID 找到相应的进程的.

 2.内存指针 (一组)

描述进程依赖的指令和数据都在内存的哪个区域,操作系统运行 exe,就会读取 exe 中的指令和数据,加载到内存中(内存地址).  (侧面表示出,进程的执行是需要一定的内存资源的).

3.文件描述符表 (顺序表/数组)

描述了进程打开了哪些文件,对应到硬盘上的数据.(侧面表示出,进程的执行是需要一定硬盘资源的!!!)

下面的几个属性,相互配合,组成了进程调度的核心逻辑!

进程调度:

计算机上同时存在百八十个进程,这么多进程,都是要执行的.

CPU负责执行,CPU每个核心都可以执行一个进程,假设一个计算机只能同时执行 12 个进程,那么其他进程该怎么办呢?

操作系统,采用"分时复用"的方法来进行操作.

"分时复用":这个时刻,cpu 运行 进程1,运行一会儿后,cpu 运行 进程2,过一会儿运行 进程3.......

由于 cpu 的运算速度非常快,使上述的切换速度,也是非常快的,肉眼察觉不到!站在宏观角度,同时执行,"并发执行".

当前的操作系统,都是"多任务系统",同时可以运行多个进程.现在有了多核心 cpu,此时每个核心和核心之间,微观上也能同时执行不同的进程.

接下来的这几个属性,就是用来支持 并发执行调度过程的.

在此之前,我先假设出一种情况,来便于大家来了解下面的几个属性:

假设我是一个好看的女生,我想找一个有钱,帅气,会哄人的男朋友。这种是很难找的,所以我一下耍了三个男朋友,A:有钱的富哥  B:帅气的小哥  C:没钱而且不帅,但是会哄人会提供情绪价值

那么我就需要进行“时间管理(分时复用)”了,进行巧妙地安排,不能让他们感知到对方的存在!

比如我安排一个时间表:

周一周二周三,和A进行约会                  周四和周五,和B进行约会                    周六,和C约会

周日的话,就寻找新的目标!

4.进程的状态:

比如,正常情况下,ABC都是“随叫随到”的。此时,ABC所处的状态就称为“就绪状态”。

就绪状态的进程,是可以随时被调度到 CPU 上进行执行的。

比如,有一天,B 外出出差了,B此时无法“随叫随到”了。此时,B处于的状态,称为“阻塞状态”。

阻塞状态的进程,无法调度到 CPU 上执行,之所以阻塞,是因为要做一些其他的工作,比如 进行Io 操作(读写硬盘/读写网卡……)。

除了上述的之外,进程还有其他的状态。

5.进程的优先级:

根据上面的时间安排中,可以看出A的优先级是最高的,C的优先级是最低的。这个就不用多说了把,A他有钱呀,可以给我提供更高的价值!如果我的心情比较好的话,就不需要C来哄了。假设心情糟糕的时候,此时C来哄一哄那确实是比较香的哈!

进程的优先级是一个操作系统中用于调度进程执行的关键参数。每个进程都会被分配一个优先级,系统通过这些优先级来决定哪个进程应该获得CPU时间。

6.进程的上下文:

分时复用,一个进程执行一会儿之后,就要从 CPU 上调度走,过一段时间,还会调度会 CPU,就要沿着上次的执行结果,继续往后执行。

有一天,和A约会的时候,A给我说,下个月他的妈妈过生日,想让我帮他买个礼物,让我提前物色物色。我约会结束之后,就需要把今天约会的核心结论,记录到本子上“下个月,给A的妈妈买礼物”。

第二天,和B约会的时候,B给我说,下个月他的爸爸过生日,想让我帮他买个礼物,让我提前物色物色。我约会结束之后,就需要把今天约会的核心结论,记录到本子上“下个月,给B的爸爸买礼物”。

如果我不去记录这些东西,就可能会出现问题:

比如过几天之后,A问我准备的咋样了。    我说我给咱爸精心挑选了个五匹狼。  A:???

B问我准备的咋样了。 我说我给咱妈精心挑选了个老花镜。   B:???

此时就会出现问题,搞不好会发现对方的存在。

7.进程的记账信息:

在进程优先级的加持下,使不同的进程,吃到的资源,差异越来越大!

像上面的,我给C安排的时间比较少。随着时间的推移,C感觉到我对他逐渐冷淡,他在攒了一次次失望过程中,逐渐的灰心意冷,不想在继续舔我了。

我为了不失去 C,就需要适当的给 C 多来点甜头。某段时间,专门给 C 多安排点时间,并且准备点小礼物或者小惊喜。把他安抚好之后,再继续安排少一些的时间(毕竟,AB给我提供的价值更大)。

操作系统统计每个进程在 CPU 上执行的时间,根据这个来进一步调整调度的策略!

这几个属性相互配合,共同构成了进程调度的核心逻辑!

"这只是我们讨论的开始,未来还有更多的内容等着与您分享。请继续关注,我将分享更多的有趣的知识,让我们一起进行深入探讨……"

以上便是本期内容了,欢迎收看!

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

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

相关文章

一个月学会Java 第4天 运算符和数据转换

Day4 运算符和数据转换 今天来讲运算符,每个运算符的作用和现象,首先我们先复习一下数据类型, day2讲过基本数据类型有八种,int、short、long、byte、char、boolean、float、double,分别为四个整型、一个字符型、一个布…

代码随想录 | Day28 | 回溯算法:组合组合总和III

代码随想录 | Day28 | 回溯算法:组合&&组合总和III 关于这个章节,大家最好是对递归函数的理解要比较到位,听着b站视频课可能呢才舒服点,可以先去搜一搜关于递归函数的讲解,理解,再开始这个章节会比…

01 从0开始搭建django环境

1 安装相关版本的django,这里,我以5.1.1为例子 pip3 install django5.1.1 (.venv) D:\DjangoCode\MS>pip3 install django5.1.1 Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting django5.1.1Using cached https://pypi.t…

算法题总结(七)——栈与队列

1、栈常用操作 &#xff08;1&#xff09;栈定义 Stack<Integer> stack new Stack<Integer>();&#xff08;2&#xff09;栈操作 .栈是否为空 isEmpty(); .查询栈顶元素&#xff0c;不改变栈 peek(); .弹出栈顶元素&#xff0c;改变栈 pop(); .压入栈顶 push(); …

Quantify LLM

大模型如果用bfloat16需要特别大的显存&#xff0c;所以都在用INT4、INT8做量化&#xff0c;效果不错 量化学习 为什么量化 对Llama13B模型来说&#xff0c;不同算子加载需要的显存不同 中间是TensorCore&#xff0c;左右两边是显存&#xff0c;加载过程中模型要频繁地将wei…

【移动端】事件基础

一、移动端事件分类 移动端事件主要分为以下几类&#xff1a; 1. 触摸事件&#xff08;Touch Events&#xff09; 触摸事件是移动设备特有的事件&#xff0c;用来处理用户通过触摸屏幕进行的操作。主要的触摸事件有&#xff1a; touchstart&#xff1a;手指触摸屏幕时触发。…

k8s 之动态创建pv失败(踩坑)

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/02/05 18:53 初学容易范的错&#xff01; 问题简述&#xff1a; StorageClass创建成功&#xff0c;StatefulSet 启动不成功&#xff0c;与pvc关联的po和pvc一直是pending状态。 也就是说&#xff0c;StorageClass没有动态…

MQTT--Java整合EMQX

目录 1、简介2、准备3、使用步骤3.1 引入依赖3.2 创建生产者和消费者3.3 测试 总结PS: 1、简介 本文章实现了一个简单的MQTT客户端&#xff0c;使用Eclipse Paho库让Java和EMQX整合&#xff0c;测试客户端初始化时配置Broker地址、客户端ID、用户名和密码。连接成功后&#xf…

python sqlite3 工具函数

起因&#xff0c; 目的: sqlite3 最常用的函数。 比如&#xff0c;某人给了一个 database.db 文件。 但是你登录的时候&#xff0c;不知道账号密码。 此文件就是&#xff0c;查看这个数据库的详细内容。 有哪些表某个表的全部内容。添加数据 代码&#xff0c; 见注释 impor…

字节跳动收购Oladance耳机:强化音频技术,加速VR/AR生态布局

字节跳动收购Oladance耳机&#xff1a;加码VR/AR领域布局 近日&#xff0c;字节跳动宣布已完成对开放式耳机品牌Oladance的收购&#xff0c;实现了对该品牌的100%控股。这一收购标志着字节跳动在AI硬件领域的进一步扩展和深化&#xff0c;特别是对其VR/AR领域布局的重要加码。 …

python之运算符

1、算术运算符 算术运算符常用的有&#xff1a;&#xff0c;-&#xff0c;*&#xff0c; &#xff0c;/&#xff0c;//&#xff0c;%&#xff0c;>>,<< 1.1、加 常见的是算术相加&#xff0c;还有一种是字符串拼接。 a 10 b 20 print(a b) c "My &quo…

css 简单网页布局——浮动(一)

1. 三种布局方式 1.1 标准流 1.2 浮动的使用 1.3 简述浮动 1.3.1 浮动三大特性 <style>.out {border: 1px red solid;width: 1000px;height: 500px;}.one {background-color: aquamarine;width: 200px;height: 100px;}.two {background-color: blueviolet;width: 200px;h…

如何在算家云搭建CosyVoice(文生音频)

一、CosyVoice简介 CosyVoice 是一个开源的超强 TTS&#xff08;‌文本转语音&#xff09;‌模型&#xff0c;‌它支持多种生成模式&#xff0c;‌具有极强的语音自然可控性。‌ 具有以下特点&#xff1a; 语音合成 &#xff1a;能够将文本转换为自然流畅的语音输出。多语种…

让你的Github Profile高大时尚!

目录 前言 正文 GitHub Profile 特点&#xff1a; GitHub Actions 核心概念&#xff1a; 应用场景&#xff1a; RSS RSS的主要特点&#xff1a; 使用场景&#xff1a; RSS的工作原理&#xff1a; 关于Github Readme Card 关于Github贡献的3D图 关于个人最新博文的获取 关于代码…

今日指数-day08实战完整代码

今日指数-day08 1. 个股最新分时行情数据 1.1 个股最新分时行情功能说明 1&#xff09;个股最新分时行情功能原型 2&#xff09;个股最新分时行情数据接口分析 功能描述&#xff1a;获取个股最新分时行情数据&#xff0c;主要包含&#xff1a;开盘价、前收盘价、最新价、最…

(作业)第三期书生·浦语大模型实战营(十一卷王场)–书生基础岛第4关---InternLM + LlamaIndex RAG 实践

基础任务 (完成此任务即完成闯关) 任务要求&#xff1a;基于 LlamaIndex 构建自己的 RAG 知识库&#xff0c;寻找一个问题 A 在使用 LlamaIndex 之前InternLM2-Chat-1.8B模型不会回答&#xff0c;借助 LlamaIndex 后 InternLM2-Chat-1.8B 模型具备回答 A 的能力&#xff0c;截…

【MaskGAN】MaskGAN: Towards Diverse and Interactive Facial Image Manipulation

文章目录 MaskGAN: Towards Diverse and Interactive Facial Image Manipulationkey points贡献方法密集映射网络DMN编辑行为模拟训练多目标学习CelebAMask-HQ数据集实验消融实验总结MaskGAN: Towards Diverse and Interactive Facial Image Manipulation 会议/期刊:CVPR 202…

磁盘存储链式结构——B树与B+树

红黑树处理数据都是在内存中&#xff0c;考虑的都是内存中的运算时间复杂度。如果我们要操作的数据集非常大&#xff0c;大到内存已经没办法处理了该怎么办呢&#xff1f; 试想一下&#xff0c;为了要在一个拥有几十万个文件的磁盘中查找一个文本文件&#xff0c;设计的…

测试-BUG篇

文章目录 软件测试的生命周期BUGbug的概念描述bug的要素bug级别bug的生命周期 与开发产生争执怎么办&#xff08;高频考题&#xff09; 软件测试的生命周期 软件测试贯穿于软件的整个生命周期 BUG bug的概念 是指计算机程序中存在的一个错误(error)、缺陷(flaw)、疏忽(mista…

容器领航者:Kubernetes集群部署秘籍

目录 前言 一、ubernetes简介 1.1 应用部署方式演变 1.2 容器编排应用 1.3 kubenetes简介 二、Kubernetes核心概念 2.1 K8S各个组件用途 2.2 K8S 各组件之间的调用关系 2.3 K8S 的常用名词感念 2.4 k8S的分层架构​编辑 三、部署前的准备 3.1 k8s中容器的管理方式 3…