资源描述:
《操作系统实验报告模板》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统实验报告实验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=315:CPU并发执行程序使得在完成整个循环之前输出x的值19:通过控制turn变量使得程序先完成func2()的完整循环再完
2、成func1()的完整循环最后得到结果10023:由于信号量s的出现通过wai(s)和signal(s)语句避免了在未完成循环前推出的情况实验2分析实验结果参照实验指导书回答下面的问题:5:11:发生死锁交换p()函数中wait(e)与wait(s)的顺序之后消费者进入缓冲池后没能够出去,一直占用缓冲池,使得生产者无法进入缓冲池生产.使得进程陷入死锁不剥夺.17:发生死锁:c()函数中wait(n)与wait(s)的顺序后.会导致生产者处于一直生产的状态.当缓冲池满后,生产者在缓冲池中,出不去,消费者也进不了缓冲池.仅使进程处于请求保持状态,还有不剥夺,环路等待状态.实验3(该
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_STKHerT
4、askStk[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
5、*pdata);voidYouTask(void*pdata);voidHerTask(void*pdata);/************************主函数******************************************/voidmain(void){OSInit();//初始化uCOS_IIPC_DOSSaveReturn();//保存Dos环境PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断IntBuffer=OSMemCreate(IntPart,8,6,&err);OSTaskCreate(StartTask,
6、(void*)0,&StartTaskStk[TASK_STK_SIZE-1],0);OSStart();}/****************************任务StartTask*************************************************/voidStartTask(void*pdata){#ifOS_CRITICAL_METHOD==3OS_CPU_SRcpu_sr;#endifpdata=pdata;OS_ENTER_CRITICAL();PC_VectSet(0x08,OSTickISR);PC_SetTickRate(OS
7、_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退出ucosfor(