一、进程的基本概念
1.1 程序的顺序执行与并发执行
顺序执行
程序的顺序执行是指一个程序由若干个程序段组成,这些程序段的执行必须是顺序的。例如,一个简单的计算程序可能包含输入操作(I)、计算操作(C)和输出操作(P),它们必须按照 I → C → P 的顺序执行。
顺序执行的特征包括:
顺序性:处理机的操作严格按照程序所规定的顺序执行。
封闭性:程序一旦开始执行,其计算结果不受外界因素的影响。
可再现性:程序执行的结果与它的执行速度无关(即与时间无关),而只与初始条件有关。
并发执行
并发执行是指多个程序同时运行,共享系统的资源。例如,在多道程序设计环境下,多个作业可以同时运行,每个作业包含输入数据、处理和输出结果三个步骤(Ii, Ci, Pi)。这些步骤可以并发执行,但必须保证每个作业内部的顺序性。
并发执行的特征包括:
间断性:程序的执行会因为资源竞争而“走走停停”。
失去封闭性:程序的运行受到其他程序的影响,共享资源可能导致结果不同。
不可再现性:多次运行初始条件相同的程序可能会得到不同的结果。
1.2 进程的定义与特征
进程的定义
进程是程序关于某个数据集合的一次执行过程。它是操作系统进行资源分配和调度的基本单位。简单来说,进程是程序的动态执行实例。
进程的特征
动态性:进程是程序的执行过程,有生命周期,可以创建、运行和终止。
并发性:多个进程可以在同一时间段内并发运行。
独立性:进程是独立运行的单位,可以独立获得资源和接受调度。
异步性:进程按各自独立的、不可预知的速度向前推进。
1.3 进程的状态与转换
进程有三种基本状态:
就绪状态(Ready):进程已获得除CPU之外的所有必需的资源,一旦得到CPU控制权,立即可以运行。
运行状态(Running):进程已获得运行所必需的资源,正在处理机上执行。
阻塞状态(Blocked):进程因等待某个事件(如I/O操作完成)而暂时无法运行,即使CPU空闲,该进程也不能运行。
进程状态的转换如下图所示:
就绪态 <-> 运行态
| |
| |
v v
阻塞态 <-> 静止就绪态
此外,进程还可以被挂起,挂起状态的引入原因包括终端用户请求、父进程请求、负荷调节的需要以及操作系统的需要。
1.4 进程控制块(PCB)
进程控制块(PCB)是操作系统管理进程的重要数据结构,它记录了进程的全部信息,是进程存在的唯一标志。PCB的主要内容包括:
进程标识符:用于唯一标识一个进程。
处理机状态信息:包括通用寄存器、指令计数器、程序状态字PSW等。
进程调度信息:包括进程状态、优先级、调度所需信息等。
进程控制信息:包括程序和数据的地址、资源清单、链接指针等。
PCB的组织方式有两种:
链接方式:将具有相同状态的PCB链接成一个队列。
索引方式:通过索引表来管理PCB,索引表记录了PCB的内存地址。
二、进程控制
2.1 进程的创建
进程的创建通常由操作系统内核完成,常见的创建原因包括用户登录、作业调度、提供服务和应用请求。创建过程包括申请空白PCB、分配资源、初始化PCB和将新进程插入就绪队列。
2.2 进程的终止
进程的终止可以由正常结束、异常结束或外界干预引起。终止过程包括检索PCB、检查进程状态、终止子孙进程、回收资源和移除PCB。
2.3 进程的阻塞与唤醒
进程的阻塞是指进程因等待某个事件而暂时无法运行,唤醒是指等待的事件发生后,进程被重新调度运行。阻塞和唤醒通过原语实现,例如wait()和signal()。
2.4 进程的挂起与激活
挂起是指将进程置于静止状态,激活是指将静止状态的进程重新变为活动状态。挂起和激活通过挂起原语suspend()和激活原语active()实现。
三、进程同步
3.1 进程同步的基本概念
进程同步的主要任务是协调多个相关进程的执行次序,使并发执行的进程之间能有效地共享资源和相互合作。进程间有两种形式的制约关系:
间接制约:源于资源共享,例如多个进程共享一个缓冲区。
直接制约:源于进程合作,例如多个进程协作完成一个任务。
3.2 信号量机制
信号量是一种有效的进程同步工具,分为整型信号量、记录型信号量和AND型信号量。
整型信号量
整型信号量是一个表示资源数目的整型量S,通过两个原子操作wait(S)和signal(S)来访问。wait(S)操作会减少S的值,signal(S)操作会增加S的值。
记录型信号量
记录型信号量引入了进程链表L,用于链接所有等待进程。wait(S)和signal(S)操作会检查S的值,并相应地将进程放入或移出等待队列。
AND型信号量
AND型信号量用于解决多个资源同时申请的问题。Swait(S1, S2, …, Sn)操作会一次性检查所有信号量的值,只有当所有信号量的值都大于等于1时,才会减少它们的值并继续执行。
3.3 经典进程同步问题
生产者-消费者问题
生产者进程和消费者进程共享一个缓冲池,生产者进程将产品放入缓冲池,消费者进程从缓冲池中取出产品。解决方案包括利用记录型信号量和AND型信号量。
哲学家进餐问题
五个哲学家共用一张圆桌,分别坐在周围的五张椅子上,他们的生活方式是交替地进行思考和进餐。解决方案包括利用记录型信号量和AND型信号量。
读者-写者问题
允许多个读者进程同时读一个共享对象,但不允许一个写者进程和其他读者进程或写者进程同时访问共享对象。解决方案包括利用记录型信号量和信号量集机制。
四、进程通信
4.1 进程通信的类型
进程通信分为低级通信和高级通信:
低级通信:只能传递状态和整数值,例如信号量机制。
高级通信:可以传递任意数量的数据,例如共享存储器系统、消息传递系统和管道通信系统。
4.2 消息传递通信的实现方法
消息传递通信分为直接通信和间接通信:
直接通信:发送进程直接将消息发送给目标进程。
间接通信:通过中间实体(如信箱)进行发送和接收。
4.3 消息缓冲队列通信机制
消息缓冲队列通信机制中,主要利用的数据结构是消息缓冲区。发送原语和接收原语分别用于发送和接收消息。
五、线程
5.1 线程的引入
线程是操作系统能够进行调度的最小单位,它比进程更轻量级。线程的引入可以提高程序并发执行的程度,简化进程间的通信。
5.2 线程的属性
线程具有以下属性:
轻型实体:只拥有必不可少的资源,如线程状态、寄存器上下文和栈。
独立调度和分派的基本单位:线程切换时间比进程短。
可并发执行:多个线程可以并发运行。
共享进程资源:线程共享所属进程的资源。
5.3 线程的实现
线程的实现方式包括内核支持线程、用户级线程和组合方式:
内核支持线程:线程的创建、撤消和切换由内核完成。
用户级线程:线程的管理完全在用户空间完成,内核不可见。
组合方式:内核支持线程和用户级线程结合使用。
六、总结与复习建议
通过本文的详细解读,相信你对进程的描述与控制有了更深入的理解。进程是操作系统的核心概念之一,掌握进程的创建、终止、同步、通信以及线程的实现,对于理解和使用操作系统至关重要。