进程时间片的分配(优先级设定)

时间:2021-10-07 19:24:41

系统对不同进程所分配的CPU时间的多少主要由进程的优先级决定。每一个进程都有自己的优先级都有自己的优先级。静态优先级高的进程会抢占低的进程。对优先级为0的进程将依照其动态优先级来分配运行时间,优先级的值越小,优先权越高。但是对进程执行一定的操作就可以改变其动态优先级。

其操作如下:

#inclde<unistd.h>

int nice(int inc);

#include<sys/time.h>

#include<sys/resouce.h>

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

int getpriority(int which,int eho);

#include<sched.h>

int sched_set_priority_max(int policy);//获取由policy指定的调度策略下优先级的最大值

int sched_set_priority_min(int policy);//获取最小值


int nice(int inc) 改变进程的动态优先级。调用此函数的进程,优先级将被加上参数inc所设的值,inc为正时优先级降低,反之...

root用户调用nice时,inc的值才可以为负。(调用成功时,返回值为0,失败时为-1,将其返回值存放在errno内)

setpriority 设置进程/进程组或用户的动态优先级。

getpriority 获取

which 用于指定所做操作的对象

who 指定函数所要设置优先级的进程

prio 指定进程优先级

调用setpriority成功时,返回值为0,失败时为-1;

调用getpriority成功时,返回值为所有匹配的进程中优先级最小的值,失败时,返回值为-1。


whiich取值

PRIO_PROCESS 设置进程的动态优先级

PRIO_PGRP 设置进程组的动态优先级

PRIO_USER 设置用户的动态优先级


调用getpriority函数时,其返回值是进程的优先级,而一个进程的优先级可能为-1,所以调用getpriority时,如果返回值为-1,并不表示函数的调用失败,需要根据errno的值来确定,所以调用getpriority函数前,应该将errno的值清楚,调用完毕后检查errno的值是否成功。