欢迎来到天天文库
浏览记录
ID:5541821
大小:245.50 KB
页数:8页
时间:2017-12-17
《网络操作系统 实验6 处理机调度-实时调度》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、集美大学计算机工程学院实验报告课程名称:操作系统班级:实验成绩:指导教师:姓名:实验项目名称:处理机调度-实时调度学号:上机实践日期:实验项目编号:实验六组号:上机实践时间:学时一、目的(本次实验所涉及并要求掌握的知识点)深入了解处理及调度算法,了解硬实时概念,掌握周期性实时任务调度算法EDF和RMS的可调度条件,并能在可调度情况下给出具体调度结果二、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析、电路图)实验内容:实时任务用task数据结构描述,涉及四个函数:select_proc()用于实现调度算法,被选中任务执行proc(),在
2、没有可执行任务时执行idle(),主函数main()初始化相关数据,创建实时任务并对任务进行调度。为模拟调度算法,给每个线程设置一个等待锁,暂不运行的任务等待在相应的锁变量上。主线程按照调度算法唤醒一个子线程,被选中线程执行一个时间单位,然后将控制权交给主线程以判断是否需要重新调度。三、实验使用环境(本次实验所使用的平台和相关软件)Linux虚拟机vi编辑器四、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)******************************实验代码*************************************#
3、include"math.h"#include"sched.h"#include"pthread.h"#include"stdlib.h"#include"semaphore.h"#include"stdio.h"typedefstruct{//实时任务描述chartask_id;intcall_num;//任务发生次数intci;//任务处理时间intti;//任务发生周期intci_left;intti_left;intflag;//任务是否活跃,0否,2是intarg;//参数pthread_tth;//任务对应线程}task;voidproc(int*
4、args);void*idle();intselect_proc();inttask_num=0;intidle_num=0;intalg;//所选算法,1forEDF,2forRMSintcurr_proc=-1;intdemo_time=100;//演示时间task*tasks;pthread_mutex_tproc_wait[100];pthread_mutex_tmain_wait,idle_wait;floatsum=0;pthread_tidle_proc;intmain(intargc,char**argv){pthread_mutex_init
5、(&main_wait,NULL);pthread_mutex_lock(&main_wait);//下次执行lock等待pthread_mutex_init(&idle_wait,NULL);pthread_mutex_lock(&idle_wait);//下次执行lock等待printf("Pleaseinputnumberofrealtimetask:");intc;scanf("%d",&task_num);//任务数tasks=(task*)malloc(task_num*sizeof(task));while((c=getchar())!='
6、n'&&c!=EOF);//清屏inti;for(i=0;i7、i;tasks[i].ti_left=tasks[i].ti;tasks[i].flag=2;tasks[i].arg=i;tasks[i].call_num=1;sum=sum+(float)tasks[i].ci/(float)tasks[i].ti;while((c=getchar())!=''&&c!=EOF);//清屏}printf("Pleaseinputalgorithm,1forEDF,2forRMS:");scanf("%d",&alg);printf("Pleaseinputdemotime:");scanf("%d",&demo_ti8、me);doubler=1;//EDF
7、i;tasks[i].ti_left=tasks[i].ti;tasks[i].flag=2;tasks[i].arg=i;tasks[i].call_num=1;sum=sum+(float)tasks[i].ci/(float)tasks[i].ti;while((c=getchar())!=''&&c!=EOF);//清屏}printf("Pleaseinputalgorithm,1forEDF,2forRMS:");scanf("%d",&alg);printf("Pleaseinputdemotime:");scanf("%d",&demo_ti
8、me);doubler=1;//EDF
此文档下载收益归作者所有