操作系统实验报告模板Word下载.docx
- 文档编号:19188269
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:12
- 大小:200.58KB
操作系统实验报告模板Word下载.docx
《操作系统实验报告模板Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告模板Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
19:
通过控制turn变量使得程序先完成func2()的完整循环再完成func1()的完整循环最后
得到结果100
23:
由于信号量s的出现通过wai(s)和signal(s)语句避免了在未完成循环前推出的情况
实验2
发生死锁
交换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
pdata=pdata;
for(;
)
PC_DispStr(10,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE);
IntBlkPtr=OSMemGet(IntBuffer,&
//请求内存块,分区指针,错误信息
OSMemQuery(IntBuffer,&
MemInfo);
//查询内存控制块信息,待查询内存控制块指针
sprintf(s,"
%0x"
MemInfo.OSFreeList);
//头指针
PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_WHITE);
%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)
PC_DispStr(10,++y,s2,DISP_BGND_BLACK+DISP_FGND_YELLOW);
//头指针
PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);
PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_YELLOW);
OSTimeDlyHMSM(0,0,2,0);
//等待2s
/**************************任务HerTask******************************/
voidHerTask(void*pdata)
PC_DispStr(10,++y,s3,DISP_BGND_BLACK+DISP_FGND_RED);
PC_DispStr(30,y,s,DISP_BGND_BLACK+DISP_FGND_RED);
PC_DispStr(40,y,s,DISP_BGND_BLACK+DISP_FGND_RED);
//释放内存块,
//等待1s
问题3:
上述程序输出结果的截屏画面
实验5
FCFS磁盘调度算法的实现
#include<
stdio.h>
math.h>
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号磁道开始"
);
\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;
distance);
average=sum/count;
sum=%2f"
sum);
average=%f"
average);
voidmain()
fcfs(array);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告 模板