685-进程的运行状态&进程状态间的切换

685-进程的运行状态&进程状态间的切换,第1张

685-进程的运行状态&进程状态间的切换 进程的运行状态

进程被切换着在CPU上运行的,因此在切换的过程中,进程会有各种的运行状态。
这就好比人活着时,需要在各种状态之间进行切换,比如晚上进入睡觉状态,早上进入醒了的状态,然后进入工作状态,再进入休息状态等。
(1)进程运行状态有哪些
(a)就绪态:表示进程准备就绪,随时等待被调度运行
(b)执行态:被调度运行,运行时占有CPU,运行的时间片到后让出CPU
(c)阻塞态:因为进程运行需要的某些条件的不满足,进程阻塞处于休眠状态
(d)终止态:进程结束,也就是程序运行结束,回收进程占用的内存资源
它们的关系图如下,
图:

队列在 *** 作系统中是用链表实现的, *** 作系统是要运行很多进程,都要被CPU执行,所以这些就绪的进程就到就绪态队列中排队,等待CPU执行它们。

进程状态间的切换

(a)进入就绪态
程序被OS *** 作系统加载之后,立即进入就绪态
程序被加载到内存后,进程被创建,程序就变为了进程,进程进入就绪状态, OS会为进程建立PCB,如果在Linux *** 作系统下的话,建立PCB时创建一个task_struct结构体
进入就绪态后,进程加入就绪态队列排队,随时等待被调度执行
程序什么时候被加载?
当你开始运行程序时,程序就会被加载,程序被加载后就进入就绪态。
例子:
比如这里写了一个Windows下的c语言程序,编译后的为test.exe,分别通过上面说的两种方式运行程序

#include

int main(void)
{
	int  a = 0, b = 0;

	printf("please input a & brn");

	scanf("a=%d, b=%d", &a, &b); //从键盘输入数据
	printf("a+b=%dn", a + b);	//显示相加结果
	return  0;
}

-方式1:图形交互方式,双击程序图标运行
-方式2:
命令交互方式,即在命令行输入程序名(命令)运行,命令行输入的命令就是程序,命令名字就是程序名,不过普通用户很少用这种方式,开发者才会使用。
当程序test.exe运行起来后,程序test.exe程序就变为了test.exe进程,进程名就是test.exe,进程立即进入就绪态,并加入就绪态队列,OS会为它建立PCB进行管理。

(b)从就绪态进入执行态
当前正在CPU上执行的进程时间片到了,调度器会按照调度优先级算法到就绪态队列查看,发现轮到test.exe进程执行了,OS调度器收回其它进程的CPU占有权,被剥夺CPU占有权的进程被迫重新进入就绪态。
test.exe进程离开就绪态队列,进入执行状态,获得CPU占有权,CPU开始执行test.exe进程。

(c)执行态进入就绪态
当test.exe进程的时间片到后,OS的进程调度器会根据进程调度优先级,决定下一个要执行的进程,当前的test.exe进程退出执行态,交出CPU的占有权,进程进入就绪态并加入就绪态队列排队,等到下一次再被调度执行。

(d)执行态进入阻塞态
什么情况下会进入阻塞态?
当处于执行态的进程需要外部设备输入的数据时,但是外部设备又没有将数据准备好,那么进程就会进入阻塞态。
进程随即会被加入阻塞态队列排队等待。
比如test.exe进程就需要通过“scanf”语句等待键盘的输入,但是如果键盘没有输入时,test.exe进程会进入阻塞态,并加入阻塞态队列排队。

(e)阻塞态进入就绪态
比如对于正处于阻塞态的test.exe进程来说,当从键盘输入后a和b的数据后,test.exe进程被唤醒,但是不会被立即执行,
而是离开阻塞态队列,加入就绪态队列,然后进入就绪态,等待被再次调度执行。

(f)终止态
程序终止后需要回收资源
程序结束了就终止了,程序终止后,程序所占有的一切资源(内存空间)全部被回收释放,这些空间就可以让给别人使用了,
如果不回收的话,内存空间会被占着茅坑不拉屎,如果大量的内存空间被以这样的方式占用的话,会使得其它进程没有内存空间使用,最后计算机可能会因为内存不足而崩溃。
这就好比一个很大房间,人搬走了但是空间却一直占着不放,每个人都这么搞,最后你会发现房间虽然很大,但是处处被别人
最终导致住房紧张,很可能还会因为住房紧张而引发矛盾,因此进程终止后,对资源进行回收是非常重要的。
PCB
进程终止有两种方式

  • 正常终止
    程序(进程)的最后一条指令被执行完毕,进程就会进入终止状态,这种情况像人寿终正寝的老死。
  • 异常终止
    + 什么是异常终止?
    程序并没有执行完毕,被人强行终止的,就好比人被人谋害而异常死亡。
    + 异常终止举例
    以windows为例,我们在任务管理器里面,通过“结束任务”的方式强制取消卡死的进程,这其实就是异常终止。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/3970338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-10-21
下一篇 2022-10-21

发表评论

登录后才能评论

评论列表(0条)

保存