国外对网站开发的研究,广州网站建设广州网络推广公司,免费虚拟主机网站,江苏景禾瑜博建设工程有限公司网站#x1f30e;进程的优先级 文章目录#xff1a;
进程状态 优先级相关 什么是优先级 为什么要有优先级 进程的优先级 调整进程优先级 调整优先级 优先级极限测试 Linux的调度与切换 总结 前言#xff1a; 进程…进程的优先级 文章目录
进程状态 优先级相关 什么是优先级 为什么要有优先级 进程的优先级 调整进程优先级 调整优先级 优先级极限测试 Linux的调度与切换 总结 前言 进程优先级是操作系统中的一个重要概念它直接影响着进程的调度顺序和执行权。了解进程优先级对于理解和优化系统的性能至关重要。那么话不多说开启我们今天的话题 优先级相关
✈️什么是优先级 在日常生活中我们有很多排队的场景公路上等红灯在医院挂号或者是在食堂吃饭等等但是我们在公路上救护车可以无视红灯医院里急诊病人可以优先挂号以及食堂里老师肆意的插队… 这些需要排队的事物就可以看作进程而像救护车急诊病人以及食堂的老师等等这些都是具有优先权的象征为什么要有优先权呢一定是有更重要的事情去做。 所以我们就知道优先级是什么进程要访问某种资源进程通过一定的方式排队确认享受资源的先后顺序。 相信细心的你也发现了优先级不就是我们前面学习的权限吗其实优先级和权限是有区别的权限决定的是能不能的问题而优先级是决定先后顺序的问题。 ✈️为什么要有优先级 如果我们食堂的窗口远大于人数如果我们自习室里的座位非常多人却非常少我们是不需要排队的也就是说当资源充足的时候我们并不需要排队。 所以优先级产生的本质是因为资源相对比较少 ✈️进程的优先级 为了更直观的看到优先级我们可以执行下面的代码
#includestdio.h
#includestdlib.h
#includeunistd.hint main()
{while(1){printf(this is a process, pid%d\n, getpid());sleep(1);}return 0;
}我们让改程序跑起来变为进程我们使用如下命令查看 进程属性
ps -la#显示当前用户的所有进程我们看到横着的蓝色框是我们启动的进程竖着的蓝色框有一栏叫做 PRI 的数值其实 PRI 就是 priority 优先权的意思。 竖着蓝框里是优先级而优先级具有数值那么就一定是 task_struct 里的一个属性
struct task_struct
{int PRI;//优先级//...
}而我们运行自己写的程序查询改进程的权限为80这也就说明 Linux下进程的优先级本质就是数字。 其实Linux下优先级是可以被修改的修改范围为 [60, 99] 这40范围内且 进程的默认权限值是80。而优先级 数字越小表示该进程的 优先级越高 调整进程优先级
✈️调整优先级 我们清楚了进程的优先级是什么以及为什么接下来我们看一下到底该怎么做 运行上面的程序打印出进程的pid使用 top 命令进入到 Linux任务管理器
top#进入任务管理器打开top进入到任务管理器之后输入 ‘r’ 进入 修改进程权限的操作再 输入进程标识符 接着就会有文字提示 再输入要修改的值即可比如这里我输入10 这个时候再使用ps查看就会发现进程的PRI这一项变为了90但是我们发现不仅仅是PRI这一栏变了还有一栏叫做 NI 的值也变了而且还刚刚好是我们输入的数值 其实Linux系统支持用户调整优先级但并 不是让用户直接修改 pri 值而是修改 nice 值。而 nice 值 不是 优先级而是 优先级的 修正数据。
所以真正的优先级应该是pri pri(old) nice ;old指老的优先级 所以我们刚刚 修改的并不是优先级而是nice值。 ✈️优先级极限测试 但是果真如此吗进程的优先级真的只能在[60,99]这个范围呢移动吗如果不相信我们可以来做一下极值测试 我们将程序的进程值调到 尽可能的大 nice值变为19pri变为99就是我们给出的最大范围。 如果我们把nice值设置为-10 我们发现进程的pri变为了70但是我们刚才不是刚把进程的优先级调至为99吗 其实这是因为pri(old)是指老的优先级这个优先级永远是80 所以再次调整时还是从80开始变化。 我们把nice值设置为极小 进程的pri果然为60所以nice值的范围就是 [-20, 19] 。 可能你会有疑问为什么要给进程优先级加上限制范围呢 如果不加限制把自己的优先级调整的非常高别人的优先级非常低又因为OS是根据进程的pri来执行先后顺序的这样做可能就会打乱操作系统执行顺序。 这样常规进程就很难分配到资源是不是有点 “兴百姓苦亡百姓苦” 的感觉了其实这就是一种 进程饥饿 的问题。 为了尽量避免进程饥饿的问题现在的任何分时操作系统都是较为公平的进行调度。 Linux的调度与切换 Linux调度切换是学习Linux系统编程重要知识我们提前了解一下 我们之前说过CPU并不会把一个进程全部执行完才切换下一个进程而是 基于时间片进行轮转执行的。而关于进程的调度与切换有以下几个相关特性 竞争性系统进程数目众多而CPU资源只有少量甚至1个所以进程之间是具有竞争属性的。为了高效完成任务更合理竞争相关资源便有了优先级。 这里前面谈过了为了避免竞争饥饿问题操作系统会合理的给进程分配各种资源。 独立性多进程运行需要独享各种资源多进程运行期间互不干扰。 进程的独立性是学习Linux系统编程特别重要的一个知识多个进程在系统里同时运行但是他们互不干扰一个进程挂了不会影响另外的进程就算是父子进程也是如此。 并行多个进程在多个CPU下分别同时运行称为并行。 如果一台电脑有多个CPU并且每个CPU下有对应数量的进程分别同时运行那么就称之为并行。 并发多个进程在一个CPU下采用进程切换的方式在一段时间之内让多个进程都得以推进称为并发。 并发与并行不同我们大部分人的电脑其实只有一个CPU而进程通常会有多个为了考虑资源分配等问题每个进程都有自己的时间片时间片用完就切换下一个进程自己则重新排队等待再次调度。 虽然每次CPU执行任务只执行很少的时间片但是对于我们人类来说并看不出来进程是在不断切换的。多个进程在一个CPU下采用进程切换的方式一段时间内让多个进程都能推进任务称之为并发。 ✏️总结 在操作系统中资源总是少数所以进程需要使用排队的方式来获取资源而有些重要的进程优先级较高可以插队。 进程的优先级是可调整的调整范围为[60, 99]实际上我们调整的是进程的nice值nice值的范围是[-20, 19]。 进程的调度和切换是操作系统中重要的概念其中 竞争、独立、并发、并行 这些概念比较常见。 如果这篇文章对你有帮助的话还望留下一个小小的赞呀~~