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

网站关键词没有排名wordpress推送到百度

网站关键词没有排名,wordpress推送到百度,世界500强企业排名2023,网站源码asp目录 进程排队 进程状态 运行状态 阻塞状态 挂起状态 Linux内核具体进程状态 浅度睡眠状态 运行状态 深度睡眠状态 暂停状态 可被追踪的暂停状态 终止状态 僵尸状态 进程排队 进程不是一直在运行的#xff0c;进程放在了CPU上#xff0c;也不是一直运行的。 进程…目录 进程排队 进程状态 运行状态 阻塞状态 挂起状态 Linux内核具体进程状态 浅度睡眠状态 运行状态 深度睡眠状态 暂停状态 可被追踪的暂停状态 终止状态 僵尸状态 进程排队 进程不是一直在运行的进程放在了CPU上也不是一直运行的。 进程可能在等待某种软硬件资源给它输入输出数据。 当进程被放在被CPU执行时不是等CPU执行完成之后再将其拿下来而是在规定的时间内执行只要时间一到不管这个进程执行完成还是未完成都要从CPU上拿下来让CPU执行其他进程。这个规定的被CPU调度执行的时间被称为时间片。 进程排队一定是在等待着某种资源。比如等待被CPU执行、等待被内存读取、等待被磁盘读取写入。 为什么要进行进程排队因为在计算机中硬件是少数进程是多数每个进程要想都被执行就只好排队了。 我们知道进程task_struct(PCB)可执行程序。进程排队实际上是进程中的task_struct在排队。一个task_struct可以被连接在多种数据结构中。 下面来看一下一个task_struct如何被连接在多种数据结构中 实际上在内存中操作系统对进程的管理是这样的。 在task_struct(PCB)内部对象中定义一个连接节点由连接节点之间再互相连接将进程PCB连接起来。此后操作系统对进程的管理就转化为了对维护的这个链表进行管理了。 那么通过这个节点的地址如何获取该PCB节点的首地址呢 初始地址是连接节点的地址利用上述两种方法就可以计算出偏移量从而拿到PCB首元素地址访问PCB内部属性。 实际上每一个硬件单元操作系统都会为其维护一个队列。队列的底层就是由链表/顺序表维护的。比如一个CPU就维护一个运行队列(由于CPU主要是运行这些进程所以就是运行队列)、一个磁盘就维护一个管理队列(磁盘主要是进行写入、读取等对数据做管理所以就是管理队列)等。 所以一个PCB可以被连接在多种数据结构当中。对进程的管理就需要复用对链表的增删查改方法。 进程状态 所谓的进程状态本质就是由整数来代表状态。在task_struct中就是一个整型变量。 #define Run 1 #1代表运行状态 #define Sleep 2 #2代表休眠状态 #define stopped 3 #3代表停止状态 #define dead 4 #4代表死亡状态 状态是用来帮助进程确定后续动作的Linux中可能会存在多个进程都需要根据自己的状态来执行后续动作所以进程就需要排队了。 每个硬件都有一个运行队列。 我们了解一下运行、阻塞、挂起状态。 运行状态 只要在运行队列里的进程就是运行状态。由此可知在运行状态的进程也不一定是真正运行的可能还在等待着CPU执行它。 一个进程放在CPU上被执行有两种情况被从CPU上拿下来去运行队列重新排队一种是这个进程执行完了另一种是这个进程的时间片到了。 时间片是操作系统为了效率而设置的。意为进程被放在CPU上被执行的时间。 浅看一下上述过程 阻塞状态 进程可能在等待着某种资源这种资源可能是软件也可能是硬件。 比如CPU现在执行进程执行到scanf函数了这个时候计算机就等着我输入了但是如果我迟迟不输入那么计算机就一直等着我输入不管其他进程了显然不是的。所以类似于执行到scanf函数时需要键盘这个硬件来输入数据了就需要键盘这个资源了所以这个进程由运行状态转化为阻塞状态并且该进程的PCB从运行队列中剥离放到硬件的管理队列中等这个硬件执行到这个进程时并输入了数据(这个数据由操作系统进行保存)就又将这个进程的状态改为运行状态连接在运行状态的队列中等待被CPU执行。等CPU执行到这个进程时操作系统再拿出来刚刚键盘以及输入的保存好的数据再由CPU执行。 在这整个过程中这个进程的切换、从运行队列中剥离、连接在键盘管理的队列中、再获取到键盘执行到这个进程了且输入了数据、再状态切换、连接在运行队列中、CPU执行到这个进程了再把数据拿出来这些都是由操作系统来保证的。 下面来演示一下上述操作。 当进程在进行等待某种软硬件资源的时候资源如果没有就绪进程的PCB就只能将自己设置为阻塞状态再将自己的PCB连接再等待资源所提供的队列中去。 挂起状态 这里我们只了解阻塞挂起状态 当计算机内存资源以及开始很紧张的时候这个时候可能我们再申请空间就很大可能会申请失败甚至更严重时导致操作系统崩溃在这么危急的时刻操作系统为了保证自己不崩溃为了给用户提供良好的服务操作系统就会将现在不执行的进程/阻塞的进程的代码和数据拷贝(交换)到磁盘上的swap分区中将内存中的代码和数据的空间释放掉这样就会腾出来一部分空间供操作系统度过这危急的时刻等到需要执行这个进程了再将代码和数据由磁盘swap分区拷贝至内存使PCB与其连接CPU执行即可。 这个过程称为操作系统将代码和数据通过IO交互唤入唤出到磁盘swap分区上。 换出把数据从内存拷贝到磁盘swap分区。 换入将数据由磁盘swap分区拷贝到内存中。 注意PCB不会被唤入唤出。PCB唤出了操作系统就不知道有这个进程了。另外创建进程时首先是PCB被创建出来然后再是可执行程序(代码和数据)加载到内存。因为操作系统管理进程只管理进程的PCB先让操作系统创建出PCB是为了让操作系统知道有这个进程了什么时候调度等一系列操作再由操作系统掌握。 对于磁盘的swap分区一般容量是内存的0.5-1倍。因为swap分区操作系统都要用完所以swap分区的容量如果太大就会使内存和磁盘之间的交互过于频繁由于木桶原理就导致操作系统效率低下。 所以进程状态的变迁实际上是将进程的PCB被操作系统变迁到不同的软硬件管理队列中去。 Linux内核具体进程状态 以上有关进程知识都是操作系统理论部分接下来了解一下Linux实际的进程状态。 下面来看一段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 僵尸状态*/ }; 查询当前进程信息STAT字段为进程状态字段。 浅度睡眠状态 按道理来说只要该程序属于运行期间就是运行状态。 运行状态就是程序运行时的状态可为什么这个在运行的进程的状态是S呢 这是因为云服务器在远端进程在云服务器上运行根据冯诺依曼体系结构结果会通过网卡设备接收-预加载到内存-由CPU处理-内存定期刷新到显示器文件。由于显示器效率比内存效率慢并且要预加载到内存中来所以这个进程的调度期间CPU大部分时间都是在等待代码数据预加载到内存所以就是睡眠状态了。由于大部分时间在等待资源加载和刷新所以睡眠状态是阻塞状态的一种。 这种睡眠状态称为浅度睡眠状态又叫可中断睡眠状态。 前/后台进程 S后面的表示这是一个前台进程后面没有表示这是一个后台进程。 前台进程可被ctrlc终止掉进程并且进程执行期间不可执行其他命令。 后台进程不可被ctrlc终止进程只能使用kill -9 进程pid终止掉并且后台进程执行期间可执行其他指令。 一般来说默认运行都为前台进程。 #指定以前/后台进程来运行可执行程序 ./可执行程序 #以前台进程运行该可执行程序 ./可执行程序 #以前台进程运行该可执行程序 运行状态 那如何才是运行状态呢 此时不需要打印操作while循环会一直运行该进程就成为了运行状态了。 深度睡眠状态 D状态为深度睡眠状态又叫不可中断睡眠状态。 操作系统在资源紧张的状态下会释放掉进程(可执行程序和PCB都会释放)为了防止操作系统在这种情况下将还没有执行完成的进程释放从而导致用户丢失数据信息。所以设置D状态处于D状态的进程不可被操作系统释放掉。D状态进程是等待资源调度所以D状态也是阻塞状态。 暂停状态 T状态是暂停状态。 kill -l #在Linux中查看信号 kill -19 进程pid #使进程暂停 kill -18 进程pid #使进程继续执行 进程一旦被暂停过再次启动运行都会转为后台进程。因为前台需要进程占着。 暂停状态等待着再一次被执行所以暂停状态也是阻塞状态的一种。 可被追踪的暂停状态 t状态为可被追踪的暂停状态。在调试的时候该进程属于t状态。 处于t状态的进程也是阻塞状态。 终止状态 X状态是终止状态(程序死亡状态)一般是查询不到的这是一个瞬时状态。 僵尸状态 Z状态是僵尸状态。 进程在执行完成之后代码和数据可以直接被释放但是自己PCB不会被立即释放。 对于一个进程来说进程是为了给用户提供服务的进程在执行完成之后需要将自己的执行信息以及执行成功还是失败等信息返回给它的父进程、操作系统需要获取这个进程执行完成之后返回的数据之后操作系统会反馈给用户。 进程退出但是操作系统并未获取到该进程退出的信息时这个进程处于僵尸状态。 让操作系统获取到这个进程退出的数据时才会释放PCB这个进程才是终止状态。 所以说一个进程执行结束先到僵尸状态然后变为终止状态被系统释放。 孤儿进程 子进程退出之后父进程必须要读取。如果不读取则PCB会被一直保存长期会造成内存泄漏。 父进程存在时子进程僵尸状态会被父进程回收获取返回信息。 子进程存在时父进程僵尸状态会被bash自动回收获取返回信息。并将子进程交给操作系统(1号进程)所领养。此时子进程ppid变为1。 bash会自动回收获取僵尸状态的进程的返回值。 被操作系统所领养的进程为孤儿进程孤儿进程都是后台进程。
http://www.hkea.cn/news/14466606/

相关文章:

  • 流放之路做装备词缀网站dede 如何做视频网站
  • 网站建设系统怎么样手机端网站尺寸
  • 石家庄的电商网站建设中国建筑设计研究院
  • 进网站显示建设中怎么解决百度最新泛站群程序
  • 网站优化怎么做官方网站制作思路
  • 自己如何建设微信网站赣州网站维护
  • 试卷网站在线做山东通app官网下载二维码
  • 金华建设网站网络营销的特点
  • 响应式网站简单模板电气工程专业毕业设计代做网站
  • 六安火车站网站商务网站开发公司
  • 做a爱片网站微信是哪家公司开发的
  • 网站建设和维护怎么学廊坊做网站
  • 博敏 网站开发淘宝联盟怎么做网站推广
  • 服务网站设计案例宣传型网站
  • 免费3d模型网站织梦如何做中英文网站
  • 情侣博客网站模板wordpress首页源码
  • 中国志愿者服务网站登录注册wordpress 添加固定字段
  • 网站升级维护网页qq登录页面
  • 台州市城乡建设局网站广东seo
  • 手机网站预约表单泉州握旗公司网站建设
  • 微信推送用哪个网站做网站建设制作设计营销 中山
  • wordpress打开媒体链接设置郑州做网站优化
  • 怎么才能百度做网站网页设计与制作课程思政案例集
  • 综合性医院网站源代码下载网络推广是做什么工作的
  • 建个网站需要多少钱圣宝电动车大架号在哪里企业网站网站建设
  • 购物网站主要的功能模块海南网站建设报价
  • 上海建站提供商购买域名有什么用
  • 用.net做购物网站北京网站建设方案外包
  • 自主建站郑州建设网站
  • 网站建设需要哪些成本费用培训中心网站建设方案