目录
一. 什么是进程?
要知道进程的调度过程,首先我们要了解什么是进程,我们打开任务管理器(快捷键CTRL+alt+delete),就会发现它的第一栏就是进程,如下图所示:
当我们多打开一个.exe文件,就会发现任务管理器的进程会多一行,这是对应软件的进程,当关闭它,对应的线程也随之结束;如果不运行它,它只会默默地在硬盘空间里,不会对系统产生任何影响,这里面的进程,有些是电脑开机就启动的,有些是需要我们手动打开的
二. 操作系统是如何是管理进程的?
1.先描述一个进程
我们需要明确指出进程中的相关属性。
例如:要形容一个游戏,我们需要游戏的名字,简介,购买渠道等
给大家介绍一下“PCB
”(进程控制块),注意并不是那个参见的PCB
板(这个是硬件中的),在操作系统里面主要是通过c/c++
来实现相关属性,和Java
中的类差不多,描述这个进程中的属性。操作系统中描述进程的这个结构体,称为“PCB
”,
2.将若干个进程组织起来
就是使用双向链表来把每个进程的PCB
给串起来~~,注意这里指的是在Linux
这个系统为例,每个操作系统的类型不同,内部的实现也是各有不同的
再给大家简单分析一下所谓的一些进程操作
“创建进程”: 就是先创建出PCB
,然后把PCB插入到双向链表中。
“销毁进程”: 就是找到链表上的PCB
,然后从链表上删除它。
“查看任务管理器”: 就是遍历链表并把链表数据显示出来
三. 进程调度的基本过程
进程的调度,其实就是,操作系统在考虑CPU资源如何给各个进程分配
状态
这个状态就描述了当前这个进程接下来应该怎么调度
运行状态:顾名思义,此时进程在cpu上正在运行
就绪状态:随时可以去CPU
上执行
阻塞状态/睡眠状态:暂时不可以去CPU
上执行
优先级
先给谁分配时间,后给谁分配时间,以及谁分的多,给谁分的少
记账信息
统计了每个进程,都分别被执行了多久,分别都执行了哪些指令。分别都排队等了多久,目的是给进程调度提供指导依据的。
上下文
表示上次进程被调度出CPU的时候,当时程序的执行状态~~,下次进程上CPU的时候,就可以恢复之前的状态,然后继续往下执行。
进程被调度出CPU之前,要把CPU中的所有的寄存器中的数据都给保存到内存中(PCB的上下文字段中)
经典案例
假设你是一个妹子,长的巨好看,身材一流,还会讲话~~
所以你有很多的追求者,但是原则上讲,你在同一时刻只能谈一个男朋友
但是在现实中,基本不可能有这种人 :)
于是你为了满足自己的这些要求,同时谈了三个男朋友~
A:有钱的
B:长得帅的
C:会舔的
因此,一个时间管理大师就横空出世了,你需要合理安排自己的时间,避免同一时刻,这三人碰面
这时候你首先要做的事情就是给自己排一个时间表~
宏观上看起来,你是同时谈了三个男朋友。
微观上看起来,同一时刻,你只是和一个男朋友在一起
显然这就是并发,规划时间表的过程,也就是“调度”的过程
好了,本期就讲到这里,下期给大家带来更多精彩内容