天津理工大学java上机实验报告实验四:java多线程技术_天津理工大学操作系统实验报告实验三...

本文是一份关于天津理工大学操作系统实验的报告,重点探讨了Java实现的磁盘调度算法,包括FCFS、SSTF、SCAN、CSCAN和NStepSCAN。实验结果显示SSTF算法具有最佳的寻道效率。报告还强调了面向对象编程在代码实现中的优势。
摘要由CSDN通过智能技术生成

天津理工大学操作系统实验报告实验三

实验报告学院(系)名称计算机与通信工程学院姓名学号专业计算机科学与技术班级2010级2班实验项目实验三磁盘调度算法的实现课程名称操作系统课程代码0668036实验时间2011 年12月24日 第3、4节2011 年12月27日 第7、8节2012 年12月30日 第7、8节实验地点软件实验室7-215批改意见成绩教师签字 实验内容1 本实验是模拟操作系统的磁盘寻道方式,运用磁盘访问顺序的不同来设计磁盘的调度算法。2 实现的磁盘调度算法有FCFS,SSTF,SCAN,CSCAN和 NStepSCAN算法。3 设定开始磁道号寻道范围,依据起始扫描磁道号和最大磁道号数,随机产生要进行寻道的磁道号序列。4 选择磁盘调度算法,显示该算法的磁道访问顺序,计算出移动的磁道总数和平均寻道总数。5 按算法的寻道效率进行排序,并对各算法的性能进行分析比较。实验要求1详细描述实验设计思想、程序结构及各模块设计思路;2 详细描述程序所用数据结构及算法;3 明确给出测试用例和实验结果;4 为增加程序可读性,在程序中进行适当注释说明;5 认真进行实验总结,包括设计中遇到的问题、解决方法与收获等;6 实验报告撰写要求结构清晰、描述准确逻辑性强;7 实验过程中,同学之间可以进行讨论互相提高,但绝对禁止抄袭。【实验过程记录(源程序、测试用例、测试结果及心得体会等)】源程序//磁盘调度基类DiskSchedule.javaimport java.util.ArrayList;import java.util.Iterator;import java.util.Random;public abstract class DiskSchedule int start, end;int startSector;boolean isScheduled;ArrayListInteger sector;ArrayListInteger scheduled;ArrayListInteger time;public DiskSchedule start 0;end 255;startSector 0;sector new ArrayListInteger;scheduled new ArrayListInteger;time new ArrayListInteger;isScheduled false;public int getStart return start;public void setStartint start this.start start;public int getEnd return end;public void setEndint end this.end end;public int getSector Random rand new Random47;isScheduled false;return start rand.nextIntend;public double getSeekTime ifisScheduledschedule;int sum 0;IteratorInteger iter time.iterator;whileiter.hasNextsum iter.next;return doublesum/time.size;public void pushSectorint sec sector.addsec;public void setStartSectorint sec startSector sec;public int getStartSector return startSector;public IteratorInteger iterator return sector.iterator;public void visitSectorint times forint i0; itimes; ivisitSector;public void visitSector Random rand new Random;int visitSector start rand.nextIntend-start;sector.addvisitSector;public void debug System.out.println平均调度时间;System.out.printlngetSeekTime;public void printSector ifisScheduledschedule;int i1;IteratorInteger iter sector.iterator;System.out.println原始访问序列;System.out.println序号t磁道号;whileiter.hasNext System.out.printlnititer.next;i;public void printScheduled ifisScheduledschedule;int i1;IteratorInteger sIter scheduled.iterator;IteratorInteger tIter time.iterator;System.out.println调度后;System.out.println开始磁道startSector;System.out.println序号t磁道号t移动距离;whilesIter.hasNext System.out.printlnitsIter.nextttIter.next;i;abstract void schedule;FCFS.javaimport java.util.Iterator;public class FCFS extends DiskSchedule void schedule ifisScheduledreturn;IteratorInteger iter sector.iterator;int prevSectorstartSector;whileiter.hasNext int curSector iter.next;time.addMath.abscurSector-prevSector;scheduled.addcurSector;prevSector curSector;isScheduled true;SSTF.javaimport java.util.ArrayList;import java.util.Iterator;public class SSTF extends DiskSchedule void schedule ifisScheduledreturn;SuppressWarningsuncheckedArrayListInteger tmp ArrayListIntegersector.clone;int prevSectorstartSector;whiletmp.isEmpty int min Integer.MAX_VALUE;int index 0;IteratorInteger iter tmp.iterator;forint i0; iter.hasNext; i int cur Math.absiter.next-prevSector;ifcur min min cur;index i;prevSector tmp.getindex;scheduled.addprevSector;time.addmin;tmp.removeindex;isScheduled true;SCAN.javaimport java.util.ArrayList;import java.util.Iterator;public class SCAN extends DiskSchedule Overridevoid schedule ifisScheduledreturn;SuppressWarningsuncheckedArrayListInteger tmp ArrayListIntegersector.clone;int prevSectorstartSector;whiletmp.isEmpty int min Integer.MAX_VALUE;int index -1;boolean signed true;do IteratorInteger iter tmp.iterator;forint i0; iter.hasNext; i int cur iter.next-prevSector;ifsigned ifcur0 cur min min cur;index i;else ifcur0 Math.abscur min min Math.abscur;index i;signed signed;whileindex -1;prevSector tmp.getindex;scheduled.addprevSector;time.addmin;tmp.removeindex;isScheduled true;CSCAN.javaimport java.util.ArrayList;import java.util.Iterator; public class CSCAN extends DiskSchedule Overridevoid schedule ifisScheduledreturn;SuppressWarningsuncheckedArrayListInteger tmp ArrayListIntegersector.clone;int prevSectorstartSector;whiletmp.isEmpty int min Integer.MAX_VALUE;int index -1;IteratorInteger iter tmp.iterator;forint i0; iter.hasNext; i int cur iter.next-prevSector;ifcur0 cur min min cur;index i;ifindex-1 iter tmp.iterator;forint i0; iter.hasNext; i int cur iter.next;ifi0min cur;else ifcurmin index i;min cur;min Math.absmin-prevSector;prevSector tmp.getindex;scheduled.addprevSector;time.addmin;tmp.removeindex;isScheduled true;NStepSCAN.javaimport java.util.ArrayList;import java.util.Iterator;public class NStepSCAN extends DiskSchedule ArrayListArrayListInteger list;public NStepSCAN super;list new ArrayListArrayListInteger;Overridevoid schedule ifisScheduledreturn;classify;int prevSectorstartSector;IteratorArrayListInteger iter list.iterator;whileiter.hasNext ArrayListInteger q iter.next;IteratorInteger iIter q.iterator;whileiIter.hasNextint curSector iIter.next;time.addMath.abscurSector-prevSector;scheduled.addcurSector;prevSector curSector;isScheduled true;void classify forint istart; iend; i20 ArrayListInteger q new ArrayListInteger;IteratorInteger iter sector.iterator;boolean empty true;whileiter.hasNext int cur iter.next;ificur curi20 q.addcur;empty false;ifemptylist.addq;Main.javapublic class Main public static void testDiskSchedule disk disk.setEnd200;disk.setStartSector100;disk.visitSector10;disk.schedule;disk.printSector;disk.printScheduled;disk.debug;public static void mainString args DiskSchedule fcfs new FCFS;DiskSchedule sstf new SSTF;DiskSchedule scan new SCAN;DiskSchedule cscan new CSCAN;DiskSchedule nstepscan new NStepSCAN;System.out.printlnFCFS调度算法;testfcfs;System.out.printlnSSTF调度算法;testsstf;System.out.printlnSCAN调度算法;testscan;System.out.printlnCSCAN调度算法;testcscan;System.out.printlnNStepSCAN调度算法;testnstepscan;实验结果FCFS调度算法原始访问序列序号磁道号1802273104412551626407888111915410196调度后开始磁道100序号磁道号移动距离1802022753310477412521516237640122788488111239154431019642平均调度时间48.6SSTF调度算法原始访问序列序号磁道号150294318412454761137548101964100调度后开始磁道100序号磁道号移动距离1101129473113194124115646065410750484739182910018平均调度时间16.2SCAN调度算法原始访问序列序号磁道号1028836041625112611671598379671057调度后开始磁道100序号磁道号移动距离11121221164315943416235887466721760785739372010037平均调度时间22.4CSCAN调度算法原始访问序列序号磁道号192236342416151276138762816914710109调度后开始磁道100序号磁道号移动距离110992127183138114147951611461614573620842696220109230平均调度时间28.2NStepSCAN调度算法原始访问序列序号磁道号11712223124426512765672381259501051调度后开始磁道100序号磁道号移动距离1227822643233456335506651171247381273912521017146平均调度时间24.9实验感想FCFS算法是按照输入/输出的先后次序为各个进程服务,即依请求次序访问磁道。此算法易于实现,但效率低下,适合于负载很轻的系统。SSTF基于这样的思想磁头总是访问距离当前磁道最近的磁道。通过这次实验,充分认识了几种磁盘调度算法,并且了解了它们各自的优点缺点。实现的时候使用面向对象的思想能够大大简化代码,提高代码的可重用性,并使代码更加简洁。第13页 共13页

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值