操作系统是如何管理进程的?

操作系统是如何管理进程的?

要回答这个问题,我们首先需要了解进程是什么东西

进程:就是一个跑起来的程序,即正在运行的程序,就像你现在正在浏览这个页面时所用的浏览器,就是一个进程。通过任务管理器,我们可以清楚地看到现在有什么进程。:>
在这里插入图片描述

在上图中,我们看到,有这么多个程序,而执行一个进程是需要占用内存的,同时,也需要对多个进程进行分配。这也是我们今天的主题.

操作系统对进程的管理

操作系统管理进程通过描述加组织的方式, 就像我们学校对每个学生的管理一样,学校通过给我们每个人一个学号,一个班级来对我们进行管理。我们来看对进程的描述和组织包括什么。

描述:描述一个进程中含有哪些属性。通过类/结构体来进行描述。这里的结构体我们也成为PCB,即(process control block)——代码控制块,在linux中每个进程都用task_struct数据结构来进行定义,每一个进程都有一个PCB

组织:通过一些数据结构,将这些pcb连接起来,在操作系统内核中,以双向链表的形式将pcb进行连接。

此外,我们还需了解PCB中到底有哪些属性。

PCB中的属性

1.pid

pid是用来标识进程的,用来表示哪些是哪些的进程,我们的任务管理器中,就明确标识出了pid

在这里插入图片描述

(这里的pid与学校给我们的学号挺相似的,学校就是通过学号来记录我们的年级专业和班级)。

2.文件描述符表

文件描述符表主要用于记录进程打开了哪些文件。文件描述符表本质上是一个数组,当进程打开一个文件时,文件描述符表的长度加一。要注意的是:若你的代码没有任何有关于文件的操作,操作系统会默认打开三个文件,分别是:标准输入标准输出标准错误

3.内存指针

内存指针主要是用来记录.exe文件加载到内存对应的二进制指令和重要的数据在内存的哪个位置。

在这里插入图片描述

在PCB中还有另外的几个属性,但首先,我们先来说一下进程调调度?到底什么是进程调度,我们先以一个简单的例子来说。

假设我现在正处于期末复习周阶段,我现在有三科科目要复习,分别是高数,数据库和java。今天周一,我把我所有的是时间都用来复习高数,周二,复习数据库,周三,开始复习java。这就是我们对这三个科目复习时间的管理。那么到底什么是进程调度?

进程调度:就是用有限的cpu核数去执行多个任务,也就是我们的并发编程,调度其实就是时间管理

我们的大脑只有一个,在复习科目的时候我们也要一科一科来,我们也要去执行多个任务。

接下来的一些属性,是为了能够实现进程调度的。

4.进程的优先级

还是以我在复习科目为例,假设我这一学期我高数都没学,我留到期末才开始预习,但我数据库和java都浅浅的学了一点。那么我是不是应该优先排时间复习高数,我要是不多复习它我就要挂科了。进程的优先级也是如此,每个进程都有相应的优先级。优先级高的优先执行。只有高优先级的进程不运行时,才调度低优先级进程运行

5.进程的状态

进程的状态描述了这个进程接下来如何被CPU调度。

假如我现在高数已经考试结束,而数据库和java还没有考试。这样的话我就不再需要复习高数,我们只需要复习数据库和java即可。

此外,进程可以总结为有两种状态:
就绪状态:> 即线程可以随时到CPU上面去执行。
阻塞状态:进程暂时不能到CPU上面去执行。

6.进程的上下文

还是举刚才的例子,我在复习高数的时候,我复习到了多元函数的微分法,此时我不想复习了,于是我将我复习到哪里这一章记录下来,下一次再从这一章开始复习后面的内容。

进程的上下文也是类似,当一个进程被调出CPU的时候,CPU会将当前的数据写回内存当中。当这个进程重新到CPU执行的时候,会将内存中的数据读到CPU的寄存器当中(这里可以联想我们玩游戏时的存档进行理解,以前玩过造梦西游的时候,是不是总要记得存档,不然防止打过的boss又得再打一遍。)

7.进程的记账信息

说到这个。。。就不能再重新提起复习科目这一件事情,假设这一周的时间,我复习高数复习得太多了,导致我数据库和java都没怎么复习。那我在下周的复习周,我就将数据库和java的复习时间安排的多一点。

操作系统在安排进程的时候,也会记录每个进程在CPU上面执行的
时间
,如果发现某个进程执行的时间太短了,也会进行适当的调整策略。

以上这7个就是进程的属性,也就是PCB中含有的属性。

虚拟内存

虚拟内存,可以理解为是被存放在磁盘上上的N个连续的字节大小的单元数组。这个连续数组被分割成固定大小的虚拟页(VP)。同样物理内存被分割成同样大小的物理页(PP),为了方便一一映射。也就是说,操作系统在硬盘上划出了一块区域,让这块区域交由操作系统进行管理,当物理内存耗尽的时候,操作系统就会将这块硬盘区域当作物理内存来进行使用。

要注意的是,每个进程用到或即将用到的数据才会调入内存,其余都在磁盘上。

我们前面已经说过,每个PCB中有一个内存指针,用来记录.exe文件需要的指令或者数据在内存走的位置,此时这个内存指针记录的就是虚拟的地址,它通过MMU将其映射到物理的内存上。我们画一个图来进行表示:>
在这里插入图片描述
通过这种虚拟地址的形式,进程就拥有了一个属性,隔离性。进程之间不会相互影响。同时,在虚拟内存的情况下,进程访问内存将会更加安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值