我们知道,在没有OS的计算机或者单道批处理系统中,程序执行的方式是顺序执行。在多道批处理系统中,多道程序共享系统资源、并发执行,并发执行出现的问题也引入了进程的概念。 所以,在学习进程之前有必要先对程序的 顺序执行 和 并发执行方式 做简单的了解。
一、前驱图的概念
所谓前驱后继,其实也就是发生时间的先后关系。
作用: 用于描述程序执行的先后顺序。
本质: 是一个有向无循环图,可记为 DAG(Directed Acyclic Graph)(重点:有向无循环)
结点表示: 一个进程、一个程序段 或 一条语句。
有向边表示: 前驱关系。箭头所指的是后继,如图中 P2 是 P1 的后继。
Pi --> Pj: Pi 存在指向 Pj 的边,称 Pi 是 Pj 的直接前驱,Pj 是 Pi 的直接后继。表示 Pj 在执行前 Pi 必须完成。
终止节点: 没有后继的结点,如图中的 P9。
二、程序的顺序执行与并发执行
1. 顺序执行
(1)顺序执行的前驱图
就是“一条直线”,因为每个时刻都只能运行一个程序。
(2)程序顺序执行的特征
① 顺序性
指处理机严格地按照程序所规定的的顺序执行。
② 封闭性
指程序在封闭的环境下运行,即程序运行时独占全机资源(没有其它程序一起共享),资源的状态只有本机才能改变。
③ 可再现性
只要程序执行时的环境和初始条件相同,当程序重复执行时,都可获得相同的结果。
2. 并发执行
(1)并发执行的设计与前驱图
Parbegin 与 Parend 里面的部分并发执行,begin 和 end 里面的语句顺序执行。
所以图中 只有当 紫色的 Parbegin 里面的 P1 和 P2 并发执行完之后,才能执行接下来的 P4。
(2)程序并发执行时的特征(注意是“程序”,不是“进程”!!!我刚学时就搞混了)
① 间断性
也就是一个程序的整个执行过程是“走走停停”的,由于共享资源,这些并发的程序相互制约,有时需要进行等待,造成了 “执行——暂停——执行” 的间断性活动规律。
② 失去封闭性
由于并发的程序之间共享系统资源,导致其中任一程序在运行时,其环境都必然会收到其它程序的影响,所以就失去了运行环境的封闭性。
③ 不可再现性
程序在并发执行时,由于失去了封闭性,从而也失去了不可再现性。换句话说,程序在多次执行后,虽然它们执行的环境和初始条件是相同的,但得到的结果却各不相同。
比如 A 和 B 两个程序共享变量N,A 中会让 N+1 ,B 中会让 N=0 。那么 N 最后的数值肯定跟 A 和 B 执行的情况(比如执行顺序什么的)有关系。
此时还未引入进程的概念。如果每次执行的结果都不同,岂不是失去了程序的意义,因此,人们引入了“进程”的概念,并且设计了相应的进程同步机制,使得程序在并发同时也能独立地运行。对于进程的描述,在下一章【OS笔记 6】中。