小阳同学嵌入式学习日记-进程状态

 

目录

一、就绪态 

二、运动态 

三、 僵尸态

四、睡眠态(可中断睡眠状态、不可中断睡眠状态)

(1)可中断睡眠状态

 (2)不可中断睡眠状态

五、暂停态 

六、死亡态


         如上图所示,便是一个进程从出生到死亡的全过程。

一、就绪态 

         在Linux系统下,进程的就绪态(Ready)是指进程已经被调度器准备好可以运行,但是由于当前CPU资源已经被其他进程占用,所以暂时无法执行。处于就绪态的进程通常已经完成了所有的准备工作,包括加载到内存中、分配了必要的资源等,只是由于CPU资源有限,无法立即执行。

        进程处于就绪态时,操作系统会将其放入就绪队列中,等待CPU调度器为其分配CPU时间片并执行。一旦轮到该进程执行时,CPU调度器会从就绪队列中选择一个进程,并将其状态设置为运行态(Running),此时进程开始执行并占用CPU资源。进程在就绪态通常会等待一段时间,直到CPU调度器将CPU时间片分配给它并转换为运行态。在多任务系统中,就绪态的进程可能会被多个进程共享CPU资源,操作系统通过调度算法来决定哪个进程获得CPU时间片,以实现公平和高效的进程调度。

二、运动态 

        进程的运行态(Running)是指进程正在执行并且占用CPU资源。当操作系统将一个进程从就绪态调度到运行态时,该进程会开始执行其指令,使用CPU资源执行计算任务、处理I/O操作或执行其他操作。

        进程处于运行态时,它的指令会被CPU执行,CPU会按照指令的顺序逐条执行进程的代码。如果进程需要等待某个事件(如I/O操作的完成),CPU可能会暂停执行当前进程,并将其状态设置为阻塞态(Blocked)或者可中断睡眠状态(Interruptible Sleep)。一旦等待的事件发生,进程就可以从阻塞态或者睡眠状态转换为运行态,继续执行其指令。

        在多任务操作系统中,运行态的进程可能会与其他进程共享CPU资源,操作系统通过调度算法来决定哪个进程应该获得CPU时间片,以实现公平和高效的进程调度。不同的调度算法会对进程的运行态产生不同的影响,例如,一些调度算法可能更倾向于给予优先级高的进程更多的CPU时间,而另一些调度算法可能更注重公平性,尽量均匀地分配CPU时间片给各个进程。

三、 僵尸态

        进程的僵尸态(Zombie)是指进程已经终止,但其父进程尚未对其进行回收,因此其进程描述符(Process Descriptor)仍然存在于系统中,但没有进程控制块(Process Control Block),因此不能执行。僵尸进程的存在是系统资源的一种浪费。

        当一个进程终止时,内核会向其父进程发送一个信号,告知父进程子进程的终止状态。父进程通常会调用wait()waitpid()等系统调用来等待子进程的终止,并获取其终止状态。如果父进程没有对终止的子进程进行回收,那么该子进程就会变成僵尸进程。

        僵尸进程占用了系统中有限的进程ID(PID)资源和一些内核资源,虽然它们不再执行任何代码,但它们的存在可能会导致系统的PID资源耗尽。因此,及时对僵尸进程进行回收是很重要的。

        为了避免僵尸进程的出现,父进程通常应该调用wait()waitpid()等系统调用来回收其终止的子进程,这样操作系统就可以释放僵尸进程所占用的资源。如果父进程不再需要子进程的退出状态,也可以使用SIGCHLD信号来通知内核立即回收子进程,这样就不会产生僵尸进程。一旦父进程对僵尸进程进行了回收,内核就会将僵尸进程从系统中移除,释放其占用的资源。

四、睡眠态(可中断睡眠状态、不可中断睡眠状态)

(1)可中断睡眠状态

         进程的可中断睡眠状态(Interruptible Sleep)是指进程因为某些原因暂时停止执行,等待某个事件的发生。这种睡眠状态是可以被信号中断的,即进程可以通过接收信号来被唤醒。

        可中断睡眠状态的进程通常在等待某些事件的发生时进入该状态,比如等待某个I/O操作完成、等待某个信号、等待某个条件满足等情况下。进程进入可中断睡眠状态后,会从调度队列中移除,并等待事件的发生。一旦事件发生,进程会被唤醒,并转换为就绪态,等待CPU调度器分配CPU时间片执行。

        可中断睡眠状态的特点是可以通过接收信号而被唤醒。当进程处于可中断睡眠状态时,如果接收到一个信号(如SIGINT),内核会将进程从睡眠状态唤醒,并执行信号处理函数。处理完信号后,进程会转换为就绪态,等待CPU调度器再次分配CPU时间片。可中断睡眠状态是一种常见的进程状态,它允许进程在等待事件的同时响应信号,从而提高了系统的灵活性和响应性。

 (2)不可中断睡眠状态

         进程的不可中断睡眠状态(Uninterruptible Sleep)是指进程因为等待某个事件的发生而暂时停止执行,但是无法被信号中断。这种状态通常发生在进程等待某些内核资源或锁的释放时。

不可中断睡眠状态的进程通常在以下情况下进入该状态:

  1. 等待磁盘I/O操作完成: 当进程发出一个磁盘I/O请求,但是该请求需要等待硬件完成,进程会进入不可中断睡眠状态,直到硬件完成I/O操作并通知内核。

  2. 等待文件系统锁: 当进程尝试访问文件系统资源时,如果资源正在被其他进程持有,进程可能会进入不可中断睡眠状态,等待资源的释放。

  3. 等待网络数据包到达: 当进程等待网络数据包到达,但是数据包尚未到达,进程可能会进入不可中断睡眠状态,直到数据包到达并被内核接收。

        不可中断睡眠状态的进程无法通过信号中断,只能等待事件的发生。这意味着即使进程收到了信号,也不会被唤醒。这种状态通常意味着进程必须等待某些硬件或内核资源的操作完成,因此无法被中断。虽然不可中断睡眠状态在某些情况下可能会导致进程的长时间阻塞,但是它确保了系统的稳定性和一致性,避免了由于中断导致的资源不一致性问题。

五、暂停态 

        进程的暂停态(Stopped)是指进程由于接收到SIGSTOP、SIGTSTP、SIGTTIN或SIGTTOU信号而暂停执行。这些信号通常由用户或系统管理员发送。

        进程处于暂停态时,其执行被暂停,不会被CPU调度执行。暂停态的进程不会占用CPU资源,它们被挂起,直到接收到相应的信号以恢复执行。

暂停态通常发生在以下情况下:

  1. 接收到SIGSTOP信号: 当进程接收到SIGSTOP信号时,它会立即停止执行,并进入暂停态。SIGSTOP信号是一个终止进程的信号,通常用于暂时挂起进程的执行。

  2. 接收到SIGTSTP信号: 当进程接收到SIGTSTP信号时,它会被用户终端暂停,并进入暂停态。SIGTSTP信号通常由用户键入Ctrl+Z组合键发送。

  3. 接收到SIGTTIN或SIGTTOU信号: 当进程尝试在后台执行读取标准输入或写入标准输出时,如果终端设置了为控制终端的作业控制,则可能会接收到SIGTTIN或SIGTTOU信号,导致进程进入暂停态。

        暂停态的进程可以通过接收到SIGCONT信号来恢复执行。一旦进程接收到SIGCONT信号,它会从暂停态转换为就绪态或运行态,并继续执行其代码。SIGCONT信号通常由用户或系统管理员发送,以恢复暂停的进程的执行。

六、死亡态

        进程的"死亡态"通常指的是进程已经终止执行并彻底释放了系统资源的状态。当进程执行完毕或者由于某种原因被强制终止时,其进程描述符(Process Descriptor)和相关的内核数据结构会被释放,进程所占用的系统资源也会被彻底释放,此时进程可以被认为处于"死亡态"。

        在进程"死亡"之后,其进程号(PID)会从系统的进程表中移除,其在进程列表中的条目也会被删除。此时,操作系统已经不再维护这个进程的信息,它不再占用任何系统资源。同时,进程的父进程会收到一个信号(SIGCHLD来通知其子进程已经终止,并可以通过系统调用(如wait()waitpid())来获取子进程的终止状态以及释放子进程所占用的资源。

        值得注意的是,尽管进程已经终止并处于"死亡态",但是其进程描述符和相关的资源并不会立即被释放。相反,操作系统会将这些资源标记为可回收,并在需要时进行回收。这意味着进程在"死亡态"时,其 PID 和相关的进程信息可能会在一段时间内仍然存在于系统中,直到被完全回收。总之,进程的"死亡态"是指进程已经终止执行并释放了系统资源的状态,它标志着进程的生命周期的结束。

 

 做大做强,再创辉煌!

  • 45
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值