欢迎来到天天文库
浏览记录
ID:9649463
大小:785.48 KB
页数:49页
时间:2018-05-04
《操作系统课程设计-代码分析及设计实现及测试报告》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、操作系统课程设计报告目录目录2一、前期工作31.1平台搭建3二、代码分工3三、设计及实现43.1Task1.1KThread.join()43.1.1要求分析43.1.2设计方案43.1.3实现代码43.1.4测试代码及结果53.2Task1.2condition2类73.2.1要求分析73.2.2设计方案83.2.3实现代码83.2.4测试代码及结果83.3Task1.3alram类113.3.1要求分析113.3.2设计方案113.3.3实现代码123.3.4测试代码及结果123.4Task1.4
2、communicator类143.4.1要求分析143.4.2设计方案143.4.3实现代码143.4.4测试代码及结果153.5Task1.5priorityscheduler类173.5.1要求分析173.5.2设计方案173.5.3实现代码183.5.4测试代码及结果183.6Task1.6boat类233.6.1要求分析233.6.2设计方案233.6.3实现代码233.6.4测试代码及结果303.7Task2.1系统调用creat,open,read,write,close,unlink30
3、3.7.1要求分析303.7.2设计方案313.7.3实现代码323.7.4测试代码及结果343.8Task2.2多进程内存分配及访问353.8.1要求分析353.8.2设计方案353.8.3实现代码363.8.4测试代码及结果393.9Task2.3系统调用exec,join,exit413.9.1要求分析413.9.2设计方案413.9.3实现代码423.9.4测试代码及结果433.10Task2.4LotterySchedule类443.10.1要求分析443.10.2设计方案453.10.3实
4、现代码453.10.4测试代码及结果45总结48一、前期工作1.1平台搭建NachosForJavaphrase1部分:IDE环境可采用Eclipse。Phase2及以后阶段:需要把C程序编译成MIPS二进制文件COFF,需要MIPS的C编译器mips-x86.linux-xgcc(ubuntu12.04平台下)。一、代码分工三、设计及实现3.1Task1.1KThread.join()3.1.1要求分析Join()方法的含义:当前线程a在运行,执行b.join(),则a阻塞,直到线程b结束,a继续执
5、行。Join函数的作用即为等待某线程运行完毕。当前线程(唯一一个正在运行的线程)A调用另一个线程(处于就绪状态)B的join函数时(A和B在Nachos中均为KThread类型对象),A被挂起,直到B运行结束后,join函数返回,A才能继续运行。注意在一个KThread对象上只能调用一次join,且当前线程不能对自身调用join。3.1.2设计方案为每个线程创建一个线程队列joinqueue,joinqueue由对本线程调用join方法的其他线程对象构成,可“捐赠”优先级,以及布尔形变量joined,
6、判断本线程是否被其他线程调用过join方法,以及一个判断线程状态方法IsAlive()。假设当前线程A调用就绪线程B的join函数.在join函数中线程A被添加到线程B的线程队列joinqueue中,将线程A“休眠”,线程B得到执行,在线程B结束时(此时线程B成为当前线程,发生在KThead.finish函数中)选择B的joinqueue的nextThread()执行,A唤醒并继续.3.1.3实现代码在KThread.java中:privateThreadQueuejoinQueue=null;pri
7、vatebooleanJoined=false;publicbooleanIsAlive(){if(this.status==statusNew
8、
9、status==statusReady
10、
11、status==statusRunning
12、
13、status==statusBlocked)returntrue;elsereturnfalse;}publicvoidjoin(){//if(!this.IsAlive())return;while(IsAlive()){//this.joinQueue.acquir
14、e(this);//}this.joinQueue.waitForAccess(KThread.currentThread());KThread.sleep();//}}publicstaticvoidfinish(){///if(currentThread.Joined){currentThread.joinQueue.nextThread().ready();}///}3.1.4测试代码及结果创建AThread和Bthread两个线程,AThread
此文档下载收益归作者所有