在学习操作系统中,我们引入前趋图来对程序的执行先后顺序进行描述。
前趋图:用于描述进程之间的执行顺序的一种有向无循环图(DAG directed acyclic graph)。
结点用来描述,一个进程、程序段、乃至一条语句;而有向边又来表示偏序或前驱关系。
比如:
p1: a = x + 2
p2: b = y + 1
p3: c = a + b
p4: w = c + b
其前趋图为:
有一段时间,我就在想,为什么没有上图中的那条虚线呢? 因为d 的值只需要 b 和 c啊。
后来请教老师,终于明白了。 ---- 》 我们的前趋图,还是强调了程序的顺序执行,并不是需求问题。而且是整体上的顺序执行。
程序的顺序执行
特征:
1,顺序性,所谓顺序性是指,处理机严格的按照程序所规定的顺序执行,一个操作的开始必须在其前一个操作结束之后。
2,封闭性, 所谓封闭性是指,程序在执行的时候独占全机的资源。
3,可再现性,所谓可再现性是指,只要初始条件和运行环境系统,其运行结果一定是一样的。
程序的并发执行
特性:
1,间断性,所谓间断性指的是,由于多个程序对资源的要求产生的制约性,而导致的某一个程序在运行时等待资源的情况。
比如有两个程序都需要使用打印机这个资源,如果其中的一个程序已经占用,而另一个必须等待。这样后者表现出来的就是程序运行时的间断性。
2,失去封闭性,所谓封闭性指的是,由于多个程序并发执行会共享资源,从而导致各个程序运行环境会失去封闭性。
3,不可再现性,所谓不可再现性是指相同的输入,由于资源的共享,导致最后的输出结果不同。
比如,
我们可以看到,程序的顺序执行和并发执行的特性是完全相对的。
为了解决并发执行存在的一些问题,操作系统中引入了线程这个概念。
我并不是说,引入线程就是为了解决并发执行所存在的这种问题;当然,还有其他的一些原因。