- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验指导书14
操 作 系 统
实
验
指
导
书
信息工程学院
计算机系
实验报告要求
实验报告应包含以下内容:
(1)实验题目
(2 )实验目的
(3 )实验环境
(4 )实验内容
(5 )实验步骤
(6 )出现的问题及对问题的解决方案
(7 )实验结果与结果分析 (包括运行界面截图、结果界面截图等)
(8 )实验总结
实验1. 进程调度算法
1 实验目的
1. 掌握Linux2.6 调度算法的原理与实现。
2. 能够根据要求修改Linux2.6 调度算法。
3. 对Linux 核心进行编译。
4. 通过实验进一步熟悉操作系统的原理。
2 实验学时
2 学时
3 实验内容
首先了解Linux 系统的进程结构和调度原理,然后把Linux2.6 的调度算法修
改成为随机调度算法。最后对修改的调度算法进行编译,并使用新内核替换老内
核。
4 Linux 调度分析
PCB 结构
V2.6 内核中,进程描述符task_struct(PCB)主要含有如下与调度有关的成员:
① policy :进程调度策略,有以下3 种类型:
·SCHED_NORMAL 非实时进程。
·SCHED_FIFO 实时进程,采用先进先出的调度算法。
·SCHED_RR 实时进程,采用轮转法。
② rt_priority :实时进程的优先级。MAX_RT_PRIO 定义为 100,故其
rt_priority 范围为0~99,且不参与优先级计算。
③ static_prio:非实时进程静态优先级。由nice 值转换而来,nice 值为-20~
19,公式static_prio=MAX_RT_PRIO+nice-20,故其范围为100~139。
④ sleep_avg:进程平均等待时间。相当于进程等待时间与运行时间的差值,
既反映该进程的交互程度,又表示进程需要运行的紧迫程度,该值越大,算出来
的数据越小,进程的优先级就越高。
⑤ prio :进程动态优先级。在进程运行过程中动态计算,主要影响因素为
sleep_avg 。创建时子进程继承父进程的动态优先级、唤醒等待进程时对它进行优
先级修正、时钟中断中重新计算进程优先级并进入相应队列、负载平衡/修改nice
值/修改等待策略(setscheduler())都有可能改变进程动态优先级。
1
⑥ prio_array_t*array :进程优先级数组。以进程优先级为序号排列。
⑦ time_slice :进程时间片余额。进程默认时间片与static_prio 有关,内核
将 100~139 优先级映射为800ms~5ms 的时间片区间。
⑧ load_weight :平衡负载用的权重。解决可运行队列出现的负载不均现象。
⑨ CONFIG_PREEMPT :内核可剥夺编译选项,当该开关开启时,v2.6 内
核将会在更多内核安全点上检测TIF_NEED_RESCHED 位,从而让刚被唤醒的
高优先级进程减少延迟而尽快获得CPU 运行。
运行队列
Linux2.6 的调度算法称为Ο(1)算法,不论就绪进程与CPU 的个数多少,调
度程序的调度开销总是恒定的常数。每个CPU 都有一个运行队列(runqueue),它是
给定CPU 上的可执行进程的链表,每个就绪进程都唯一归属于一个运行队列。
此外,运行队列中还包含每个CPU 的调度信息,运行队列的定义如下:
struct runqueue{
spinlock_t lock; /*本CPU 上的运行队列自旋锁*/
unsigned long nr_runni
文档评论(0)