根据流程在执行过程中的不同情况,至少要定义三种状态:
流程状态转换的具体原因如下:
有一个优先级更高的进程。就绪-→运行:CPU 空空闲时选择一个就绪进程。
1.2 进程的五态模型五态模型向三态模型添加了一个新状态和一个退出状态:
更多Linux内核视频教程文档和资料可以在后台私信免费获取[内核]。
内核学习网站:
Linux内核源代码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂
流程状态转换的具体原因如下:
三态模型和五态模型假设所有进程都在内存中,实际上进程是有序连续创建的。当系统资源,尤其是内存资源,已经不能满足进程运行的要求时,就必须挂起一些进程,交换到磁盘交换区,释放它所占用的一些资源,使它暂时不参与低级调度。达到平滑系统运行负荷的目的。
流程暂停有多种原因,包括:
1.最终用户的请求。当最终用户在自己的程序运行过程中发现可疑问题时,他想暂停一下,让自己的程序静止下来。也就是说,正在执行的进程被挂起;此时,如果用户进程处于就绪状态但未执行,则该进程暂时不会被调度,以便用户研究其执行情况或修改程序。我们称这种静态为“悬浮状态”。2.父进程的请求。有时,父流程希望暂停它自己的一个子流程,以便检查和修改子流程或协调子流程之间的活动。3.负载调节的需要。当实时系统中的工作负载较重,可能影响实时任务的控制时,系统可以暂停一些不重要的进程,以保证系统的正常运行。4.操作系统的需求。有时,系统希望暂停一些进程,以便检查运行资源的使用情况或记账。5.交换的需要。为了缓解内存紧张,将内存中被阻塞的进程改为外部内存。
在五态模型的基础上,七态模型增加了就绪挂起状态和阻塞挂起状态。
流程状态转换的具体原因如下:
等待状态→挂起等待状态:根据当前的资源状态和性能要求,操作系统可以决定将等待进程换出成为挂起等待状态。
挂起等待状态→挂起就绪状态:导致进程等待的事件发生后,对应的挂起等待状态进程将转换为挂起就绪状态→就绪状态:当内存中没有就绪状态进程或者挂起就绪状态进程的优先级高于就绪状态进程时,系统将挂起就绪状态进程转换为就绪状态。
就绪→挂起就绪:根据当前的资源状态和性能要求,操作系统也可以决定将就绪进程转换为挂起就绪。
挂起状态→等待状态:进程等待事件时,原则上不需要将其调入内存。然而,在下面的情况下,这种状态改变是可能的。当一个进程退出时,在主存储器中已经有一个大的空闲空空间,并且一个挂起的等待进程具有更高的优先级,并且操作系统已经知道导致它阻塞的事件即将结束,那么这种状态改变就发生了。
运行状态→挂起就绪状态:当优先级更高的挂起等待状态进程的等待事件结束时,需要抢占CPU,此时没有足够的主存空,可能导致运行中的进程转为挂起就绪状态。此外,正在运行的进程也可以挂起自己。
新状态→挂起就绪状态:考虑到系统当前的资源状态和性能要求,可以决定将新创建的流程转换为挂起就绪状态。
挂起的进程相当于不在内存中的进程,因此挂起的进程不会参与低级别的调度,直到它们被交换到内存中。
挂起的进程具有以下特征: