(二)进程的状态优先级
1进程的状态(兼容所有操作系统)1.1并行和并发CPU执行进程代码不是把进程代码执行完毕才开始执行下一个而是给每一个进程预分配一个 时间片基于时间片进行调度轮转(单CPU下)并发。并发多个进程在一个CPU下采用进程切换的方式在一段时间之内让多个进程都得以推进并行 多个进程在多个CPU下分别同时进行运行这称之为并行1.2时间片Linux/windows民用级别的操作系统分时操作系统。-----调度任务追求公平对应的实时操作系统会有优先级比如汽车的刹车。1.3进程具有独立性讲过了1.4等待的本质1.4.1 运行状态FIFO先进先出。头结点的进程进入CPU运行一段时间然后尾插到队列后然后进入下一个进程循环往复。只要进程在运行队列中该进程就叫做运行状态(我已经准备好了随时被CPU调度1.4.2 阻塞状态运行进程等CPU。阻塞进程等待键盘等其他硬件。运行和阻塞是两个队列运行和阻塞的本质是让不同的进程处在不同的队列中。操作系统是硬件管理者知道硬件有无数据。执行完scanf进程从运行到阻塞输完数据操作系统知道后将进程从阻塞到运行。将进程尾插到不同队列1.4.3挂起状态背景内存资源严重不足的情况下1.状态在tast_struct中通过status表示比如1表示运行2表示阻塞等等2.内存资源不足时占了内存资源且处于排队阻塞状态的进程会被换出唤入到swap分区磁盘内让其处于阻塞挂起状态。3.换出从内存到磁盘是IO速度慢用时间换空间一般会被禁掉。如果swap分区不够操作系统会杀死部分进程。4.运行挂起将运行状态的进程挂起。有风险一般不会这么做。2.Linux进程的状态2.1 运行状态、阻塞状态R运行状态S休眠状态---阻塞等待的状态-----可中断睡眠浅睡眠就是将阻塞的进程可以直接kill掉ps axj | head -1 ps axj | grep code code是可执行程序名字while(1) { printf(hello world\n); //该代码运行时99%是S状态阻塞状态因为printf属于向IO相互 //速度会变慢 } while(1) { //100%是运行状态 }2.2磁盘休眠----D阻塞等待的状态的一种------不可中断睡眠深度睡眠当一个进程内存向磁盘写入大量数据时磁盘本身比较慢所以存入需要时间。假设内存那个进程名字叫AA从内存到磁盘过程中1.队列发生变化 ----CPU到磁盘 2.状态从R到S。这是会有两种坏情况1内存不够用操作系统把进程A杀死了 2磁盘满了存不下去需要返回错误值给进程A让上层知晓该情况但是进程A不存在了。为了解决以上情况D状态出现了深度睡眠不可被杀掉2.3T状态了解kill - 19 PID :暂停进程使其状态为Tkill -18 PID :重新开始暂停进程。放入到后台执行无法用CtrilC操作终止需要用kill -9 PID终止。前台进程和后台进程区别./code当执行这个指令该可执行程序开始运行往屏幕打印东西这时往屏幕写入指令是无效的。./code 让该进程处于后台进程该可执行程序开始运行往屏幕打印东西这时往屏幕写入指令是有效的。有些下载等操作不想让它阻塞命令行就让它去后台执行2.4 t状态当进程被追踪的时候(被调试程序的进程)断点停下进程状态就是t。常见于gdp调试代码打断点时。while :;do ps axj | head -1 ps axj | grep code|grep -v grep;sleep 1;done生成一个监视的功能makefile文件code:code.c gcc -o $ $^ -g //这个g表示生成gdb文件用于调试 .PHONY:clean clean: rm -f code2.5X状态echo $? 显示最近一个进程的退出信息 0:执行成功 非0出错main函数返回值就是父进程/操作系统的执行情况。2.6Z状态
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2617087.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!