免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1831 | 回复: 2

[内核入门] 关于Linux非实时进程执行机会的疑问 [复制链接]

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2015-12-09 09:55 |显示全部楼层
本帖最后由 _nosay 于 2015-12-17 15:45 编辑

《Linux内核源代码情景分析》“4.6进程的调度与切换”一节,对于进程的调度策略,有如下疑问,希望好心人帮助解答:


1. 《Linux内核源代码情景分析》372页:“由于实时进程的权值有个很大的基数,当有实时进程就绪时非实时进程是没有机会运行的”。
这样的话,如果系统中一直有实时进程在运行,那非实时进程不就“卡死”了吗?虽然对非实时进程的时间要求不高,但至少可以结束呀。是我对“实时”这个概念理解的不对吗

《深入理解linux内核》(第三中文版)里面举了例子:
交互式进程:shell、文本编辑程序、图形应用程序;
批处理进程:编译器程序、数据库搜索引擎及科学计算;
实时进程:音频/视频应用程序、机器人控制程序、数据采集程序。
这里的交互式进程、批处理进程、实时进程,应该会分别使用 SCHED_FIFO、SCHED_OTHER、SCHED_RR 调度策略吧?那我如果正在听歌,想编译个程序,就必须把音乐播放器关掉吗(你不会真的回答这个问题吧 ),请问编译器为什么就非实时了,那又如何理解“当有实时进程就绪时非实时进程是没有机会运行的”?

2. SCHED_OTHER、SCHED_FIFO、SCHED_RR 判别
Linux2.4.0的代码中,只搜索到md_thread()函数中有一行“current->policy = SCHED_OTHER”,并没有搜到“current->policy = SCHED_RR”、“current->policy = SCHED_FIFO”,那调度策略不是内核自己判别的吗?
虽然内核提供了sched_setscheduler()系统调用,用户进程可以设置自己的调度策略,那平时自己写代码,以及网上那么多开源代码,几乎不调用这个函数呀,大多数用户程序开发程序员,可能听都没听说过“调度策略”,内核如果自己不判断,怎么保证进程使用合适的调度策略,怎么能合理调度?另外,这个函数的实现在哪?只在syscall.S的系统调用表里搜到“ENTRY_SAME(sched_setscheduler)”

总结:
1. 适合进程的调度策略,内核是否可以判别,如何判别?
2. 死循环的高优先级进程,是否会导致低优先级进程“卡死”?

http: //blog.chinaunix.net/uid-24774106-id-3372932.html
http: //blog.chinaunix.net/uid-24774106-id-3379478.html

论坛徽章:
20
程序设计版块每日发帖之星
日期:2015-08-17 06:20:00程序设计版块每日发帖之星
日期:2016-07-16 06:20:00程序设计版块每日发帖之星
日期:2016-07-18 06:20:00每日论坛发贴之星
日期:2016-07-18 06:20:00黑曼巴
日期:2016-12-26 16:00:3215-16赛季CBA联赛之江苏
日期:2017-06-26 11:05:5615-16赛季CBA联赛之上海
日期:2017-07-21 18:12:5015-16赛季CBA联赛之青岛
日期:2017-09-04 17:32:0515-16赛季CBA联赛之吉林
日期:2018-03-26 10:02:16程序设计版块每日发帖之星
日期:2016-07-15 06:20:0015-16赛季CBA联赛之江苏
日期:2016-07-07 18:37:512015亚冠之萨济拖拉机
日期:2015-08-17 12:21:08
发表于 2015-12-14 17:27 |显示全部楼层
如果只有一个core,如果有rt实时进程在run,根本就没有机会在shell里启动新的普通进程。

不过高版本的内核调度器里有个参数,可以限定rt进程的运行时间,不至于完全挤压非rt进程。

论坛徽章:
13
15-16赛季CBA联赛之八一
日期:2016-07-08 21:00:1415-16赛季CBA联赛之同曦
日期:2017-02-15 14:26:1515-16赛季CBA联赛之佛山
日期:2017-02-20 14:19:2615-16赛季CBA联赛之青岛
日期:2017-05-07 16:49:1115-16赛季CBA联赛之广夏
日期:2017-07-30 09:13:1215-16赛季CBA联赛之广东
日期:2018-07-05 22:34:3615-16赛季CBA联赛之江苏
日期:2018-09-03 12:10:2115-16赛季CBA联赛之上海
日期:2018-09-25 03:49:2215-16赛季CBA联赛之广东
日期:2018-09-25 04:09:12
发表于 2015-12-15 08:57 |显示全部楼层
本帖最后由 _nosay 于 2015-12-15 09:12 编辑
nswcfd 发表于 2015-12-14 17:27
如果只有一个core,如果有rt实时进程在run,根本就没有机会在shell里启动新的普通进程。

不过高版本的内 ...


一个进程到底是用户交互进程,还是批处理进程,还是实时进程,不是内核动态判断出来的吗?虽然内核提供了设置调度策略的系统调用,但平时我们写程序,也不怎么用呀。

《深入理解linux内核》(第三中文版)里面举了例子:
交互式进程:shell、文本编辑程序、图形应用程序;
批处理进程:编译程序、数据库搜索引擎及科学计算;
实时进程:音频/视频应用程序、机器人控制程序、数据采集程序。

为什么编译程序运行之后属于批处理进程?那为什么我平时一边听歌,一边可以编译程序?按道理在实时进程结束之前,批处理进程优先级低,是没有机会得到执行的呀

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP