免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: zhangyuxiu
打印 上一主题 下一主题

[进程管理] 实时进程可以转化为普通进程吗 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2014-02-17 17:48 |只看该作者
回复 10# zhangyuxiu
你可以自己在linux机器上做实验,用ps -elcf去观察对应线程的调度策略及优先级的变化


   

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
12 [报告]
发表于 2014-02-18 08:23 |只看该作者
呵呵,还真有,学习了~

论坛徽章:
0
13 [报告]
发表于 2014-02-18 09:43 |只看该作者
回复 11# junnyg


    你好,我亲身测试时有一处疑问。
   
    测试过程:
    1. 在main函数中,获得当前进程的调度策略(old_scheduler_policy=sched_getscheduler(getpid())),其值为0,表示是普通进程,调度策略为SCHED_OTHER.
    2. 利用ps -elcf | grep 上述进程的pid  发现PRI列值为19。
   
    问题:
    普通进程的优先级范围不是[100,139]么,但是上述进程优先级是19,不是实时进程么?

论坛徽章:
0
14 [报告]
发表于 2014-02-18 12:32 |只看该作者
linux 进程的优先级不是[-20, 19]么?怎么出来了个100多?

论坛徽章:
0
15 [报告]
发表于 2014-02-18 13:50 |只看该作者
回复 14# jasonsungblog


    [-20,19]是nice值的表示。
    网上搜到的说法:
    Linux进程的静态优先级。静态优先级分为两个范围:0~99是实时进程的静态优先级(值越大优先级越高),100~139是普通进程的静态优先级(通过nice值表示,-20~19,值越大优先级越低)。

论坛徽章:
0
16 [报告]
发表于 2014-02-18 17:53 |只看该作者
哦,sorry。那是我搞混淆了

论坛徽章:
15
射手座
日期:2014-02-26 13:45:082015年迎新春徽章
日期:2015-03-04 09:54:452015年辞旧岁徽章
日期:2015-03-03 16:54:15羊年新春福章
日期:2015-02-26 08:47:552015年亚洲杯之卡塔尔
日期:2015-02-03 08:33:45射手座
日期:2014-12-31 08:36:51水瓶座
日期:2014-06-04 08:33:52天蝎座
日期:2014-05-14 14:30:41天秤座
日期:2014-04-21 08:37:08处女座
日期:2014-04-18 16:57:05戌狗
日期:2014-04-04 12:21:33技术图书徽章
日期:2014-03-25 09:00:29
17 [报告]
发表于 2014-02-19 08:40 |只看该作者
计算方法和理解不同。

论坛徽章:
0
18 [报告]
发表于 2014-02-21 10:55 |只看该作者
回复 10# zhangyuxiu


應該是都可以互轉吧
對scheduler來說,當要去挑pick_next_task()時
他會把所有的sched class都掃過
只差於該task是在哪一個sched class所挑出來

   

论坛徽章:
0
19 [报告]
发表于 2014-02-21 11:13 |只看该作者
回复 18# wth0722

恩,是可以互相转换的,我已经验证过了。

总结如下:
1. 可以相互转换。
设置调度策略的函数为:
int sched_setscheduler (pid_t pid, int policy, const struct sched_param *sp);
注意:
1)如果优先级设置的值和调度策略不符合,会返回失败。
policy: SCHED_OTHER(0), SCHED_FIFO(1), SCHED_RR(2)   sp->sched_priority的值: 0 (普通进程), [1,99] (实时进程)
2)创建实时进程需要root权限。

2.验证源码如下:
#include <sched.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
int main() {
int rc,old_scheduler_policy;
struct sched_param my_params;

// 1. 普通进程转换为实时进程
old_scheduler_policy=sched_getscheduler(getpid());     
my_params.sched_priority=1;                // 设置转化后的实时进程的优先级
printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to change the current scheduler and priority to SCHED_RR\n");
getchar();
rc=sched_setscheduler(getpid(),SCHED_RR,&my_params);    // 将普通进程转换为实时进程
if(rc<0)  {       
        perror("sched_setscheduler to SCHED_RR error");
        exit(0);
}
 
// 2. 实时进程内部调度策略相互转化,由SCHED_RR -> SCHED_FIFO
old_scheduler_policy=sched_getscheduler(getpid());
printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to change the current scheduler and priority to SCHED_FIFO\n");
getchar();
rc=sched_setscheduler(getpid(),SCHED_FIFO,&my_params);    // 由SCHED_RR转换为SCHED_FIFO
if(rc<0)   {
        perror("sched_setscheduler to SCHED_FIFO error");       
        exit(0);
}

// 3. 实时进程转化为普通进程
old_scheduler_policy=sched_getscheduler(getpid());     
my_params.sched_priority=0;                // 设置转化后的普通进程的优先级
printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to change the current scheduler and priority to SCHED_OTHER.\n");
getchar();
rc=sched_setscheduler(getpid(),SCHED_OTHER,&my_params);    // 将实时进程转换为普通进程
if(rc<0) {   
perror("sched_setscheduler to SCHED_OTHER error");   
exit(0);
}
 
old_scheduler_policy=sched_getscheduler(getpid());
printf("the current scheduler = %d \n",old_scheduler_policy);
printf("press any key to exit\n");
getchar();
return 0;
}


    3. 这个问题自己也琢磨了一段时间,把验证过程贴上,期望疑问的人可以少走弯路。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP