当前位置:文档之家› 时间片轮转调度算法实验报告

时间片轮转调度算法实验报告

时间片轮转调度算法实验报告
时间片轮转调度算法实验报告

xx大学操作系统实验报告

姓名:学号:班级:

实验日期:

实验名称:时间片轮转RR进程调度算法

实验二时间片轮转RR进程调度算法

1.实验目的:通过这次实验,理解时间片轮转RR进程调度算法的运行原理,进一步

掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。

2.需求分析

(1) 输入的形式和输入值的范围;

输入:进程个数n 范围:0

时间片q

依次输入(进程名

进程到达时间

进程服务时间)

所有进程平均周转时间:

所有进程平均带权周转时间:

(3) 程序所能达到的功能

1)进程个数n,输入时间片大小q,每个进程的到达时间T1, … ,T n和服务时间S1, … ,S n。2)要求时间片轮转法RR调度进程运行,计算每个进程的周转时间和带权周转时间,并且计算所有进程的平均周转时间和带权平均周转时间;

3)输出:模拟整个调度过程,输出每个时刻的进程运行状态;

4)输出:输出计算出来的每个进程的周转时间、带权周转时间、所有进程的平均周转时间以及带权平均周转时间。

(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。正确输入:

错误输入:

2、概要设计

所有抽象数据类型的定义:

static int MaxNum=100

int ArrivalTime//到达时间

int ServiceTime//服务时间

int FinishedTime//结束时间

int WholeTime//周转时间

double WeightWholeTime//带权周转时间double AverageWT //平均周转时间

double AverageWWT //平均带权周转时间主程序的流程:

变量初始化

●接受用户输入的n,q ,T1…..Tn,S1….Sn;

●进行进程调度,计算进程的开始运行时间、结束时间、执行

顺序、周转时间、带权周转时间;

●计算所有进程的平均周转时间、平均带权周转时间;

●按照格式输出调度结果。

各程序模块之间的层次(调用)关系

Main函数通过对Input函数进行调用,对函数的成员变量进行赋值,再通过RRAlgorithm函数求出题目要求的各个数据结果,最后通过display函数对结果进行格式输出。

3、详细设计

实现程序模块的具体算法。

void RRAlgorithm()

{

char processMoment[100]; //存储每个时间片p对应的进程名称

RRqueue.push(RRarray[0]);

int processMomentPoint = 0;

int CurrentTime=0;

int tempTime; //声明此变量控制CurrentTime的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用

int i=1; //指向还未处理的进程的下标

int finalProcessNumber = 0; //执行RR算法后,进程的个数

int processTime[50];

//CurrentTime的初始化

if (RRarray[0].ServiceTime>=q)

{

CurrentTime = q;

}

else

{

CurrentTime = RRarray[0].ServiceTime;

}

while(!RRqueue.empty())

{

for (int j=i;j

{

if (RRarray[j].name!=NULL && CurrentTime >= RRarray[j].ArrivalTime)

{

RRqueue.push(RRarray[j]);

i++;

}

}

if (RRqueue.front().ServiceTime

{

tempTime = RRqueue.front().ServiceTime;

}

else

{

tempTime = q;

}

RRqueue.front().ServiceTime -= q; //进程每执行一次,就将其服务时间-q

//将队首进程的名称放入数组中

processMoment[processMomentPoint] = RRqueue.front().name;

processMomentPoint++;

processTime[finalProcessNumber] = tempTime;

finalProcessNumber++;

if (RRqueue.front().ServiceTime <= 0) //把执行完的进程退出队列

{

//RRqueue.front().FinishedTime = CurrentTime;

RRqueue.pop(); //如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈

}

else

{

//将队首移到队尾

RRqueue.push(RRqueue.front());

RRqueue.pop();

}

CurrentTime += tempTime;

}

//进程输出处理每个时间段对应的执行的进程

cout<<"各进程的执行时刻信息:"<

cout<<" "<<"0时刻--> "<

processTime[finalProcessNumber]=0;

int time = processTime[0];

int count = 0;

for (i=0;i

{

count = 0;

cout<

while(RRarray[count].name!=processMoment[i] && count

{

count++;

}

RRarray[count].FinishedTime = time;

if (i

{

cout< "<

time += processTime[i+1];

}

}

cout<

//周转时间、带权周转时间、平均周转时间、带权平均周转时间的计算

//1. 周转时间= 完成时间- 到达时间

//2. 带权周转时间= 周转时间/服务时间

for ( i=0;i

{

RRarray[i].WholeTime = RRarray[i].FinishedTime - RRarray[i].ArrivalTime;

RRarray[i].WeightWholeTime = (double)RRarray[i].WholeTime/RRarray[i].ServiceTime;

}

double x=0,y=0;

for (i=0;i

{

x += RRarray[i].WholeTime;

y += RRarray[i].WeightWholeTime;

}

AverageWT = x/n;

AverageWWT = y/n;

}

4、调试分析

(1)调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析

在算法设计时,由于一开始不知道如何将位于队首的进程,在执行完后如何移至队尾进行循环,所以思考了很久,后来想到将队首进程进行重新压入队列从而解决了此问题。

(2)算法的性能分析

每个进程被分配一个时间段,即该进程允许运行的时间。如果在时间片结束时进程还在运行,则CPU将被剥夺并分配给另一个进程。如果进程在时间片结束前阻塞或结束,则CPU当即进行切换。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

(3)经验体会

通过本次实验,深入理解了时间片轮转RR进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆。

5、用户使用说明

程序的使用说明,列出每一步的操作步骤。

7、附录

带注释的源程序,注释应清楚具体

#include

#include

#include

#include

#define MaxNum 100

using namespace std;

typedef struct

{

char name;

int ArrivalTime;

int ServiceTime;

int FinishedTime;

int WholeTime;

double WeightWholeTime;

}RR;

static queueRRqueue; //声明一个队列static double AverageWT =0,AverageWWT=0; static int q; //时间片

static int n; //进程个数

static RR RRarray[MaxNum]; //进程结构void Input()

{

//文件读取模式

ifstream inData;

inData.open("./data4.txt");

//data.txt表示q = 4的RR调度算法

//data2.txt表示q = 1的RR调度算法

inData>>n;

inData>>q;

for (int i=0;i

{

inData>>RRarray[i].name;

}

for (i=0;i

{

inData>>RRarray[i].ArrivalTime;

}

for (i=0;i

{

inData>>RRarray[i].ServiceTime;

}

//用户输入模式

cout<<"************************************************************** **"<

cout<<"请输入进程个数n :";

cin>>n;

cout<<"请输入时间片q :";

cin>>q;

cout<<"请按到达时间的顺序依次输入进程名:"<

for (i=0;i

{

cin>>RRarray[i].name;

}

cout<<"请从小到大输入进程到达时间:"<

for (i=0;i

{

cin>>RRarray[i].ArrivalTime;

}

cout<<"请按到达时间的顺序依次输入进程服务时间:"<

for (i=0;i

{

cin>>RRarray[i].ServiceTime;

}

cout<<"************************************************************** **"<

//输出用户所输入的信息

cout<<"The information of processes is the following:"<

cout<

cout<

cout<

for ( i=0;i

{

cout<

cout<

cout<

}

cout<<"************************************************************** **"<

}

void RRAlgorithm()

{

char processMoment[100]; //存储每个时间片p对应的进程名称

RRqueue.push(RRarray[0]);

int processMomentPoint = 0;

int CurrentTime=0;

int tempTime; //声明此变量控制CurrentTime的累加时间,当前进程的服务时间小于时间片q的时候,起到重要作用

int i=1; //指向还未处理的进程的下标

int finalProcessNumber = 0; //执行RR算法后,进程的个数

int processTime[50];

//CurrentTime的初始化

if (RRarray[0].ServiceTime>=q)

{

CurrentTime = q;

}

else

{

CurrentTime = RRarray[0].ServiceTime;

}

while(!RRqueue.empty())

{

for (int j=i;j

{

if (RRarray[j].name!=NULL && CurrentTime >= RRarray[j].ArrivalTime)

{

RRqueue.push(RRarray[j]);

i++;

}

}

if (RRqueue.front().ServiceTime

{

tempTime = RRqueue.front().ServiceTime;

}

else

{

tempTime = q;

}

RRqueue.front().ServiceTime -= q; //进程每执行一次,就将其服务时间-q

//将队首进程的名称放入数组中

processMoment[processMomentPoint] = RRqueue.front().name;

processMomentPoint++;

processTime[finalProcessNumber] = tempTime;

finalProcessNumber++;

if (RRqueue.front().ServiceTime <= 0) //把执行完的进程退出队列

{

//RRqueue.front().FinishedTime = CurrentTime;

RRqueue.pop(); //如果进程的服务时间小于等于,即该进程已经服务完了,将其退栈

}

else

{

//将队首移到队尾

RRqueue.push(RRqueue.front());

RRqueue.pop();

}

CurrentTime += tempTime;

}

//进程输出处理每个时间段对应的执行的进程

cout<<"各进程的执行时刻信息:"<

cout<<" "<<"0时刻--> "<

processTime[finalProcessNumber]=0;

int time = processTime[0];

int count = 0;

for (i=0;i

{

count = 0;

cout<

while(RRarray[count].name!=processMoment[i] && count

{

count++;

}

RRarray[count].FinishedTime = time;

if (i

{

cout< "<

time += processTime[i+1];

}

}

cout<

//周转时间、带权周转时间、平均周转时间、带权平均周转时间的计算

//1. 周转时间= 完成时间- 到达时间

//2. 带权周转时间= 周转时间/服务时间

for ( i=0;i

{

RRarray[i].WholeTime = RRarray[i].FinishedTime - RRarray[i].ArrivalTime;

RRarray[i].WeightWholeTime = (double)RRarray[i].WholeTime/RRarray[i].ServiceTime;

}

double x=0,y=0;

for (i=0;i

{

x += RRarray[i].WholeTime;

y += RRarray[i].WeightWholeTime;

}

AverageWT = x/n;

AverageWWT = y/n;

}

void display()

{

cout<<"******************************************************"<

cout<<"RR调度算法执行后:进程相关信息如下:"<

cout<

cout<

cout<

cout<

cout<

cout<

for (int i = 0;i

{

cout<

cout<

cout<

cout<

cout<

cout<

}

cout<<"所有进程的平均周转时间= "<

cout<<"所有进程的平均带权周转时间= "<

cout<<"******************************************************"<

int main()

{

Input();

RRAlgorithm();

display();

return 0;

}

速度知觉实验报告

速度知觉 实验报告 指导老师: 班级: 姓名:学号:时间: 一、引言 速度知觉反应了每个人对速度感觉的差异,速度知觉也是各项劳动实践中和各项体育运 动中不可缺少的技术指标。驾驶员超车要估计前面车子的速度,要估计对面来车的速度,要 估计前面横越车子、行人的速度足球运动员在赛场上要对足球滚动的速度,其他运动员跑动 速度要做出敏捷快速的判断,所以准确掌握速度判断能力是很有用的。本实验是用平均误差 法来分析实验数据,从而得出不同状态下,被试者的速度知觉是否有不同。 平均差误法(method of average error)又称调整法,再造法,均等法,是最古老且 最基本的传统心理物理法之一。它最适用于测量绝对阈限和等值,也可用于测量差别阈限。 平均差误法的比较(变异)刺激大都是由被试操作或调整而产生的连续量的变化。接近 阈限时,被试可反复调整,直到其满意为止。被试调整到在感觉上相等的两个刺激值,其物 理强度之差的绝对值的平均数就是所求的阈限值。由于被试参与操作,也容易产生动作误差。 例如,从小于标准刺激调整到与标准刺激相等,和从大于标准刺激调整到与标准刺激相等, 其结果就可能不同。其计算公式如下: ae=∑∣x-s∣/n 式中,|x-s|:每次测得的绝对误差 x:被试估计时间 s:标准时间 n:实验次数 用这个方法测得的阈限值比用其它两种方法测得的要小一些,因为其差别阈限处于上下 限之间的主观相等地带之内,而绝对阈限则50%次感觉到的强度之下。由于平均差误法获得 数据的标准和计算的方法与其他方法不同,它所测得的结果可以说只是一个阈限的近似值。 因此,用此法测得的阈限不能直接与用其他方法测得的阈限进行比较。 二、实验目的 运用平均误差法分析得出在不同状态下人的速度知觉。 三、实验方法 3.1 被试 1名被试,年龄21岁左右。 3.2 仪器 名称:ep509速度知觉测试仪器 组成:仪器的正面是由知觉箱、被试反应键和活动挡板组成。 仪器的背面是由控制操作面板、反应键插座和电源插座组成。控制操作面板上有许多开 关和按钮:计时器、位置选择开关(远和近)、速度选择开关(快和慢)、启动按钮、复位按 钮、电源开关和实验/演示切换开关。 3.3 操作 1.将电源线连接到220v交流电上。 2.将反映键的插头接到知觉箱的插座上。 3.打开电 源。 4.速度选择开关有快、慢两档供主试选择(慢:4s 5.位置选择开关有近远两档,挡板与开关选择同步移动,供主试选择。 6.主试按启动按 钮,灯光自右向左移动。 7.被试按下反应键后,计时器显示结果。 8、主试按复位键为下次 操作做准备。 3.4 测试方法 1.演示 2.被试坐在仪器正前方,眼睛平视右面的光点,注意前面光电的变化。 3.主试按下仪器 操作面左下方按键,使仪器工作在演示状态下。

进程调度算法实验报告

操作系统实验报告(二) 实验题目:进程调度算法 实验环境:C++ 实验目的:编程模拟实现几种常见的进程调度算法,通过对几组进程分别使用不同的调度算法,计算进程的平均周转时间和平均带权周转时间,比较 各种算法的性能优劣。 实验内容:编程实现如下算法: 1.先来先服务算法; 2.短进程优先算法; 3.时间片轮转调度算法。 设计分析: 程序流程图: 1.先来先服务算法 开始 初始化PCB,输入进程信息 各进程按先来先到的顺序进入就绪队列 结束 就绪队列? 运行 运行进程所需CPU时间 取消该进程 2.短进程优先算法

3.时间片轮转调度算法 实验代码: 1.先来先服务算法 #include #define n 20 typedef struct { int id; //进程名

int atime; //进程到达时间 int runtime; //进程运行时间 }fcs; void main() { int amount,i,j,diao,huan; fcs f[n]; cout<<"请输入进程个数:"<>amount; for(i=0;i>f[i].id; cin>>f[i].atime; cin>>f[i].runtime; } for(i=0;if[j+1].atime) {diao=f[j].atime; f[j].atime=f[j+1].atime; f[j+1].atime=diao; huan=f[j].id; f[j].id=f[j+1].id; f[j+1].id=huan; } } } for(i=0;i #define n 5 #define num 5 #define max 65535 typedef struct pro { int PRO_ID; int arrive_time;

测谎实验报告

测谎实验报告 篇一:测谎原理与发展现状 第20届“冯如杯”学术 科技竞赛参赛论文 哲学社会科学类 论文名称:测谎原理与发展现状 项目编号: 学院名称: 专业名称: 学生姓名: 指导教师: 北京航空航天大学 二○一○年四月制 作者承诺 我保证本论文的工作由我和项目组的成员独立创作,保证本论文中不存在抄袭、剽窃、侵权、伪造、故意夸大等各种弄虚作假的行为。我和项目组成员将遵守本届冯如杯参赛

的有关各项规定。并愿意承担因为个人原因而产生不良后果的责任。 (签章):XX年 04 月 03 申请者日 测谎原理与发展现状 摘要:在人类发展的历史之中,说谎似乎就成了一种不可避免的事情。日常生活中,人们时不时会善意地说句谎话,“你长得真漂亮”,即使明知自己并不怎么好看的女子听到这样的谎话时,也会心花怒放。诸如此类的谎话当然无可厚非,但世间有善意的谎话,也就有恶意的谎话。偷盗者会说自己根本没有伸手,叛国者声称自己一身清白,杀人越货者也会拒不认账??谎言对这个世界的影响在此暂不做讨论,但是,随着科学的发展,特别是心理学和生理学今年来的飞速发展,世界上出现了种种具有相当科学依据,准确性高的测谎的方法和仪器。而这些方法和仪器,也被人们应用到了各个方面。 关键词:测谎,心理学,原理,发展,应用 Asract: In human development, lie seems to have become a kind of inevitable behavior. In everyday life, people will tell the lie from time to time, "You look really

时间知觉实验报告

时间知觉实验 10教科1 第9小组 余华、黄文静、吴芸、王红娥、钟建有摘要:本实验通过对上饶师范学院10级心理学专业第9小组的4名学生进行时间知觉测验,研究大学生对时间知觉的准确性,并通过采用不同的闪光频率检验闪光频率对于时间知觉的影响。 关键词:时间知觉闪光频率 1引言 时间知觉是指个体对同时直接作用于感觉器官的客观事件的顺序性和持续性的反映。时间知觉分为时序知觉和时距知觉,时序知觉是指对客观事件的顺序性的知觉,能告诉人们不同事件发生的先后顺序;时距知觉是时间知觉的另一个重要组成部分,指对客观事件持续性的知觉,能告诉人们某一事件延续的时间长短。相对于时序知觉而言,时距知觉的研究更多,主要围绕动物和人类被试展开。 研究时间知觉的方法主要有两种范式:预期式研究和回溯式研究。预期式研究是指被试在实验前就知道,刺激时距呈现后,要对该时距进行估计;回溯式研究则是指刺激时距呈现后才要求被试对已呈现的时距进行估计,而在实验前被试是不知道要进行时距估计的。Block和Zakay(1997)对这两种研究范式的元分析表明,对于同一时距的判断,预期式判断显著大于回溯式判断。回溯式判断的被试间显著大于预期式判断的被试间变异。而任务难度只影响预期式时距判断,随着任务难度的增加,时距判断率(判断时距/标准时距)显著减小,而在回溯范式下,则没有影响。刺激的时距长度和刺激的复杂性和时距判断率则只对回溯式判断产生影响。刺激时距长度和时距判断率成反比关系,而刺激复杂度和时距判断率成正比关系。值得注意的是,在短时距刺激(5-14.9秒)两种范式的时距判断率没有显著的差异。然而不同实验范式涉及不同的认知加工过程,预期式时距估计要求被试对正在流逝的时距进行时间信息的提取、编码和储存;而回溯式时距判断往往要求被试从短时记忆中提取刺激时距间的非时间信息进行编码,通常是对事件编码的提取,因而更多地涉及记忆因素。 本实验采取预期式研究检查了自我估计在估计时间中的作用,并检验了闪光频率对时间知觉的影响。 2方法与程序 2.1被试 上饶师范学院10级心理学专业第9小组学生4名,视力正常,年龄在19-20岁 之间,之前无相关实验经验。每个被试分别编号为被试1、被试2、被试3、被试 4。其中被试1、被试2和被试3为女性被试,被试4为男性被试。 2.2实验仪器 时间知觉测试仪、纸、笔。 2.3实验设计和程序 2.3.1主试按功能键,使显示F2-02S、即标准刺激时间为2S,按声/光键,使指 示灯在光处亮。按连续/始末键,使指示灯在两点均亮,此时闪烁频率为2Hz、 若在按两次则为8 Hz(手按时间稍长会显示频率),按开始键实验开始。 2.3.2被试手拿反应盒(键),据仪器刺激(闪光)时间,按任意键,复制(估计) 一个与刺激相同的时间,主试立即记下该数据,如此做20次。 2.3.3主试复位、重新设置,使闪光频率从2Hz到8Hz,同样做20次。

时间片轮转调度算法资料

《操作系统》课程实验报告实验名称:时间片轮转调度算法 班级:**************** 学号:************* 姓名:************** 指导老师:*************** 成绩:

一、实验目的: 1、测试数据可以随即输入或从文件中读入。 2、必须要考虑到进程的到达时间 3、最终能够计算每一个进程的周转时间的带权周转时间。 4、时间片大小可以不为1,但至少实现时间片大小为1的RR调度。 二、实验内容: 模拟实现时间片轮转调度算法,具体如下: 设置进程体:进程名,进程的到达时间,服务时间,,进程状态(W——等待,R ——运行,F——完成),进程间的链接指针 进程初始化:由用户输入进程名、服务时间进行初始化,同时,初始化进程的状态为W。 显示函数:在进程调度前、调度中和调度后进行显示。 排序函数:对就绪状态的进程按照进入就绪队列的时间排序,新到达的进行应优先于刚刚执行过的进程进入就绪队列的队尾。 调度函数:每次从就绪队列队首调度优一个进程执行,状态变化。并在执行一个时间片后化,服务时间变化,状态变化。当服务时间为0时,状态 变为F。 删除函数:撤销状态为F的进行。 三、实验代码 #include #include #include typedefstruct PCB2 { char name[10];//进程名 int runtime;//要求运行时间 intfrist;//定义优先数 char zhuangtai; //定义状态,R为就绪,F为完成 }; structshijian {//定义时间片的结构体 char name; //定义进程名 intdaodatime;// 到达时间 intfuwutime; //服务时间 intshengyutime;//剩余时间 char *state;//所处状态 structshijian *next; }; structshijian *time() { inta,i;

先来先服务FCFS和短作业优先SJF进程调度算法_实验报告材料

先来先服务FCFS和短作业优先SJF进程调度算法 1、实验目的 通过这次实验,加深对进程概念的理解,进一步掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。 2、需求分析 (1) 输入的形式和输入值的范围 输入值:进程个数Num 范围:0

说明本程序中用到的所有抽象数据类型的定义、主程序的流程以及各程序模块之间的层次(调用)关系。 4、详细设计 5、调试分析 (1)调试过程中遇到的问题以及解决方法,设计与实现的回顾讨论和分析 ○1开始的时候没有判断进程是否到达,导致短进程优先算法运行结果错误,后来加上了判断语句后就解决了改问题。 ○2 基本完成的设计所要实现的功能,总的来说,FCFS编写容易,SJF 需要先找到已经到达的进程,再从已经到达的进程里找到进程服务时间最短的进程,再进行计算。 (2)算法的改进设想 改进:即使用户输入的进程到达时间没有先后顺序也能准确的计算出结果。(就是再加个循环,判断各个进程的到达时间先后,组成一个有序的序列) (3)经验和体会 通过本次实验,深入理解了先来先服务和短进程优先进程调度算法的思想,培养了自己的动手能力,通过实践加深了记忆。 6、用户使用说明 (1)输入进程个数Num

速度知觉实验报告

速度知觉实验报告 篇一:速度知觉实验报告- 速度知觉实验报告 研部:贾月娥 实验目的:学习速度知觉的测量方法,测定速度知觉的准确性。 1.引言 1.1 简介: 速度知觉是运动知觉的一种,与时间知觉也有一定关系。能否正确估计物体的运动速度,在人的实践活动中有重要意义。速度知觉的准确性可以作为职业测评的一个指标。 本实验以亮点实际运动到某处所用时间与被试估计时间之差来评定速度知觉准确性。2.实验对象与方法 1.2 方法与程序:本实验有两种运动速度(40点/秒和100点/秒),三种运动类型(水平、垂直和平面运动)。为克服方向带来的误差,每种运动类型又有两种相反方向(左右、上下和里外),这样就组合成12种任务,每种任务测两次,共24次。各类测定随机呈现。老师指导被试阅读指示语,说明反应方法(认为时间到了即按反应键),然后开始测定。每次测定之后都有反馈,被试可以对照调整自己以后的估计。时间估计精确到毫秒级。 1.3 结果与讨论:结果分数中列出了平均估计误差(相

对误差),由所有24次估计的误差的绝对值平均而来,代表被试的平均估计准确性,越小表示估计越准确。并列出了各种运动方向和速度下的平均估计误差。 详细结果分六列:第一列为运动速度;第二列为运动方向;第三列为实际运动时间;第四列为估计运动时间;第五列为估计绝对误差(正表示估计太迟,误差为负表示估计太早),三四五列均以毫秒为单位;第六列为估计相对误差,即:(估计时间-实际时间)/实际时间。 请统计检验运动速度、运动类型以及练习对速度知觉准确性的影响。 2.研究方法 2.1被试 XX级沈阳体育学院研究生部运动训练7班学生、女、23岁,。 2.2器材 计算机及PsyTech心理实验系统,选择速度知觉实验用按键器进行操作。 2.3步骤 1)被试进入实验室选择一台电脑坐下,打开实验操作系统,选择实验; 2)在组长的指导下打开速度知觉实验,认真阅读实验指导语,并点击开始进行实验;

处理器调度(设计一个按时间片轮转法实现处理器调度的程序)

实验一处理器调度 一、实验容 选择一个调度算法,实现处理器调度。 二、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实习模拟在单处理器情况下的处理器调度,帮助学生加深了解处理器调度的工作。 三、实验题目 设计一个按时间片轮转法实现处理器调度的程序。 [提示]: (1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的 格式为: 其中,Q1,Q2,Q3,Q4,Q5。 指针——进程按顺序排成循环队列,用指针指出下一个进程的进程控制块的首地址最后一个进程的指针指出第一个进程的进程控制块首地址。 要求运行时间——假设进程需要运行的单位时间数。 已运行时间——假设进程已经运行的单位时间数,初始值为“0”。 状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R”表示。 当一个进程运行结束后,它的状态为“结束”,用“E”表示。 (2) 每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。 (3) 把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录轮到运行的进程。例如,当前轮到P2执行,则有: 标志单元 K1 K2 K 3 K4 K5

(4)处理器调度总是选择标志单元指示的进程运行。由于本实习是模拟处理器调度的 功能,所以,对被选中的进程并不实际的启动运行,而是执行: 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。 请同学注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件或运行满一个时间片。在这时省去了这些工作,仅用“已运行时间+1”来表示进程已 经运行满一个时间片。 (5)进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一 个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间 已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前 面一个进程的指针位置。 (6)若“就绪”状态的进程队列不为空,则重复上面的(4)和(5)的步骤,直到所有 的进程都成为“结束”状态。 (7)在所设计的程序中应有显示或打印语句,能显示或打印每次选中进程的进程名以及 运行一次后进程队列的变化。 (8)为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示 或打印逐次被选中的进程名以及进程控制块的动态变化过程。 四. 所用数据结构及符号说明 typedef struct PNode//PCB { struct PNode *next; //定义指向下一个节点的指针 char name[10]; //定义进程名,并分配空间 int All_time; //定义总运行时间 int Runed_Time; //定义已运行时间 char state; //定义进程状态Ready/End } *Proc; //指向该PCB的指针 int ProcNum; //总进程数

作业调度实验报告

作业调度实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

实验二作业调度 一.实验题目 1、编写并调试一个单道处理系统的作业等待模拟程序。 作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。 (1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。 (2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。 (3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。 2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于先来先服务的调度算法。可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。 二.实验目的: 本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三 .实验过程 <一>单道处理系统作业调度 1)单道处理程序作业调度实验的源程序: 执行程序: 2)实验分析:

1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。 2、每个作业由一个作业控制块JCB 表示,JCB 可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W 。 3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。 3)流程图: 二.最短作业优先算法 三.高响应比算法 图一.先来先服务流程图 4)源程序: #include <> #include <> #include <> #define getpch(type) (type*)malloc(sizeof(type)) #define NULL 0 int n; float T1=0,T2=0; int times=0; struct jcb .\n",p->name); free(p); .wait...",time); if(times>1000) 代替 代替

速度知觉实验报告-

速度知觉实验报告 研部:贾月娥 实验目的:学习速度知觉的测量方法,测定速度知觉的准确性。 1.引言 1.1 简介: 速度知觉是运动知觉的一种,与时间知觉也有一定关系。能否正确估计物体的运动速度,在人的实践活动中有重要意义。速度知觉的准确性可以作为职业测评的一个指标。 本实验以亮点实际运动到某处所用时间与被试估计时间之差来评定速度知觉准确性。2.实验对象与方法 1.2 方法与程序:本实验有两种运动速度(40点/秒和100点/秒),三种运动类型(水平、垂直和平面运动)。为克服方向带来的误差,每种运动类型又有两种相反方向(左右、上下和里外),这样就组合成12种任务,每种任务测两次,共24次。各类测定随机呈现。 老师指导被试阅读指示语,说明反应方法(认为时间到了即按反应键),然后开始测定。每次测定之后都有反馈,被试可以对照调整自己以后的估计。时间估计精确到毫秒级。 1.3 结果与讨论:结果分数中列出了平均估计误差(相对误差),由所有24次估计的误差的绝对值平均而来,代表被试的平均估计准确性,越小表示估计越准确。并列出了各种运动方向和速度下的平均估计误差。 详细结果分六列:第一列为运动速度;第二列为运动方向;第三列为实际运动时间;第四列为估计运动时间;第五列为估计绝对误差(正表示估计太迟,误差为负表示估计太早),三四五列均以毫秒为单位;第六列为估计相对误差,即:(估计时间-实际时间)/实际时间。 请统计检验运动速度、运动类型以及练习对速度知觉准确性的影响。 2.研究方法 2.1被试 2015级沈阳体育学院研究生部运动训练7班学生、女、23岁,。 2.2器材 计算机及PsyTech心理实验系统,选择速度知觉实验用按键器进行操作。 2.3步骤 1)被试进入实验室选择一台电脑坐下,打开实验操作系统,选择实验; 2)在组长的指导下打开速度知觉实验,认真阅读实验指导语,并点击开始进行实验; 3)屏幕上将出现运动的小点,被试用按键器对运动的小点进行速度估计。 2.4 数据处理 系统软件对数据进行处理分析。对这组数据进行一系列描述性分析、假设检验、方差分析以及相关分析,得出个人结果、小组结果、总体结果及小组结果与总体结果的差异。 2.4 变量情况

时间片轮转调度算法

#include #include #include #include /*进程控制块数据结构*/ typedef struct node { char name[10];/*进程名*/ int prio; /*进程优先级*/ int round; /*循环轮转法进程每次轮转的时间片*/ int cputime; /*进程累计消耗的CUP时间*/ int needtime; /*进程到完成还需要的CUP时间*/ int count; /*循环轮转法一个时间片内进程运行时间*/ char state; /*进程的状态:'R':运行,'W':等待,'F':结束*/ struct node *next;/*指向下一个进程的链指针*/ }PCB; PCB *finish,*ready,*tail,*run;/*指向三个队列的队首的指针, finish为完成队列头指针, ready为就绪队列头指针, tail为就绪队列的队尾指针, run为当前运行进程头指针*/ int N;/*定义进程的数目*/ void firstin(void); //调度就绪队列的第一个进程投入运行; void print1(char a); //打印表头行信息 void print2(char chose,PCB *p); //打印每一行的状态信息 void print(char chose); //打印每执行一次算法后所有的进程的状态信息 void insert_prio(PCB *q); //在优先数算法中,将尚未完成的PCB按优先数顺序插入到就绪队列中; void prior_init(char chose); //进程优先级法初始化将进程按优先级插入到就绪队列里 void priority(char chose); //进程优先级算法总函数 void insert_rr(PCB *q); //在轮转法中,将执行了一个时间片单位(为2),但尚未完成的进程的PCB,插到就绪队列的队尾; void roundrun_init(char chose); //循环轮转法初始化将就绪队列保存为FIFO队列 void roundrun(char chose); //循环轮转法总算法 void main()//主函数 {

操作系统实验报告-作业调度

作业调度 一、实验目的 1、对作业调度的相关内容作进一步的理解。 2、明白作业调度的主要任务。 3、通过编程掌握作业调度的主要算法。 二、实验内容及要求 1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示: 2、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。 3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。

测试数据 workA={'作业名':'A','到达时间':0,'服务时间':6} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} 运行结果 先来先服务算法 调度顺序:['A', 'B', 'C', 'D', 'E', 'F'] 周转时间: 带权周转时间:

短作业优先算法 调度顺序:['A', 'D', 'F', 'C', 'E', 'B'] 周转时间: 带权周转时间:1. 响应比高者优先算法 调度顺序:['A', 'D', 'F', 'E', 'C', 'B'] 周转时间: 带权周转时间: 五、代码 #encoding=gbk workA={'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8} list1=[workB,workA,workC,workD,workE,workF] list2=[workB,workA,workC,workD,workE,workF] list3=[workB,workA,workC,workD,workE,workF] #先来先服务算法 def fcfs(list): resultlist = sorted(list, key=lambda s: s['到达时间']) return resultlist #短作业优先算法 def sjf(list): time=0 resultlist=[] for work1 in list: time+=work1['服务时间'] listdd=[] ctime=0 for i in range(time): for work2 in list: if work2['到达时间']<=ctime: (work2) if len(listdd)!=0: li = sorted(listdd, key=lambda s: s['服务时间']) (li[0]) (li[0]) ctime+=li[0]['服务时间'] listdd=[]

时间知觉实验报告

时间知觉实验报告 摘要:本实验旨在检验各种因素对时间知觉的影响,检查自我估计在估计时间中的作用,检查刺激不同方式对估计时间的影响,学习用复制法研究估计时间的准确性。实验表明,闪光的频率,光点刺激的方式是影响时间知觉的主要因素。预测快闪比慢闪的时间估计准确性要高,实时距比空时距的时间估计准确性高,短时间比长时间的时间估计准确性要高,但是由于被试提前知道时间长短,存在数秒数的情况,导致此实验未达到预期结果。 关键词:时间知觉空时距实时距闪光频率 1引言 时间知觉:个体对同时直接作用于感觉器官的客观事件的顺序性和持续性的反映。主要包括对时间顺序和时间间隔的知觉。时序知觉是对客观事件的顺序性的知觉,能告诉人们不同事件发生的先后顺序。时距知觉是对客观事件持续性的知觉,能告诉人们某一事件延续的时间长短。实验方法选择复制法。复制法是先呈现一个标准刺激,让被试按标准时间复制。复制时间与标准时间之差,为时间估计差。以此作为时间知觉的准确性指标。因只是仿制,不受过去经验影响,故能确切表达时间知觉的能力。本实验用复制法探究闪光频率,实时距空时距等因素对时间知觉的影响。 2实验一 2.1 实验目的 比较估计快闪光和慢闪光呈现时间的准确性 2.2 方法 2.2.1 被试 西南大学2014级心理学部本科学生名,其中男生5名,女生13名。所有被试均为右利手,视力和听力正常。

2.2.2 实验器材 EP405时间知觉测试仪,华东师范大学科教仪器厂生产。 2.2.3 实验程序 首先,主试按功能键,使显示F2-02S、即刺激时间为2S,按声/光键,使指示灯在光处亮。按连续/始末键,使指示灯在两点均亮。 接着,被试手拿反应盒(键),据仪器刺激(闪光)时间,按任意键,复制(估计)一个与刺激相同的时间,主试立即记下该数,做20次。 最后,主试复位、重新设置,使闪光频率从2Hz到8Hz,同样做20次。2.3 结果 被试在不同情况下估计时间误差绝对值数据汇总求平均值,结果见图1 图1不同闪光频率下2秒与10秒AE值比较(AE指时间估计误差绝对值)由图1可以看出闪光频率越高,时间估计误差越小,时间持续越快,时间估计误差越小 将实验一中时间估计误差的绝对值进行可重复性方差分析的表1,结果发现时间长短呈主效应,闪光频率对结果没有影响,两者不存在交互作用。

时间片轮转进程调度模拟算法的实现

武汉理工大学华夏学院课程设计报告书 课程名称:操作系统原理 题目:时间片轮转进程调度模拟算法的实现系名:信息工程系 专业班级:计算机1132班 姓名:李杰 学号: 10210413209 指导教师: 司晓梅 2015年 6 月 26日

武汉理工大学华夏学院信息工程系 课程设计任务书 课程名称:操作系统原理课程设计指导教师:司晓梅 班级名称:计算机1131-2 开课系、教研室:自动化与计算机 一、课程设计目的与任务 操作系统课程设计是《操作系统原理》课程的后续实践课程,旨在通过一周的实践训练, 加深学生对理论课程中操作系统概念,原理和方法的理解,加强学生综合运用操作系统原理、 Linux系统、C语言程序设计技术进行实际问题处理的能力,进一步提高学生进行分析问题 和解决问题的能力,包含系统分析、系统设计、系统实现和系统测试的能力。 学生将在指导老师的指导下,完成从需求分析,系统设计,编码到测试的全过程。 二、课程设计的内容与基本要求 1、课程设计题目 时间片轮转进程调度模拟算法的实现 2、课程设计内容 用c/c++语言实现时间片轮转的进程调度模拟算法。要求: 1.至少要有5个以上进程 2.进程被调度占有CPU后,打印出该进程正在运行的相关信息 提示: 时间片轮转调度算法中,进程调度程序总是选择就绪队列中的第一个进程,也就是说按照先来先服务原则调度,但一旦进程占用处理机则仅使用一个时间片。在使用完一个时间片后,进程还没有完成其运行,它必须释放出处理机给下一个就绪的进程,而被抢占的进程返回到就绪队列的末尾重新排队等待再次运行。 1)进程运行时,只打印出相关提示信息,同时将它已经运行的时间片加1就可以了。 2)为进程设计出PCB结构。PCB结构所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息等。 3、设计报告撰写格式要求: 1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明 6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)

作业调度算法(先来先服务算法,短作业算法)

《操作系统》实验报告 题目:作业调度算法 班级:网络工程 姓名:朱锦涛 学号:E31314037

一、实验目的 用代码实现页面调度算法,即先来先服务(FCFS)调度算法、短作业优先算法、高响应比优先调度算法。通过代码的具体实现,加深对算法的核心的理解。 二、实验原理 1.先来先服务(FCFS)调度算法 FCFS是最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行的时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。 2.短作业优先算法 SJF算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF算法可以分别用于作业和进程调度。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存。 3、高响应比优先调度算法

高响应比优先调度算法则是既考虑了作业的等待时间,又考虑了作业的运行时间的算法,因此既照顾了短作业,又不致使长作业等待的时间过长,从而改善了处理机调度的性能。 如果我们引入一个动态优先级,即优先级是可以改变的令它随等待的时间的延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。该优先级的变化规律可以描述为: 优先权 = (等待时间 + 要求服务时间)/要求服务时间 三、实验内容 源程序: #include #include #include struct work { i nt id; i nt arrive_time;

时间知觉能力测定实验的报告

时间知觉能力测定的报告 教科院10(5)班第四组黄超群 摘要本实验选取六名女大学生作为被试,掌握用复制法研究时间知觉。实验表明:时间知觉能力存在个体差异;被试估计时间的好坏与刺激呈现时间长短有关;被试估计时间与呈现刺激时间有显著差异,各呈现刺激的长短对被试估计时间是有影响的。 关键词时间知觉时间估计差异显著 1 引言 知觉是当前的客观事物对各个部分和属性在人脑中的综合反映。时间知觉是指个体对客观事件的顺序性和持续性的反映。人类知觉到的世界具有时间上先后延续的性质,因此只有具备时间知觉,人们才能区分先后,理解连续的动作或行为。时间并不是为我们所能见的时针或分针,也不是任何具有实体的存在。时间和空间一起作为事物运动变化的尺度,人们因为知觉到时间而履行生活的规律。因为知觉到时间而持续或停止正在进行的动作,可以说,我们对生命本身的知觉是建立在时间知觉基础上的。时间知觉又可以分为时序时间和时距时间。时序时间让我们分清楚不同事件发生的先后顺序,时距知觉则告诉我们事件延续的时间长短。 从知觉的通道特点和知觉对象的时空属性划分,知觉包含了视知觉、听知觉、空间知觉、时间知觉等,目前还有无觉察知觉的实验。 在这里,我们将研究的是其中的时间知觉。时间知觉反映了每个人对时间感觉的差异,这对我们的生活工作有很大的作用和帮助。用复制法对时间知觉能力进行测定,复制法也可以称为平均差误法,具体做法是先呈现一个标准刺激,让被试复制出觉得和标准刺激一样长的时间,它操作时必须要求被试复制出在感觉上与标准刺激相等的时间来,以复制结果与标准刺激的差别作为时间知觉准确性的指标,并区别被试是高估还是低估了标准时间。 2 实验方法 2.1 被试 6名在校大学生,应用心理学专业,21岁。 2.2 实验仪器 BD—II—121A型时间知觉测试仪 2.3 实验程序 (1)选择刺激方式:按“刺激方式”键,键上方的“光”灯亮,表示光刺激呈现;“声”灯亮,表示声音刺激呈现;声、光灯全亮,则声、光刺激同时呈现。 (2)选择实验次数:按“实验次数”键。键上方“10”灯亮,表示实验进行10次;“20”灯亮,表示进行20次。 (3)选择标准刺激信号类型:按“+”、“—”键,调整信号类型参数(第一位数码管),参数范围0-9,参数0表示连续信号,1-8表示间断的8个不同频率的信号,9表示信号为一段空的时间间隔,即仅仅开始与结束时有很短的刺激呈

时间片轮转调度算法实验报告

xx大学操作系统实验报告 姓名:学号:班级: 实验日期: 实验名称:时间片轮转RR进程调度算法 实验二时间片轮转RR进程调度算法 1.实验目的:通过这次实验,理解时间片轮转RR进程调度算法的运行原理,进一步 掌握进程状态的转变、进程调度的策略及对系统性能的评价方法。 2.需求分析 (1) 输入的形式和输入值的范围; 输入:进程个数n 范围:0

(4) 测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果。正确输入: 错误输入:

2、概要设计 所有抽象数据类型的定义: static int MaxNum=100 int ArrivalTime //到达时间 int ServiceTime //服务时间 int FinishedTime //结束时间 int WholeTime //周转时间 double WeightWholeTime //带权周转时间double AverageWT //平均周转时间double AverageWWT //平均带权周转时间主程序的流程: 变量初始化

FCFS和SJF进程调度算法实验报告

FCFS和SJF进程调度算法实验报告 【实验题目】:编写程序,实现FCFS和SJF算法,模拟作 业调度过程,加深对作业调度的理解。 【实验内容】 实现FCFS和SJF调度算法。 –数据结构设计(JCB,后备作业队列) –算法实现与模拟(排序、调度) –输出调度结果,展示调度过程并解释 【实验要求】 1. 设计作业控制块(JCB)的数据结构 –应包含实验必须的数据项,如作业ID、需要的服务时间、进入系 统时间、完成时间,以及实验者认为有必要的其他数据项。 2. 实现排序算法(将作业排队) –策略1:按“进入系统时间”对作业队列排序(FCFS) –策略2:按“需要的服务时间”对作业队列排序(SJF) 3. 实现调度过程模拟 (1)每个作业用一个JCB表示,如果模拟FCFS,按策略1将作业排队,如果模拟SJF,按策略2将作业排队(2)选择队首的作业,将其从后备队列移出 (3)(作业运行过程,在本实验中,无需实现,可认为后备队列的 作业一但被调度程序选出,就顺利运行完毕,可以进入第4步) (4)计算选中作业的周转时间 (5)进行下一次调度(去往第2步) 4.实现结果输出 –输出作业状态表,展示调度过程 ?初始作业状态(未调度时) ?每次调度后的作业状态 设计作业控制块(JCB)的数据结构 每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。具体结构如下:typedef struct jcb{ char name[10]; /* 作业名*/ char state; /* 作业状态*/ int ts; /* 提交时间*/ float super; /* 优先权*/ int tb; /* 开始运行时间*/ int tc; /* 完成时间*/ float ti; /* 周转时间*/ float wi; /* 带权周转时间*/ int ntime; /* 作业所需运行时间*/ char resource[10]; /* 所需资源*/ struct jcb *next; /* 结构体指针*/ } JCB; JCB *p,*tail=NULL,*head=NULL; 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。,组成一个后备队列等待,总是首先调度等待队列中队首的作业。

相关主题
文本预览
相关文档 最新文档