Linux内核的三种调度策略

一 Linux内核的三种调度策略:  

1,SCHED_OTHER 分时调度策略,

2,SCHED_FIFO实时调度策略,先到先服务。一旦占用cpu则一直运行。一直运行直到有更高优先级任务到达或自己放弃

3,SCHED_RR实时调度策略,时间片轮转。当进程的时间片用完,系统将重新分配时间片,并置于就绪队列尾。放在队列尾保证了所有具有相同优先级的RR任务的调度公平 Linux线程优先级设置

SCHED_OTHER 是不支持优先级使用的,而SCHED_FIFO和SCHED_RR支持优先级的使用,他们分别为1和99,数值越大优先级越高。如果程序控制线程的优先级,一般是用pthread_attr_getschedpolicy来获取系统使用的调度策略,如果是 SCHED_OTHER的话,表明当前策略不支持线程优先级的使用,否则可以。

优先级范围的获得

所设定的优先级范围必须在最大和最小值之间。

int sched_get_priority_max(int policy);

int sched_get_priority_min(int policy);

  三  设置和获取优先级通过以下两个函数 

int pthread_attr_setschedparam(pthread_attr_t *attr, const struct sched_param *param);

int pthread_attr_getschedparam(const pthread_attr_t *attr, struct sched_param *param);

param.sched_priority = 51; //设置优先级

更改系统优先级初始值

系统创建线程时,默认的线程是SCHED_OTHER。所以如果我们要改变线程的调度策略的话,

可以通过下面的这个函数实现。

int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

上面的param使用了下面的这个数据结构:

struct sched_param {

int __sched_priority; //所要设定的线程优先级

};

例:创建优先级为10的线程
pthread_attr_t   attr;  
struct   sched_param  
param;  
pthread_attr_init(&attr);  
pthread_attr_setschedpolicy(&attr,  
SCHED_RR);  
param.sched_priority   =  
10;  
pthread_attr_setschedparam(&attr,  
&param);  
pthread_create(xxx   ,  
&attr   ,   xxx   ,   xxx);  
例:设置最高优先级

pthread_attr_t attr;

struct sched_param  param;

pthread_t  thread = pthread_self();//当前程序线程号

int rs = pthread_attr_init( &attr );

assert(
rs == 0 );

pthread_attr_setschedpolicy(&attr,SCHED_FIFO);//设置线程调度策略

param.sched_priority   = 
sched_get_priority_max(SCHED_FIFO); //优先级设定

rs = pthread_attr_setschedparam(
&attr,  &param );//设置和获取schedparam属性pthread_attr_destroy(&attr);

编译

编译命令:

#g++
pthread_priority3.c -o pthread_priority3 -lpthread

否则,会有如下错误
/tmp/cc21HcoW.o(.text+0x4c): In function `main‘:
: undefined reference to `pthread_create‘
collect2: ld returned 1 exit status
可以看出是在ld的时候系统无法找到pthread_create函数。也就是说编译器在link得时候找不到其中的一个使用库的函数。
如果差pthread_create的话可以发现其在pthread.so中,所以需要增加
-lpthread编译参数,告诉linker在link的时候使用pthread模块

Linux内核的三种调度策略

时间: 2024-11-10 12:19:58

Linux内核的三种调度策略的相关文章

操作系统 linux 内核的三种进程调度方法

1,SCHED_OTHER 分时调度策略: 2,SCHED_FIFO 实时调度策略,先到先服务: 3,SCHED_RR 实时调度策略,时间片轮转 . 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,nice越小,counter越大,被调度的概率越大,也就是曾经使用了 cpu 最少的进程将会得到优先调度. SHCED_RR 和 SCHED_FIFO 的不同: 当采用 SHCED_RR 策略的进程的时间片用完,系统将重新分配时间片,并置于

转载:Linux的vim三种模式

一般模式:在Linux终端中输入“vim 文件名”就进入了一般模式,但不能输入文字. 编辑模式:在一般模式下按i就会进入编辑模式,此时就可以写程式,按Esc可回到一般模式. 命令模式:在一般模式下按:就会进入命令模式,左下角会有一个冒号出现,此时可以敲入命令并执行. 转载网址:http://anxiongbo.blog.51cto.com/805770/163582 一. VIM高亮 进入vim后,在普通模式下输入如下命令,开启php代码高亮显示 :syntax enable :source $

Linux虚拟机的三种网络连接方式

Linux虚拟机的三种网络连接方式 虚拟机网络模式 无论是vmware,virtual box,virtual pc等虚拟机软件,一般来说,虚拟机有三种网络模式: 1.桥接 2.NAT 3.Host-Only 桥接 桥接网络是指本地物理网卡和虚拟网卡通过VMnet0虚拟交换机进行桥接,物理网卡和虚拟网卡在拓扑图上处于同等地位,那么物理网卡和虚拟网卡就相当于处于同一个网段,虚拟交换机就相当于一台现实网络中的交换机,所以两个网卡的IP地址也要设置为同一网段. 所以当我们要在局域网使用虚拟机,对局域网

Linux更新内核的三种方法

Centos内核升级的三种方法 在基于CentOS平台的工作过程中,难免有时需要升级或者降级内核以验证功能.调试性能或者更新整个系统.如果从头重新编译一个内核,由于现在内核特性越来越复杂,依赖的库或者工具也不少,加之重新编译耗时不菲,了解更新内核的多种方式就显得尤为必要.下面根据笔者最近的工作,总结了三种方法,供大家参考. 方法一 如果机器不能联网,可以下载现有内核包到本地机器,直接在本地更新 1.从http://ftp.scientificlinux.org/linux/scientific/

(笔记)Linux内核学习(三)之进程调度

进程调度: 在可运行态进程之间分配有限处理器时间资源的内核子系统. 一 调度策略 1 进程类型 I/O消耗型进程:大部分时间用来提交I/O请求或是等待I/O请求,经常处于可运行状态,但运行时间短,等待请求过程时处于阻塞状态.如交互式程序. 处理器消耗型进程:时间大都用在执行代码上,除非被抢占否则一直不停的运行. 综合型:既是I/O消耗型又是处理器消耗型. 调度策略要在:进程响应迅速(响应时间短)和最大系统利用率(高吞吐量)之间寻找平衡. 2 调度概念 优先级:基于进程价值和对处理器时间需求进行进

linux文件的三种时间

我个人的linux系统使用的是ubuntu 一.linux的文件时间分为三种: 1).文件最近内容修改时间--mtime 2).文件最近权限和属性修改时间--ctime 3).文件最近被访问时间--atime 二. 打开vm,运行linux系统,在工作目录底使用touch命令创建一个文件,如图: 测试当前系统时间 使用$date 命令 如图: 同时说一下,系统的时间更改 $ date -d YY/mm/dd  更改系统的日期 $ date -s HH:mm:ss  更改系统的时间 可能会报错,如

Linux文件的三种特殊权限SUID、SGID、STICKY

三种特殊的文件系统格式: 1>. SUID 作用对象: 只能作用在二进制的可执行文件,也就是说它本身运行起来就是一个进程. 效果: 没有suid权限的二进制文件, 能否执行取决于当前用户有无对该文件执行权限, 执行之后,进程的拥有者也是当前系统用户. 被服务suid后, 当文件被运行后, 进程的拥有者不是系统当前的用户, 而是文件的所属者. 命令: chmod u+s 文件 2>. SGID SGID权限分为两种情况, 分别为作用在文件上, 作用在目录上. a>. 作用在文件上, 一旦一

Linux之vi三种模式常用操作

vi的三种模式:命令模式.编辑模式.尾行模式 一.命令模式 1.光标移动 a.字符级 左(h) 下(j) 上(k) 右(l) b.单词级 w word移动到下个单词首字母 b before上个单词首字母 e end下个单词结尾 c.行级 0 行首 $ 行尾 d.段落级{ 上  } 下(没必要记忆) e.屏幕级 H屏首 L屏尾(没必要记忆) f.文档级 G 文档尾部 nG 文档第n行 gg 文档第一行 crtl+f  <--> pagedown向下翻页 crtl+b <--> pag

linux 网络管理的三种方式

修改网络IP的三种方式 1.修改配置文件 1.1dhcp自动获取 配置文件地址/etc/sysconfig/network-scripts TYPE=Ethernet  #类型=以太网 PROXY_METHOD=none #代理模式 无 BROWSER_ONLY=no #不仅限于预览器 BOOTPROTO=dhcp  #获取IP方式为dhcp DEFROUTE=yes  #默认路由器 IPV4_FAILURE_FATAL=no #如果同时启用了IPv4和IPv6配置,则激活设备的IPv4配置失败