当前位置: 首页 > wzjs >正文

可以在线做c语言的网站宁波企业建站程序

可以在线做c语言的网站,宁波企业建站程序,wordpress站外链接,王也道长微信头像Linux系列 文章目录 Linux系列前言一、进程状态概念二、进程状态2.1、R运行状态2.2、S睡眠状态2.2、D磁盘休眠状态2.3、Z状态 总结 前言 在前面几篇文章中,我们将进程的基本概念以及一些关于进程的简单系统调用接口给大家详细介绍了,在本篇文章中我们会…

Linux系列


文章目录

  • Linux系列
  • 前言
  • 一、进程状态概念
  • 二、进程状态
    • 2.1、R运行状态
    • 2.2、S睡眠状态
    • 2.2、D磁盘休眠状态
    • 2.3、Z状态
  • 总结


前言

在前面几篇文章中,我们将进程的基本概念以及一些关于进程的简单系统调用接口给大家详细介绍了,在本篇文章中我们会涉及到,进程的状态以及优先级的概念,帮助大家进一步的理解操作系统和进程之间的羁绊。

一、进程状态概念

作为一个多任务的操作系统,Linux必须在多个进程之间,进行合理的调度和管理,为了方便操作系统对进程的管理,每个进程都有属于自己的进程标识符,对应的状态信息也在其中,这个状态信息标识着当前进程是处于运行、休眠、僵尸等状态。不同的状态信息能够帮助操作系统了解每个进程当前的执行状态,以便做出合理的资源调度和管理决策。

二、进程状态

1、R运行状态(running): 并不意味着进程一定在运行中,它表明进程要么是在运行中要么在运行队列里。
2、S睡眠状态(sleeping): 意味着进程在等待事件完成(这里的睡眠有时候也叫做可中断睡眠(interruptible sleep))。
3、D磁盘休眠状态(Disk sleep)有时候也叫不可中断睡眠状态(uninterruptible sleep),在这个状态的
进程通常会等待IO的结束。
4、T停止状态(stopped): 可以通过发送 SIGSTOP 信号给进程来停止(T)进程。这个被暂停的进程可以通过发送 SIGCONT 信号让进程继续运行。
5、X死亡状态(dead):这个状态只是一个返回状态,你不会在任务列表里看到这个状态。
6、Z(zombie)-僵尸进程:这是一个比较特殊的状态,下面我们会详细介绍。

2.1、R运行状态

当一个进程除了,CPU以外的资源都准备就绪时,我们就称为该进程处于运行状态(这个状态是指CPU正在执行的和处于就绪状态的),在我们的操作系统中,会同时存在多个,资源准备就绪的进程,但是CPU的资源是有限的,所以处于运行状态的进程,并不能立刻被CPU所执行,对于这些处于运行状态的进程,操作系统将他们,链接在CPU运行队列中(一个CPU绑定一个运行队列),等待操作系统分配CPU资源。
那么当一个进程,获取到CPU资源开始执行时,是不是要等这个程序执行完毕才可以执行下一个?当然不是,如果一个死循环的程序一直结束不了,难道其他的程序就不运行了吗,所以为了更好分配CPU,每一个进程都会有一个时间片的概念,比如这个时间片为;10ms,当一个进程被执行了10ms时,这个进程就会被换下来,重新排队等待执行,这样保证了在一段时间内所有程序都会被执行,我们称之为并发执行!!而大量的把进程从CPU上,放上去,拿下来的动作我们称之为进程切换!!
下面给大家看个具体处在运行状态的进程:

  1 #include<stdio.h>2 3 int main()4 {5   while(1)6   { }                                                                                                                             7 8   return 0;9 }

在这里插入图片描述
这里的+表示前台运行,指令的意思我以经在前几篇文章讲过很多次了,这里就不介绍了

2.2、S睡眠状态

睡眠状态是进程暂停执行,等待特定事件发生的状态,一般是等待外部设备资源,或调用系统接口而发生的。
比如一个正在运行的程序,需要我们输入一些信息(相当于scanf、cin等从外部设备获取信息资源),但我们也一直不输入,而CPU一定不会持续等待,它会将这个处于运行队列的进程,排入外部设备的结构体对象的等待队列中,继续等待我们的输入,此时的进程不占用CPU资源。我们称这种进程处于睡眠状态:

  1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5   while(1)6   {7     printf("我是一个进程\n");                             8   }9 10   return 0;11 }                              

在这里插入图片描述
我们执行程序后,一直在运行为什么会,呈现出的S状态?这是因为此时我们运行环境是远程登陆的服务器,而它需要将结果从运服务器打印到我们的显示器上,所以需要等待网络资源或显示器资源,对外表现为睡眠状态,对于这睡眠状态我们称之为浅度睡眠(可中断睡眠)。

这里再介绍一个挂起状态,大家了解即可:
当操作系统内部的内存资源严重不足时,操作系统就开始对那些一直处在等待队列的进程开始下手了,将他们的代码和数据(PCB结构体对象依然处于对应设备的等待队列)从内存拿出去保存在外存的特定区域-------交换空间,接着将该进程的状态标记为挂起状态,空出来的空间继续用于新的进程执行,当对应的等待设备就绪时,就会恢复该进程的运行,即:将他从等待队列,调度至运行队列。

2.2、D磁盘休眠状态

在Linux操作系统中,D状态(不可中断睡眠状态),于S状态不同,进程处于D状态时,不能响应信号(这个到后面会介绍)。比较常见的是进程等待硬件资源,如:一个进程向磁盘写入1GB数据,因为磁盘写入速度过慢,可能会导致进程长时间等待,此时进程需要等待获取执行反馈(是否写入成功),就会进入深度睡眠状态,直至事件结束,才会被唤醒。

状态的特点:

  • 不可中断:与S状态(可中断睡眠状态)不同,D状态下的进程不能被信号中断,无法通过外部操作(如发送SIGKILL)来强制终止。
  • 通常是硬件等待:进程通常会在等待底层硬件设备(如磁盘、网络、文件系统等)响应时进入D状态。例如,进程可能正在等待磁盘设备返回数据,或者在等待硬件设备准备好进行某个操作。
  • 阻塞I/O操作:进程在执行一些可能导致长时间等待的I/O操作时,可能会进入D状态,直到I/O操作完成。例如,读取磁盘上的大文件,或等待网络硬件返回数据。

2.3、Z状态

我们通常称为僵尸进程:

  • 子进程执行完(已死亡),但是父进程尚未读取父进程的退出状态。
  • 进程占用的大部分系统资源已经被回收,但是进程描述符等一些信息还保留着。

产生原因:

  • 父进程没有正确处理子进程的终止状态
  • 父进程未忽略SIGCHLD信号

特点:

  • 僵尸进程不消耗cpu或内存,但会占用进程表项(PID)
  • 若父进程长期未回收子进程,可能会导致进程表耗尽无法创建新进程。
  1 #include<stdio.h>2 #include<unistd.h>3 int main()4 {5   pid_t id=fork();6   if(id==0)7   {8     int i=0;                                                                                                                      9     for(;i<3;i++)                                                10     {                                                            11       printf("子进程PID是->%d\n",getpid());                      12     }                                                            13   }                                                              14   else{                                                          15     while(1)                                                     16     {                                                            17       printf("父进程PID是->%d\n",getpid());                      18     }                                                            19   }                                                              20   return 0;                                                      21 }

在这里插入图片描述
上代码,我们使用fork()函数分流后,子进程答应三次后结束,并且父进程并没有获取子进程的结束信息,父进程一直执行,此时子进程等待父进程获取信息,变为僵尸进程,处于Z状态。
孤儿进程:
孤儿进程是父进程,在子进程终止之前终止,此时子进程会被init进程(PID=1)领养,成为其新的父进程。
产生原因:

  • 父进程主动终止(如:被杀手、异常退出)
  • 父进程未等子进程结束便提前退出

特点:

  • 孤儿进程由init进程接管,并回收,不会再成僵尸进程。
  • 孤儿进程可能会在后台继续运行,但不再依赖于原父进程。

总结

学习这块可以帮助我们更深入的理解,进程的概念,但是需要注意的是,对于理解进程状态,这些是远远不够的,需要结合信号相关的知识,深入理解。


文章转载自:

http://w1M1ceEz.qxgmp.cn
http://IqLvCZXM.qxgmp.cn
http://z0mtB9mX.qxgmp.cn
http://MjYdbtLW.qxgmp.cn
http://ltRTXmvI.qxgmp.cn
http://johVDcQF.qxgmp.cn
http://gxPOOwwk.qxgmp.cn
http://waNBwkzJ.qxgmp.cn
http://FQD6R9tw.qxgmp.cn
http://mSOKnqS6.qxgmp.cn
http://rNhGhqpw.qxgmp.cn
http://ckfEfXjZ.qxgmp.cn
http://tcGyEmh6.qxgmp.cn
http://92khKJjT.qxgmp.cn
http://u6Fl5Sx0.qxgmp.cn
http://NDMWFICk.qxgmp.cn
http://5ackYS9q.qxgmp.cn
http://QoNnSK6m.qxgmp.cn
http://TSGe4SG4.qxgmp.cn
http://Y3pz3l0v.qxgmp.cn
http://XhRZZ4W8.qxgmp.cn
http://nVvPMiDs.qxgmp.cn
http://8C7HJc6d.qxgmp.cn
http://0NPOFSCz.qxgmp.cn
http://7Xx0o1TL.qxgmp.cn
http://dHPY7FIp.qxgmp.cn
http://U5moPAO8.qxgmp.cn
http://3hkwC7X2.qxgmp.cn
http://rcKVzCIc.qxgmp.cn
http://kmq7RwNW.qxgmp.cn
http://www.dtcms.com/wzjs/618003.html

相关文章:

  • 自建网站怎么做二级页跳转电商网站统计怎么做
  • 淄博公司网站建设设计教程网站推荐
  • 学网站建设软件开发品牌vi设计手册案例欣赏
  • 英文版网站制作3分钟宣传片制作费用
  • 网站售价企业营销网站模板
  • 如何设置网站公司动态网站建设关闭窗口代码
  • 企业宣传片文案大全苏州seo网站推广
  • 天猫设计师服务平台成都优化教育百度推广
  • 南沙滩做网站公司做淘宝站外推广网站
  • 美容行业手机网站模版网站建设的公司合肥
  • isp网站接入做哪些业务公司标志logo设计免费
  • 网站排名应该怎么做15秒创意广告短片
  • 网站黑白了中小型网站建设服务
  • 天河做网站开发wordpress 权限控制
  • 南京做网站的公司网页制作网站开发的论文
  • 自媒体平台培训网站优化排名易下拉用法
  • 做美食网站的目的快速建设网站方案
  • 目前最好的网站建设企业广告公司常用软件
  • 3d做网站百度云盘搜索引擎入口
  • 西部数码网站正在建设中是什么意思广州天河
  • 湛江做网站建设上海城隍庙小吃街攻略
  • 如何选网站服务器做图的模板下载网站有哪些内容
  • 中文绿色环保网站模板seo推广代理
  • 站长统计网站松原手机网站开发公司
  • 在线做ps是什么网站哈尔滨模板网站建设
  • 免费大数据网站网站导航栏按钮
  • 建设电影网站的教程飞言情做最好的小说网站
  • 南京网站a建设云世家微信小程序怎么做商城
  • 郴州市做网站上海网站建设中小型企业
  • 网站怎么进入后台管理后端开发和前端开发哪个工资高