wordpress注册邮箱配置,windows优化大师收费吗,网络营销外包推广效果,手机软件开发学校一、进程优先级
1.1、为什么要有优先级 进程要访问某种资源#xff0c;进程通过一定的方式排队#xff0c;确认享受资源的优先顺序。计算机中资源过少#xff0c;所以进程访问某种资源时需要排队。
1.2、优先级的具体表示 进程的优先级其实就是PCB中的一个整形变量…一、进程优先级
1.1、为什么要有优先级 进程要访问某种资源进程通过一定的方式排队确认享受资源的优先顺序。计算机中资源过少所以进程访问某种资源时需要排队。
1.2、优先级的具体表示 进程的优先级其实就是PCB中的一个整形变量int PRI。Linux中进程的默认优先级是80这个默认优先级是可以被修改的。Linux中优先级的范围是[60,99]。数字越小进程优先级越高。Linux系统允许用户调整优先级但是不能直接让你修改PRI的值而是修改nice值。nice值不是进程的优先级而是优先级的修正数据。PRI值每次在重新设置的时候都是从80开始。 对进程优先级设置范围本质是防止常规进程很难享受到资源的情况为了防止产生进程饥饿问题。任何的分时操作系统在进程调度上都要进行较为公平的调度。
二、进程的调度与切换 进程被加载到CPU上运行的时候并不是必须一口气把代码跑完现代操作系统都是基于时间片轮转执行的。 竞争性: 系统进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争属性的。为了高 效完成任务更合理竞争相关资源便具有了优先级。 独立性: 多进程运行需要独享各种资源多进程运行期间互不干扰。 并行: 多个进程在多个CPU下分别同时进行运行这称之为并行。 并发: 多个进程在一个CPU下采用进程切换的方式在一段时间之内让多个进程都得以推进称之为 并发。 2.1进程的切换 进程在运行的时候会产生大量的临时数据这些临时数据会保存在CPU对应的寄存器中。当一个进程在CPU上的一个时间片跑完时CPU上寄存器中的数据都会被保存在进程的PCB中保护上下文。CPU内部的所有临时数据我们叫做进程的硬件上下文。所有的保存都是为了恢复所有的恢复都是为了在上次的运行位置继续运行。当进程被二次调度时将曾经保存的硬件上下文进行恢复放到CPU上再次运行。 虽然寄存器数据放在了一个共享的CPU设备里面但是所有的数据其实都是被进程私有的。CPU内某一时刻的数据只属于一个进程。
2.2进程的调度 CPU实现进程调度的算法需要考虑优先级饥饿问题以及效率问题。CPU的运行队列中有一个queue的task_struct结构体指针数组该数组的100到139下标正好对应了进程60到99的四十个优先级比如说有一个优先级为60的进程要被CPU调度了CPU就会将其链入queue数组的100号下标中类似于哈希表的结构每一个队列都对应一个特定的优先级。这样CPU在调度的时候就可以根据进程的优先级由高到低地调度进程了。如下图所示 在图中我们可以看到一个bitmap[5]的数组该数组每个元素的类型为int也就是说该数组一共可以表示成160个比特位比特位的位置表示哪一个队列比特位的值表示该队列是否为空。所以CPU检测哪一个队列中是否有进程就变成了检测对应的比特位是否为零。 这样就可以解决进程判断进程优先级以及效率问题。 从图中我们还可以看到蓝色方框和红色方框里的内容是一样的。这其实就涉及到活跃队列和过期队列的概念了。在图上还有两个指针active指针和expried指针这两个指针分别指向运行队列和过期队列。当CPU在运行一个活跃队列里面的进程时可能会不断地有新进程产生这时CPU会把新产生的进程插入到过期队列中当一个进程的时间片到了它也会被链入过期队列中等待活跃队列中的进程都执行完了交换active指针和expried指针的值就相当于活跃队列和过期队列互换了而CPU永远只会执行活跃队列里的进程所以这种方法可以有效地解决进程饥饿问题。