二处理机调度实时调度算法EDF和RMS.PPT

上传人:天*** 文档编号:972769 上传时间:2018-11-10 格式:PPT 页数:24 大小:133KB
下载 相关 举报
二处理机调度实时调度算法EDF和RMS.PPT_第1页
第1页 / 共24页
二处理机调度实时调度算法EDF和RMS.PPT_第2页
第2页 / 共24页
二处理机调度实时调度算法EDF和RMS.PPT_第3页
第3页 / 共24页
二处理机调度实时调度算法EDF和RMS.PPT_第4页
第4页 / 共24页
二处理机调度实时调度算法EDF和RMS.PPT_第5页
第5页 / 共24页
点击查看更多>>
资源描述

1、实验二 处理机调度 实时调度算法 EDF和 RMS 实验目的 实验内容 实验准备 实验设计 参考代码 实验结果 思考题实验目的 深入理解处理机调度算法,了解硬实时概念,掌握周期性实时任务调度算法EDF(Earliest Deadline First)和 RMS(Rate Monotonic Scheduling)的可调度条件,并能在可调度情况下给出具体调度结果。实验内容 在 Linux环境中采用用户级线程模拟实现EDF和 RMS两种实时调度算法。给定一组实时任务,按照 EDF算法和 RMS算法分别判断是否可调度,在可调度的情况下,创建一组用户级线程,分别代表各个实时任务,并按算法确定的调度次序

2、安排各个线程运行,运行时在终端上画出其 Gantt图。为避免图形绘制冲淡算法, Gantt图可用字符表示。 实验准备 EDF算法和 RMS算法的可调度条件及调度原则。 在 Linux环境中创建用户级线程的函数。EDF算法和 RMS算法的可调度条件及调度原则 EDF为可抢先式调度算法,其调度条件为 sum(Ci/Ti)1; RMS算法为不可抢先调度算法,其调度条件为sum(Ci/Ti)n(exp(ln(2)/n)-1)。在 Linux环境中创建用户级线程的函数 创建用户级线程的库函数为: int pthread_create (pthread_t *THREAD, pthread_attr_t

3、* ATTR, void * (*START_ROUTINE) (void *), void * ARG) pthread_create(tid,NULL,func,arg); 其中第一个参数是 pthread_t型的指针,用于保存线程 id;第二个参数是 pthread_attr_t的指针,用于说明要创建的线程的属性, NULL表示使用缺省属性;第三个参数指明了线程的入口,是一个只有一个 (void *)参数的函数;第四个参数是传给线程入口函数的参数。 实验设计 实时任务用 task数据结构描述,设计四个函数:select_proc()用于实现调度算法,被选中任务执行 proc(),在没有可

4、执行任务时执行 idle(),主函数 mian()初始化相关数据,创建实时任务并对任务进行调度。 为模拟调度算法,给每个线程设置一个等待锁,暂不运行的任务等待在相应的锁变量上。主线程按调度算法唤醒一个子线程,被选中线程执行一个时间单位,然后将控制权交给主线程判断是否需要重新调度。 参考代码#include “math.h“#include “sched.h“#include “pthread.h“#include “stdlib.h“#include “semaphore.h“ typedef struct /实时任务描述char task_id;int call_num; /任务发生次数in

5、t ci; / Ciint ti; /Ti int ci_left;int ti_left; int flag; /任务是否活跃, 0否, 2是int arg; /参数pthread_t th; /任务对应线程task;void proc(int* args);void* idle();int select_proc();int task_num = 0;int idle_num = 0;int alg; /所选算法, 1 for EDF, 2 for RMSint curr_proc=-1;int demo_time = 100; /演示时间task* tasks;pthread_mutex

6、_t proc_wait100;pthread_mutex_t main_wait, idle_wait;float sum=0;pthread_t idle_proc;int main(int argc,char* argv) pthread_mutex_init(pthread_mutex_lock( /下次执行 lock等待pthread_mutex_init(pthread_mutex_lock( /下次执行 lock等待printf(“Please input number of real time tasks:n“);scanf(“%d“,tasks = (task*)malloc(task_num*sizeof(task);int i;for(i=0;itask_num;i+)pthread_mutex_init(pthread_mutex_lock(for(i=0;itask_num;i+)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 重点行业资料库 > 1

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。