进程
进程控制块(Process Control Block,PCB)
为了使参与并发执行的每个程序(含数据)都能独立地运行,在操作系统中必须为之配置一个专门的数据结构,称为进程控制块(Process Control Block,PCB)。系统利用PCB来描述进程的基本情况和活动过程,进而控制和管理进程。
进程的组成
由程序段、相关的数据段和PCB三部分便构成了进程实体(又称进程映像)。
所谓创建进程,实质上是创建进程实体中的PCB;而撤销进程,实质上是撤销进程的PCB。
进程的定义
- 进程是程序的一次执行。
- 进程是一个程序及其数据在处理机上顺序执行时所发生的活动。
- 进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程的特征
- 动态性:进程的实质是进程实体的执行过程。
- 并发性:是指多个进程实体同存于内存中。
- 独立性:在传统的OS中,独立性是进程实体是一个能独立运行、独立获得资源和独立接收调度的基本单位。
- 异步性:是指进程是按异步方式运行的,即按各自独立的、不可预知的速度向前推进。
线程
进程的两个属性
- 进程是一个可拥有资源的独立单位,一个进程要能独立运行,它必须拥有一定的资源,包括用于存放程序正文、数据的磁盘和内存地址空间,以及它在运行时所需要的I/O设备、已打开的文件、信号量;
- 进程同时又是一个可独立调度和分派的基本单位,一个进程要能独立运行,它还必须是一个可独立调度和分派的基本单位。
每个进程在系统中都有唯一的PCB,系统可根据其PCB感知进程的存在,也可以根据其PCB中的信息,对进程进行调度,还可将断点信息保存在其PCB中。反之,再利用进程PCB中的信息来恢复进程运行的现场。
正是由于进程有两个基本属性,才使进程成为一个能独立运行的基本单位,从而也就构成了进程并发执行的基础。
时空开销
为使程序能并发执行,系统必须进行以下的一系列操作:
- 创建进程,系统在创建一个进程时,必须为它分配其所必需的,除处理机以外的所有资源,如内存空间、I/O设备,以及建立相应的PCB;
- 撤销进程:系统在撤销进程时,又必须先对其所占有的资源执行回收操作,然后再撤销PCB;
- 进程切换:对进程进行上下文切换时,需要保留当前进程的CPU环境,设置新选中进程的CPU环境,因而须花费不少的处理机时间。
线程与进程的比较
线程:作为调度和分派的基本单位。
- 调度的基本单位
在传统的OS中,进程是作为独立调度和分派的基本单位,因而进程是能独立运行的基本单位。在每次被调度时,都需要进行上下文切换,开销较大。而在引入线程的OS镇南关,已把线程作为调度和分派的基本单位,因而线程是能独立运行的基本单位。但线程切换时,仅需保存和设置少量寄存器内容,切换代价远低于进程。同一进程中,线程的切换不会引起进程的切换,但从一个进程中的线程切换到另一个进程中的线程时,必然就会引起进程的切换。 - 并发性
在引入线程的OS中,不仅进程之间可以并发执行,而且在一个进程中的多个线程之间亦可并发执行,甚至还允许在一个进程中的所有线程都能并发执行。同样,不同进程中的线程也能并发执行。这使得OS具有更好的并发性,从而能更加有效地提高系统资源的利用率和系统的吞吐量。 - 拥有资源
进程可以拥有资源,并作为系统中拥有资源的一个基本单位。然而,线程本身并不拥有系统资源,而是仅有一点必不可少的、能保证独立运行的资源。比如:在每个线程中都应具有一个用于控制线程运行的线程控制块TCB、用于指示被执行指令序列的程序计数器、 保留局部变量、少数状态参数和返回地址等的一组寄存器和堆栈。
线程除了拥有自己的少量资源外,还允许多个线程共享该进程所拥有的的资源,这首先表现在:属于同一个进程的所有线程都具有相同的地址空间,这意味着,线程可以访问该地址空间中的每一个虚地址;此外,还可以访问进程所拥有的资源,如已打开的文件、定时器、信号量机构等的内存空间和它所申请的I/O设备等。 - 独立性
在同一进程中的不同线程之间的独立性要比不同进程之间的独立性低得多。这是因为,为了防止进程之间彼此干扰和破坏,每个进程都拥有一个独立的地址空间和其他资源,除了共享全局变量外,不允许其他进程的访问。但是同一个进程中的不同线程往往是为了提高并发性以及进行相互之间的合作而创建的,它们共享进程的内存地址空间和资源,如每个线程都可以访问它们所属进程地址空间中的所有地址,如一个线程的堆栈可以被其它线程读、写、甚至完全清除。由一个线程打开的文件可以供其它线程读、写。 - 系统开销
在创建或撤销进程时,系统都有为之分配和回收进程控制块、分配或回收其它资源,如内存空间和I/O设备等。OS为此所付出的开销,明显大于线程创建或撤销时所付出的开销。类似地,在进程切换时,涉及到进程上下文的切换,而线程的切换代价也远低于进程的。此外,由于一个进程中的多个线程具有相同的地址空间,线程之间的同步和通信也比进行的简单。因此,在一些OS中,线程的切换、同步和通信都无需操作系统内核的干预。 - 支持多处理器系统
在多处理器系统中,对于传统的进程,即单线程进程,不管有多少处理机,该进程只能运行在一个处理机上。但对于多线程进程,就可以将一个进程中的多个线程分配到多个处理机上,使它们并行执行,这无疑将加速进程的完成。因此,现代多处理机OS都无一例外地引入了多线程。