操作系统实验报告模板.docx

上传人:b****6 文档编号:6185063 上传时间:2023-01-04 格式:DOCX 页数:12 大小:200.58KB
下载 相关 举报
操作系统实验报告模板.docx_第1页
第1页 / 共12页
操作系统实验报告模板.docx_第2页
第2页 / 共12页
操作系统实验报告模板.docx_第3页
第3页 / 共12页
操作系统实验报告模板.docx_第4页
第4页 / 共12页
操作系统实验报告模板.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

操作系统实验报告模板.docx

《操作系统实验报告模板.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告模板.docx(12页珍藏版)》请在冰豆网上搜索。

操作系统实验报告模板.docx

操作系统实验报告模板

操作系统实验报告

实验1

分析实验结果参照实验指导书回答下面的问题:

5:

6:

从实验中得到了两次不同的结果

原因是程序采用了多线程的写法,两个线程同时抢占CPU资源,CPU并发处理该程序。

10:

11:

CPU并发处理程序

第一次

先运行func2()中的x=x+2再输出x=2接着执行func2()中的y=3,然后执行func1()x=3y=y+x,输出y所以结果为x=2y=7

第二次

先运行func1()中的x=4y=4再运行func2()中y=3x=x+2

得到x=6y=3

15:

CPU并发执行程序使得在完成整个循环之前输出x的值

19:

通过控制turn变量使得程序先完成func2()的完整循环再完成func1()的完整循环最后

得到结果100

23:

由于信号量s的出现通过wai(s)和signal(s)语句避免了在未完成循环前推出的情况

实验2

分析实验结果参照实验指导书回答下面的问题:

5:

11:

发生死锁

交换p()函数中wait(e)与wait(s)的顺序之后

消费者进入缓冲池后没能够出去,一直占用缓冲池,使得生产者无法进入缓冲池生产.

使得进程陷入死锁

不剥夺.

17:

发生死锁:

c()函数中wait(n)与wait(s)的顺序后.

会导致生产者处于一直生产的状态.当缓冲池满后,生产者在缓冲池中,出不去,消费者也进不了缓冲池.仅使进程处于请求保持状态,还有不剥夺,环路等待状态.

实验3(该实验为期中考试项目,按照期中考试要求提交报告)

实验4

问题1:

描述内存控制块结构;描述内存控制块与内存分区和内存块的关系

¦只有当把内存控制块与分区关联起来之后,系统才能对其进行相应的管理和控制。

它才是一个真正的动态内存区。

问题2:

应用程序的源代码(请对内存操作给出注释)

#include"includes.h"

#defineTASK_STK_SIZE512//任务堆栈长度

OS_STKStartTaskStk[TASK_STK_SIZE];

OS_STKMyTaskStk[TASK_STK_SIZE];

OS_STKYouTaskStk[TASK_STK_SIZE];

OS_STKHerTaskStk[TASK_STK_SIZE];

INT16Skey;//用于退出uCOS_II的键

char*s;

char*s1="MyTask--ZYS";

char*s2="YouTask-ZYS";

char*s3="HerTask-ZYS";

INT8Uerr;

INT8Uy=0;//字符显示位置

INT8UTimes=0;

OS_MEM*IntBuffer;//定义内存控制块指针

INT8UIntPart[8][6];//划分分区及内存块

INT8U*IntBlkPtr;

OS_MEM_DATAMemInfo;

voidStartTask(void*pdata);

voidMyTask(void*pdata);

voidYouTask(void*pdata);

voidHerTask(void*pdata);

/************************主函数******************************************/

voidmain(void)

{

OSInit();//初始化uCOS_II

PC_DOSSaveReturn();//保存Dos环境

PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断

IntBuffer=OSMemCreate(IntPart,8,6,&err);

OSTaskCreate(StartTask,(void*)0,&StartTaskStk[TASK_STK_SIZE-1],0);

 

OSStart();

}

/****************************任务StartTask*************************************************/

voidStartTask(void*pdata)

{

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

OS_ENTER_CRITICAL();

PC_VectSet(0x08,OSTickISR);

PC_SetTickRate(OS_TICKS_PER_SEC);

OS_EXIT_CRITICAL();

OSStatInit();

OSTaskCreate(MyTask,(void*)0,&MyTaskStk[TASK_STK_SIZE-1],3);

OSTaskCreate(YouTask,(void*)0,&YouTaskStk[TASK_STK_SIZE-1],4);

OSTaskCreate(HerTask,(void*)0,&HerTaskStk[TASK_STK_SIZE-1],5);

//按ESC退出ucos

for(;;)

{

if(PC_GetKey(&key)==TRUE){

if(key==0x1B){

PC_DOSReturn();

}

}

OSTimeDlyHMSM(0,0,3,0);

}

}

/****************************任务MyTask*************************************************/

voidMyTask(void*pdata)

{

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

for(;;)

{

PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);

IntBlkPtr=OSMemGet(IntBuffer,&err);//请求内存块,分区指针,错误信息

OSMemQuery(IntBuffer,&MemInfo);//查询内存控制块信息,待查询内存控制块指针

sprintf(s,"%0x",MemInfo.OSFreeList);//头指针

PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);

sprintf(s,"%d",MemInfo.OSNUsed);//显示已用数目

PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);

if(Times>4)

{

OSMemPut(IntBuffer,IntBlkPtr);//释放内存块,

}

Times++;

OSTimeDlyHMSM(0,0,1,0);//等待1s

}

}

/**********************************任务YouTask*************************************/

voidYouTask(void*pdata)

{

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

for(;;)

{

PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_YELLOW);

IntBlkPtr=OSMemGet(IntBuffer,&err);//请求内存块,分区指针,错误信息

OSMemQuery(IntBuffer,&MemInfo);//查询内存控制块信息,待查询内存控制块指针

sprintf(s,"%0x",MemInfo.OSFreeList);//头指针

PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);

sprintf(s,"%d",MemInfo.OSNUsed);//显示已用数目

PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);

OSMemPut(IntBuffer,IntBlkPtr);//释放内存块,

OSTimeDlyHMSM(0,0,2,0);//等待2s

}

}

/**************************任务HerTask******************************/

voidHerTask(void*pdata)

{

#ifOS_CRITICAL_METHOD==3

OS_CPU_SRcpu_sr;

#endif

pdata=pdata;

for(;;)

{

PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_RED);

IntBlkPtr=OSMemGet(IntBuffer,&err);//请求内存块,分区指针,错误信息

OSMemQuery(IntBuffer,&MemInfo);//查询内存控制块信息,待查询内存控制块指针

sprintf(s,"%0x",MemInfo.OSFreeList);//头指针

PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_RED);

sprintf(s,"%d",MemInfo.OSNUsed);//显示已用数目

PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_RED);

OSMemPut(IntBuffer,IntBlkPtr);//释放内存块,

OSTimeDlyHMSM(0,0,1,0);//等待1s

}

}

问题3:

上述程序输出结果的截屏画面

实验5

FCFS磁盘调度算法的实现

#include

#include

inti,j,t;

intpoint=100,distance=0;

floatsum=0,average=0;

intarray[9]={55,58,39,18,90,160,150,38,184};

intfcfs(intarray[9])

{

intcount=0;

printf("从100号磁道开始");

printf("\n");

printf("被访问的下一个磁道号移动磁道数");

printf("\n");

for(i=0;i<9;i++)

{

count=count+1;

printf("%d",array[i]);

distance=fabs(point-array[i]);

point=array[i];

sum=sum+distance;

printf("%d",distance);

printf("\n");

}

average=sum/count;

printf("sum=%2f",sum);

printf("\n");

printf("average=%f",average);

printf("\n");

}

voidmain()

{

fcfs(array);

}

 

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

当前位置:首页 > 表格模板 > 合同协议

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

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