丰台网站关键词优化,网站建设品牌推荐,郑州电商小程序定制,wordpress 地图导航文章目录 进程状态Linux中具体的进程状态僵尸进程孤儿进程 进程优先级 正文开始前给大家推荐个网站#xff0c;前些天发现了一个巨牛的
人工智能学习网站#xff0c;
通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。
点击跳转到网站。 进程状态
进程在操… 文章目录 进程状态Linux中具体的进程状态僵尸进程孤儿进程 进程优先级 正文开始前给大家推荐个网站前些天发现了一个巨牛的
人工智能学习网站
通俗易懂风趣幽默忍不住分享一下给大家。
点击跳转到网站。 进程状态
进程在操作系统中是有不同的状态的那么一个进程可以有多少种不同的状态的 运行状态
什么是运行状态呢 每个CPU都会在系统层面上维护一个叫运行队列的东西当我们的进程都准备好了可以随时被调度就会被放到运行队列中等待执行所以只要在运行队列的进程都是运行状态。
阻塞状态
什么是阻塞状态呢
我们写代码是时候一定会用到scanf等从键盘中读入的函数或者从硬盘中访问某些资源但是如果我们一直不输入或者要访问的该磁盘的资源的进程很多我们的进程就不能就绪既然我们需要的资源不能就绪那么代码就不能接着往后执行那么我们这种等待资源就绪的进程的状态就是阻塞状态。并且OS一定是最先知道它所管理的设备的状态的变化的
当一个进程阻塞了从我们小白的视角看就是程序卡住了换个角度说就是我们的进程没有在运行队列CPU不调度我的进程了。
挂起状态
什么是挂起
如果说一个进程被阻塞了那么注定这个进程它所等待的资源是没有就绪的该进程是无法被调度的如果此时OS的内存资源已经验证不足了怎么办OS会觉得反正你现在等待的资源没有就绪也运行不了所以它会把你加载到内存的代码数据放到磁盘中磁盘中有个swap分区是专门存放被OS替换下去的数据的。所以当你的代码被OS放到磁盘的那一刻起你的状态就是挂起状态由于你是阻塞的所以你就是阻塞挂起状态。但是如果你的进程出现了挂起状态也就意味着你的OS离挂掉不远了。
将内存数据置换到外存中是针对所有阻塞进程的不用担心慢的问题这个是必然的当出现挂起状态就不是慢不慢的问题是OS挂不挂的问题了。当进程再一次被调度是该挂起的进程的数据就会被置换回来了这些操作都是操作系统内部完成的。 PCB中的成员有很多进程状态就在里面 status。进程状态说白了就是PCB中的一个字段而进程状态变化的本质就是修改 status的值然后把PCB链如不同的队列中去。
Linux中具体的进程状态
我们看一下kernel内核怎么说 R运行状态running: 并不意味着进程一定在运行中它表明进程要么是在运行中要么在运行队列里。 S睡眠状态sleeping):意味着进程在等待事件完成这里的睡眠有时候也叫做可中断睡眠interruptible sleep。 D磁盘休眠状态Disk sleep有时候也叫不可中断睡眠状态uninterruptible sleep在这个状态的进程通常会等待IO的结束。 T停止状态stopped 可以通过发送 SIGSTOP 信号给进程来停止T进程。这个被暂停的进程可以通过发送 SIGCONT信号让进程继续运行。 X死亡状态dead这个状态只是一个返回状态你不会在任务列表里看到这个状态。 t 停止状态 是debug程序在遇到断点时进程暂停。 其中S D T t 都是阻塞状态Linux在内存严重不足的时候是会自己杀死进程来保证自身接着运行的一般来说之计OS快要挂掉的时候才有可能能够看到D状态并且它是不可被杀掉的它是专门对磁盘设计的一种状态。
我们可以通过 ps axj 来查看进程状态。 我们的进程还分为前台进程和后台进程。 前台进程是在终端中运行的命令那么该终端就为进程的控制终端一旦这个终端关闭这个进程也随之消失。
后台进程也叫守护进程Daemon是运行在后台的一种特殊进程不受终端控制它不需要终端的交互Linux的大多数服务器就是使用守护进程实现的。
我们平时执行的可执行程序都是前台的在Linux终端运行命令的时候在命令末尾加上 符号就可以让程序在后台运行。 僵尸进程
我们创建一个进程一定是为了完成某种任务但是这个任务完成的怎么样所以在进程退出的时候是要有一些退出的信息表示自己的任务完成的怎么样我们平时写的main函数都有return 这个就是返回信息当一个进程在退出时退出信息会由OS写入到PCB中可以允许代码和数据的空间立即被释放但是PCB不能立即被释放需要等待父进程来读取返回信息然后才可以是释放这样的进程就是僵尸进程。 僵死状态Zombies是一个比较特殊的状态。当进程退出并且父进程没有读取到子进程退出的返回代码时就会产生僵死(尸)进程 僵死进程会以终止状态保持在进程表中并且会一直在等待父进程读取退出状态代码。 所以只要子进程退出父进程还在运行但父进程没有读取子进程状态子进程进入Z状态。 僵尸进程的危害 进程的退出状态必须被维持下去因为他要告诉关心它的进程父进程你交给我的任务我办的怎么样了。可父进程如果一直不读取那子进程就一直处于Z状态是的 维护退出状态本身就是要用数据维护也属于进程基本信息所以保存在task_struct(PCB)中换句话说Z状态一直不退出PCB一直都要维护是的 那一个父进程创建了很多子进程就是不回收是不是就会造成内存资源的浪费是的因为数据结构对象本身就要占用内存想想C中定义一个结构体变量对象是要在内存的某个位置进行开辟空间
孤儿进程
子进程退出了父进程没有退出该子进程就是僵尸状态但是要是子进程没有退出父进程退出来子进程怎么办
此时子进程就变成了孤儿进程它会被1号进程领养来回收它的PCB。
总结
父进程先退出子进程就称之为“孤儿进程”孤儿进程被1号init进程领养当然要有init进程回收喽。
进程优先级
优先级是什么 是得到某种资源的先后顺序优先级存在的本质就是系统资源不足优先级其实就是进程PCB中的一个字段数字越小优先级越高。
Linux中的优先级范围是 60 ~ 99Linux中程序默认的优先级都是80。 Linux的优先级是支持动态调整的Linux中有一个nice值我们可以通过调整nice值来调整优先级 优先级(新) pri(每次都从80开始) nice。 nice的调整大小是 -20 ~ 19 超过19 的按照19 计算不高于 -20 的按照 -20计算。
那么为什么OS要把优先级控制在一定的范围内呢
这是因为OS要保证每个进程在调度的时候每个进程都要较为均衡的得到调度如果不控制在一定的范围容易到值一些优先级较低的进程长时间得不到CPU的调度导致进程饥饿问题。
优先级VS权限
优先级是保证可以申请到某种资源只不过需要等一等。 权限是能否得到某种资源。
每一个进程不是占有CPU就一直运行而是每隔一段时间就会被从CPU上玻璃下来这段时间就是时间片。Linux内核是支持进程之间进行CPU抢占的基于时间片的轮转式抢占式内核。并发问题就一定要考虑进程间的切换。
为什么我们函数内定义的临时变量会被return返回给外部呢 这是因为有eax寄存器它充当了代码的临时空间。
为什么我们的进程知道我们的代码运行到哪里又是如何做到函数之间的跳转呢
这是因为CPU内有eip寄存器它是程序计数器会记录程序运行的位置。我们进程在运行的时候是会使用这些寄存器的我们的进程会产生各种数据在寄存器中临时保存。
如果我们有多个进程各个进程产生的数据都是不一样的但是寄存器只有一套那怎么保证数据的独立性呢
这是因为CPU寄存器的内容会保存到各个进程各自对应的PCB中在调度的时候把内容放到CPU的寄存器中在调度完后再把自己对应的寄存器中的数据带走这样就可以保证每个进程拥有自己独立的数据内容保存在PCB中本质是保存在内存中所以说寄存器!寄存器的内容。
那么今天的分享就到这里了有什么不懂得可以私信博主或者添加博主的微信欢迎交流。