进程的调度

news2025/8/3 19:59:01

 

目录

 

1. 进程的概念

2.进程是如何被调度的

2.1描述

2.2 组织

 2.3 PCB中描述的进程特征

2.4 进程调度的相关属性(接2.3)

3. 内存管理


1. 进程的概念

一个跑起来的程序就称之为进程(没跑起来就不是进程)

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

2.进程是如何被调度的

进程是一个重要的软件资源

它是由操作系统内核进行管理的

而管理主要分为两个步骤:描述和组织

2.1描述

使用一个结构体来描述进程属性,这个结构体有一个特殊的名字,叫做PCB(进程控制块)

2.2 组织

组织本质上是用一个数据结构将多个PCB给连接起来

在操作系统中是通过双向链表来对进程进行连接的

创建一个进程,本质上就是在双向链表中插入一个PCB节点;

销毁一个进程,本质上就是在双向链表中删除一个PCB节点。

我们在任务管理器中看到的进程,本质上就是遍历一次双向链表

 2.3 PCB中描述的进程特征

(1)pid

pid就是进程的ID,相当于进程的身份标识符。

(2)内存指针

内存指针指向的是系统划分给自己的内存空间。

(3)文件描述符表

文件描述符表,描述了进程占有的硬盘上的文件等资源。

内存指针和文件描述符表本质上就是描述了进程持有了哪些硬件资源。

PCB除了上面三条之外,还描述了进程描述的相关属性--2.4。(下面会说)

上面描述了PCB的其中3个属性,其中有描述了进程持有的资源,资源是由操作系统来进行分配的。

其中,硬件资源、内存、网卡这类的资源相对好分配,难分配的是CPU资源

通常情况下,进程的数量时要远远大于CPU的数量的,比如我的电脑里面的CPU是12核的

而进程却有上百个,这些进程我们希望是要同时进行,那么CPU上是如何分配的呢?

是用分时复用的方法进行分配的。

其主要分为并行和并发。

并行:微观上,同一时刻,两个核心上的进程是同时进行的

并发:微观上,同一时刻,一个核心上只能运行一个进程,但是他能对进程进行快速的切换。

比如:在CPU这个核心上,先运行一个浏览器,在运行一下QQ,再运行一下画图板...... 只要切换的速度足够快(我的电脑是3.3GHz,没秒运行33亿条指令),宏观上,人是感知不到的。

小知识:程序的并行还是并发是内核进行处理的,人们感知不到,因此往往将并行和并发统称为并发。(显示声明除外)

那么CPU是如何去进行这样的操作呢?

操作系统里面有一个重要的模块调度器,就负责让有限的CPU来调度执行这么多的进程

2.4 进程调度的相关属性(接2.3)

(1) 进程的状态

下面描述一些主要的状态:

就绪状态: 随叫随到,进程随时可以在CPU上运行。

运行状态:正在运行的进程(程序),和就绪状态相似。

堵塞状态:当前这个进程短时间内无法在CPU上运行。比如:进程在进行密集的I/O操作。

对于就绪状态和运行状态,很多操作系统并不会去明确区分。

(2)优先级

进程也是有优先级的,操作系统在进行调度的时候并不是一碗水端平

(3)上下文

操作系统在进行进程间的来回切换时,需要把进程执行的“中间状态”记录好,下次这个进程到CPU上运行的时候,可以恢复到上次的状态,方便继续执行。

上面的这段操作就类似于游戏中的“存档”、“读档”

而上下文的本质就是你“存档”的内容

进程的上下文是CPU中各个寄存器的值。

寄存器:CPU内置的存储数据的模块,保存的是程序运行过程中的中间结果。

保存上下文,就是把这些CPU寄存器的值,记录保存到内存中;

恢复上下文,就是把内存中的这些寄存器的值恢复回去。

(4)记账信息

操作系统,统计每个进程在CPU上占用的时间和执行的指令数目,根据这个来决定下一阶段如何调度。

3. 内存管理

在现在的操作系统中,进程中分配的内存都是虚拟的内存

为什么要使用虚拟内存空间呢?

因为在进程中,是可能出现bug的,而这些bug可能会导致,当前这个进程访问到另一个进程的内存空间中去,此时的影响就会很严重。

如下:

如果进程1 出现了bug,将指针指向了0x7000,

那可能会由于进程1的bug吧进程2给搞毁了,为了避免这种情况的发生,针对进程所使用的的内存空间,进行“隔离”,也就是虚拟内存空间。

代码里面使用的地址,不再是真实的物理地址,而是虚拟地址,再由操作系统和专门的硬件设备去进行虚拟地址到真实地址的转换,如果出现访问越界的情况,就会及时停止进程。

如下:

 当进程1 去访问0x3000的时候,MMU就会直接想进程反馈一个错误(让进程崩溃)。

这样一来进程出现了bug也不会去影响其他进程的运行。

虽然进程之间隔离了,但是有的时候还需要进程之间的相互配合。也就是进程间通信。

它的核心思路就是,开辟一块“公共空间”,让进程都可以去访问,然后在基于这块空间上去进行交互数据即可。

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

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

相关文章

说说原型(prototype)、原型链

1、原型 prototype 和 proto 每个对象都有一个__proto__属性,并且指向它的prototype原型对象 每个构造函数都有一个prototype原型对象 prototype原型对象里的constructor指向构造函数本身 看一下代码就清楚了 function Person(nick, age){this.nick nick;this.…

数据结构学习笔记(Ⅳ):串

目录 1 串 1.1 定义与基本操作 1.定义 2.基本操作 1.2 串的存储结构 1.顺序存储 2.链式存储 3.基于顺序存储实现基本操作 2 串的朴素模式匹配算法 2.1 朴素模式匹配算法 2.2 KMP算法 1.优化思路 2.计算next数组 2.3 KMP算法优化 1 串 1.1 定义与基本操作 1.定义…

02.OpenWrt-进入开发板系统

02.OpenWrt-进入开发板系统 进入系统就是连接到系统shell,可是输入命令.说到shell第一个想到windows系统的PowerShell,在windows系统上多使用图形界面的方式进行与系统交互,毕竟windows的精髓就是图形界面,很少使用PowerShell命令.其实PowerShell的功能也非常强大,有时候记住一…

Flutter高仿微信-第38篇-单聊-转账

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 详情请参考 Flutter高仿微信-第29篇-单聊 , 这里只是提取小视频的部…

【C++】Cmake使用教程(看这一篇就够了)

文章目录引言一 环境搭建二 简单入门2.1 项目结构2.2 示例源码2.3 运行查看三 编译多个源文件3.1 在同一个目录下有多个源文件3.1.1 简单版本3.1.1.1 项目结构3.1.1.2 示例代码3.1.1.3 运行查看3.1.2 进阶版本3.1.2.1 项目结构3.1.2.2 示例源码3.1.2.3 运行查看3.2 在不同目录下…

热门编程语言那么多,该选择哪个

编程语言那么多,该怎么选呢?无论是对找工作、还是打算转行新领域的同学们,起初都会有这样的困扰。这时候了解清楚编程语言的种类,到底该选哪个方向?将来能从事哪些岗位的工作?就比较重要了。与其盲目随从他…

CAS号:376364-38-4,rCRAMP (rat)

rCRAMP (rat) 是一种大鼠组织蛋白酶相关的抗菌肽,有助于大鼠脑肽/蛋白质提取物的抗菌活性。rCRAMP (rat) 是大鼠中枢神经系统先天免疫系统的关键参与者。rCRAMP (rat) is the rat cathelin-related antimicrobial peptide. rCRAMP (rat) contributes to the antibac…

计算机网络协议------从入门到深化

计算机网络通信 什么是通信协议 简单来说,通信协议就是计算机之间通过网络实现通信时事先达成 的一种“约定”;这种“约定”使那些由不同厂商的设备,不同CPU及不 同操作系统组成的计算机之间,只要遵循相同的协议就可以实现通 信。…

数据治理容易走进哪些误区?

在业界,大家都为如何做好数据治理而感到困惑。数据治理工作一定要先摸清楚数据的家底,规划好路线图,再进行决策。不然很容易走进误区中,无法自拔。下面总结了数据治理的7个常见误区,并给出一定建议,希望给予…

ERD Online 4.0.3_fix 元数据在线建模(免费、私有部署)

❝ 修复数据源导入的元数据,在没有中文注释修改的时候,导致表消失修复页面刷新导致404修改是否在关系图中显示的提示一键部署增加两种部署方式:IPPORT、DOMAIN增加手动部署方式、极大程度的实现部署定制化❞以 「root」 用户登录 Linux 主机执…

面试:dumpsys meminfo 内存信息含义

查看内存信息: adb shell dumpsys meminfo dumpsys meminfo显示的信息如图所示: 这里仅介绍我们需要重点关注的字段: Dalvik Heap:虚拟机占用的内存,可以理解为Java层占用的内存。Native Heap:Native层占…

python 循环引用的解决方法

目录 1、问题描述 2、原因 3、示例 4、解决办法 1、问题描述 编写python代码,运行中出现了:‘most likely due to a circular import ’ 这样的报错。 2、原因 循环引用问题,即A引用了B,B又引用了A,造成循环引用…

ctp交易接口股票怎么查询历史数据?

针对于ctp交易接口股票历史数据的查询,其基本原理就是利用api接口开发子系统最终就是开发完成并暴露一个标准的HTTPAPI接口,并将接口注册和接入到API网关。API设计和开发的核心思想仍然应该是基于领域对象建模驱动,通过领域对象建模很好的实现…

激光数据去畸变

机器人在使用激光雷达时必然会遇到的一个问题就是激光雷达数据去畸变。为什么会产生畸变呢,这是因为激光雷达产生激光数据时如果机器人在运动,那么就会产生运动畸变。 在ros下使用激光雷达时,激光数据是相对于激光本体坐标系的。画个图看下会…

【无人机】基于SDRE对NPS II无人机进行点对点(调节)控制(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入

目录 文章目录 前言 第01关 数字型注入 1.源码分析 2. sqlmap渗透 总结 前言 iwebsec靶场的SQL注入关卡共13关SQL注入漏洞,覆盖了数字型注入、字符型注入、报错型盲注、布尔型盲注、时间型盲注以及各种过滤绕过的注入,外加上二次注入,…

Recommendation Fairness: From Static to Dynamic 阅读笔记

论文链接https://arxiv.org/abs/2109.03150v1 Section 1 引言 越来越多的推荐系统开始将推荐建模为一个马尔可夫决策过程,并使用强化学习来解决这个问题。从而推荐系统场景下的公平性研究便面临着一个从静态评价与一次性干预static evaluation and one-shot interv…

CSS3 动画

变形 transform 在CSS3中,动画效果包括3个部分:变形(transform)、过渡(transition)、动画(animation) translate()平移 transform: translateX(x);    /*沿x轴方向平移*/ tran…

(十)死信队列

死信队列1、概念2、死信产生的原因3、代码实现3.1. 流程图3.2. 消息TTL 过期3.3. 队列达到最大长度3.4. 消息被拒1、概念 某些时候由于特定的原因导致 queue 中的某些消息无法被消费,这样的消息如果没有 后续的处理,就变成了死信,有死信自然就…

(九)RabbitMQ交换机(Exchange)

交换机Exchange1、交换机1.1. Exchanges 概念1.2. Exchanges 的类型1.3. 无名exchange(默认交换机)2、临时队列3、绑定(bindings)4、Fanout(发布/订阅)5、Direct exchange、6、Topics在这里插入图片描述1、…