采用最低松弛度优先调度的实时系统调度程序.docx

上传人:b****6 文档编号:3194273 上传时间:2022-11-20 格式:DOCX 页数:28 大小:332.98KB
下载 相关 举报
采用最低松弛度优先调度的实时系统调度程序.docx_第1页
第1页 / 共28页
采用最低松弛度优先调度的实时系统调度程序.docx_第2页
第2页 / 共28页
采用最低松弛度优先调度的实时系统调度程序.docx_第3页
第3页 / 共28页
采用最低松弛度优先调度的实时系统调度程序.docx_第4页
第4页 / 共28页
采用最低松弛度优先调度的实时系统调度程序.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

采用最低松弛度优先调度的实时系统调度程序.docx

《采用最低松弛度优先调度的实时系统调度程序.docx》由会员分享,可在线阅读,更多相关《采用最低松弛度优先调度的实时系统调度程序.docx(28页珍藏版)》请在冰豆网上搜索。

采用最低松弛度优先调度的实时系统调度程序.docx

采用最低松弛度优先调度的实时系统调度程序

 

操作系统课程设计报告

 

院(系):

计算机工程学院

专业:

网络工程

学生姓名:

  

班级:

_______ 学号:

   

题目:

采用最低松弛度优先调度的实时系统调度程序

起迄日期:

____  

设计地点:

计算机工程学院机房  

指导教师:

 

2012—2013年度第2学期

完成日期:

2013年7月19日

一、课程设计目的

由于在实时系统中都存在着若干个实时进程或任务,它们用来反应或控制某个外部事件,往往带有某种程序的紧迫性,因此采用一种新的调度:

实时调度才能实现合理合法的调度。

而最低松弛度优先,是一种抢占式的实时调度,根据任务的松弛程度来确定任务的优先级。

任务的松弛度愈低,愈优先执行。

通过实现利用最低松弛度对作业进行调度的模拟,我可以清楚的了解操作系统的相关任务调度原理和操作系统的任务调度过程。

此次的课程设计让我对该调度算法有了更加深入的理解同时对以编程实现该算法和可视化编程有了更深一步的了解和巩固。

二、课程设计内容与要求

1、在实时系统中,要保证在指定的时间完成指定的任务,通常会采用抢占式的调度方式。

要求采用指定的调度算法,使系统中的任务能够按时完成,通过观察中系统中的抢占点,以巩固和加深对实时系统调度算法的理解。

2、设计要求:

1)每一个周期性实时任务必须指定周期长度与执行时间。

2)可以在界面安排周期性实时任务的个数与相关的指标值,又及要求仿真的时间长度。

3)

系统可又对设定的任务条件进行检查,如果无法满足公式的要求,则弹出相应的错误提示,并重新进入任务安排界面。

4)可读取样例数据(要求存放在外部文件中)进行周期性实时任务数、周期长度、执行时间的初始化。

5)采用可视化界面,数据载入后按最低松弛度算法进行调度,可以在运行中动态显示各进程的状态:

就绪、执行、完成。

6)系统上下文切换时,会暂停调度,显示就绪队列中各任务的松弛度,按任意键后自动运行。

7)具有一定的数据容错性。

三、系统分析与设计

1、系统分析

在系统中,通过界面输入或文件读取来向系统录入数据,由输入各个任务的相关信息来计算出最低松弛度。

对于每一个任务,当最低松弛度减小到零时便开始抢占处理机,对于多个任务最低松弛度相同的情况下,采用先来先服务的辅助调度算法。

最后动态显示运行的实时结果,从而直观的表现出采用最低松弛度调度算法的工作原理和调度过程。

(1)信息:

输入信息为任务总数,仿真时间,各任务编号,周期时间,和运行时间。

输出信息为各任务的开始时间,结束时间,运行次数,当前状态,任务当前松弛度,以及当前任务还需运行时间。

(2)行为:

系统通过调用,动态显示各个实时任务的最低松弛度。

当某个实时任务的最低松弛度=0的时候,则抢占执行。

当多个实时任务的最低松弛度各不相等时,则予以该实时任务正常执行,而无需抢占。

当多个实时任务的最低松弛度相等时,则采用先来先服务的方式执行。

执行结果动态的显示在各个表格中,清楚的展现接下来该调度哪个实时任务,等待调度的实时任务有哪些和完成目前周期的实时任务有哪些。

(3)表示:

程序运行期间的显示布局如下图所示:

 

选择数据输入方式,包括文件读取和界面输入

界面键入总任务信息和各任务详细信息

控制按钮,包括开始,结束,暂停,终止,退出

系统信息(当前时间)和提示上下文切换

动态显示运行过程,包括就绪,完成,执行

2、系统设计:

概要设计:

(1)输入模块:

用户处方选择文件读取和界面输入,文件读取仅要求用户选定相关文件,前提是编程者事先存储符合要求的信息。

界面输入要求用户输入正确的总任务信息和各个任务的详细信息,系统也将检查信息的合法性才予以调度。

(2)算法模块:

调度算法模块主要设计出根据最低松弛度进行调度的算法,以及予以任务抢占时的条件和调度过程

(3)输出模块:

用列表控件动态显示各个任务的就绪,执行,完成列表的属性信息。

(4)任务合法性检查模块:

检查提交给系统的任务的周期时间和运行时间是否都大于0,以及周期时间是否都大于运行时间

(5)可调度性检查模块:

检查提交给系统的所有任务是否满足可调度性公式。

(6)运行控制模块:

程序运行时的功能选择和相关控制功能。

2.1、模块设计:

在该系统中,由用户提交给系统总任务信息和各任务的信息,系统将就此检查各任务的合法性,合法则显示在就绪队列,再检查所有任务的可调度性,若可调度则进行演示。

演示的结果将动态显示在就绪,执行,完成的三个列表控件上。

模块调用关系图:

2.2、数据结构说明:

1、每一个任务对应一个work类型的结构体变量

typedefstructwork

{

CStringjob_id;//任务的ID,唯一标志一个任务

intjob_beginTime;//任务的开始时间

intjob_llf;//任务当前低松弛度

CStringjob_state;/任务当前状态

intjob_period;//任务的周期

intjob_runTime;//任务的运行时间

intjob_RneedTime;//任务完成还需的运行时间

intjob_endTime;//任务的结束时间

intjob_flag;//本周期内首次运行标识

intjob_doneTimes;//任务的执行次数

intjob_identify;//任务是否完成的标识

intjob_MissTimes;//任务错过次数

structwork*next;//指向结构体变量work的指针

}work,*POINT_work;

2、由任务排成的队列

typedefstructQNode

{

POINT_workdata;//指向结构体类型数据的数据项指针

structQNode*next;//指向下一个队列元素的指针

}QNode,*POINT_QNode;

typedefstruct{

POINT_QNodefront;//任务队列的对头指针

POINT_QNoderear;//任务队列队尾指针

}Queue;

QueueQon,Qready,Qdone;

//定义三个队列,其中Qon表示正在执行的队列,该队列最多只有一个队列元素,

Qready表示就绪的队列,Qdone表示已经执行完成的队列

程序中用到的对上述数据结构的一些操作:

intInitQueue(Queue&Q)

//构造空队列,成功返回1,否则返回0

voidOrderJob(Queue&Q,POINT_workjob)

//按照低松弛度对进入队列的任务进行排序

intDeleteHead(Queue&Q,POINT_workjob)

//若队列不空,则删除Q的头元素,用job保存,操作成功返回1,否则返回0

voidDestroyQueue(Queue&Q)//销毁一个队列

intQueueEmpty(QueueQ)

//判断队列是否为空若为空则返回1,否则返回0

intGetHeadElem(QueueQ,POINT_workjob)

//取队列的第一个元素的值,成功返回1,否则返回0

intDeleteDefineQueue(Queue&Q,CStringstr,POINT_workjob)

//删除指定任务编号的队列节点,用结构体变量job保存,操作成功返回1,否则返回0

2.3、算法流程图:

(1)控制函数流程图:

(2)检查函数流程图:

 

(3)调度函数流程图:

 

(4)输入函数流程图:

 

四、系统测试与调试分析

1、系统测试

●测试方法:

黑盒

●测试技术:

单元测试、功能测试、

●测试数据:

包括正确的输入及其输出结果和含有错误的输入及其输出结果。

1、验证提交任务的可调度性

测试说明

测试名称

采用最低松弛度优先调度的实时系统调度程序

测试目的

验证提交任务的可调度性

测试技术

单元测试

测试方法

黑盒测试法

测试用例

测试内容

通过文件读取的方式提交一批任务,测试系统对任务可调度性的判断

测试步骤

输入可调度的一批任务

输入不可调度任务

输入含非法任务

 

测试数据

任务数目:

3

任务编号NO.1

周期时间20s

运行时间4s

任务编号NO.2

周期时间30s

运行时间6s

任务编号NO.3

周期时间45s

运行时间8s

任务数目:

3

任务编号NO.1

周期时间20s

运行时间4s

任务编号NO.2

周期时间20s

运行时间6s

任务编号NO.3

周期时间5s

运行时间3s

任务数目:

3

任务编号NO.1

周期时间20s

运行时间4s

任务编号NO.2

周期时间20s

运行时间6s

任务编号NO.3

周期时间5s

运行时间8s

预期结果

任务可调度,在就绪队列中排队

显示任务不可调度

提示含有非法任务

测试结果

与预期相符

与预期相符

与预期相符

2、验证任务调度顺序的正确性

测试说明

测试名称

采用最低松弛度优先调度的实时系统调度程序

测试目的

任务调度顺序的正确性验证

测试技术

单元测试

测试方法

黑盒测试法

测试用例

测试内容

通过文件读取的方式提交一批任务,验证对任务的调度是否正确

测试步骤

输入可调度的一批任务

测试数据

任务总数:

3仿真时间100s任务编号NO.1周期时间20s运行时间6s

任务编号NO.2周期时间10s运行时间4s

任务编号NO.3周期时间5s运行时间1s

预期结果

调度程序先执行NO.3任务1s,然后执行NO.2任务4s,最后执行NO.1任务6s

测试结果

与预期相符

3、验证当两个任务松弛度同时减为0时的执行结果

测试说明

测试名称

采用最低松弛度优先调度的实时系统调度程序

测试目的

验证两个任务松弛度同时减为0时的执行结果是否正确

测试技术

功能测试

测试方法

黑盒测试法

测试用例

测试内容

通过文件读取的方式提交一批任务,其中同时有两个任务的松弛度减为0

测试步骤

输入可上述任务

测试数据

任务总数:

3仿真时间100s任务编号NO.1周期时间10s运行时间1s

任务编号NO.2周期时间10s运行时间1s

任务编号NO.3周期时间18s运行时间10s

预期结果

调度程序先执行NO.3任务9s,后执行NO.1任务1s,任务NO.2被错过

测试结果

与预期相符

2、调试分析:

在程序的调试中,遇到了如下的问题:

1.在程序读取文件的任务信息时,无法读入仿真时间,OnRadio1()在该按钮中的函数中一步步用MessageBox输出每一步读取的参数信息的值,发觉每一步的输出没有问题,最终发觉,在Onshuru()将全局变量SumTime又定义了一遍,在此函数中相当于局部变量在使用,因此无法传参。

最终删掉该定义,而直接使用,运行成功。

2.在程序的最后性能测试中,如果程序接收到任务队列,运行一段时间的后,有两个任务的松弛度同时减为零了,程序就会运行出错,到后来发现了程序出现这个问题的原因,就是程序始终是在选取松弛度最小的任务调入运行队列,当遇到两个松弛度同时为0的任务时

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 管理学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1