操作系统 |进程管理

    科技2025-04-30  19

    文章目录

    一、进程(Process)概念(1)进程定义(2)进程的组成(3)进程和程序的比较(4)进程的特点(5)进程控制结构 二、进程状态(State)(1)进程的生命周期管理(2)进程状态变化模型(3)进程挂起(4)状态队列 三、线程(Thread)(1)为什么使用线程?(2)什么是线程(3)进程和线程的比较(3)线程的实现 四、进程控制(1)进程切换(2)进程创建(3)进程等待和终止


    一、进程(Process)概念

    (1)进程定义

    进程定义:一段程序在一个数据集合上的一次运行过程。

    (2)进程的组成

    程序的代码。程序处理的数据。程序计数器中的值,指示下一条将运行的指令。一组通用的寄存器的当前值,堆、栈。一组系统资源(如打开的文件)

    总之,进程包含了正在运行的一个程序的所有状态信息。

    (3)进程和程序的比较

    进程和程序的联系:

    ①程序是进程的基础:程序的每次运行构成不同的进程。 ②进程是程序功能的体现。 ③通过多次执行,一个程序可对应多个进程;通过调用关系, 一个进程可包括多个程序。

    进程和程序的区别:

    ①进程是动态的,程序是静态的:程序是有序代码的集合,进程是程序的执行。 ②进程是暂时的,程序是永久的:进程是一个状态变化的过程,程序可以长久保存。 ③进程的组成包括程序,数据和进程控制块。

    关于进程和线程的关系,人们常常用做饭来进行类比:

    食谱:程序,原料:数据,厨师:cpu,做菜:进程。 假如在做菜的过程中,家里的妻子受伤了,此时厨师可以在食谱上做一个标记(把状态信息记录下来),然后打开医疗手册,按照指示为妻子处理伤口。即CPU从一个进程(做菜),切换到了另一个进程(医疗救护)。

    (4)进程的特点

    ①动态性:可以动态地创建,结束进程。 ②并发性:进程可以被独立调度并占用处理机运行。 ③独立性:不同进程的工作不相互影响。 ④制约性:因访问共享资源,或进程间同步而产生制约。

    (5)进程控制结构

    程序 = 数据结构 + 算法。 实际上,OS也是一个程序,OS = PCB + 进程调度算法。 PCB(Process Control Block,pcb)即进程控制块,OS为每个进程都维护了一个PCB,用来保存与该进程有关的各种状态信息。

    进程控制块PCB:PCB是进程存在的唯一标识,保存了与该进程有关的各种状态信息。

    进程的创建:即为该进程生成一个PCB;进程的终止:即回收它的PCB。

    PCB包含三大类信息描述进程标识信息本进程的标识、父进程的标识、用户标识等cpu状态信息保存区保存进程的运行现场信息。如用户可见寄存器、控制和状态寄存器、栈指针。进程控制信息调度和状态信息、进程间通信信息、存储管理信息、进程所用资源、有关数据结构连接信息

    PCB的组织方式:

    链表:各状态的进程形成不同的链表,如就绪链表、阻塞链表。索引表:各状态的进程形成不同的索引表:就绪索引表、阻塞索引表。

    二、进程状态(State)

    (1)进程的生命周期管理

    进程的状态代表了进程生命周期的过程,包括进程创建、进程运行、进程等待、进程唤醒、进程结束。

    ①进程创建

    引起进程创建的3个主要事件:

    系统初始化时。用户请求创建一个新进程。正在运行的进程执行了创建进程的系统调用。

    ②进程运行

    进程创建好之后,内核需要选择一个就绪的进程,让它占用cpu并执行。如何选择就绪进程就涉及到后续的调度算法问题。

    ③进程等待/阻塞

    以下情况,进程将会进入等待:

    请求并等待系统服务,无法马上完成。启动某种操作,无法马上完成。需要的数据没有到达。

    进程只能自己阻塞自己,因为只有进程自身才知道何时需要等待某种事件的发生。

    ④进程唤醒

    唤醒进程的原因:

    被阻塞进程需要的资源可被满足被阻塞进程等待的事件到达将该进程的PCB插入到就绪队列

    进程只能被别的进程或操作系统唤醒。

    ⑤进程结束

    出现以下情况,进程结束:

    正常退出(自愿的)错误退出(自愿的)致命错误(强制性的)被其他进程所杀(强制性的)

    (2)进程状态变化模型

    进程在生命结束前处于且仅处于三种基本状态之一:

    运行状态(Running):当一个进程正在处理机上运行时。就绪状态(Ready):一个进程获得了除cpu之外的一切所需资源,一旦得到cpu即可运行。等待状态(Blocked):一个进程正在等待某一事件而暂停运行时。如等待某资源,等待输入/输出完成。

    进程其它的基本状态:

    创建状态(New):一个进程正在被创建,还没被转到就绪状态之前的状态。结束状态(Exit):一个进程正在从系统中消失时的状态,这是因为进程结束或由于其他原因所导致。

    上面的进程状态变化图中特别需要注意的是 运行状态→准备状态,出现这一情况的可能原因是cpu资源被其他进程所占据,时间片轮转或是高优先级进程。

    (3)进程挂起

    使用进程挂起,是为了合理且充分地利用系统资源。进程挂起时,意味着进程没有占用内存空间,处在挂起状态的进程映像在磁盘上。挂起即把一个进程从内存转到外存。

    阻塞挂起状态:进程在外存并等待某事件的出现。就绪挂起状态:进程在外存,但只要进入内存,即可运行。

    与挂起相关的状态转换:

    阻塞→阻塞挂起:没有进程处于就绪状态或就绪进程要求更多内存资源时,会进行这种转换,以提交新进程或运行就绪进程。就绪→就绪挂起:当有高优先级阻塞(系统认为会很快就绪的)进程和低优先级就绪进程时,系统会选择挂起低优先级就绪进程。运行→就绪挂起:对于抢先式分时系统,当有高优先级阻塞挂起进程因事件出现而进入就绪挂起时,系统可能会把运行进程转到就绪挂起状态。

    在外存时的状态转换:

    阻塞挂起到就绪挂起:当有阻塞挂起进程因相关事件出现时,系统会把阻塞挂起进程转换为就绪挂起进程。

    解挂/激活(Activate):把一个进程从外存转到内存,可能有以下几种情况:

    就绪挂起→就绪:没有就绪进程或挂起就绪进程优先级高于就绪进程时,会进入这种转换。阻塞挂起→阻塞:当一个进程释放足够内存时,系统会把一个高优先级阻塞挂起(系统认为会很快出现所等待的事件)进程转换为阻塞进程。

    (4)状态队列

    由操作系统来维护一组队列,用来标识系统当中所有进程的当前状态。

    不同的状态分别用不同的队列来表示(就绪队列、各种类型的阻塞队列)。

    每个进程的PCB都根据它的状态加入到相应的队列当中,当一个进程的状态发生变化时,它的PCB从一个状态队列中脱离出来,加入到另外一个队列。

    三、线程(Thread)

    (1)为什么使用线程?

    线程满足以下特性:

    线程之间可以并发地执行。线程之间共享相同的地址空间。

    (2)什么是线程

    线程就是进程当中的一条执行流程,线程=进程-共享资源。

    从资源组合的角度看:进程把一组相关的资源组合起来,构成了一个资源平台(环境),包括地址空间(代码段、数据段)、打开的文件等各种资源。从运行的角度看:代码在这个资源平台上的一条执行流程(线程)。

    线程的优点:

    一个进程中可以同时存在多个线程;各个线程之间可以并发地执行;各个线程之间可以共享地址空间和文件等资源。

    线程的缺点:

    一个线程崩溃,会导致其所属进程的所有线程崩溃。

    (3)进程和线程的比较

    ①进程是资源分配单位;线程是cpu调度单位。 ②进程拥有一个完整的资源平台;线程只独享必不可少的资源,如寄存器和栈。 ③线程同样具有就绪、阻塞和执行三种基本状态,同样具有状态之间的转换关系。 ④线程能减少并发执行的时间和空间开销:同一进程的各线程间共享内存和文件资源,可直接进行不通过内核的通信。

    (3)线程的实现

    线程的实现主要有三种方式:

    ①用户线程:在用户空间实现,操作系统看不到,由用户线程库来实现对线程的管理。

    用户线程的维护由相应进程(线程库函数)来完成,不需要操作系统内核了解用户线程的存在,可用于不支持线程技术的多进程OS。每个进程都需要它自己的线程控制块(TCB)列表,用来跟踪记录它的各个线程的状态信息(PC、栈指针、寄存器),TCB由线程库函数来维护。用户线程的切换也是由线程库函数完成的,无需用户态/核心态切换,所以速度很快。允许每个进程拥有自定义的线程调度算法。

    用户线程的缺点:

    如果一个线程发起系统调用而阻塞,则整个进程进入等待。当一个线程开始允许后,除非它主动地交出CPU的使用权,否则它所在的进程当中的其他线程将无法运行。多线程执行时,每个线程得到的时间片较少,执行会较慢。

    ②内核线程:在内核中实现的一种线程机制,由OS内核来完成线程的创建、终止和管理。

    在支持内核线程的OS中,由内核来维护进程和线程的上下文信息(PCB和TCB)。线程的创建、终止和切换都是通过系统调用/内核函数的方式来进行,由内核来完成,因此系统开销较大。在一个进程当中,如果某个内核线程发起系统调用而被阻塞,并不会影响其他内核线程的运行。时间片分配给线程,多线程的进程获得更多CPU时间。

    ③轻量级进程(也称混合线程):是内核支持的用户线程。一个进程可有一个或多个轻量级进程,每个轻量级进程由一个单独的内核线程来支持。(Solaris/Linux)

    四、进程控制

    (1)进程切换

    进程切换(也称作进程的上下文切换),指的是停止当前运行进程(从运行状态改变成其他状态,并且调度另一个进程(从就绪态转变为运行状态)。

    进程切换的要求:

    切换前,保存进程上下文。(如需要保存寄存器(PC,SP…),CPU状态,内存地址空间信息)切换后,恢复进程上下文。快速切换。(通常是10毫秒一次)

    OS为活跃进程准备了进程控制块(PCB),并将进程控制块放在合适的队列里。

    (2)进程创建

    进程创建是OS提供给用户的一个系统调用,用来完成新进程的创建工作,不同OS中创建进程的API是不同的:

    Windows中进程创建API:CreateProcess(filename)Unix中进程创建API:fork/exec fork()把一个进程复制成两个进程,parent(old PID),child(new PID);exec()用新进程来重写当前进程。PID没有改变。

    (3)进程等待和终止

    wait()系统调用是父进程用来等待子进程的结束。

    一个子进程向父进程返回一个值,所以父进程必须接受这个值并处理。当子进程调用exit()时,OS解锁父进程,并将通过exit()传递得到的返回值作为wait调用的一个结果(连同子进程的pid一起)如果这里没有子进程存活,wait()立刻返回。

    当子进程执行完exit()之后,且父进程还没有将子进程的进程控制块等资源回收时,子进程并未死亡,且不处于就绪态、等待态,运行态,而是处于僵尸状态(zombie)。

    进程都具有父子关系,最早的进程称为祖宗进程(root Process),它会定期扫描整个PCB列表,看是否有进程处于僵尸状态,如果有进程处于僵尸状态,它会代替这个进程的父进程完成资源回收操作。另外,进程终止是最终的垃圾收集(垃圾回收)。

    Processed: 0.016, SQL: 8