2016数媒操作系统课程设计

上传人:hs****ma 文档编号:498799572 上传时间:2023-04-04 格式:DOCX 页数:14 大小:53.35KB
返回 下载 相关 举报
2016数媒操作系统课程设计_第1页
第1页 / 共14页
2016数媒操作系统课程设计_第2页
第2页 / 共14页
2016数媒操作系统课程设计_第3页
第3页 / 共14页
2016数媒操作系统课程设计_第4页
第4页 / 共14页
2016数媒操作系统课程设计_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《2016数媒操作系统课程设计》由会员分享,可在线阅读,更多相关《2016数媒操作系统课程设计(14页珍藏版)》请在金锄头文库上搜索。

1、浙江理工大学操作系统课程设计课程设计报告2016 2017学年第1学期学院信息学院班级14数字媒体技术2班姓名黄宇达、沈宁学号20143297000422014329700046任课教师桂宁数字媒体技术专业2017年1月操作系统课程设计实 验报告实验名称:操作系统课程设计实验地点:10-414所使用的工具软件及环境:Win7 系统,Eclipse、实验目的:操作系统原理是计算机专业的核心课程。本课程设计的目的旨在加深学生对计算机操 作系统内核的理解,提高对操作系统内核的分析与扩展能力。在课程理论教学中,较 多地是讲解操作系统理论和实现原理。在阅读Linux操作系统源代码的基础上完成两个主要Pr

2、oject。题目可选做A类或者 B类,或者C类,或者自主命题。A、本课程设计要求学生在阅读Linux操作系统源代码的基础上完成如下两个主要 Project:1、在Linux2.4的内核中添加新的系统调用,以理解系统调用的工作机制,掌握 扩展内核功能的技术。2、在Linux2.4中修改调度程序的代码,扩展一个新的调度算法B、在Java虚拟机上完成如下两个Project (2, 3选一):1、基于java虚拟机的线程调度2、请求页式管理的Java实现3、用JAVA语言模仿“生产者一消费者问题C、方向命题,具体内容不限,任选2题;D、自主命题。二、实验内容:该小组为二人小组,选择完成B类中的以下两个

3、任务1、基于java虚拟机的线程调度3、用JAVA语言模仿“生产者一消费者问题具体实验内容如下基于java虚拟机的线程调度1、Java线程的优先级机制及调度机制2、用Java语言实现基于优先级的轮转线程调度至少创建5个线程并输出它们在上述调度算法下的调度情况,并输出到终端,以检查算法 的执行情况用JAVA语言模仿“生产者一消费者问题”1. 通过Java语言中的wait ()和no tify ()命令模拟操作系统中的P/V操作;2. 为每个生产者/消费者产生一个线程,设计正确的同步算法3. 每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的当前全部内容、当前指针位置和生产者/消费者线

4、程的自定义标识符。4. 生产者和消费者各有两个以上。多个生产者或多个消费者之间须共享对缓冲区进行操作的函数代码。三、源代码1基于java虚拟机的线程调度/*起始化类*/import java.util.ArrayList;import java.util.List;public class Process public static Listvdouble task_info=new ArrayListv();/进程列表public static int task_num=5;进程数public static void init_task()初始化进程列表for(int i=O;ivtask_

5、num;i+)double t=new double4;t0=i;进程号 tl=0;到达时间t2=0;响应比t3=(int)(Math.random()*100)%20+1;/需要运行时间 task_info.add(t);public static void main(String arg)Process.init_task();/初始化进程列表System.out.println(”nn=时 间 片 轮 转=);RR.init_task(task_info,task_num);RR.CircleTime();时间片轮转/*主类*/import java.text.SimpleDateFor

6、mat;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.concurrent.ArrayBlockingQueue;/* Created by 32706 on 2016/12/8.*时间片轮转调度算法*/public class RR private static SimpleDateFormat tm= new SimpleDateFormat(HH:mm:ss);private static int task_num=5;private static int C

7、ircle_size=4; 定义时间片大小public static ArrayBlockingQueue task_q=new ArrayBlockingQueue(task_num);进程 队列private static Listvdouble execute_time=new ArrayListv();/进程执行时间public static void CircleTime()try while (true) double t = new double4;t = (double)task_q.take();int current_task_time=(int)t3;int task_N

8、O=(int)t0;System.out.print(tm.format(new Date()+第+task_NO+号进程开始运行 ).bif(current_task_timev=Circle_size)/如果能够在本时间片中运行完成Thread.sleep(long) current_task_time*1000);/模 拟运行所需时间 System.out.println(tm.format(new Date()+结束执行=本次用时 +current_task_time+S);double exe_t=new double2;exe_t0=task_NO; exe_t1=System.c

9、urrentTimeMillis()-t1;计算该进程所用的周转时 间execute_time.add(exe_t);加入到周转时间队列 else /如果不能再本次时间片中运行完t3=t3-Circle_size;task_q.put(t);Thread.sleep(Circle_size*1000);System.out.println(tm.format(new Date()+本次时间片用完进 程等待”);if(task_q.size()=O)如果进程队列为空了,就退出循环 break;catch (Exception e) show_time();显示每个进程的调度时间public st

10、atic void show_time()显示每个进程的调度时间double sum_time=0;for(int i=O;ivexecute_time.size();i+)double t=execute_time.get(i);System.out.println(task:+t0+:周 转时间=+(int)(tl/1000)+S); sum_time+=tl;System.out.println(”使用时间片轮转的策略,平均周转时间为: +(int)(sum_time/execute_time.size()/1000)+S);static void init_task(Listvdoub

11、le in,int tn)/初 始化进程列表task_num=tn;for(int i=O;ivtask_num;i+)double t=in.get(i);t1 = System.currentTimeMillis();/获得进程到达时间try task_q.put(t); catch (InterruptedException e) e.printStackTrace();用JAVA语言模仿“生产者一消费者问题”import java.util.LinkedList;public class Storage/仓库最大存储量private final int MAX_SIZE = 100;/

12、仓库存储的载体private LinkedListvObject list = new LinkedListvObject();/生产num个产品public void produce(int num)/同步代码段synchronized (list)/如果仓库剩余容量不足while (list.size() + num MAX_SIZE)System.out.println(”【要生产的产品数量】:+ num + /t【库存量】: + list.size() + /t暂时不能执行生产任务!”);try/由于条件不满足,生产阻塞list.wait();catch (InterruptedExc

13、eption e)e.printStackTrace();/生产条件满足情况下,生产num个产品for (int i = 1; i = num; +i)list.add(new Object();System.out.println(”【已经生产产品数】:+ num + /t【现仓储量为】:+ list.size();list.notifyAll();/消费num个产品public void consume(int num)/同步代码段synchronized (list)/如果仓库存储量不足while (list.size() num)System.out.println(”【要消费的产品数量】:+ num + /t【库存量】:+ list.size() + /t暂时不能执行生产任务!”);try/由于条件不满足,消费阻塞list.wait();catch (InterruptedException e)e.printStackTrace();/消费条件满足情况下,消费num个产品for (int i = 1; i getList() return list;public void setList(LinkedListvObj

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号