操作系统实验报告1Word文档下载推荐.docx

上传人:b****5 文档编号:15711011 上传时间:2022-11-15 格式:DOCX 页数:56 大小:227.37KB
下载 相关 举报
操作系统实验报告1Word文档下载推荐.docx_第1页
第1页 / 共56页
操作系统实验报告1Word文档下载推荐.docx_第2页
第2页 / 共56页
操作系统实验报告1Word文档下载推荐.docx_第3页
第3页 / 共56页
操作系统实验报告1Word文档下载推荐.docx_第4页
第4页 / 共56页
操作系统实验报告1Word文档下载推荐.docx_第5页
第5页 / 共56页
点击查看更多>>
下载资源
资源描述

操作系统实验报告1Word文档下载推荐.docx

《操作系统实验报告1Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告1Word文档下载推荐.docx(56页珍藏版)》请在冰豆网上搜索。

操作系统实验报告1Word文档下载推荐.docx

依次类推。

(3)当CPU运行到优先权最低的一个队列时(本实验设计的是三号队列)调度时间片轮转算法。

即当三号队列中的进程在该队列的时间片结束时尚未执行完毕或者是在执行进程的过程中发生枪占,便将该进程插入到本队列的尾部。

三、流程图

四、实验说明

PCB的设计写在一个结构体中!

typedefstruct{

intID;

     唯一的标志;

intPriority;

  优先级我感觉没用到!

intIntime;

   开始小时数;

intfen;

     开始分钟数;

intAlltime;

   完成需要的时间数。

intSpare;

    剩余的时间

CStringState;

  当前的状态;

}REC;

       此处的REC就相当于PCB;

主要是个人习惯!

程序模拟计算机进程调度,用户把所有进程的ID,Priority,intime,alltime等按照一定的格式写在指定的文件中,程序按照该文件中的PCB,按照各自的调度算法建立队列。

程序开始时,利用函数SetTimer(2,500,null),使系统每0.5s调用一次查询程序,看看当前时刻有没有新的进程进入内存.

实验的主要算法细节说明:

首先从后备队列说起:

在后备队列里通过 setTimer(0,500,NULL);

创建一个进程检查器;

标号为0;

0.5s检查一次是否有进程到了开始时间;

如果是则通过 setTimer(1,500,NULL);

创建一个时间计时器来模拟队列1的时间片,当时间片结束了;

如果进程结束了就放到完成队列,如果没有完成就插入下一队列的队尾;

如果此时队列1中还有进程,则继续这样做下去直到队列1做玩,如果做完了则时间片的使用权转到队列2。

通过setTimer(2,500,NULL)来创建时间计时器,过程与队列1相似。

队列3也是同样的做法。

当处理器在执行队列2或3时若有进程进入队列1时则停止当前执行的进程,如果当前执行的进程在队列2中则推入队列3队尾;

如果当前执行的进程在队列3中则同样推入队列3队尾;

五、源程序

voidCAaView:

:

OnTimer(UINTnIDEvent)

{

//TODO:

Addyourmessagehandlercodehereand/orcalldefault

CAaDoc*pDoc=GetDocument();

ASSERT_VALID(pDoc);

switch(nIDEvent)

{

case0:

               //检查后备队列是否到时间

if(clock_fen==59)

{

clock_time++;

clock_fen=-1;

if(clock_time>

23)

{

clock_time=0;

}

}

Look();

clock_fen++;

Invalidate();

break;

case1:

                  //队列1的控制

if(clock==1&

&

pDoc->

list_1.GetCount()!

=0)

pDoc->

pos=pDoc->

list_1.GetHeadPosition();

if(Timeslice1>

0)

{

Timeslice1=Timeslice1-1;

pDoc->

arr=pDoc->

list_1.GetAt(pDoc->

pos);

pDoc->

arr.Spare=pDoc->

arr.Spare-5;

list_1.SetAt(pDoc->

pos,pDoc->

arr);

if(pDoc->

pos).Spare<

pDoc->

arr.State="

已完成"

;

list_4.AddTail(pDoc->

list_1.RemoveAt(pDoc->

Timeslice1=10;

Invalidate();

}

else

list_2.AddTail(pDoc->

pos));

Timeslice1=10;

Invalidate();

else

clock=2;

KillTimer

(1);

SetTimer(2,500,NULL);

case2:

                    //队列2的控制

if(clock==2&

list_2.GetCount()!

list_2.GetHeadPosition();

if(Timeslice2>

Timeslice2=Timeslice2-1;

list_2.GetAt(pDoc->

list_2.SetAt(pDoc->

list_2.RemoveAt(pDoc->

Timeslice2=20;

list_3.AddTail(pDoc->

clock=3;

KillTimer

(2);

SetTimer(3,500,NULL);

case3:

                  //队列3的控制

if(clock==3&

list_3.GetCount()!

list_3.GetHeadPosition();

if(Timeslice3>

Timeslice3=Timeslice3-1;

list_3.GetAt(pDoc->

list_3.SetAt(pDoc->

if(pDoc->

list_3.RemoveAt(pDoc->

Timeslice3=30;

KillTimer(3);

default:

}

CView:

OnTimer(nIDEvent);

}这是对队列1中的进程进行控制的算法.每当一个进程调度,当其剩余时间<

=0时,表明该进程执行完毕,修改该进程的状态标志State,

当剩余时间>

0时,则表明在该队列规定的时间片内该进程没有执行完毕,则插入到下一队列的尾部.SetTimer(2,500,NULL);

使系统每0.5s调用一次查询程序.

对于3号队列,当一个进程运行完毕之后,程序并不将其插入到下一队列中,而是直接将它放到本队列的末尾,进行时间片轮转.

六、测试方法及结果

进程的信息放在一个.txt文件里面.

程序运行时用户可以随时添加新的进程并且不中断当前进程的执行.

系统时间设置:

为了模拟方便取当前进程中最小的。

AtTime1:

00

***********前面三个进程已进入内存*******************

IDPriorityinAlltimeState

121:

00125未完成

231:

0050未完成

331:

00320未完成

*****************************************************

第一个对列的时间片是50

当第4个进程进入1号队列时,3进程正在运行,2进程已运行完毕

************4进程刚进入队列的2的情况*****************************

IDPriorityinspareAlltimeState

0075125未完成

00270320未完成

411:

30150200未完成

*****************************************************************

************4进程刚进入3号队列的情况**********************

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

当前位置:首页 > 工程科技 > 能源化工

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

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