自娱自乐os笔记-3.1进程的基本概念
写在前面
苦逼计算机本人写的纯自娱自乐啊纯为了自己看着方便,虽然跟着教材和PPT走的但也有很多为了自己高兴写的东西,总之有尽量写的浅显易懂防止自己猪脑看不懂
并没有真的在教人很容易误人子弟但你愿意的话看看也行甚至可以提出建议orz
感谢codex老师在解析教材和ppt的环节中做出的巨大贡献
在操作系统里,“进程”是最核心的对象之一,因为CPU 在“执行程序”时,操作系统真正管理和调度的单位不是“程序文件”,而是“正在运行的实例”,也就是进程。
只有管理好了进程,才不会导致进程之间互相卡死、冲突等等
进程的基本概念
程序的顺序执行及其特征
在程序是顺序执行时,遵循如下的规则(?):仅当前一操作(程序段)执行完后,才能执行后继操作。例如,在进行计算时,总须先输入用户的程序和数据,然后进行计算,最后才能打印计算结果。
因此顺序执行时,程序具有如下的特征
- 顺序性,处理机的操作严格按照程序所规定的顺序执行,有固定的时序
- 封闭性,程序运行时独占全机资源
- 结果的确定性,执行结果和中断次数无关
- 可再现性,只要程序顺序执行的初始条件相同,不论执行过程如何,都将获得相同的结果
程序的并发执行及特征
假设我们有一个程序作业任务,它的顺序是:输入程序->计算程序->打印程序,根据上面的顺序执行的规则可知存在一个前后的依赖关系。
不过,并不存在后一个输入程序依赖前一个打印程序这样的事——也就是说两个任务之间并没有依赖关系。因此当我们拥有很多这样的程序时,可以考虑并发执行。
[collapse title=关于前趋图]前趋图是一个有向无环图(DAG),P1->P2表示P1必须在P2前完成
节点可以表示一条语句、一个程序段、或者一个进程

[/collapse]
当我们并发执行时,上面的例子的前趋图就会变成下面这样

程序并发执行时也会有如下的特征
- 间断性:这个程序可能做一半就被切走了(时间片到了、要等待资源等等)
- 失去封闭性:多个程序/进程共享 CPU、内存、文件、变量等资源,你不再“独占全机”。因此外界行为会影响你看到的状态。例如两个程序都要计算x=x+1,他们会共享一个x变量
- 不可再现性:还是上面的例子,两个程序计算同一个变量的计算,导致满足了“竞态条件”,调度顺序不确定,因而结果也不可复现
进程的定义及描述
较典型的进程定义有:
- 进程是程序的一次执行。(是运行起来的一次实例)
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动(不仅是代码,还有数据,以及“活动过程”)
- 进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
[warning]进程不等于程序![/warning]
进程还具有如下的特性:
- 结构特征:进程实体包含数据集合和运行于其上的程序,它至少由程序块、数据块和进程控制块等要素组成。
- 动态性:由“创建”而产生,由“调度”而执行;由得不到资源而阻塞;由撤消而消亡。(而程序是静态的)
- 并发性:引入进程的目的也是使其进程实体能和其他进程实体并发执行;而程序(没有建立PCB)是不能并发执行的。
- 独立性:在传统的OS中,独立性是指进程实体是一个能独立运行、独立分配资源(分配独立的内存地址等)和独立接受调度的基本单位。凡未建立PCB的程序都不能作为一个独立的单位参与运行。
- 异步性:异步性也称随机性,是指进程按各自独立的不可预知的速度向前推进,或说进程实体按异步方式运行。
[buy]进程出现的动机就是为了让多个程序在同一台机器上“交替运行”、提高资源利用率,操作系统需要一个抽象来描述和管理“正在运行的程序实例”,于是引入进程。[/buy]
[buy]“并发”是宏观上并发,微观上轮转,一次只在执行一个任务
“并行“是多核cpu在同一时刻真的在做多个任务

[/buy]
为了使参与并发执行的每个程序(含数据)都能独立运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(PROCESS CONTROL BLOCK,PCB)
操作系统利用 PCB 来:
- 描述进程的基本情况(例如 PID、状态、优先级等)
- 描述活动过程(例如运行到哪、等待什么资源)
- 从而实现控制与管理(调度、切换、撤销等)
程序段(代码)+ 数据段(变量、堆栈等)+ PCB(进程控制块)就构成了一个进程实例
其中,数据段下还可细分两类
- 进程核心栈(每个进程一个):用于保护中断/异常相关的执行现场、保存函数调用参数/返回地址等
- 进程数据块:存放进程的私有数据
进程是动态的暂时的,是正在运行的东西;进程实体是静态的的组成内容。进程就是进程实例的运行过程

浙公网安备 33010602011771号