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

织梦如何做二级网站网页在线设计软件

织梦如何做二级网站,网页在线设计软件,网站开发 技术架构,二维码在线生成文章目录 1.进程主要状态进程运行状态进程阻塞状态进程的挂起状态 2.Linux进程状态Linux进程内核源代码①R运行状态②S睡眠状态③D磁盘休眠状态T停止状态④X死亡状态⑤Z僵尸状态⑥孤儿进程 3.总结 1.进程主要状态 进程运行状态 ①内存中有一个运行队列#xff0c;其中有两个指… 文章目录 1.进程主要状态进程运行状态进程阻塞状态进程的挂起状态 2.Linux进程状态Linux进程内核源代码①R运行状态②S睡眠状态③D磁盘休眠状态T停止状态④X死亡状态⑤Z僵尸状态⑥孤儿进程 3.总结 1.进程主要状态 进程运行状态 ①内存中有一个运行队列其中有两个指针一个指向已经准备好且用双链表链接起来、等待被调度运行的头进程PCB地址另一个指向尾部进程这样便可以很好地管理好这些等待被运行的进程了 ②运行队列中存在调度器调度器通过计算进程时间片进程被运行的时间挑选进程放到CPU上去运行这样便尽可能公平地使所有进程被调度 ③一个进程把自己放到CPU上运行是不是要执行完毕才能把自己放下来呢答案当然不是例如你使用C语言写的while(1)语句你在显示屏上的黑框框中看到该语句一直被运行记住不要用你的感知去揣测CPU的运行速度实际上每个进程在CPU运行一定的时间可能10ms左右就会被放回内存的运行队列继续等待直到再次被运行因为CPU运行速度太快了你可能感觉不到所以才会误以为你写的进程代码一直在被运行当你while(1)的语句在被运行的时候你也可以使用浏览器、QQ等进程应用这也可以说明进程是轮流在CPU上运行的 总结 在内存的运行队列中等待的进程和在CPU运行的进程都可以说这样的进程处于运行状态 进程阻塞状态 ①我们的操作系统会将各种外设的属性信息使用PCB结构体描述起来组织起来进行管理描述外设的PCB结构体中有指向等待队列的头尾指针对需要等待外设输入的进程进行管理 ②举个栗子我们使用scanf\cin语句当这个代码进程运行起来的时候不能直接被放在运行队列中因为它还没有准备好在键盘输入前会被放到等待队列上排队在键盘输入后该进程才会被放到运行队列中。 ③进程处于等待外设完成信息交互信息的输入、输出等的状态叫做进程的阻塞状态。 进程的挂起状态 如果很多进程处于阻塞状态那么操作系统的内存资源会严重不足而处于阻塞状态中的代码和数据处于空闲在保证操作系统能正常运行的情况下会将PCB进程对应代码和数据放到磁盘上只需要PCB结构体在等待队列中排队即可当外设输入信息时再将磁盘中的代码和数据唤出唤入到内存中操作系统置换出来的空间又可以存放其他PCB结构体提高了内存空间的利用率给面试官投简历只需要你的简历等待筛选即可不需要你个人到场 处于进程PCB在等待队列中排队代码和数据等资源被存放到磁盘中该状态称为进程的挂起状态 以上是操作系统进程的主要的三种状态运行、阻塞、挂起其他的进程状态之后会学习 2.Linux进程状态 Linux进程内核源代码 一个进程可以有几个状态在Linux内核里进程有时候也叫做任务。下面的状态在kernel源代码里定义 /* * 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 */ };R运行状态running: 并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列 里。 S睡眠状态sleeping) 意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠 interruptible sleep D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。 T停止状态stopped可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT信号让进程继续运行。 X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。 进程状态查看 Z僵尸状态zombie进程结束没有被立即回收该进程信息被维护的状态 ①R运行状态 我们创建一个mypro.c文件写入如下代码 #includestdio.h #includeunistd.h int main() { while(1) { printf(hello prosserstate\n); } return 0; } 代码运行结果为 在另一个窗口如下指令进行监测 $ ps ajx | head -1 ps ajx | grep myproc |grep -v grep检测的结果为 ./myproc文件一直在显示屏打印但看到监测的结果显示./myproc进程为睡眠状态这是因为CPU运行速度太快一下子就将要打印的数据输出到内存中然后从内存中慢悠悠地输出到显示屏大部分时间等待显示屏外设就绪所以该进程一直处于睡眠状态。 我们对上面的代码稍作修改再进行监测 #includestdio.h #includeunistd.h int main() { while(1) { // printf(hello prosserstate\n); } return 0; } 监测结果为 我们这次注释掉了printf语句CPU不需要和显示屏进行信息交互了只需要运行./myproc进程即可所以./myproc进程运行和处于运行队列等待的运行状态了所以可以监测到./myproc进程为R状态。 状态后面有无号的区别 ①状态后面有号如某进程的状态为R说明该进程在前台运行状态后面无号如某进程状态为R说明该进程在后台运行在后台运行的进程使用ctrlC无法终止掉需要使用kill指令才能杀掉该进程在运行的进程后面加上进程将会在后台运行 ②S睡眠状态 将myproc.c文件代码修改为 #includestdio.h #includeunistd.h int main() { int a0; printf(Enter# ); scanf(%d,a); printf(echo%d\n,a); while(1) { sleep(1); //printf(hello prosserstate\n); } return 0; } 键盘准备输入的时候 在另一个窗口输入如下指令 while :;do ps ajx | head -1;ps ajx |grep myproc |grep -v grep;sleep 1;done键盘输入之前监测的结果为 键盘输入数字 键盘输入之后监测的结果为 ①运行上面的代码需要从键盘中输入数据./myproc进程在等待键盘输入时处于S状态休眠状态②在while循环中使用了库里面的sleep函数也会进程处于S状态睡眠状态③我们在xshell机器上输入命令bash命令行等待我们输入指令的进程就是处于S状态休眠状态 使用top指令监测机器上的各进程的状态 可以看出来大部分的进程状态都处于S状态休眠状态Linux系统上S状态休眠状态就是操作系统的阻塞状态。 ③D磁盘休眠状态 小故事 在操作系统内每天都有许许多多的进程在被运行有一天有一个进程是要向磁盘中写入1GB的数据因为数据量太大的同时从内存中写入磁盘的速度太慢了所以该进程只能空闲地等待把数据写入磁盘成功或者失败等待磁盘反馈信息给进程而此时刚好操作系统空间资源严重不足了阻塞状态的进程也将代码和数据放到磁盘上处于挂起状态了但还是杯水车薪于是操作系统便开始观察起了在操作系统中的所有进程这是在干嘛呢当然是准备杀进程了很不凑巧地是发现了一个啥事都不干的进程看到这操作系统哪里能忍该进程当然被杀掉了而该进程就是等待1GB数据写入磁盘的进程当磁盘写入失败时磁盘屁颠屁颠地跑回来想告诉进程一声“进程不好意思啊写入失败了”却发现进程不见了无奈地只好继续忙自己手头上的工作上去了而丢失的数据又用户最重要的数据于是用户一怒之下将操作系统、进程、磁盘三者通通告上了法庭这三者都将接收正义地审判在法庭上法官问操作系统“操作系统你可治罪为什么要杀掉进程呢”操作系统理直气壮地说“法律规则赋予了我权力让我管理底层软硬件资源给用户良好的体验而这个进程什么都没干要么我杀掉他要么用户的界面会卡到崩溃”法官转头问向了进程“进程你可知罪?进程战战兢兢地说”法官大人我才是受害者我冤枉啊我在等待磁盘写入信息完毕后给我反馈然后将反馈的信息汇报给用户突然就被杀掉了我太难了“紧接着法官问磁盘“磁盘你可知罪”磁盘哭唧唧地说“法官大人我昼夜不停地工作丝毫不敢有任何懈怠可写入数据信息慢也不能怪我啊写入数据失败但是人家的空间不够了我总不能把其他数据丢了继续写入吧我只是一个打工的只想好好地工作呜呜呜”法官皱着眉毛想“他们三个好像都没有错误可用户那边我怎么交差呢”法官心生一计“可以设置一种状态进程在等待磁盘写入数据完毕期间该进程不能被杀掉该状态是针对今天这种状况那就叫这种状态为磁盘休眠状态”法官向用户承诺”我已经颁布了一条法令今后这种状况不会再出现了“庭审结束一段时间后操作系统资源又严重不足的刚好看见一个进程等待大量数据写入磁盘中该要”提刀“杀掉该进程然而该进程不慌不忙地拿出”免死金牌“即告诉操作系统我是处于磁盘休眠状态操作系统只好作罢向其他进程走去 等待磁盘输入输出数据结束后响应的状态为D状态磁盘休眠状态操作系统内不能承载过多处于D状态的进程一般只允许一两个因为D状态的进程过多会导致系统无法正常运转太卡了操作系统层面状态切换很快如果某进程能被用户查到为D状态说明操作系统已经卡着很久了 T停止状态 使用如下代码文件 #includestdio.h #includeunistd.h int main() { while(1) { sleep(1); printf(hello prosserstate\n); } return 0; } kill指令控制进程暂停 指令认识 kill -9 Pid //杀进程 kill -19 Pid//暂停进程 kill -18 Pid//重新启动进程使用暂停进程之前进程所处的状态 使用暂停进程之后进程所处的状态 进程重启之后所处的状态 使用kill相关指令可以使进程暂停进程暂停后进行重启可以发现进程被放到后台运行了按ctrlC无法终止该进程需要使用kill指令终结该进程。 gdb调试观察T状态 在另一个窗口输入如下指令 ps ajx | grep myproc监测结果为 ①我们平时对调试代码打断点让代码运行到端点处就是让该代码进程暂停的结果所以是进程处于暂停状态是为了更好的控制进程②这里暂时认为t状态和T状态是一致的即都是暂停状态 进程S状态和T状态的区别 看似处于两种状态的进程都不在CPU运行但是处于这两种状态的进程目的可能是不一样的处于S状态的进程是为了等待某种资源如键盘的输入而处于T状态的进程也可能等待某种资源就绪还可能是为了控制该进程达到某种目的如就是不想让该进程运行了。 ④X死亡状态 我们称进程退出进程资源已被回收的状态称为X状态死亡状态。 ⑤Z僵尸状态 在操作系统中有的进程执行完任务正常退出或意外被终止进程而退出不管以上哪种情况只要是进程退出都会被放到垃圾队列种等待资源回收而退出的进程信息资源会维持一段时间而此时的进程状态被称为Z状态僵尸状态直到父进程“关心”该进程接收到该进程的退出信息该进程的信息资源才会被系统回收。 #includestdio.h #includeunistd.h int main() { pid_t idfork(); if(id0) { int cnt5; while(cnt--) { printf(i am child, pid: %d ppid:%d\n,getpid(),getppid()); sleep(1); } // exit(0); } else if(id0) { while(1) { printf(i am father, pid: %d ppid:%d\n,getpid(),getppid()); sleep(1); } //父进程当前没有针对子进程做任何事情 } return 0; } 代码运行的运行和监测结果为 ①使用fork进程创建了子进程在5秒后子进程正常结束没有被创建自己的父进程回收其中单词defunct也有僵尸的意思说明该进程将处于僵尸状态②进程一般退出的时候如果父进程没有主动回收子进程会一直让自己处于Z状态进程的资源尤其是task_struct结构体不能被释放。 僵尸进程的危害 进程的退出状态必须被维持下去因为他要告诉关心它的进程父进程你交给我的任务我办的怎么样了。可父进程如果一直不读取那子进程就一直处于Z状态是的维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中换句话说Z状态一直不退出PCB一直都要维护是的那一个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费是的因为数据结构对象本身就要占用内存想想C中定义一个结构体变量对象是要在内存的个位置进行开辟空间会使操作系统发生内存泄漏 ⑥孤儿进程 #includestdio.h #includeunistd.h int main() { pid_t idfork(); if(id0) { while(1) { printf(i am child procsser,pid: %d ppid: %d\n,getpid(),getppid()); sleep(1); } } else if(id0) { int cnt5; while(cnt--) { printf(i am father procsser,pid: %d ppid: %d %d\n,getpid(),getppid(),cnt); sleep(1); } } return 0; } 代码运行的运行和监测结果为 查看Pid为1的进程 使用fork函数创建子进程父进程先退出子进程的父进程会被该改为1号进程操作系统即说明该进程被父进程领养成为孤儿进程。 问题父进程如果提前退出那么子进程后退出进入Z之后那该如何处理呢 父进程先退出子进程就称之为“孤儿进程”孤儿进程被1号init进程领养当然要有init进程回收喽 3.总结 操作系统层面上主要三种状态运行状态、阻塞状态、挂起状态在Linux操作系统中R状态可以对应操作系统上的运行状态S\D\T状态对应操作系统上的阻塞或挂起状态X/Z状态以此类推也有与操作系统相对应的状态操作系统之间的状态可能实现划分有所不同状态的原理概念是相似的。
http://www.w-s-a.com/news/885428/

相关文章:

  • 电脑网站页面怎么调大小唐山网站建设技术外包
  • 科威网络做网站怎么样wordpress分页样式
  • 泰安公司网站建设自助建站程序
  • 网站建设工程设计图建网站怎样往网站传视频
  • 做网站月入企业网站建设运营
  • 网站建设中的ftp地址公众号微官网
  • 手机wap网站开发与设计app开发公司电话
  • 网站页脚代码大沥网站开发
  • 重庆网站制作公司 广州天成网络技术有限公司
  • 佛山网站改版wordpress 是否有后门
  • 如何承接网站建设外包wordpress产品布局
  • 洛阳建站洛阳市网站建设视觉设计专业
  • 婚恋网站建设分析网站建设硬件需求
  • 北京做网站电话wordpress如何换图片
  • 电影网站做cpa深圳信息网
  • 单县网站建设优化大师电脑版官网
  • 番禺区住房和建设局物业网站浦东新区网站设计
  • 外贸网站外包WordPress仿牌
  • 如何设计网站logohtml5开发
  • 金坛建设银行总行网站网站开发费用如何记账
  • 贵阳企业网站设计制作湛江知名网站建设电话
  • 网站建设安全性高清效果图网站
  • 上海网站排名推广黄山公司做网站
  • 全国网站建设公司实力排名单页面网站建设
  • 网站建设方案 规划wordpress 要备案吗
  • 一个完整的网站 技术网站建设中 敬请期待.
  • 如何建一个公司的网站网上怎么推广公司产品
  • 十大旅游电子商务网站影楼网站制作
  • 深圳网站建设代理商网业打开慢的原因
  • 旅游网站经营模式在屈臣氏做网站运营