进程调度的基本过程

🎉🎉🎉点进来你就是我的人了
博主主页:🙈🙈🙈戳一戳,欢迎大佬指点!

欢迎志同道合的朋友一起加油喔🦾🦾🦾


目录

前言

什么是进程?

二.PCB中的一些属性

pid(进程id)

内存指针

文件描述符表

进程调度的基本过程是怎样的?

状态

优先级

记账信息

上下文

总结



前言

进程是操作系统进行资源分配的最小单位,这意味着各个进程互相之间是无法感受到存在的,这就是操作系统抽象出进程这一概念的初衷,这样便带来了进程之间互相具备“隔离性”


什么是进程?

简单理解为跑起来的程序~~

像点开许多桌面软件的图标

XX.exe都称为“可执行文件”

这些文件在双击前都静静的躺在硬盘上,双击前,这些文件不会对你的系统有任何影响。

但双击执行exe文件后,操作系统就会把这个exe给加载到内存中,让CPU执行exe内部的一些指令。开始进行一些具体的工作,把这些运行起来的可执行文件,称为“进程”

通过电脑的任务管理器就可以查看当前运行的进程信息:

那要管理那么多内存,操作系统应该怎么进行区分和管理呢:

1.描述,使用一个类或者结构体,把这个进程的信息表示出来,我们简称PCB(progress control block)进程控制块,不是PCB板,这就是一个结构体,里面包含了进程的核心信息;

2.组织:利用数据结构把多个PCB给整理到一起,比如双向链表

创建进程:先创建出PCB,然后把PCB加入到双向链表中;

销毁进程:找到链表上的PCB,将其从链表上删除;

查看任务管理器:遍历链表。

二.PCB中的一些属性

pid(进程id)

这个很好理解,就是进程的身份标识(进程的身份证号)

内存指针

指明了这个进程要执行的代码/指令在内存的哪里,以及这个进程执行中依赖的数据都在哪里~~当运行一个exe,此时操作系统就会把这个exe加载到内存中,变成进程。
简而言之内存指针就像航海指南,能够给进程指一条明路~

文件描述符表

程序运行过程中,经常要和文件打交道,进程每次打开一个文件,就会在文件描述符表上多增加一项(这个文件描述符表可以视为一个数组,里面的每个元素又是一个结构体,就对应一个文件的相关信息)一个进程只要一启动,不管你代码中是否打开/操作文件的代码都会默认的打开三个文件~~(系统自动打开的):标准输入(System.in)标准输出(System.out)标准错误(System.err
这个文件描述符表的下标,就称为文件描述符~

进程调度的基本过程是怎样的?

进程的调度,其实就是,操作系统在考虑CPU资源如何给各个进程分配~
上面的属性是一些基础的属性,下面的一组属性,主要是为了能够实现进程的调度~

状态

这个状态就描述了当前这个进程接下来应该怎么调度~~
就绪状态:随时可以去CPU上执行。
阻塞状态/睡眠状态:暂时不可以去CPU上执行。

优先级

先给谁分配时间,后给谁分配时间,以及谁分的多,给谁分的少。(这里的优先级只是建议,系统不一定采取)

记账信息

统计了每个进程,都分别被执行了多久,分别都执行了哪些指令。分别都排队等了多久,目的是给进程调度提供指导依据的。

上下文

表示上次进程被调度出CPU的时候,当时程序的执行状态~~,下次进程上CPU的时候,就可以恢复之前的状态,然后继续往下执行。

进程被调度出CPU之前,要把CPU中的所有的寄存器中的数据都给保存到内存中(PCB的上下文字段中)
相当于玩单机游戏的时候的存档~~
下次进程再被调度上CPU的时候,就可以从刚才的内存中恢复这些数据到寄存器中
相当于读档继续玩游戏~
存档+读档~存档存储的游戏信息,就称为“上下文”


总结

所谓的调度就是进行时间管理

进程的调度,其实就是操作系统在考虑CPU资源如何给各个进程分配--

由于操作系统上,同时运行多个进程,此时如果某个进程出现BUG,进程崩溃了,是不会影响其他进程的,因为进程之间通过虚拟地址空间,已经各自隔离开了,但实际工作中进程之间还是需要相互交互的。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书生-w

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值