目录
操作系统之进程
认识操作系统管理计算机资源软件的统称.
对下负责管理好硬件设备
对上负责给软件提供稳定的运行环境
则操作系统在中间起承上启下的作用
软件是无法直接获取到计算机的硬件资源的,所有需要操作系统来进行同一的调度,软件可以通过操作系统 '间接' 的获取到计算机的硬件资源. 常见的操作系统有 linux, windows,Android IOS
操作系统的功能是非常庞大的,我们这边研究操作系统的进程管理
进程管理与我们后面要学习的多线程是有密切的关系的
认识进程
进程(process) 也可以称为任务(task)
通俗来说,一个运行起来的程序就是一个进程
例如: .exe文件 他是一个可执行文件(程序), 当打开这个文件的时候,这个文件就跑起来了,一个进程就创建好了
在任务管理器中就可以查看相应的进程
进程管理
我们看到,此时有非常多的进程运行在我们的操作系统之上.
那么我们就需要对进程进行一个管理:
-
描述进程:就是对进程进行一个描述,使用结构体/类把一个进程有哪些东西,表示出来
-
组织进程:使用一定的数据结构把这些结构体/类放到一起
例如:一个公司有很多的员工,我们可以把这些员工称为进程
那么如何管理这些进程?
-
明确每一个员工的相关属性
-
使用一定的数据结构把这些相关的属性组织起来,比如(表格)
每一个进程都有他的进程控制块 PCB process control black
PCB的相关属性
Pid :
每一个进程都有他的唯一id/唯一身份标识
内存指针:
用来描述当前这个进程使用的是内存的那一部分,因为进程需要运行起来的话,就需要一定的硬件资源,例如内存
文件描述符表:
文件: 一般硬盘上存储的数据,是以文件为单位进行整理存储的. 当这个进程打开一个文件的时候,就会产生一个文件描述符的东西,用来标识这个文件已经被打开了.
一个进程是可以打开多个文件的,那么就需要一组这个文件描述符,把这些文件描述符放在一个表里面,就构成了文件描述符表. 主要就是用来描述当前这个进程使用了硬盘的哪些资源
从内存指针和文件描述表我们可以看出来,进程的运行是需要从操作系统申请资源的进程就操作系统进行资源分配的基本单位
进程调度:
咱们的程序都是在CPU的基础之上运行的
CPU的核心数
我们常见的有4核8线程 , 8核16线程 这里的线程也就是我们的逻辑处理器
也可以称为8个物理核心,16个逻辑核心
我们可以简单的认为一个物理核心就是一个身强力壮的成年人, 这一个身强力壮的成年人就可以干两个小朋友的活, 一个顶俩.
8个人同时开干,就是相当于16个小朋友同时开工.
这个图片我们可以看到CPU要处理的进程是非常多的, 我们的CPU是远远处理不过来的
这时就有并行和并发了
并行
同一时间段,N个核心,同时执行N个进程,这N个进程是相互不干扰的,相互独立的
16个核心就是只能执行16个进程
并发
一个核心,先执行进程1,执行一会了之后,再去执行进行2,再执行了一会之后,又去执行进程3, .....
也就说,只要切换的速度快,在宏观角度来看的话他就是并行的 ,进程1,2,3是同时执行的.
现在虽然我们只有16个核心,但是我们就可以通过并行+并发的方式来执行更多的进程了
并发+并行的方式是由操作系统自动执行的,我们是感知不到的
以下属性是和CPU资源相关的属性,这些属性辅助进行进程调度
进程的状态
通俗来说,进程的状态有两个 就绪态 阻塞态
就绪态: 这个进程已经准备好了,随时就可以上CPU进行执行
阻塞态: 这个进程暂时无法上CPU进行执行
进程的优先级
每一个进程之间他们的优先级一定是不同的,避免产生冲突
他们一定会有一个先后顺序,而且有的要优先执行
进程的上下文
上下文就是描述当前这个进程执行到哪里了,这样的一个存档记录
进程在离开CPU的时候,就要把当前运行的结果存档,等下次这个进程回到CPU上时,在从之前的存档记录进行恢复,也就是说从上次执行的结果继续向下执行.
具体到过程,所谓的存档就是进程在运行的时候,CPU中一系列寄存器的值.
寄存器最典型的作用就是保存当前进程的运行的中间结果,包括当前进程运行到了那一条指令
进程离开CPU的时候,就需要把寄存器中存储的这些值,保存在PCB的上下文字段中 称为存档
进程下次回到CPU中的时候,就需要再次把PCB中的值恢复到CPU中去 称为存档
进程的记账信息
主要就是统计了每个进程在CPU上执行了多长时间
可以作为调度的参考依据
操作系统使用双向链表这样的数据机构来组织PCB
-
创建一个进程:创建一个链表的节点
-
销毁一个进程:就是把这个链表的节点删除
-
遍历进程列表:遍历链表