1、程序和进程

  进程由两个部分组成:1)操作系统用来管理进程的内核对象。内核对象也是系统用来存放关于进程的统计信息的地方。2)地址空间。它包含所有可执行模块或DLL模块的代码和数据。它还包含动态内存分配的空间。如线程堆栈和堆分配空间。

 

 

定义

使用系统运行资源情况

程序

计算机指令的集合,它以文件的形式存储在磁盘上。程序是静态实体(passive Entity),在多道程序系统中,它是不能独立运行的,更不能与其他程序并发执行。

不使用【程序不能申请系统资源,不能被系统调度,也不能作为独立运行的单位,因此,它不占用系统的运行资源】。

 

进程

通常被定义为一个正在运行的程序的实例,是一个程序在其自身的地址空间中的一次执行活动。

定义:进程是进程实体(包括:程序段、相关的数据段、进程控制块PCB)的运行过程,是系统进行资源分配和调度的一个独立单位。

使用【进程是资源申请、调度和独立运行的单位,因此,它使用系统中的运行资源。】

  2、进程与线程

  如果说操作系统引入进程的目的是为了提高程序并发执行,以提高资源利用率和系统吞吐量。那么操作系统中引入线程的目的,则是为了减少进程并发执行过程中所付出的时空开销,使操作系统能很好的并发执行。

  进程process定义了一个执行环境,包括它自己私有的地址空间、一个句柄表,以及一个安全环境;线程则是一个控制流,有他自己的调用栈call stack,记录了它的执行历史。

  线程由两个部分组成:1)线程的内核对象,操作系统用它来对线程实施管理。内核对象也是系统用来存放线程统计信息的地方。2)线程堆栈,它用于维护线程在执行代码时需要的所有参数和局部变量。当创建线程时,系统创建一个线程内核对象。该线程内核对象不是线程本身,而是操作系统用来管理线程的较小的数据结构。可以将线程内核对象视为由关于线程的统计信息组成的一个小型数据结构。

  进程与线程的比较如下:

 

比较

进程

线程

活泼性

不活泼(只是线程的容器)

活泼

地址空间

系统赋予的独立的虚拟地址空间(对于32位进程来说,这个地址空间是4GB)

在进程的地址空间执行代码。线程只有一个内核对象和一个堆栈,保留的记录很少,因此所需要的内存也很少。因为线程需要的开销比进程少

调度

仅是资源分配的基本单位

独立调度、分派的基本单位

并发性

仅进程间并发(传统OS)

进程间、线程间并发

拥有资源

资源拥有的基本单位

基本上不拥有资源

系统开销

创建、撤销、切换开销大

仅保存少量寄存器内容,开销小。

 

  3、进程同步

  进程同步的主要任务:是对多个相关进程在执行次序上进行协调,以使并发执行的诸进程之间能有效地共享资源和相互合作,从而使程序的执行具有可再现性。

  同步机制遵循的原则:

  (1)空闲让进;

  (2)忙则等待(保证对临界区的互斥访问);

  (3)有限等待(有限代表有限的时间,避免死等);

  (4)让权等待,(当进程不能进入自己的临界区时,应该释放处理机,以免陷入忙等状态)。

  由于进程同步产生了一系列经典的同步问题“生产者-消费者”问题,“哲学家进餐”问题,“读者-写者”问题。