本文共 6841 字,大约阅读时间需要 22 分钟。
为了使参与并发执行的程序(含数据)能够独立运行,需专门的一个数据结构:进程控制块(Process Control Block,PCB)
。
系统利用 PCB 来描述进程的基本情况和运行状态,进而管理和控制进程。
进程映像,也称作进程实体由程序段、相关数据和 PCB 构成。所谓创建进程,就是创建进程映像中的 PCB;撤销进程就是撤销进程的 PCB。
进程映像是静态的,进程是动态的
。PCB 是进程存在的唯一标志
。
不同角度,进程定义不同,典型定义如下:
1)进程是程序的一次执行过程。2)进程是一个程序及数据在处理机商顺序执行时所发生的活动。3)进程是具有独立功能的程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
指进程作为程序的一次执行,有着创建、活动、暂停、终止等过程
,具有一定的生命周期,是动态地产生、变化和消亡地。动态性是进程最基本的特征。指内存在同一段时间段内有多个进程实体存在
。并发性是进程地重要特征,也是操作系统的重要特征。指进程实体是一个独立运行、独立获得资源和独立接受调度的基本单位
,凡未建立 PCB 的程序,都不能作为一个独立的单位参与运行。指进程按各自独立的、不可预知的速度向前推进
。异步性会导致结果的不可再现性,为此操作系统中必须配置相应的进程同步机制。指每个进程都配置有一个 PCB 对其进行描述
。运行态、就绪态、阻塞态、创建态和结束态
。四种转换分别是:就绪态→运行态、运行态→就绪态、运行态→阻塞态和阻塞态→就绪态
。 指进程正在处理机上运行
。单处理机系统上,每个时刻处于运行态的进程有且只有一个,而在多处理机系统上则不止一个。指进程获得了除处理机外的一切所需资源
,形象地说就是万事俱备,只待东风;此时,进程一旦获得处理机便可立即执行。系统中处于就绪态的进程,可以有多个,通常一队列形式等候处理机,称为就绪队列。等待态
,指进程正在等待某件事而暂停运行
,此时就算由空闲的处理机,也不能进入,因为运行所需要的条件还不具备。指的是进程正在被创建,尚未到达就绪态
;创建进程通常不是一蹴而就,需要经过多道步骤:首先申请一个空白的 PCB,并向 PCB 写入一些控制和管理进程的信息;然后再由系统为该进程分配运行所需的各种资源;然后再把该进程转入就绪态。指进程正从系统消失,正常结束或因为其他原因中断退出运行
。进程结束运行时,系统首先必须置该进程为结束态,然后进一步处理资源释放和回收等善后工作。 需要特别注意就绪态和阻塞态的不同:前者是一种各项准备都已经好了,只待获得处理机就可以运行;而后者是一种即便获得处理机也无法运行的状态。1)就绪态→运行态:当进程被调度获得处理机资源时。2)运行态→就绪态:处于运行态的进程用完了时间片,但是任务还没有完成也没有运行出错,不得不让出处理机时;或者在某些操作系统中,当有更高优先级的进程就绪时,调度程序将正在执行的进程转为就绪态,让有更高优先级的进程先执行。3)运行态→阻塞态:进程请求某一资源,通常是外设的使用和分配或等待某一件事的发生时,进程会从运行态进入阻塞态;进程请求系统调用时也会发生运行态到阻塞态的切换。4)阻塞态→就绪态:进程等待的事件到来或中断结束时,进程就会从阻塞态进入就绪态 ,等待获取处理机资源进行运行。
进程控制是指对系统中的所有进程进行有效的管理,一般由一个原语执行具体的管理,该原语通常具有进程创建和终止、进程态的转换等功能
。允许一个进程创建另一个进程,此时创建者称为父进程,被创建的称为子进程
;子进程可以继承父进程的所拥有的资源。当子进程被撤销时,应将其从父进程处获得的资源归还给父进程;而撤销父进程时,必须同时撤销其所有子进程。 操作系统创建一个新进程的过程如下:1)为进程分配一个唯一的进程标识符,并申请一个空白的 PCB,因为 PCB 有限,若 PCB 申请失败,则创建失败。2)为进程分配资源,为新进程的程序和数据以及用户栈分配必要的内存空间,若资源不足,进程进入阻塞态。3)初始化 PCB,主要包括初始化标志信息、初始化处理机状态信息和初始化处理机控制信息,以及设置进程的优先级。4)若进程就绪队列能够接纳新进程,则将新进程插入就绪队列,等待被调度运行。
进程完成任务准备退出运行
。进程运行时发生了异常,使进程无法继续运行,常见的引起进程异常的有:存储区越界、保护错、非法指令、特权指令、运行超时、算术运算错、I/O 故障等
。指进程应外界的请求而终止运行,如操作员或操作系统的干预、父进程请求和父进程终止
。- 操作系统终止进程的过程如下:1)根据被终止进程的标识符,检索 PCB,从中读取该进程的状态。2)若被终止进程处于执行状态,立即终止该进程的执行,将处理机资源分配给其他进程。3)若该进程还有子孙进程,则将其所有子孙进程终止。4)将该进程所拥有的全部资源,或归还给父进程,或归还操作系统。5)将该 PCB 从所在队列或链表中删除。
正在执行的进程,由于等待的事件未发生或无新工作可做等,由系统自动执行阻塞原语(Block),使自身由运行态进入阻塞态。进程阻塞是进程自身的一种主动行为,因此只有处于运行态的进程才有可能进入阻塞态
。1)找到将要被阻塞进程的标识号对应的 PCB。2)若该进程为运行态,则保护其现场,将状态转为阻塞态,停止运行。3)把该 PCB 插入相应事件的等待队列,将处理机调度给其他进程。
当被阻塞的进程所期待的事件发生了,由有关进程调用唤醒原语(Wakeup),将等待该事件的进程唤醒
。1)在该事件的等待队列中找出相应进程的 PCB 。2)将其从等待队列中移出,并置其状态为就绪态。3)把 PCB 插入就绪队列,等待调度程序调度。
阻塞和唤醒是作用相反的一对原语,必须成对使用
。Block 原语由进程自身调用实现,Wakeup 则由一个与被唤醒的进程合作或其他相关进程调用实现
。进程切换是指处理机从一个进程的运行转到另一个进程上运行
,在该过程中,进程的运行环境产生了实质性的变化。进程切换一般在内核态下完成
。1)保护处理机上下文,包括程序计数器和其他寄存器。2)更新 PCB 信息。3)把进程的 PCB 移入相应的队列,如就绪、在某事件的阻塞队列等。4)选择另一个进程执行,并更新其 PCB。5)更新内存管理的数据结构。6)恢复处理机上下文。
模式切换时,处理机逻辑上可能还在同一进程中运行
。若进程因中断或异常进入核心态运行,执行完后又回到用户态刚被中断的程序运行,则操作系统只需恢复进程进入内核所保护的 CPU 现场,而无需改变当前进程的环境信息。但若要切换进程,当前运行进程改变了,则当前进程的环境信息也需要改变
。调度是指决定资源分配给哪个进程的行为,是一种决策行为
;切换是指实际的分配的行为,是执行行为
;一般先有资源的调度,然后才有进程的切换
。进程是一个独立的运行单位,也是操作系统进行资源分配和调度的基本单位,由进程控制块 PCB,程序段和数据段组成
。PCB 是进程存在的唯一标志,操作系统管理和控制进程离不开 PCB,PCB 主要包括进程描述信息、进程控制和管理信息、资源分配清单和处理机相关信息
,如下表: 用于标识系统中正在运行的进程,标识符是唯一的
,通常在任务管理器中都可以看到进程标识符,如下: 进程当前状态,描述进程的状态信息,为处理及分配调度提供依据
;进程优先级,描述进程抢占处理机的优先级,优先级高的可优先获得处理机
;代码运行入口地址,记录程序开始运行的地址;程序外存地址指的是程序存储在磁盘的地址信息
。用于说明有关内存地址空间或虚拟地址空间的状况
,所打开的文件的列表和所使用的输入/输出设备信息。主要指处理机中各种寄存器的值
,当进程被切换时,处理机状态信息都必须保存在相应的 PCB 中,以便在该进程重新执行时,能从断点继续执行。
为了方便进程的调度和管理,需要将各进程的 PCB 用适当方法组织起来,常用的组织方式有链接方式和索引方式;链接方式是将同一状态的 PCB 链接成一个队列,不同状态对应不同队列,也可根据处于阻塞态的进程的 PCB,根据阻塞原因排成多个阻塞队列;索引方式是将同一状态的进程组织在一个索引表中,索引表的表项指向相应的 PCB,不同状态对应不同的索引表
。
进程通信是指进程之间的信息交换,PV操作是低级通信方式,高级的通信方式——以较高的效率传输大量数据的通信方式——主要有共享存储、消息传递和管道通信
。在通信的进程之间存在一快可以直接访问的共享空间,通过对这片空间进行读写操作实现进程之间的信息交换
。进程空间是彼此独立的,进程运行期间不允许访问其他进程的空间
。在消息传递系统中,进程间的数据交换以格式化的消息(Message)为单位,进程通过系统提供的发送消息和接收消息两个原语进行数据交换
。主要有直接通信和间接通信两种方式。发送进程将消息发送给某个中间实体,接收进程从该中间实体中取得消息,这种中间实体一般称为信箱,而这种通信方式又称为信箱通信方式,典型应用就是电子邮件系统
。所谓“管道”,是指用于连接一个读进程和一个写进程以实现它们之间的通信的一个共享文件,又名 pipe 文件
。
向管道提供输入的发送进程,以字符流形式将大量数据写入管道;而接收管道输出则从管道接收数据。
为了协调双方的通信,管道机制必须提供:互斥、同步和确定对方的存在共三方面的协调能力。
从管道读数据是一次性操作,数据一旦被读取,它就从管道中被抛弃,释放空间以便写入更多的数据。管道只能采用半双工通信,即某一时刻就只能单向传输。要实现父子进程双方的互动通信,需要定义两个管道。
管道可以理解为共享存储的优化和发展,因为在共享存储中,若某进程要访问共享存储空间,则必须没有其他进程在该共享存储空间进程写操作,否则访问行为被阻塞。而管道通信中,存储空间进化成了缓冲区,缓冲区只允许一边写入、另一边读出,因此上述的阻塞问题便不会存在,因为写进程会先把缓冲区写满,然后才让读进程读,当缓冲区还有数据时,写进程不会往缓冲区写数据,这决定了管道通信是半双工通信。
引入线程是为了减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能
。
线程的最直接理解就是“轻量级进程”
,是一个基本的 CPU 执行单元,也是程序执行流的最小单元,由线程 ID、程序计数器、寄存器集合和堆栈组成。
线城是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,除了运行中必不可少的资源;但它与同属一个进程的其他线程共享进程所拥有的全部资源
。
一个线程可以创建和撤销另一个线程,同一进程的多个线程之间可以并发执行;由于线程之间的相互制约,线程运行中呈现出间断性。线程也有就绪、运行和阻塞三种基本状态
。
引入线程后,进程只作为除 CPU 外的系统资源的分配单元,而线程作为处理机的分配单元;同一个进程内部的线程切换只需要很少的时空开销。
传统操作系统中,拥有资源和独立调度的基本单位都是进程。而引入线程后的系统中,线程是独立调度的基本单位,进程是拥有资源的基本单位
。进程内部线程切换不形成进程切换,不同归属的线程切换才会出现进程切换。线程不拥有系统资源,除了必不可少的资源外,只能通过所隶属的进程间接获得资源
;而进程无论在传统操作系统还是引入线程后的操作系统,都是拥有资源的。进程的创建与撤销所带来的系统开销远大于线程的创建和撤销
,因为进程涉及到资源的分配与回收,而线程几乎没有什么的资源的分配和回收;另外,线程之间的通信和同步相比进程的,更容易实现,甚至不需要操作系统的干预。进程的地址空间之间相互独立,同一进程的各线程间共享进程的资源,进程内部的线程对其他进程不可见
。进程通信(IPC)需要进程同步和互斥手段,以保证数据的一致性,而线程间可以直接读/写进程数据段来进行通信
。1)线程是一个轻型实体,它不拥有系统资源,但每个线程都应有一个唯一的标识符和一个线程控制块,线程控制块记录了线程执行的寄存器和栈等现场状态。2)不同线程可以执行相同的程序,即同一个服务程序被不同用户调用时,操作系统把它们创建成不同的线程。3)同一进程中各个线程共享该进程所拥有的资源。4)线程是处理机的独立调度单位,多个线程是可以并发执行的。在单 CPU 计算机系统中,线程交替占用 CPU;在多 CPU 系统中,各线程占用不同 CPU,若各个 CPU 同时为一个进程内的各线程服务,则可以缩短进程的处理时间。5)一个线程被创建后,便开始它的生命周期直到终止,在生命周期内会经历阻塞态、就绪态和运行态等各种状态变化。
用户级线程(User-Level Thread,ULT)和内核级线程(Kernel-level Thread,KLT)
,内核级线程又称为内核支持的线程
。将多个用户级线程映射到一个内核级线程,线程管理在用户空间中完成
。线程管理在用户空间进行,因而效率比较高
。一个线程在使用内核服务时被阻塞,整个进程都会被阻塞,多个线程不能并行地运行在多个处理机上
。将每个用户级线程映射到一个内核级线程
。当一个线程被阻塞,允许另一个线程继续执行,并发能力强
。每创建一个用户级线程都要创建一个内核级线程与其对应,使得创建线程地开销变大,影响应用程序的性能
。将 n 个用户级线程映射到 m 个内核级线程上,要求 m<= n
。多对多模型是多对一和一对一模型的折中,既克服了多对一模型并发度不高的缺点,又克服了一对一模型的一个用户进程占用太多内核级线程而开销太大的缺点。此外,还拥有多对一模型和一对一模型各自的优点
。转载地址:http://qmqgn.baihongyu.com/