操作系统 --- 进程的状态和状态转换

目录

零、学习路线 

一、进程的状态 

1.1 创建态、就绪态

1.2 运行态 (或执行态)

1.3 阻塞态

1.4 终止态

1.5 进程各状态之间的转换

1.5.1 三种基本状态的转换

1.5.2 五种状态的转换

1.5.3 总结

二、进程的组织

2.1 线性方式 

2.2 链接方式 

2.3 索引方式 

三、总结


零、学习路线 

一、进程的状态 

1.1 创建态、就绪态

      进程的 创建态 是指进程在被创建时的一个初始状态。在这个状态下,进程已经被操作系统创建,但还没有完全准备好执行。进程从创建态转变为其他状态(如就绪态或运行态)之前,操作系统需要为其完成一些初始化工作。

进程创建态的过程

当一个进程被创建时,操作系统会经历几个关键步骤,通常包括以下内容:

  1. 分配进程控制块(PCB)

    • 操作系统首先为新进程分配一个进程控制块(Process Control Block, PCB),其中包含进程的唯一标识符(PID)、初始状态信息、寄存器值、优先级、内存地址等。
    • PCB 是操作系统用于跟踪和管理进程的核心数据结构。
  2. 分配资源

    • 操作系统为新进程分配其所需的资源,包括内存空间、堆栈空间、打开的文件描述符表等。
    • 这些资源可能来自空闲资源池或通过其他机制分配。
  3. 加载程序

    • 操作系统将新进程的可执行代码和相关数据从硬盘加载到内存中。
    • 加载程序的代码段(指令)和数据段(全局变量、静态变量等)是进程执行所必需的。

进程被创建的过程,如下图所示:


      就绪态是进程生命周期中的一种重要状态,它表示进程已经具备了运行所需的所有条件,并且能够被CPU执行,但由于CPU当前正在执行其他任务,它暂时无法运行。因此,处于就绪态的进程等待操作系统的调度程序将其分配到CPU上。

1.2 运行态 (或执行态)

如果一个进程此时在CPU上运行,那么这个进程处于“运行态”。CPU会执行该进程对应的程序(执行指令序列)。 

1.3 阻塞态

阻塞态(Blocked State),又称为等待态(Waiting State)或睡眠态(Sleeping State),是进程在运行过程中由于某些条件暂时无法继续执行时进入的状态。在阻塞态中,进程不能占用CPU,也不会被调度运行,它需要等待某个事件(如I/O操作完成、资源可用等)发生才能重新进入就绪态,并最终继续执行。

举例:

      在进程运行的过程中,可能会请求等待某个事件的发生(如等待某种系统资源的分配,或者等待其他进程的响应)。
      在这个事件发生之前,进程无法继续往下执行,此时操作系统会让这个进程下CPU,并让它进入“阻塞态”。
      当CPU空闲时,又会选择另一个“就绪态”进程上CPU运行,除非等到该进程所请求等待的事情已发生,方可转为就绪态。
 

1.4 终止态

      进程的终止也要通过两个步骤:首先,是等待操作系统进行善后处理,最后将其PCB清零,并将PCB空间返还系统。当一个进程到达了自然结束点,或是出现了无法克服的错误,或是被操作系统所终结,或是被其他有终止权的进程所终结,它将进入终止状态。进入终止态的进程以后不能再执行,但在操作系统中依然保留一个记录,其中保存状态码和一些计时统计数据,供其他进程收集。一旦其他进程完成了对其信息的提取之后,操作系统将删除该进程,即将其PCB清零,并将该空白PCB返还系统。

1.5 进程各状态之间的转换

1.5.1 三种基本状态的转换

      进程在运行过程中会经常发生状态的转换。例如,处于就绪状态的进程,在调度程序为之分配了处理机之后便可执行,相应地,其状态就由就绪态转变为执行态或运行态;正在执行的进程(当前进程)如果因分配给它的时间片已完而被剥夺处理机暂停执行时,其状态便由执行转为就绪;如果因发生某事件,致使当前进程的执行受阻(例如进程访问某临界资源,而该资源正被其它进程访问时),使之无法继续执行,则该进程状态将由执行转变为阻塞。下图示出了进程的三种基本状态,以及各状态之间的转换关系。

1.5.2 五种状态的转换

      一个进程在被运行之前需要被创建, 在被创建的过程当中,系统会完成创建进程的一系列工作(例如:新建PCB、分配系统资源、加载程序等)。
      当一个进程被创建完成之后,他就拥有了可以上处理机(CPU)运行的条件,这个时候进程就进入了就绪态,也就是说,处于就绪态的进程,他其实只差处理机这种资源,其他所需要的资源该进程都已具备。
      那如果处于就绪态的进程被操作系统调度,那这个进程就可以上处理机运行,当这个进程在处理机上运行时,就说这个进程处于运行态。也就是说,正在处理机上运行的进程既拥有该进程所需的其他资源,同时也拥有处理机这种资源。
      而有的时候,正在运行的进程可能会请求等待某事件的发生,在这个事件发生之前,这个进程是没有办法继续执行的,所以在这种情况下,进程不应该一直占用着处理机资源,此时,该进程应该被剥夺处理机资源,同时,他还在等待其他某种资源,这个时候进程处于阻塞态。
      那如果说,处于阻塞态的进程申请的资源被分配,或等待的事件发生,那这个进程就从阻塞态回到就绪态。当该进程回到就绪态后,那就说明该进程拥有了除了处理机之外所有它所需要的其他资源。
      一个进程在处理机上正在运行,当时间片完或处理机被抢占,那么该进程就从运行态转到就绪态,等待处理机重新调度它。
      五种状态转换关系图如下所示:


运行态--->阻塞态的转换其实是进程自身主动的一种选择。
阻塞态--->就绪态是不能进程自身控制的,是一种被动行为。比如说,一个进程他正在等待打印机这种资源,那么这个打印机资源什么时候分配给该进程,这并不是该进程能够说了算的。

1.5.3 总结

问题:那操作系统是怎么进入进程的这些状态的呢?
答案:进程PCB中,会有一个变量state来表示进程的当前状态。如:1表示创建态、2表示就绪态、3表示运行态.....。
为了对同一个状态下的各个进程进行统一的管理,操作系统会将各个进程的PCB组织起来。
那么操作系统是如何将各个进程的PCB组织起来呢?请看下面。

二、进程的组织

      在一个系统中,通常可拥有数十个、数百个乃至数千个PCB。为了能对它们加以有效的管理,应该用适当的方式将这些PCB组织起来。目前常用的组织方式有以下三种。 

2.1 线性方式 

      即将系统中所有的PCB都组织在一张线性表中,将该表的首址存放在内存的一个专用区域中。该方式实现简单、开销小,但每次查找时都需要扫描整张表,因此适合进程数目不多的系统。下图示出了线性表的PCB组织方式。

2.2 链接方式 

      即把具有相同状态进程的PCB分别通过PCB中的链接字链接成一个队列。这样,可以形成就绪队列、若干个阻塞队列和空白队列等。对就绪队列而言,往往按进程的优先级将PCB从高到低进行排列,将优先级高的进程PCB排在队列的前面。同样,也可把处于阻塞状态进程的PCB根据其阻塞原因的不同,排成多个阻塞队列,如等待I/O操作完成的队列和等待分配内存的队列等。下图示出了一种链接队列的组织方式。 

2.3 索引方式 

      索引方式,即系统根据所有进程状态的不同,建立几张索引表,例如,就绪索引表、阻塞索引表等,并把各索引表在内存的首地址记录在内存的一些专用单元中。在每个索引表的表目中,记录具有相应状态的某个PCB在PCB表中的地址。下图示出了索引方式的PCB组织。 

三、总结

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值