主要内容
问题产生
采用一个什么样的概念来描述计算机程序的执行过程和作为资源分配的基本单位,才能充分反映操作系统的执行并发、资源共享及用户随机的特点?
程序
程序(program)描述计算机所要完成的具有独立功能的,并在时间上按严格次序前后相继的计算机操作序列集合,是一个静态的概念。
单道程序的顺序执行
我们把一个具有独立功能的程序独占处理机直至最终结束的过程称为程序的顺序执行。
特点:
(1)顺序性:每执行一条指令,系统将从上一个执行状态转移到下一个执行状态,且上一条指令的执行结束是下一条指令执行开始的充要条件。
(2)封闭性:程序执行得到的最终结果由给定的初始条件决定,不受外界因素的影响。
(3)可再现性:只要输入相同的初始条件,无论何时重复执行该程序都能得到相同的结果。
多道程序的并发执行
实际上,计算机经常需要同时处理多个具有独立功能的程序,批处理系统、分时系统和实时系统都是这样的系统。
特点:
(1)独立性:每道程序在逻辑上都是独立的,不存在制约关系。
(2)随机性:程序的执行和数据的输入开始时间都是随机的。
(3)资源共享性:资源包括硬件资源和软件资源。资源共享将导致对进程执行速度的制约。
并发执行使为了增强计算机系统的处理能力和提高资源利用率所采取的一种同时操作技术。
程序的并发执行可分为两种:
1)多道程序系统的程序执行环境变化所引起的多道程序的并发执行。
2)单道程序的几个程序段包含着一部分可以同时执行或顺序可以颠倒执行的代码,即两段没有逻辑先后顺序的代码。
并发执行的影响
程序的并发执行充分利用了系统资源,从而提高了系统的处理能力,这是并发执行好的一方面。然而资源有限,程序的并发执行必然导致资源共享和竞争,从而改变程序的执行速度。当某一段代码的执行速度受到影响,自然会产生一系列连锁反应。
例如在栈的入栈和出栈操作中,若采用顺序执行,要么是先有数据入栈,再有数据出栈,要么就是反过来,执行过程十分严谨。若采用并发执行,入栈和出栈就有可能出现问题。譬如出栈开始执行时,入栈也刚要开始执行,出栈操作占用了处理机,入栈操作却还未放入栈顶元素,出栈操作自然也无法顺利进行。
为了控制和协调各程序执行过程中的软、硬件资源的共享和竞争,显然需要一个描述各程序段执行过程和共享资源的基本单位。
由于程序的顺序性、静态性和独立性,用程序段作为描述其执行过程和共享资源的基本单位既增加操作系统设计和实现的复杂度,也无法反映操作系统所应该具有的程序段执行的并发性、随机性以及资源共享等特性。
所以用程序来作基本单位是不合适的。
进程的定义
计算机中的许多名词的定义不能像数学、物理那样给出严格的定义,只能表示对名词的一种描述。
关于进程比较经典的定义:
1)进程是程序的一次执行;
2)进程是一个程序及其数据在处理机上顺序执行时发生的活动;
3)进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程的基本属性
1)进程是一个可拥有资源的独立单位。
一个进程要独立运行,它必须拥有一定的资源,包括用于存放进程正文和数据的磁盘、内存地址空间,以及运行时需要的外围设备等。
2)进程是一个可独立调度和分派的基本单位。
这是一个进程要独立运行的必要条件。
若设法将进程的两个基本属性分开,由OS分开处理:
1)不把作为调度和派生的基本单位同时当作拥有资源的单位。
2)对于拥有资源的单位不作频繁的切换。
正是在这种思想的指导下,后来诞生了一个新概念——线程。