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

建设门户网站申请杭州首传网站建设公司怎么样

建设门户网站申请,杭州首传网站建设公司怎么样,廊坊网站建设费用,edu网站开发前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态#xff0c;有运行状态#xff0c;阻塞状态#xff0c;挂起状态#xff0c;僵尸状态#xff0c;死亡状态等等#xff0c;其中#xff0c;阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页#xff…前言 本文继续深入讲解进程内容——进程状态。 一个进程包含有多种状态有运行状态阻塞状态挂起状态僵尸状态死亡状态等等其中阻塞状态还包含深度睡眠和浅度睡眠状态。 个人主页在肯德基吃麻辣烫 我的giteeLinux仓库 个人专栏Linux专栏 分享一句喜欢的话热烈的火焰冰封在最沉默的火山深处 文章目录 前言进程状态1.运行状态R状态2. 阻塞状态S状态2.1 浅度睡眠状态S状态前台进程和后台进程 2.2深度睡眠状态D状态 3.挂起状态无需暴露给用户4.僵尸进程Z状态僵尸进程的危害 5.孤儿进程 总结 进程状态 我们人无时无刻都处在不同的状态可能这时候在学习那就是学习状态学完了去睡觉那就是休息状态。进程也是有多种状态下面来一一讲解。 在Linux内核源代码中进程的几种状态如下 /* * The task state array is a strange bitmap of * reasons to sleep. Thus running is zero, and * you can test for combinations of others with * simple bit tests. */ static const char * const task_state_array[] { R (running), /* 0 */ S (sleeping), /* 1 */ D (disk sleep), /* 2 */ T (stopped), /* 4 */ t (tracing stop), /* 8 */ X (dead), /* 16 */ Z (zombie), /* 32 */ };1.运行状态R状态 操作系统在对众多进程进行管理时往往会建立一些数据结构来进行管理在操作系统中这个数据结构就是队列 双链表。 调度器所管理的数据结构叫做运行队列 其中这个运行队列对应的结构体为 struct RunQueue {struct task_struct *head;struct task_struct *tail; };实际上进入运行队列排队的不是进程的代码和数据在排队而是PCB数据结构在排队因为PCB本身就是一个数据结构 里面有各种指针可以链接起来。 所以运行队列的head指针直接指向第一个PCB对象tail指针指向最后一个PCB对象即可完成队列的排队。 前面说过一个概念叫做调度器这个调度器其实就是一个函数可以接收一些进程的参数来获取运行队列中有多少个进程在排队等信息。 所以我们把在运行队列中的进程状态叫做运行态即R状态。 这里有个问题为什么在运行队列的进程就是R状态而不是被CPU调度运行的进程才是R状态吗 我们知道一个进程既然已经在运行队列中排队等待了那就说明该进程已经准备好了所以在该运行队列排队的进程就是处于R状态。 将来如果一个新的进程想要被调度运行它只需要进入运行队列中排队等待CPU会根据排队顺序一个个地运行所以在运行队列的进程状态就是运行态。 这里还有第二个问题一个进程被放到CPU上面运行是不是要等到进程运行完之后才被放下来 很显然不是。因为如果我写了一个死循环被CPU调度运行起来那岂不是我整个电脑的其他程序都得等到循环结束才能运行其他进程死循环是不会结束的。 根据生活经验来看我们执行一个死循环其他程序一样会正常跑起来。 这是因为每个进程都有它执行的时间片。 这个时间片是一个进程会被放到CPU上调度执行的时间 假如一个进程的时间片是10ms那不管这个进程是不是死循环它只能跑最多10ms就会被弹出来到下一个进程被CPU调度运行。 所以只要有了这个时间片的概念死循环就不会一直被执行就没有一个进程过长时间占用一个CPU的情况出现了。 注意一个CPU只有一个运行队列。 2. 阻塞状态S状态 2.1 浅度睡眠状态S状态 在操作系统内部OS对各种外设进行管理时因为一切外设都是文件所以操作系统对外设进行管理同样是先描述再组织。操作系统对外设管理时先将外设描述起来就形成一个个task_struct结构体然后再进行组织这个组织的过程就是将各种PCB结构体连接起来形成链表。 我们知道一个进程是由PCB数据结构对象和该进程所对应的数据和代码组成的。 所以在进程的PCB结构体内部会有它所包含的各种指针信息这些指针信息会指向外设所对应的等待队列中。 而对于一个进程来讲它可能会需要从外设读取数据也就是从键盘硬盘等外设获取信息。假如一个进程需要等待键盘输入数据而键盘一直不输入那么该进程就会被放到键盘所对应的等待队列中。 因为这个时候这个进程一定是没有准备好的 注意每一个外设都会有对应的等待队列就连进程之间也会有各种等待队列。 一个外设可能会有多个进程在排队等待从该外设中获取数据。这些进程会在该外设的等待队列中排队等待如下图 如果一个进程想要从硬盘获取数据又想从键盘获取数据那么它可能需要在几个等待队列中进行排队。 所以我们把这种在等待队列中排队的进程对应的状态叫做阻塞状态S状态也叫做浅度睡眠状态。 如果一个进程处于阻塞状态即正在等待数据到位当我们从键盘中输入数据时该进程所获取的数据就达到了此时CPU就会将该进程唤醒并将该进程从等待队列放到运行队列中即从S状态变成R状态。 阻塞状态的本质就是等待某种资源就绪。 综合运行状态和阻塞状态来看进程之间的各种状态无非就是将进程从一个队列放到另一个队列中罢了。 注意上面所有运行队列等待队列实际上都是进程的PCB在排队。 下面给一个例子感受一下S状态和R状态的问题 code.c1 #includestdio.h2 #includeunistd.h3 4 int main()5 {6 while(1)7 { 8 }9 return 0;10 }当我们创建一个code.c文件编译运行上面的代码后然后查看进程的状态结果如下 为什么code程序会是S状态 它可是一直在显示屏中每隔1秒打印一次。 这是因为我们的CPU运行速度实在是太快了一个进程被放到运行队列等待的时间加上运行时间都比显示器文件资源准备就绪时间还要很多。导致显示器的显式跟不上CPU调度进程导致进程有99%以上的时间处于阻塞状态也就是在等待显示器资源准备就绪只有不到%1的时间处于运行状态。 前台进程和后台进程 细心的你会发现我们说的S状态在上面的例子中并不是S状态而是S状态S状态和S状态的区别是 S状态是处于前台进程S状态是处于后台进程。 前台进程是指在我们肉眼可见的地方运行该程序我们可以对该程序进行中止。 比如按下ctrl c就可以让该循环终止这个就叫前台进程。 而后台进程是无法通过ctrl c或者ctrl d操作进行终止的。 我们只需要执行./code 加上一个取地址符号即可让该进程处于后台运行状态。 如果想要终止后台进程则需要通过kill指令杀掉该进程。 kill -9 对应进程的pid即可杀掉后台进程。 注意上面说的浅度睡眠状态是可以被唤醒的。下面所说的深度睡眠状态无法被唤醒。 2.2深度睡眠状态D状态 下面以一个小故事来帮助理解 假如一个进程它有1GB数据要写入磁盘中进程说磁盘啊你帮我把这1GB数据放进你那里。磁盘慢悠悠地看了一下说好的等我一下。然后这个进程就坐在那里慢悠悠地等着因为磁盘的写入速度是比较慢的此时操作系统不知道因为什么原因突然出现大量进程占用CPU资源内存资源极度匮乏操作系统为了补救把能换出的数据全都换出了还是没多大效果。然后操作系统看到了进程这货在这满面春风心里气不打一处来对着进程说我这里都火上浇油了你还有心思搁这喝茶还没来得及等进程解释这个进程就直接被操作系统干掉了来缓解内存压力。然后操作系统就走了等到磁盘把数据写完慢悠悠地过来想告诉进程时发现进程不见了找都找不到。无奈磁盘不知道怎么处理那1GB数据毕竟后面还有那么多进程排队等着我去写入数据呢所以磁盘只能把这1GB数据给丢了。可它却不知道这1GB数据是银行里面各种百万级别用户存的资金 为了防止再出现上面的悲剧程序员只能想出一个办法当进程在等待磁盘写入数据时**不能让任何人打扰到进程的等待即让进程处于D状态**包括操作系统在内这样做就能够让进程等待直到获取到磁盘的反馈结果 这就相当于进程得到免死金牌一样了。 那如果有多个进程都处于D状态呢 实际上只要有一个进程处于D状态操作系统就在处于崩溃的边缘了。如果有两三个D状态操作系统基本上就完了。 3.挂起状态无需暴露给用户 在平常使用电脑时可能会有这样一种情况操作系统内存严重不足这样的情况可能会发送在我们打开了大量的软件并且这些软件都是大量占用CPU资源的。 这些进程的数据和代码量庞大是占用CPU资源的主要因素所以操作系统想出了一个办法既然这些进程在运行队列等待队列中排队都是该进程的PCB对象在排队那它们对应的数据和代码为何不放在硬盘中等到该进程被调度时再把该进程对应的数据和代码从硬盘中拿出来呢 这样做我们就能缓解操作系统内存严重不足的情况。 其中 进程的数据和代码被放到硬盘这个过程叫做换出 从硬盘中读取回到操作系统的过程叫做换入 所以只有进程的PCB在队列中排队该进程的数据和代码被放在硬盘中的这个状态叫做挂起状态。 4.僵尸进程Z状态 这个进程状态听起来还比较吓人它具体的意思是 当一个子进程退出程序后父进程如果不关心子进程也就是父进程没有回收子进程的空间资源等。子进程就会处于僵尸状态即Z状态。僵尸进程会以终止状态保存在进程表中并一直等待父进程读取它的退出返回码。 下面有一个例子 1 #includestdio.h2 #includeunistd.h3 4 int main()5 {6 //父进程7 pid_t id fork();8 if(id 0)9 {10 int cnt 100;11 while(cnt--)12 {13 printf(我是父进程我的pid是%d,我的ppid是%d\n,getpid(),getppid());14 sleep(1);15 }16 }17 //子进程18 else if(id 0)19 { 20 int cnt 5;21 while(cnt--)22 {23 printf(我是子进程我的pid是%d,我的ppid是%d\n,getpid(),getppid());24 sleep(1);25 }26 }27 return 0;28 } 通过上面代码及运行结果可知当子进程没有退出时父子进程都处于S状态这个好理解因为父进程要等到显示器资源就绪它才会从等待队列被放到运行队列中时间极短无法展示当子进程退出程序时处于Z状态。 这是因为当子进程退出时父进程没有对子进程的资源进行回收释放不关心子进程。 接下来就必须说到僵尸进程的危害了。 僵尸进程的危害 子进程是被父进程创建出来的自然要执行一些父进程交代的任务可如果子进程退出了它就必须把任务执行得怎么样了反馈给父进程所以它会一直维持退出状态等待父进程来读取如果父进程不来读取子进程一直处于Z状态。维持一个进程是需要消耗内存资源的一个进程维持在某种状态本质上是该进程的PCB数据结构在某个队列中排队等待这就要一直维护该进程的PCB所以如果一个父进程创建了大量子进程并且都不回收那这些子进程都会处于Z状态它们的PCB数据结构一直在一个队列中排队等待意味着它们一直在吃内存资源就会造成内存泄露 那为什么父进程退出时没有处于Z状态 因为父进程的父亲是bash进程父进程一退出bash进程就立刻对父进程回收了。 由于每个进程只会对父进程负责这个父进程的子进程跟bash进程并没有关系也就是爷爷进程和孙子进程没啥关系所以就无法让bash进程也回收孙子进程。 另一个原因是孙子进程并不是bash进程创建的它没有能力对孙子进程回收。 5.孤儿进程 孤儿进程相对于僵尸进程类似孤儿进程是 如果父进程先退出那子进程就没有父亲了子进程就是一个孤儿进程 孤儿进程重点 如果父进程先退出了子进程的父进程的ppid会立刻变成1号进程即操作系统 意思就是父进程退出后子进程会被操作系统领养 为什么操作系统要领养子进程呢 因为以后子进程也要退出也需要被回收让操作系统回收最合适不过。 让bash进程回收子进程不行吗 bash进程只能回收它的子进程没办法回收孙子进程。 总结 本文章讲述了进程的几个基本状态运行状态阻塞状态深度睡眠状态和浅度睡眠状态挂起状态僵尸状态等。以及两个比较重要的进程僵尸进程和孤儿进程。 到目前为止所具备的知识还无法解决僵尸进程和孤儿进程的问题到后面会解决。 进程状态切换的本质是一个进程的PCB从一个队列被放到另一个队列中排队。 本文到这里就结束啦。
http://www.pierceye.com/news/199123/

相关文章:

  • 国外做耳机贸易的平台网站定制网站
  • seo做的最好的十个网站加工订单网
  • 网站项目建设主要内容网站导航优化的描述
  • 网站后台修改图片网站制作多少钱公司
  • 做网站后台需要写代码吗益阳seo网站建设
  • 小程序网站做多大尺寸辽阳住房和城乡建设网站
  • 昆山app网站制作网站的管理权限有什么用
  • 购物网站建设开题报告企业宣传方案模板
  • cdr做好排班怎么做网站我的免费网是个什么网站
  • 如何做别人网站镜像地区性中介类网站建设
  • 做的网站怎么查看点击率安装wordpress主题失败
  • 网站历史权重查询免费的黄冈网站有哪些下载软件
  • 宝安三网合一网站建设河北智能网站建设平台
  • 在百度上做网站有用吗wordpress环境虚拟机安装
  • 怎么做网站图片链接中元建设网站
  • 邢台做网站优化价格网站基本维护
  • 网站集群建设价格wordpress 加文章列表
  • 官方网站案例用ps做网站主页
  • 做名片的网站推广型网站建设销售
  • 河南省建设执业资格注册中心网站网站推广公司 sit
  • 来年做那个网站致富网站工作室 需要什么手续
  • 宜兴网站建设哪家好网站建设设计公司排名
  • 婚庆公司网站怎么做wordpress 首页置顶
  • 电商网站开发人员结构江苏住房和城乡建设厅网站首页
  • 快速建站的模板陕西省建设网三类人员继续教育
  • 谷歌浏览器对做网站有什么好处广州最好网站策划
  • 西安北郊做网站重庆手机软件开发
  • 怀化刚刚发生的大事台州seo服务
  • 织梦做的网站打开空白巴中网站制作公司
  • 如何使用jq做弹幕网站设计漂亮的网站