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

国外营销网站建设网站建设确认表

国外营销网站建设,网站建设确认表,wordpress广告图片轮播代码,vue.js 做网站前言#xff1a; 有了前面知识点的铺垫#xff0c;本篇我们将围绕进程的三个方面来展开#xff0c;即进程优先级#xff0c;进程切换以及进程调度的问题#xff0c;这里的进程调度其实本质就是CPU是如何去调度进程的。 进程优先级#xff1a; 优先级的概念#xff1a…前言 有了前面知识点的铺垫本篇我们将围绕进程的三个方面来展开即进程优先级进程切换以及进程调度的问题这里的进程调度其实本质就是CPU是如何去调度进程的。 进程优先级 优先级的概念 让我们先考虑这样一个场景当我们中午去食堂排队买午餐的时候我们的队伍是分为先后的前面的人优先选择自己爱吃的后面的人则需要等到前面的人选完才能轮到自己选。但是排队的所有人都要购买午餐的权利只是先后买到的问题。 由此我们便得出了在OS中进程排队的本质 在资源不足的情况下软硬件资源为少数而进程是多数的因此在这种情况下便有了优先级的概念。 那何为优先级呢 即是得到某种资源的先后顺序 那优先级和权限有什么区别呢他们两个如何区分呢 权限是你是否有得到某种资源的能力而优先级是你已经默认有了获取某种资源的能力只不过是先得到还是后得到的区别 有了上面的概念的区分我们下面来看看在实际的操作系统中是如何实现优先级的。 操作系统中优先级的实现方式 优先级也属于PCB的一个数据段和我们的状态一样优先级也由一个整型变量来控制对应的这个数值越小它的优先级就越高。 反之优先级就越低。 在LINUX中进程的优先级的数值范围为60-99一共40个等级划分而LINUX中默认的进程的优先级都是80 我们在LINUX想要显示优先级可以用指令ps -al来执行即可以展示关于进程的更加详细的信息(其中的 l 代表更详细的意思而a代表全部 如下图 图中的PRI即代表优先级的意思(priority)但是默认的PRI都是80那怎样体现优先级的先后呢 LINUX是支持动态优先级调整的如上图所示你会发现进程信息中还有一个NI值(nice值),我们默认的80的PRI是不会被修改的本质上我们是利用PRI和NI的一个混合运算得到一个进程的优先级的公式如下 PRI(新)PRI(默认80)nice调整值 没错根据公式我们的PRI是不会变化的一直是80默认通过调整NI来调整优先级。 那如何调整NI值呢其指令如下 1.首先top打开任务管理器 2.输入r(renice)即修改NI值的指令 3.然后输入你要修改的进程的pid 4.然后重新输入新的要修改的NI值即可 如下图 需要注意的点 1.LINUX中PRI默认都从80开始不会记录上一次的PRI。 2.NI的取值范围为-20到19也就是80减到60和加到99的临界情况超出这个范围的数值一旦超出一律按照边界值处理比如我NI值设为100它也会自动将NI值设为19而不是100不会超出范围。同理NI值为-100也会按照-20处理不会超出范围 优先级的意义 看了LINUX的优先级设置方法或许有人会问为什么要把优先级限定在一定的范围内呢 这是由于OS在调度的时候它需要较为均衡的让每一个进程都被均衡的得到调度如果允许用户任意修改则容易导致优先级较低的进程较长时间都得不到CPU资源来运行这种现象又称为进程饥饿。故我们设置的级别为60-9940位导致区间进程的优先级相对固定。 因此进程优先级的意义是 让进程对于资源的调配更加合理重要的进程优先运行其次的进程后面运行同时由于区间差距为40位故优先级的差距不大导致进程饥饿的问题得到解决。 其他的优先级指令 1.nice指令 2.renice命令与top一样在进程启动时使用 3.LINUX系统调用更改获取优先级getpriority/setpriority 进程切换 其他的概念 1.竞争性系统的进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争关系的故为了高效完成任务更合理竞争相关资源便具有了优先级 2.独立性多进程运行需要独享各种资源多进程运行期间互不干扰 3.并行多个进程在多个CPU下分别同时进行运行称之为并行 4.并发多个进程在一个CPU下采用进程切换的方式在一段时间内让多个进程都得以推进称之为并发。 注意的一些细节 1.首先区分一下,并行和并发的不同点从CPU角度上并行是多个CPU同时进行多个进程的而并发是一个CPU分别切换进行多个进程的运行。 2.不要把并发理解为CPU同一时间内同时运行多个进程本质上是先后切换进行的只是这个时间非常快在人的感知里就相当于同时在推进因此叫并发。 因此我们接下来详细讲讲进程切换的问题 对进程切换的理解 1.时间片 首先注意任何一个进程不是占有了CPU就一直运行每隔一段时间就会自动被从CPU上剥离下来我们把这个进程在CPU上运行到被剥离出CPU的这段时间称之为时间片。 而LINUX内核是支持进程之间进行CPU资源抢占的它的内核的本质是一种基于时间片的轮转抢占式内核根据每一个时间片的时间差去切换进程故涉及到并发则并发的过程中是一定涉及到进程间的切换的。 2.寄存器 在我们的CPU硬件中存在着很多寄存器比如eax,ebx,edx,ss,ds,cs,gs,fs,ebp,esp,eip,status,reg,cro~cr4等… 1.我们的函数内定义的栈的临时变量在函数调用完就销毁的前提下可以返回给外部靠的就是eax寄存器将数据存储起来为数据充当临时空间 2.为什么程序/进程会知道我们当前程序运行到哪个位置了呢/它是如何做到函数跳转的呢 这正是因为CPU内有eip程序计数器它会保存下一条指令的地址。 因此我们可以总结出我们的进程在运行的时候会使用寄存器我们的进程运行的过程中会产生各种数据这些数据都会由寄存器临时保存起来不同的进程CPU寄存器内的临时数据都是不一样的我们将这些临时数据称为硬件上下文。 CPU硬件只有一套但是寄存器可以存储的数据就不止一套了。 因此我们要明确寄存器是硬件而数据是逻辑的产物寄存器寄存器里的内容。 寄存器里面的内容是可以随时更换的但寄存器硬件只有一套。 3.进程切换的具体过程 由上面的知识我们知道一个进程的数据是由寄存器来保存的那么在进程切换的时候数据又是怎样保存下来为下一次运行做准备呢 首先所有的保存都是为了恢复。进程保存数据也是为了下一次运行做准备。 而进程切换的本质就是将数据由硬件先保存到内存中也就是用来管理进程属性的PCB中再由内存中返回给硬件从而继续运行。 详细的切换过程如下 一个进程倘若没有开始运行则它会直接将数据拿到CPU上去跑当涉及到进程切换的时候CPU中的寄存器按顺序将寄存器中的数据拷贝到这个进程的PCB对应的数据段成员变量中而后进程的PCB去执行其他调度切换另一个进程交由CPU处理而对于已经由CPU运算过一部分的进程再次交给CPU运算则会先将PCB中的数据再按照顺序交给CPU的寄存器其中也包括eip程序计数器等一系列寄存器故此进程会从上一次切换的位置继续向下进行这便是进程切换的过程如下图所示 同时要强调一点的是PCB的数据是以覆盖的方式把数据传给PCB的同理寄存器传给PCB也是同理不要担心数据丢失的问题因为覆盖之前一定要首先对数据进行保存或者更新。 进程调度 进程优先级进程切换这些关于进程的知识点讲完了下面我们来看看CPU是如何去调动我们的进程的。 我们以LINUX2.6为例来看看它的调度队列是怎样的如下 从图中我们会看到LINUX2.6的调度队列中存在着由红笔和蓝笔画上了两个一模一样的结构在这个结构里包含三个成员 1.一个状态标识变量nr_active 2.一个位图bitmap[5] 3.一个队列queue[140] 我用这张图让我们看懂我们的调度原理 首先我们得queue数组是一个以PCB指针存储起来的数组也就是说它的每一个成员都是一个PCB结构体指针在每一个结构体的后面去链接进程前0-99是实时优先级而100-139对应的就是我们的60-99正好40个优先级数据的访问会从下标小的位置开始依次向后进行故我们的优先级是越小优先级越高。 而在整个调度队列中还维护了两个指针voidactive,voidexpired,他们分别对应着我们的两个队列活跃进程队列和过期进程队列 为了防止无限制的进程优先级高得进程得不断插入导致后续得进程永远无法被执行从而破坏了进程优先级的平衡性LINUX2.6采取了双队列交替运行队列的方式其中一个为活跃进程队列另一个为过期进程队列当活跃进程队列正在运行进程的时候新增加的进程不论优先级都会被填入到过期运行队列中不影响活跃队列的执行当活跃进程队列的进程都被执行完后此时的过期进程队列已经装配好了新的进程这个时候active和expired交换指针的指向让活跃变过期过期变活跃这个过程循环往复两个队列交替运行进程就保证了优先级的相对平衡性不会有进程饥饿的情况发生。 而所谓的抢占其实就是将过期队列的进程链接到活跃进程中优先运行。 位图成员 在进程队列中还维护着一个位图成员bitmap[5],它是一个含有五个元素的整型数组它的目的是快速锁定下标从而执行进程我们找进程就不用再遍历queue去找了而是通过位图去直接访问下标执行对应的进程5个整型就是160个bit位因此利用二进制从最右端开始位操作移动遇到为1的说明此位数对应的下标上有进程要执行而根据二进制的特点我们可以8个一组或者16个一组去查看1的情况这个要比遍历快很多这种方法便是O(1)查找法。 因此我们来总结一下CPU调度的具体流程 首先访问active队列查看nr_active的状态是否为1为1说明有进程在队列中然后通过位图锁定对应的下标进入queue中直接根据下标去访问对应的进程队列从而执行相应的进程 最后我想提出的一个问题是 我们之前说CPU维护着一条运行队列协助调度在这里我们有学到了调度队列中有两个队列他们的关系是怎样的呢 首先CPU维护着一条运行队列这条队列在LINUX2.6中的实现方式是通过两个进程队列协助开始的也就是说两个进程队列是运行队列的一种实现方式这便是他们的关系不要混淆 总结 本篇文章我们系统总结了进程优先级进程切换进程调度的问题我希望结合前两个进程篇的知识我们把整个进程在OS中的工作方式系统的去梳理一遍保证每一个逻辑都是清晰的有模糊的地方就去重新查看文章的细节进程将对我们使用计算机的时候的一些现象有了更加合理的解释所以更希望大家在使用计算机的时候刻意去尝试推测某个软件所处的状态从而进一步深化我们的进程知识。
http://www.zqtcl.cn/news/407573/

相关文章:

  • 自己做视频的网站吗怎么建设维护学校的网站
  • 广州网站建设好公司鲁权屯网站建设
  • 网站多数关键词网站使用mip后效果怎么样
  • 如何介绍自己做的网站建设三库一平台
  • 郑州网站商城建设iframe 一直网站底部
  • 1688网站怎么样百度一下你知道
  • 做电商图的设计网站蚌埠网页设计培训
  • 江苏省建设工程质量监督站网站手机网站 案例
  • 优而思 网站科技自立自强是国家强盛之基
  • 去哪里购买网站空间专门做家居的网站
  • 网站信息安全建设方案公众号网站建设
  • 网站的设计方案淘宝大数据查询平台
  • 深圳营销型网站建设 龙华信科网站项目有需要什么技术支持
  • 开源网站模板cms网店推广实训总结
  • 常见的电子商务网站有哪些建设校园门户网站信息意义
  • 象山经济开发区建设有限公司网站足球比赛直播app
  • 国外做mg动画的网站大全网站打不开 别的电脑能打开
  • 手机怎么创网站西宁企业做网站
  • 网站主机多大wordpress连接错误
  • 3d建站电商平台网站开发过程是什么
  • 优化核心系列网站wordpress下拉刷新
  • 深圳建站定制公司国外试用网站空间
  • 网站建设的原则有哪些内容建设网站的详细步骤
  • wordpress网站换字体宣传电脑的网站开发
  • 移动网站设计上机考试修改wordpress域名
  • 个体户 建设网站房子已交房 建设局网站查不到
  • 在自己的电脑建设空间网站百中搜优化软件
  • 专业房产网站建设公司wordpress导入项目
  • 网站安全建设必要性企业vi设计是什么意思
  • 建站工具有哪些社区兰州市城乡建设局网站通知公告