进程的优先级

简介: 进程的优先级

Linux 系统中,进程得以执行,必须获得 CPU 的控制权,即进程必须得到 CPU 的处理。然而一个进程往往并不能一直获得 CPU 的“青睐”。如果一个进程一直响应任务不退出,并一直占有 CPU 的控制权,这将是一件很“可怕”的事情。因此, Linux 系统通常采用一些调度策略来实现 CPU 控制权的合理分配。


Linux 和大多数其他 UNIX 实现一样,调度进程使用 CPU 的默认模型是循环时间共享算法。在这种模型下,每个进程轮流使用 CPU 一段时间,这段时间被称为时间片。循环时间共享算法满足了交互式多任务系统两个重要需求。


  1. 公平性:每个进程都有机会用到CPU
  2. 响应性:一个进程在使用CPU之前无需等待太长时间。


在循环时间共享算法中,进程无法直接控制何时使用 CPU 以及使用 CPU 的时间。在默认情况下,每个进程轮流使用 CPU 知道时间片被用光或自己主动放弃 CPU (如进程睡眠)。如果所有进程都试图尽可能多地使用 CPU ,那么它们使用 CPU 的时间差不多是相等的。


进程的特性 nice 值允许进程间接地影响内核的调度算法。每个进程都有一个 nice 值,其取值范围为 -20 (高优先级)到 19低优先级),默认值为 0 。在传统的 UNIX 实现中,只有特权进程才能够赋给自己(或其他进程)一个)优先级。非特权进程只能降低自己的优先级,即赋一个大于默认值 0nice 值。这样做之后它们就对其他进程“友好nice )”了,这个特性的名字也由此而来。


nice 值是一个权重因素,它导致内核调度器倾向于调度拥有更高优先级的进程。给一个进程赋一个低优先级(高 nice 值),并不会导致它完全无法用到 CPU ,但会导致它使用 CPU 的时间变少。 nice 值对进程调度的影响程度则依据 Linux 内核版本的不同而不同。


getpriority() 函数和 setpriority() 函数允许一个进程获取和修改自身或其他进程的 nice 值。

#include <sys/time.h>
#include <sys/resource.h>
int getpriority(int which, int who);
int setpriority(int which, int who, int prio);点击复制复制失败已复制


参数 whichwho ,用于标识需要被读取或修改优先级的进程。 which 参数需要结合 who 参数来确定需要被读取或修改 nice 值的进程。具体参数如下所示:

which参数 who参数 操作的进程对象
PRIO_PROCESS who(非0) 进程号为who的进程
0 调用进程
PRIO_PGRP who(非0) 进程组ID为who的进程组中的所有进程
0 调用进程所属进程组中的所有进程
PRIO_USER who(非0) 所有用户ID为who的进程
0 与调用进程相同用户ID的所有进程


getpriority() 函数返回由 whichwho 指定的进程的 nice 值。如果有多个进程符合指定的标准(当 whichPRIO_PGRPPRIO_USER 时会出现这种情况),那么将返回优先级最高的进程 nice 值。


setpriority() 函数会将有 whichwho 指定的进程 nice 值设置为参数指定的值 prio 。如果将 nice 值设置为一个超出允许范围的值时会直接将 nice 值设置为边界值,即 -2019

目录
相关文章
|
12天前
|
算法 调度 UED
深入理解操作系统:进程调度与优先级队列
【10月更文挑战第31天】在计算机科学的广阔天地中,操作系统扮演着枢纽的角色,它不仅管理着硬件资源,还为应用程序提供了运行的环境。本文将深入浅出地探讨操作系统的核心概念之一——进程调度,以及如何通过优先级队列来优化资源分配。我们将从基础理论出发,逐步过渡到实际应用,最终以代码示例巩固知识点,旨在为读者揭开操作系统高效管理的神秘面纱。
|
3月前
|
算法 调度 UED
揭秘操作系统背后的暗战:进程调度与优先级反转的惊心动魄!
【8月更文挑战第21天】操作系统核心管理计算机资源,进程调度为其关键功能,决定CPU使用权,影响系统性能与用户体验。优先级反转是多任务环境下常见挑战:高优先级进程因等待低优先级进程占用的资源而被阻塞,导致系统效率下降。通过优先级继承或提升机制可解决此问题,确保系统资源高效利用与响应时间优化。
41 1
|
1月前
|
算法 调度
深入理解操作系统:进程调度与优先级反转问题
【9月更文挑战第36天】操作系统是计算机科学中的核心概念,它管理着计算机的硬件资源和软件进程。在多任务处理环境中,进程调度是保证系统高效运行的关键机制之一。本文将探讨进程调度的基本概念、调度算法以及它们如何影响系统性能。同时,我们还将讨论优先级反转问题,这是一个在实时系统中常见的问题,它可能导致系统响应时间不可预测。通过分析优先级反转的原因和解决方案,我们可以更好地理解操作系统的设计和优化策略。
|
2月前
|
存储 算法 前端开发
深入理解操作系统:进程调度与优先级队列算法
【9月更文挑战第25天】在操作系统的复杂世界中,进程调度是维持系统稳定运行的核心机制之一。本文将深入探讨进程调度的基本概念,分析不同的进程调度算法,并着重介绍优先级队列算法的原理和实现。通过简洁明了的语言,我们将一起探索如何优化进程调度,提高操作系统的效率和响应速度。无论你是计算机科学的初学者还是希望深化理解的专业人士,这篇文章都将为你提供有价值的见解。
|
2月前
|
算法 调度
深入理解操作系统:进程调度与优先级反转
【9月更文挑战第21天】在操作系统的心脏跳动着的,是进程调度器。它决定了哪个进程运行,何时运行,以及如何优雅地共享CPU资源。本文将通过浅显易懂的语言和直观的代码示例,探索进程调度的奥秘,揭示优先级反转问题及其解决方案,带领读者领略操作系统中这一精妙绝伦的设计。
|
2月前
|
算法 人机交互 调度
进程调度算法_轮转调度算法_优先级调度算法_多级反馈队列调度算法
轮转调度算法(RR)是一种常用且简单的调度方法,通过给每个进程分配一小段CPU运行时间来轮流执行。进程切换发生在当前进程完成或时间片用尽时。优先级调度算法则根据进程的紧迫性赋予不同优先级,高优先级进程优先执行,并分为抢占式和非抢占式。多队列调度算法通过设置多个具有不同优先级的就绪队列,采用多级反馈队列优先调度机制,以满足不同类型用户的需求,从而优化整体调度性能。
93 15
|
1月前
|
存储 算法 调度
MacOS环境-手写操作系统-34-进程优先级
MacOS环境-手写操作系统-34-进程优先级
18 0
|
3月前
|
算法 调度 UED
探索操作系统核心:进程调度与优先级队列
【8月更文挑战第31天】在计算机的心脏——操作系统中,进程调度是维持系统运行的关键机制。本文将深入浅出地介绍进程调度的概念,并通过一个简单的优先级队列算法示例,展示如何在操作系统设计中实现基本的进程管理。我们将从理论到实践,逐步揭示如何通过代码构建一个模拟的进程调度系统,帮助读者理解这一复杂但至关重要的操作系统特性。
|
3月前
|
运维 算法 调度
深入理解操作系统:进程调度与优先级自动化运维:使用Ansible实现服务器集群管理
【8月更文挑战第27天】在操作系统的众多奥秘中,进程调度无疑是一个既简单又复杂的主题。它就像是交响乐团中的指挥,协调着每一个音符,确保乐曲和谐而有序地进行。本文将带领读者走进进程调度的世界,探索其背后的原理和实现,同时通过代码示例揭示其精妙之处。让我们一起揭开进程调度的神秘面纱,理解它在操作系统中的重要性。
|
3月前
|
Linux 调度 数据库
在Linux中,什么时候需要用到进程的优先级?
在Linux中,什么时候需要用到进程的优先级?

热门文章

最新文章

相关实验场景

更多