基于优先级的抢占式调度及实验的源程序和实验步骤

基于优先级的抢占式调度及实验的源程序和实验步骤

1 实验目的
    1.学习并验证基于优先级的抢占式调度
2 实验内容
    在实验一建立的 project 中,创建3 个任务,对这三个任务使用基于优先级的抢占式调度。观察运行结果。

3 实验设备及工具
   1.硬件:
      a) PC 机
   2.软件:
      a) PC 机操作系统Windows2000 或windowsXP
      b) Tornado2.2
4 实验原理

Wind 内核调度默认使用基于优先级抢占式调度。每个任务有一个优先级,任一时刻,内核保证将CPU 分配给处于就绪状态的优先级最高的任务执行。之所以说这种调度算法是抢占的,是因为,如果在某个时刻,一个优先级比当前正在运行的任务的优先级高的任务变为就绪,那么内核立即保存当前任务的上下文,然后切换到这个最高优先级任务的上下文。
      Wind 内核有256 个优先级(0~255),优先数0 对应着最高优先级,优先数
255 对应着最低优先级。任务的优先级在其创建时指定,VxWorks 也允许任务在
执行时调用taskPrioritySet()改变自身的优先级。
      函数 taskSpawn()用于创建并激活一个新任务。其原型如下:

当有多个不同优先级的任务时,任务的优先级才有意义。任务在执行时可以
调用下面的函数改变自身的优先级:

下面的例子创建三个优先级各不相同的任务。

5 实验步骤
   1.编程(假设编写的源文件为s6_hisched.c)
   2.将s6_hisched.c 添加到project 中
   3.编译(如果有错误,则改正)
   4.下载到VxSim 模拟器上运行,观察输出。
   5.修改程序,使得任务的执行顺序变为:taskOne,taskTwo,taskThree。观
察输出。

6.修改程序,使得taskOne 具有最高优先级,同时taskTwo 也以同样的由县
级运行,观察输出结果。

6 实验报告要求
   1.写出实验过程
   2.记录输出结果。分析4~6 步骤的结果。
   3.附上源程序(修改前和修改后)

源程序及实验步骤

优先级修改前的源程序及实验步骤

 1 #include "vxworks.h"
 2 #include "taskLib.h"
 3 #include "logLib.h"
 4
 5 #define ITER1 10
 6 #define ITER2 1
 7 #define LONG_TIME (1<<25)
 8 #define HIGH 100
 9 #define MID 101
10 #define LOW 102
11
12 static void taskOne(void)
13 {
14   int i,j;
15   for (i=0;i<ITER1;i++){
16       for (j=0;j<ITER2;j++)
17              logMsg("\n",taskIdSelf(),0,0,0,0,0);
18       for (j=0;j<LONG_TIME;j++);
19   }
20 }
21
22 static void taskTwo(void)
23 {
24   int i,j;
25   for (i=0;i<ITER1;i++){
26       for (j=0;j<ITER2;j++)
27              logMsg("\n",taskIdSelf(),0,0,0,0,0);
28       for (j=0;j<LONG_TIME;j++);
29   }
30 }
31
32 static void taskThree(void)
33 {
34   int i,j;
35   for (i=0;i<ITER1;i++){
36       for (j=0;j<ITER2;j++)
37              logMsg("\n",taskIdSelf(),0,0,0,0,0);
38       for (j=0;j<LONG_TIME;j++);
39   }
40 }
41
42 void s6_hisched(void)
43 {
44   int taskIdOne, taskIdTwo, taskIdThree;
45   logMsg("\n\n\n\n\n",0,0,0,0,0,0);
46   if ((taskIdOne=taskSpawn("task1",LOW,0x100,20000,
47                   (FUNCPTR)taskOne,0,0,0,0,0,0,0,0,0,0))==ERROR)
48            logMsg("taskSpawn taskOne failed.\n",0,0,0,0,0,0);
49   if ((taskIdTwo=taskSpawn("task2",MID,0x100,20000,
50                   (FUNCPTR)taskTwo,0,0,0,0,0,0,0,0,0,0))==ERROR)
51            logMsg("taskSpawn taskTwo failed.\n",0,0,0,0,0,0);
52   if ((taskIdThree=taskSpawn("task3",HIGH,0x100,20000,
53                   (FUNCPTR)taskThree,0,0,0,0,0,0,0,0,0,0))==ERROR)
54            logMsg("taskSpawn taskThree failed.\n",0,0,0,0,0,0);
55 }

由上图可知:修改前执行的先后顺序为taskThree,taskTwo,taskOne

优先级修改后的源程序及实验步骤

 1 #include "vxworks.h"
 2 #include "taskLib.h"
 3 #include "logLib.h"
 4
 5 #define ITER1 10
 6 #define ITER2 1
 7 #define LONG_TIME (1<<25)
 8 #define HIGH 100
 9 #define MID 101
10 #define LOW 102
11
12 static void taskOne(void)
13 {
14   int i,j;
15   for (i=0;i<ITER1;i++){
16       for (j=0;j<ITER2;j++)
17              logMsg("\n",taskIdSelf(),0,0,0,0,0);
18       for (j=0;j<LONG_TIME;j++);
19   }
20 }
21
22 static void taskTwo(void)
23 {
24   int i,j;
25   for (i=0;i<ITER1;i++){
26       for (j=0;j<ITER2;j++)
27              logMsg("\n",taskIdSelf(),0,0,0,0,0);
28       for (j=0;j<LONG_TIME;j++);
29   }
30 }
31
32 static void taskThree(void)
33 {
34   int i,j;
35   for (i=0;i<ITER1;i++){
36       for (j=0;j<ITER2;j++)
37              logMsg("\n",taskIdSelf(),0,0,0,0,0);
38       for (j=0;j<LONG_TIME;j++);
39   }
40 }
41
42 void s6_hisched(void)
43 {
44   int taskIdOne, taskIdTwo, taskIdThree;
45   logMsg("\n\n\n\n\n",0,0,0,0,0,0);
46   if ((taskIdOne=taskSpawn("task1",HIGH,0x100,20000,
47                   (FUNCPTR)taskOne,0,0,0,0,0,0,0,0,0,0))==ERROR)
48            logMsg("taskSpawn taskOne failed.\n",0,0,0,0,0,0);
49   if ((taskIdTwo=taskSpawn("task2",MID,0x100,20000,
50                   (FUNCPTR)taskTwo,0,0,0,0,0,0,0,0,0,0))==ERROR)
51            logMsg("taskSpawn taskTwo failed.\n",0,0,0,0,0,0);
52   if ((taskIdThree=taskSpawn("task3",LOW,0x100,20000,
53                   (FUNCPTR)taskThree,0,0,0,0,0,0,0,0,0,0))==ERROR)
54            logMsg("taskSpawn taskThree failed.\n",0,0,0,0,0,0);
55 }

由上图可知:修改后执行的先后顺序为taskOne,taskTwo,taskThree

时间: 2024-10-06 02:14:48

基于优先级的抢占式调度及实验的源程序和实验步骤的相关文章

Mahout:采用斯皮尔曼相关系数基于相对排名定义相似度

//此处为UserSimilarity实现引入缓存的机制 //采用斯皮尔曼相关系数基于相对排名定义相似度 //其中加入了缓存的机制,将得到的结果进行内部的缓存 //然后,当需要进行提供一个已经计算过的用户间相似度时, //就可以直接返回,而不需要进行重新的进行计算 //但是这个方法的代价很高,很耗内存 package byuser; import java.io.File; import java.io.IOException; import org.apache.mahout.cf.taste

基于Pre-Train的CNN模型的图像分类实验

基于Pre-Train的CNN模型的图像分类实验 MatConvNet工具包提供了好几个在imageNet数据库上训练好的CNN模型,可以利用这个训练好的模型提取图像的特征.本文就利用其中的 “imagenet-caffe-ref”的模型,提取图像特征(softmax前一层的输出,4096维),在几个常用的图像分类的数据库中进行了相应的分类实验.这实验的过程中,有对图片进行左右翻转用于增加训练数据.下面结果的表格中:Original原始结果,Flip增加翻转后的结果. 需要用到的toolbox及

基于Three.js的360X180度全景图预览插件

基于Three.js的360X180度全景图预览插件 时间 2015-08-12 10:01:10  HTML5中国 原文  http://www.html5cn.org/article-8621-1.html 主题 Three.js 简要教程 Photo Sphere Viewer是一款基于Three.js的360X180度全景图预览js插件.该js插件可以360度旋转查看全景图,也可以上下180度查看图片.使用该插件的唯一要求是浏览器支持canvas或WebGL. 查看演示      下载插

【算法】基于优先级的排班算法实现

场景:在大学的里,有不少社团组织会要组织中的成员值班,当然这个值班时间是学生无课的时间才会被安排值班. 假设现有如下需求:一天中有3个时间段要有人值班,每周周一到周五都要值班,就是共有15个值班段,每个时间段值班的人都不一样,现有40个学生,要求根据这些学生的无课表情况安排值班,要求每个值班段必须有两个人,每个人一周只值班一次(如果某一值班段只有一人无课,那该值班段就只能一人值班). 小插一题,做一排列组合题: 有10个相同的糖果,颁给3个小人,要求每个人至少有2个糖果,问共有多少种分法? (自

基于欧式距离定义相似度推荐算法的评估

/* * 这段程序对于基于欧式距离定义相似度的评估 * */ package byuser; import java.io.File; import org.apache.mahout.cf.taste.common.TasteException; import org.apache.mahout.cf.taste.eval.RecommenderBuilder; import org.apache.mahout.cf.taste.eval.RecommenderEvaluator; impor

k8s调度器优先级和抢占机制

优先级(Priority)和抢占(Preemption)机制 优先级和抢占机制,解决的是Pod调度失败时该怎么办的问题 正常情况下,当一个Pod调度失败后,它就会被暂时“搁置”起来,直到Pod被更新,或者集群状态发生变化,调度器才会对这个Pod进行重新调度 特殊要求的场景: 当一个高优先级的Pod调度失败后,该Pod并不会被“搁置”,而是会“挤走”某个Node上的一些低优先级的Pod.这样就保证这个高优先级Pod的调度成功 优先级的实现 需要在Kubernetes里提交一个PriorityCla

进阶实验5-3.3 基于词频的文件相似度 (30分)-哈希

解题思路: 1.存储:用一张哈希表存储单词以及对应所在的文件,再用一张文件表,存储每个文件的词汇量以及单词在哈希表中的位置 2.查询:先在文件表中查询对应的文件名,(取文件词汇量较少的文件名)-> 找到对应文件名中的词汇所在位置-> 根据此单词的位置到哈希表中查找单词所在文件列表->从而判断该单词是否是两文件的公共词汇 重复步骤2,直至文件中的单词全部查询完毕 #include <stdio.h> #include <string.h> #include <

Python简单实现基于VSM的余弦相似度计算

在知识图谱构建阶段的实体对齐和属性值决策.判断一篇文章是否是你喜欢的文章.比较两篇文章的相似性等实例中,都涉及到了向量空间模型(Vector Space Model,简称VSM)和余弦相似度计算相关知识.        这篇文章主要是先叙述VSM和余弦相似度相关理论知识,然后引用阮一峰大神的例子进行解释,最后通过Python简单实现百度百科和互动百科Infobox的余弦相似度计算. 一. 基础知识 第一部分参考我的文章: 基于VSM的命名实体识别.歧义消解和指代消解 第一步,向量空间模型VSM 

基于Spark GraphX计算二度关系

关系计算问题描述 二度关系是指用户与用户通过关注者为桥梁发现到的关注者之间的关系.目前微博通过二度关系实现了潜在用户的推荐.用户的一度关系包含了关注.好友两种类型,二度关系则得到关注的关注.关注的好友.好友的关注.好友的好友四种类型. 如果要为全站亿级用户根据二度关系和四种桥梁类型推荐桥梁权重最高 TopN 个用户,大致估算了下总关系量在千亿级别,按照原有的 Mapreduce 模式计算整个二度关系,需要以桥梁用户为 Key,把它的关注和粉丝两个亿级的表做 Join,如果活跃用户按照亿计,平均关