linux内核之进程优先级

合集下载

linux setpriority 用法

linux setpriority 用法

linux setpriority 用法

Linux setpriority 函数用于设置进程的优先级。该函数用于改变进程的调度优先级,以便在多个正在运行的进程中进行调度。本文将一步一步回答关于setpriority 的用法。

第一步:概述

setpriority 函数属于POSIX 标准的一部分,它允许用户在Linux 操作系统中调整进程的优先级。这在一些需要实时性能和资源管理的应用程序中非常有用。通过调整进程的优先级,可以确保关键任务的优先处理。

第二步:函数原型

setpriority 函数的函数原型如下所示:

c

#include <sys/resource.h>

int setpriority(int which, id_t who, int prio);

该函数接受三个参数:which、who 和prio。

第三步:参数解释

1. which:指定谁的优先级需要被调整。这个参数可以是下面任意一个值:

- PRIO_PROCESS:用于指定调用进程自身的进程ID。

- PRIO_PGRP:用于指定与调用进程处于同一进程组中的进程组ID。

- PRIO_USER:用于指定与调用进程属于同一用户ID 的全部进程。

2. who:who 参数指定对哪个进程组、进程或用户的优先级进行设置。如果which 参数设置为PRIO_PROCESS,则who 参数指定进程的ID。如果which 参数设置为PRIO_PGRP,则who 参数指定进程组的ID。如果which 参数设置为PRIO_USER,则who 参数指定用户的ID。

Linux限制用户CPU使用率

Linux限制用户CPU使用率

Linux限制用户CPU使用率

在Linux操作系统中,可以使用多种方法限制用户的CPU使用率,以

实现资源控制和管理。本文将介绍几种常用的方法。

1. 使用nice和renice命令:nice命令用于设置一些进程的优先级,范围从-20到19,默认为0。较低的nice值表示较高的优先级。renice

命令用于修改正在运行的进程的nice值。

要限制一个用户的CPU使用率,可以将用户的进程的nice值设置为

一个较高的数值。例如,将nice值设置为10,则进程的优先级就会降低,CPU使用率会相应减少。

2. 使用cgroups(Control Groups):cgroups是Linux内核提供的一

种资源控制机制,可以对进程和进程组进行资源隔离、限制和优先级控制。

通过cgroups,可以为特定用户组分配一定的CPU资源,并限制其使

用率。首先需要安装cgroups工具包,然后创建一个名称为

"er_limit"的cgroup,并将其限制为所需的CPU使用率。

3. 使用taskset命令:taskset命令用于将进程绑定到特定的CPU

和CPU集合,可以用于限制一个进程在特定的CPU上运行。

要限制一个用户的CPU使用率,可以使用taskset命令将用户的进程

绑定到一个或多个CPU,从而阻止其在其他CPU上运行。

4. 使用ulimit命令:ulimit命令用于设置用户会话(shell)的资源

限制,包括CPU时间限制。

要限制一个用户的CPU使用率,可以使用ulimit命令将用户的CPU

时间限制设置为一个较小的值。例如,使用命令"ulimit -t 1"将用户的CPU时间限制设置为1秒。

Linux终端中的进程优先级调整命令

Linux终端中的进程优先级调整命令

Linux终端中的进程优先级调整命令在Linux操作系统中,进程是操作系统中最基本的执行单位。不同的进程可能会占用不同的系统资源,并且在系统运行过程中具有不同的重要性和优先级。在某些情况下,我们需要通过调整进程的优先级来控制系统资源的分配和进程的执行顺序。

Linux终端提供了一些命令,可以用于调整进程的优先级。本文将介绍常用的几个命令及其使用方法。

1. nice命令

nice命令用于启动一个命令,并设置其进程优先级。通过设置进程的优先级,我们可以控制进程在系统资源竞争时的执行顺序。

命令格式:

nice [OPTION] [COMMAND [ARG]...]

常用参数:

-值:指定进程的优先级值,范围从-20到+19,值越小,优先级越高

示例:

nice -n 10 ./my_program

上述命令将以优先级10来启动my_program程序。

2. renice命令

renice命令用于修改已经运行的进程的优先级。通过renice命令,我们可以在进程运行过程中动态地调整其优先级。

命令格式:

renice [OPTIONS] <priority> <PID>...

常用参数:

-值:指定新的优先级值,范围从-20到+19,值越小,优先级越高-PID:要修改优先级的进程的进程ID

示例:

renice -n 5 -p 1234

上述命令将进程ID为1234的进程的优先级修改为5。

3. top命令

top命令可以用于实时监控系统的进程状态,并且可以通过交互界面调整进程的优先级。

命令格式:

top

Linux命令行中的进程优先级和调度策略技巧

Linux命令行中的进程优先级和调度策略技巧

Linux命令行中的进程优先级和调度策略技

Linux操作系统以其稳定性和自定义性而闻名,它提供了强大的命令行工具,使用户能够更好地管理系统资源和进程。进程优先级和调度策略是Linux命令行下的重要主题之一,它们决定了系统资源的分配和进程执行的顺序。本文将介绍Linux命令行中的进程优先级和调度策略技巧,旨在帮助读者更好地理解和运用这些概念。

一、进程优先级

在Linux中,每个进程都有一个与之相关的优先级。优先级决定了进程在竞争系统资源时的顺序和权重。Linux中的进程优先级范围从-20到+19,其中-20表示最高优先级,+19表示最低优先级。默认情况下,大多数进程的优先级为0。

通过`nice`命令,我们可以更改进程的优先级。该命令接受一个整数参数,范围为-20到+19,负数值表示更高的优先级,正数值表示更低的优先级。以下是一个更改进程优先级的示例:

```

$ nice -n -5 command

```

这个命令将以较高的优先级运行名为`command`的进程。

另外一个与进程优先级相关的概念是实时进程。实时进程具有较高的优先级,用于处理与时间敏感性有关的任务。通过`chrt`命令,我们可以将进程设置为实时进程。例如,下面的命令将将进程设置为实时进程,并将其优先级设置为99:

```

$ chrt -r 99 command

```

二、进程调度策略

进程调度策略决定了系统如何分配CPU时间片给各个进程。Linux 中有三种主要的进程调度策略:

1. 轮转调度(Round Robin Scheduling):轮转调度是Linux默认的调度策略,通过在所有可运行的进程之间循环分配CPU时间片,以确保公平共享CPU资源。这种策略适用于多任务场景,并确保每个进程都有机会执行。

linux 线程优先级设置方法

linux 线程优先级设置方法

linux 线程优先级设置方法

Linux操作系统中,线程是轻量级的进程,合理设置线程的优先级可以优化系统资源的分配,提高程序的执行效率。本文将详细介绍Linux线程优先级的设置方法。

一、线程优先级概述

在Linux操作系统中,线程优先级通常分为两种:静态优先级和动态优先级。

1.静态优先级:在创建线程时分配的优先级,通常在程序运行过程中不会改变。

2.动态优先级:系统根据线程的运行情况动态调整的优先级,通常与线程的CPU使用时间、等待时间等因素有关。

二、设置线程优先级的方法

1.使用sched_setparam()函数设置静态优先级

函数原型:

```c

int sched_setparam(pid_t pid, const struct sched_param *param);

```

示例代码:

```c

#include <stdio.h>

#include <unistd.h>

#include <sched.h>

#include <pthread.h>

void *thread_function(void *arg) {

// 线程函数代码

}

int main() {

pthread_t tid;

struct sched_param param;

int policy;

// 创建线程

pthread_create(&tid, NULL, thread_function, NULL);

// 获取当前线程的调度策略和优先级

pthread_getschedparam(pthread_self(), &policy, ¶m);

Linux操作系统的进程调度机制

Linux操作系统的进程调度机制

Linux操作系统的进程调度机制进程调度是操作系统中重要的一项功能,它决定了在多个进程同时

运行时的优先级和时间分配。Linux操作系统采用了多种进程调度算法,包括时间片轮转调度算法、优先级调度算法和反馈调度算法,以满足

不同应用场景下的需求。

一、时间片轮转调度算法

时间片轮转调度算法是Linux操作系统中最常用的调度算法之一。

它将CPU时间分为一个个时间片,每个进程在一个时间片内运行,当

时间片用完后,进程被暂停,CPU切换到下一个进程。这种调度算法

公平而高效,保证了各个进程都能有公平的运行时间。

二、优先级调度算法

优先级调度算法是基于进程优先级的调度方法。Linux操作系统中

每个进程都有一个优先级,优先级高的进程会被优先调度执行,而优

先级低的进程会被暂时延迟。优先级调度算法可以确保重要任务的及

时执行,但也可能导致低优先级进程长时间得不到执行,产生“饥饿”

现象。

三、反馈调度算法

反馈调度算法是一种基于进程历史行为的动态调度算法。Linux操

作系统中的反馈调度算法将进程分为多个优先级队列,新创建的进程

首先进入最高优先级队列,如果某个进程的执行时间超过了一个时间

限制,该进程会被降低优先级,放入下一个较低的队列中执行。这种

调度算法可以灵活地根据进程的实际运行情况进行调整,以提高系统

的整体效率。

总结:

Linux操作系统采用了时间片轮转调度算法、优先级调度算法和反

馈调度算法等多种进程调度算法,以满足不同应用场景下的需求。时

间片轮转调度算法保证了各个进程都能有公平的运行时间;优先级调

度算法可以确保重要任务的及时执行;反馈调度算法根据进程的实际

linux进程调度的方法

linux进程调度的方法

linux进程调度的方法

Linux进程调度是操作系统中的重要功能之一,它负责决定在多个进程之间如何分配CPU时间片。进程调度算法的选择对系统的性能和响应时间有着重要的影响。本文将介绍几种常见的Linux进程调度方法。

1. 先来先服务(First-Come, First-Served,FCFS)

FCFS是最简单的调度算法,按照进程到达的先后顺序进行调度。当一个进程执行完毕后,下一个进程将被调度执行。这种方法简单直观,但存在"饥饿"问题,即长时间等待的进程可能得不到执行。

2. 最短作业优先(Shortest Job First,SJF)

SJF调度算法根据进程的执行时间长度来进行调度,执行时间越短的进程优先执行。这种算法可以减少平均等待时间,但需要预知每个进程的执行时间,实际中很难实现。

3. 优先级调度(Priority Scheduling)

优先级调度算法根据进程的优先级来进行调度,优先级较高的进程先执行。可以通过静态优先级或动态优先级来实现。静态优先级在进程创建时确定,而动态优先级在运行时根据进程的行为进行调整。优先级调度可以根据系统需求进行灵活调整,但可能存在优先级反转的问题。

4. 时间片轮转(Round Robin,RR)

时间片轮转是一种基于时间片的调度算法。每个进程被分配一个固定长度的时间片,在该时间片内执行,时间片用完后,进程被挂起,等待下一次调度。时间片轮转可以保证公平性,但可能存在上下文切换开销较大的问题。

5. 多级反馈队列(Multilevel Feedback Queue,MLFQ)

linux 中的进程处理和控制方式

linux 中的进程处理和控制方式

linux 中的进程处理和控制方式Linux 是一种广泛使用的操作系统,它具有强大的进程处理和控

制功能。在 Linux 系统中,进程是进行任务的基本单位,它们可以同

时运行,互相通信,共享资源,因此进程处理和控制是 Linux 系统重

要的组成部分。

Linux 提供了多种方式来处理和控制进程。以下是一些常见的方式:

1. 创建新进程:在 Linux 系统中,可以通过 fork() 系统调用

创建一个新的子进程。子进程是通过复制父进程的内存空间、文件描

述符和其他资源来创建的。这样可以实现并行处理任务,提高系统的

效率。创建新进程时,可以使用 exec() 系统调用来加载一个新的程

序运行。

2. 进程调度:Linux 使用调度器(scheduler)来决定哪个进程

在何时执行。调度算法会根据进程的优先级(priority)和调度策略

来决定进程的执行顺序。常见的调度策略包括先进先出(FIFO)、最

短作业优先(SJF)、轮转(Round Robin)等。通过合理的调度算法,可以提高系统的响应速度和资源利用率。

3. 进程间通信:在 Linux 中,进程之间可以通过多种方式进行

通信。其中最常用的方式是通过管道(pipe)、信号(signal)和共

享内存(shared memory)来进行进程间的数据交换。管道可以实现进

程的单向通信,信号可以用于进程之间的异步通信,而共享内存可以

让多个进程共享同一片内存区域,实现高效的数据交换。

4. 进程控制:Linux 提供了多个命令和系统调用来控制进程的行为。例如,可以使用 ps 命令来查看系统中正在运行的进程,使用

linux setpriority 用法

linux setpriority 用法

linux setpriority 用法

摘要:

1.引言

2.setpriority 命令的作用和用途

3.setpriority 命令的基本语法和参数

4.setpriority 命令的实例操作

5.结论

正文:

【引言】

在Linux 系统中,进程的调度是一个非常重要的环节。系统需要根据进程的优先级来决定各个进程执行的顺序。setpriority 命令就是用来修改进程优先级的一个工具。本文将为大家介绍setpriority 命令的用法和相关知识。

【setpriority 命令的作用和用途】

setpriority 命令用于设置进程的优先级。进程优先级决定了进程在执行时的调度顺序。优先级数值越低,进程的优先级越高。通过调整进程优先级,可以影响进程的执行速度和响应时间。setpriority 命令主要应用于嵌入式Linux 系统、实时系统等领域。

【setpriority 命令的基本语法和参数】

setpriority 命令的基本语法如下:

```

setpriority [options] <priority> <process_id>

```

其中,`<priority>` 是要设置的进程优先级,取值范围为-20(最高优先级)到19(最低优先级)。`<process_id>` 是要修改优先级的进程的ID。

setpriority 命令的主要参数有:

- `-o`,显示详细信息。

- `-p`,指定要修改优先级的进程的进程组。

- `-n`,指定要修改优先级的进程的进程名称。

linux c语言 setpriority方法

linux c语言 setpriority方法

linux c语言 setpriority方法

在Linux系统中,进程的优先级是一个重要的资源调度策略,它决定了系统在面对多个同时运行的进程时,优先处理哪个进程。通过调整进程的优先级,可以影响系统资源的分配,从而实现不同的系统行为。在C语言中,可以使用setpriority()函数来设置进程的优先级。

一、setpriority()函数简介

setpriority()函数是Linux系统中用于设置进程优先级的函数,它接受三个参数:pid、policy和prio。pid表示要设置优先级的进程ID,policy指定了优先级的策略,prio是进程的优先级值。setpriority()函数的作用是将指定进程的优先级设置为指定的值。

二、setpriority()函数的参数说明

1.pid:要设置优先级的进程ID。可以是进程的PID(进程号)或进程组ID (表示一组相似进程的标识符)。

2.policy:指定了优先级的策略,有PRIO_PROCESS(单个进程优先级)、PRIO_IO_HIGHEST(I/O高优先级)、PRIO_IO_RISKY(I/O风险高的优先级)、PRIO_CLASSIC(经典优先级)、PRIO_PROCESS_ANNOTATION(任务注解中的任务等级)和PRIO_PROCESS_RR(轮询式负载均衡的进程优先级)。其中,常用的策略是PRIO_PROCESS。

3.prio:进程的优先级值,范围从-20到20,数值越大表示优先级越高。

三、setpriority()函数的调用方式

setpriority()函数的调用方式很简单,只需要将pid、policy和prio作为参数传递给该函数即可。例如:

C语言中设置进程优先顺序的方法

C语言中设置进程优先顺序的方法

C语言中设置进程优先顺序的方法

在C语言中,可以使用操作系统提供的函数或系统调用来设置进程的

优先级顺序。在大多数操作系统中,进程优先级可以通过设置进程的调度

策略和优先级等属性来实现。

有以下几种方法可以设置进程的优先级顺序:

1. 通过nice函数设置进程的调度优先级:

- nice函数可以增加或降低进程的调度优先级,接受一个整数参数,范围一般是-20到19,负值降低优先级,正值增加优先级,默认为0。

- 调用nice函数可以改变进程的调度优先级,但是范围受到限制,

通常只能调整较小的范围。

2.通过调度策略函数来设置进程的优先级:

- 在Linux系统中,可以使用sched_setscheduler函数来设置进程

的调度策略和优先级。该函数接受一个进程ID、调度策略和优先级作为

参数,可以将进程的优先级设置为较高或较低的值,如FIFO、RR等。

3.使用信号来设置进程的优先级:

-在一些情况下,可以通过发送信号来改变进程的优先级。例如,使

用SIGSTOP和SIGCONT信号可以暂停和恢复进程的执行,从而实现优先级

的切换。

4.创建多个线程并设置线程的优先级:

- 如果在C语言中使用多线程编程,可以使用线程库提供的函数设置

线程的优先级。例如,在POSIX线程库中,可以使用

pthread_setschedparam函数来设置线程的调度策略和优先级。

5.在操作系统层面设置进程的优先级:

- 在一些操作系统中,可以通过操作系统提供的工具或命令行来设置

进程的优先级。例如,Linux系统中的nice命令可以通过命令行参数设

linux nice用法

linux nice用法

linux nice用法

nice是一个用于修改进程优先级的命令,在Linux系统中非常常用。它允许用户使进程以较低的优先级或者更高的优先级运行。

准确回答:可以使用nice命令降低或提高进程的优先级。以下是nice命令的使用方法:

1.降低进程优先级:使用“nice -n”命令,其中-n后跟要降低的优先级值,值范围为-20到19(-20表示最高优先级,19表示最低优先级)。例如,“nice -n 10 command”会将command进程的优先级降低为10。

2.提高进程优先级:使用“nice --”命令,后面跟要提高的优先级值。例如,“nice --10 command”会将command进程的优先级提高为10。

3.显示进程优先级:使用“nice -n”命令,后面不跟任何参数。例如,“nice -n”会显示当前进程的优先级。

拓展:nice命令有时用于调节系统资源的使用。较低的优先级值会使应用程序使用更少的CPU资源,从而在运行时对系统影响较小。较高的优先级值可以确保应用程序优先处理,但可能导致其他进程性能下降。

此外,还有一个相关的命令renice可以用于修改已经在运行的进程的优先级。renice命令的语法为“renice -n新的优先级-p进程ID”,其中新的优先级可以是一个值,也可以使用“-”或“+”符号来调整进程的当前优先级。

总之,nice命令和renice命令在Linux系统中非常有用,可以帮助用户管理进程的优先级和系统资源的分配。

Linux 更改进程的优先级

Linux  更改进程的优先级

Linux 更改进程的优先级

在Linux系统中,各个进程都是具有特定的优先级的,系统在为某个进程分配CPU使用时间时是根据进程的优先级进行判定的。有些进程比较重要,需要先执行,以提高整个程序的执行效率,而有些不太重要的进程,其优先级可以低一些。

通常情况下,大多数用户进程的优先级是相同的,但是可以使用系统提供的某些命令改变进程的优先级。通过执行“ps -l”命令可以查看当前用户进程的优先级,如图43所示。

图43 查看进程的优先级

在上面所示的执行结果中,PRI和NI是两个与进程优先级有关的项。其中,P RI表示进程的优先级,它是由操作系统动态计算的,是实际的进程优先级;NI所表示的是请求进程执行优先级,它可由进程拥有者或者超级用户进行设置,会影响到实际的进程优先级。下面介绍两个可以改变进程优先级的命令。

1.nice命令

nice命令的使用是在启动进程时指定请求进程执行优先级。语法格式如下所示:

该命令较常用的一个选项是“-n”,n值(即NI值)的范围是从-20到19。-20代表最高的NI优先级,19代表最低的NI优先级。如果没有该参数,将自动设置NI值为10。默认情况下,只有超级用户才有权提高请求进程的优先级,而普通用户只能降低请求进程的优先级。

例如,以前台运行方式启动vim进程,并配合使用nice命令将vim进程的请求优先级设置为-16。再使用“ps –l”命令查看设置结果,如图44所示。

图44 nice命令

2.renice命令

renice命令的作用是在进程执行时更改它的NI值,可以通过命令名、PID或者进程所有者名指定进程。语法格式如下所示:

Linux命令行中的进程调度和优先级设置技巧

Linux命令行中的进程调度和优先级设置技巧

Linux命令行中的进程调度和优先级设置技

一、引言

在Linux系统中,进程调度和优先级设置是提高系统性能和资源管理的重要手段。通过合理分配进程的CPU时间片和优先级,可以有效提高系统的响应速度和资源利用率。本文将介绍Linux命令行中的进程调度和优先级设置技巧。

二、进程调度技巧

1. 查看进程列表

通过使用ps命令,可以查看系统中运行的所有进程及其状态。例如,输入以下命令:

```

ps -ef

```

该命令将列出所有进程的详细信息,包括进程ID、父进程ID、状态等。

2. 杀死进程

如果某个进程出现问题或者需要终止运行,可以使用kill命令进行进程终止。例如,输入以下命令:

```

kill 进程ID

```

其中,进程ID为需要终止的进程的标识符。

3. 修改进程优先级

在Linux中,可以使用nice命令或renice命令来调整进程的优先级。优先级范围从-20到19,-20表示最高优先级,19表示最低优先级。

- 使用nice命令

nice命令可以在启动新进程时设置其优先级。例如,输入以下命令:```

nice -n 10 command

```

其中,-n 10表示设置新进程的优先级为10。

- 使用renice命令

renice命令可以修改已经运行的进程的优先级。例如,输入以下命令:

```

renice 10 进程ID

```

该命令将进程ID为进程ID的进程的优先级设置为10。

4. 实时进程调度

Linux系统支持实时进程调度,可以通过使用chrt命令设置进程为实时进程。例如,输入以下命令:

```

chrt -r 99 command

Linux命令高级技巧使用nice命令调整进程的优先级

Linux命令高级技巧使用nice命令调整进程的优先级

Linux命令高级技巧使用nice命令调整进程

的优先级

在Linux系统中,进程的优先级决定了它在系统资源分配中的重要

程度。如果某一个进程的优先级较高,它将会被系统更多地分配资源,从而提高其执行效率。而对于一些需要高性能的任务,我们可以通过

使用nice命令,来调整进程的优先级,以确保其能够得到更多的系统

资源。

一、了解nice命令的基本用法

nice命令是Linux系统中用来调整进程优先级的命令。

1. 语法

nice [OPTION] [COMMAND [ARG]...]

2. 选项说明

-n, --adjustment=N 设置进程的优先级,N的取值范围是-20至19,默认值为10

3. 示例

1) 提高进程的优先级

nice -n -5 command_name

上述命令将进程command_name的优先级提高5个等级。

2) 降低进程的优先级

nice -n 5 command_name

上述命令将进程command_name的优先级降低5个等级。

二、使用nice命令调整进程优先级的实际应用

1. 提高CPU密集型任务的优先级

对于CPU密集型任务,我们可以通过使用nice命令提高其优先级,确保其尽可能地占用更多的CPU资源,从而提高任务的执行效率。

例如,我们有一个正在执行的处理大量数据的程序command1,该

程序占用了大量的CPU资源。我们可以使用nice命令将其优先级提高,使其得到更多的CPU资源。

下面是相关的命令示例:

```

nice -n -5 command1

```

2. 降低IO密集型任务的优先级

linux setpriority 用法 -回复

linux setpriority 用法 -回复

linux setpriority 用法-回复

Linux setpriority是一个系统调用函数,用于设置进程的优先级。优先级决定了进程在系统资源分配中的相对重要性,高优先级的进程会获得更多的CPU时间,确保其能够及时响应用户的请求。本文将详细介绍setpriority函数的用法,并提供一步一步的指导,使读者能够充分了解如何正确使用setpriority函数。

1. 确定进程ID

在开始之前,我们需要确定要设置优先级的进程的进程ID。可以使用命令`ps -ef`来列出当前运行的所有进程,通过查看输出结果,找到要设置优先级的进程的PID。

2. 包含头文件

在程序中,我们需要包含头文件`<sys/resource.h>`,该头文件中包含了setpriority函数的声明。

3. 设置进程优先级

调用setpriority函数时,需要传入三个参数,分别是`which`、`who`和`priority`。

- `which`参数用于指定进程的类型,有三个取值:PRIO_PROCESS、PRIO_PGRP和PRIO_USER。其中PRIO_PROCESS表示根据进程ID确定进程,PRIO_PGRP表示根据进程组ID确定进程,PRIO_USER表示根

据用户ID确定进程。

- `who`参数用于指定进程的ID,根据`which`参数的取值不同,`who`参数的含义也有所不同。

- `priority`参数用于设置进程的优先级,取值范围为-20到19,其中-20表示最高优先级,19表示最低优先级。

下面是一个使用setpriority函数设置进程优先级的示例代码:

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Linux内核之进程优先级

作者:harvey wang

邮箱:harvey.perfect@

新浪博客地址:/harveyperfect,有关于减肥和学习英语相关的博文,欢迎交流

注:本文参考的内核代码版本为3.3.5

在进程控制块定义中,如下,每个进程有4个优先级成员变量,往往给初学者造成一些困惑。下面分实时进程和普通进程看看他们都用了哪些优先级?

struct task_struct{ 删除了无关的成员变量

int prio, static_prio, normal_prio;

unsigned int rt_priority;

}

实时进程的优先级

在调用函数sched_setscheduler()设置实时进程优先级时,最终调用了下面的函数

其中进程的rt_priority 就等于配置给进程的优先级,而进程的normal_prio=MAX_RT_PRIO-1 - p->rt_priority; p->prio =p->normal_prio; 即prio和normal_prio都与rt_priority成反比。

我们知道,在调度时使用了prio,其数值0对应最高优先级,99为最低实时优先级。Prio 和normal_prio 数值越大优先级越小,而rt_priority的数值越大优先级越大。

这就是为什么有人说实时进程优先级数值越小优先级越高,也有人说实时进程优先级数值越大优先级越高的原因。

另外,实时进程只是用了四个优先级变量中的三个(prio、normal_prio和rt_priority),

而没有使用static_prio。

普通进程

在调用接口set_user_nice()设置普通进程的优先级时,读者可以自己顺着函数set_user_nice()查看下面的关系。

p->static_prio = NICE_TO_PRIO(nice);

p->prio = effective_prio(p); 即p->prio = p->static_prio;

p->normal_prio = p->static_prio 参见函数effective_prio(p);

结论是:非实时进程的static_prio、prio和normal_prio 一直保持相同。

另外,从函数effective_prio()来看,非实时进程的动态优先级等于其静态优先级。内核不再动态修改其优先级。

相关文档
最新文档