基于SPOOLing技术的多打印机管理系统仿真.docx_第1页
基于SPOOLing技术的多打印机管理系统仿真.docx_第2页
基于SPOOLing技术的多打印机管理系统仿真.docx_第3页
基于SPOOLing技术的多打印机管理系统仿真.docx_第4页
基于SPOOLing技术的多打印机管理系统仿真.docx_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京农业大学信息科技学院计算机科学与技术系 操作系统课程设计实践报告 操作系统课程设计实践报告题 目:基于SPOOLing技术的多打印机管理系统仿真 姓 名: 学 院: 信息科技学院 专 业: 计算机与科学系 班 级: 网络工程131 学 号: 指导教师: 姜海燕 职称: 教授 2016年3月 18 日南京农业大学信息科技学院计算机科学与技术系 操作系统课程设计实践报告目录摘要2关键字21. 目的及意义22. 课程设计思路及完成功能说明32.1设计思路32.2 完成功能说明43. 硬件及数据结构设计与实现53.1 输入请求块类Inblock53.2 PCB类53.3请求输出类Reqblock63.4 主类Spooling63.5 可视化类Spooling_Frame84. 仿真系统结构及关键操作实现94.1 Spooling(Spooling_Frame Spooling_Frame)94.2 main_control主控函数104.3 require_output_service(Pcb pcb)-请求输出函数104.4 SpoolingPcb()-Spooling输出函数114.5 FCFSPrint()-先来先服务算法124.6 SJFPrint()-短作业优先调度算法124.7文件管理135. 测试用例及分析135.1开发调试及运行环境135.2不同情境的测试用例,分析模拟结果156. 小组分工及实践体会227. 存在问题及改进24参考文献24核心部分代码2544基于SPOOLING技术的多打印机管理系统仿真实现摘要:SPOOLING技术实际上是一种外围设备同时联机操作技术,是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为假脱机技术。 SPOOLING技术是在通道技术和多道程序设计基础上产生的,它由主机和相应的通道共同承担作业的输入输出工作,利用磁盘作为后援存储器,实现外围设备同时联机操作。本设计模拟实现了使用SPOOLING技术的输出过程,并采用随机调度算法模拟SPOOLING进程的调度过程和先来先服务、短作业优先算法模拟各进程的作业调度过程。它包括一个SPOOLING输出进程、三个请求输出的进程和一个简单的文件管理系统模块。请求输出进程每次调用请求服务程序输出一行信息,由输出请求服务程序将该信息项送入输出井。待输出一个结束标志时,表示一个输出文件输出完成,在输出井中形成一个输出信息块,并构成一个输出请求块,SPOOLING输出进程工作时,根据某输出请求块将输出井中相应信息块实际输出到打印机或显示器,然后可由打印按钮触发打印过程将实际信息打印到相应打印机中并显示。SPOOLING进程与请求输出进程可并发运行。关键字:SPOOLING;进程;输出井;联机操作;打印机1.目的及意义Spooling技术:利用高速共享设备将低速的独享设备模拟为高速的共享设备。它是关于慢速字符设备如何与计算机主机交换信息的一种技术,通常称为“假脱机技术”。它在输入和输出之间增加了“输入井”和“输出井”的排队转储环节,以消除用户的“联机”等待时间。在系统输入模块收到作业输入请求信号后,输入管理模块中的读过程负责将信息从输入装置中读入输入井缓冲区。当缓冲区满时,由写过程将信息从缓冲区写到外存的输入井中,读过程和写过程反复循环,直到一个作业输入完毕。当读过程读到一个硬件结束标志之后,系统再次驱动写过程把最后一批信息写入外存输入井并调用中断处理程序结束该次输入。然后,系统为该作业建立作业控制块,从而使输入井中的作业进入作业等待队列,等待作业调度程序选中后进入内存运行。系统在管理输入井过程中可以“不断”读入输入的作业,直到输入结束或输入井满而暂停。设计目的,若系统的某台打印机采用了虚拟设备技术,那么若有进程要求对它打印输出时,SPOOLing系统并不是将这台打印机直接分配给进程,而是在共享设备(磁盘)上的输出,SPOOLing存储区中为其分配一块存储空间,进程的输出数据以文件形式此。各进程的数据输出文件形成了一个输出队列,由输出SPOOLing系统控制这台打印机进程,依次将队列中的输出文件实际打印输出。在SPOOLing系统中,实际上并没有为任何进程分配,而只是在输入井和输出井中,为进程分配一存储区和建立一章I/O请求表。这样,便把独占设备改造为共享设备。将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLing技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。2.课程设计思路及完成功能说明2.1设计思路: SPOOLING技术的特点主要体现在以下三个方面: 第一,提高了I/O速度.从对低速I/O设备进行的I/O操作变为对输入井或输出井的操作,如同脱机操作一样,提高了I/O速度,缓和了CPU与低速I/O设备速度不匹配的矛盾。第二,设备并没有分配给任何进程.在输入井或输出井中,分配给进程的是一存储区和建立一张I/O请求表。第三,实现了虚拟设备功能.多个进程同时使用一台独享设备,而对每一进程而言,都认为自己独占这一设备,不过,该设备是逻辑上的设备。操作系统初启后激活SPOOLING输入程序使它处于捕获输入请求的状态,一旦有输入请求消息,SPOOLING输入程序立即得到执行,把装在输入设备上的作业输入到硬盘的输入井中。输入井是一组硬盘扇区SPOOLING输出把硬盘上输出井的数据送到慢速的输出设备上。输出井的数据来自作业运行过程中的输出。这就是说,作业调度程序不是从输入设备上装入作业,而是直接从输入井中把选中的作业装入主存,使主机等待作业输入的时间大为缩短。同样对作业的输出而言,写到输出井要比写到输出设备快得多。即使作业的JCB已注销,SPOOLING输出活动仍可以从容地把输出井中没有输出完的数据继续输出到输出设备上。由此可见,引入SPOOLING技术,把一个共享的硬盘改造成若干台输入设备(对作业调度程序而言)和若干台输出设备(对各作业而言)。这样的设备称为虚拟设备,它们的物理实体是输入(出)井。这样改造之后,保持了物理的输入(出)设备繁忙地与主机并行地工作,提高了整个系统的利用率。SPOOLING技术是在通道技术和多道程序设计基础上产生的,它由主机和相应的通道共同承担作业的输入输出工作,利用磁盘作为后援存储器,实现外围设备同时联机操作。SPOOLING系统由专门负责I/O的常驻内存的进程以及输入井、输出井组成;它将独占设备改造为共享设备,实现了虚拟设备功能。将一台独享打印机改造为可供多个用户共享的打印机,是应用SPOOLING技术的典型实例。具体做法是:系统对于用户的打印输出,但并不真正把打印机分配给该用户进程,而是先在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。若打印机空闲,输出程序从请求打印队首取表,将要打印的数据从输出井传送到内存缓冲区,再进行打印,直到打印队列为空。 假脱机(Spooling)技术是广泛用于各种系统的一种行之有效的输入输出手段,这种技术使用比较简单的方法,缓和了处理机与低速输入输出设备速度不匹配的矛盾,提高设备的利用率。为了更好地掌握这种技术,本实习要求学生独立地用高级语言编写一个Spooling程序来模拟假脱机输入输出过程。本实验编制一个Spooling 输出进程,另外三个要求输出的进程并发运行。要求输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,再由Spooling 进程把整个信息块实际输出到打印机或CRT。因此,进程的运行必须考虑同步问题。进程基本状态有3种,分别为可执行,等待和结束。可执行态就是进程正在运行或等待调度的状态。状态变化的条件为:(一共有五种状态,分别代表0,1,2,3,4)(1)进程执行完成时,置为“结束”态。(2)服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。(3)SPOOLING进程在进行输出时,若输出井空,则进入“等待状态2”。(4)SPOOLING进程输出一个信息快后,应立即释放该信息快所占的输出井空间,并将正在等待输出的进程置为“可执行状态”。(5)服务程序在输出信息到输出井并形成输出请求信息快后,若SPOOLING进程处于等待态则将其置为“可执行状态”。(6)当用户进程声请请求输出快时,若没有可用请求快时,调用进程进入“等待状态3”。2.2 完成功能说明(1)该系统设计了一个SPOOLING输出进程和三个请求输出的用户进程,以及一个SPOOLING输出服务程序。当确定用户进程文件数目时,调用输出服务程序,由输出服务程序将该信息送入输出井。待遇到一个输出结束标志时,表示进程该次的输出文件输出结束。之后,申请一个输出请求块,等待SPOOLING进程进行输出。(2)SPOOLING输出进程工作时,根据请求块记录的各进程要输出的信息,将其实际输出到打印机显示器,并且可以选择作业调度算法,实现先来先服务作业调度以及短作业优先作业调度,并进行仿真打印,可生成TXT文件,其中请求输出的用户进程可并发运行,进程调度方法为先来先服务调度算法。(3)实现了简单的文件管理功能,可以对外存进行管理,当文件输出到井中时,可以对文件进行简单的管理,包括创建文件以及将作业内容输出到文件中,实现外存管理。3.硬件及数据结构设计与实现3.1 输入请求块类Inblock 记录进程的输入情况,包括请求进程名,本次输入的信息长度以及信息在输入井中的首地址,将进程中文件放入请求输入块中。class Inblock /输入请求类private int inname1; /请求进程名private int length1; /本次输入信息长度private int addr1; /信息在输入井的首地址3.2 PCB类记录进程控制块情况,包括:(1)进程标志数,记录进程编号(id=1,2,3,4)q其中1,2,3代表用户进程,4代表SPOOLing输出进程。(2)进程状态,记录进程的状态(status=0,1,2,3,4) 0:为可执行状态,1:为服务程序在将输出信息送输出井时,如发现输出井已满,将调用进程置为“等待状态1”。2:为SP00LING进程在进行输出时,若输出井空,则进入“等待状态2”。3:为当用户进程申请请求输出块时,若没有可用请求块时,调用进程进人“等待状态3”。4为结束状态。(3)要输出的文件数,记录一个进程中要输出的作业个数(count),可由键盘输入。(4)进程输出时的临时变量,记录每个作业中的具体数值(X)。(5)记录用户进程请求输入的文件在缓冲区的首地址(address)。(6)记录请求输入的文件长度(length)。public class Pcb /进程控制块类private int id; /进程标志数private int status;/进程状态private int count;/要输出的文件数private int x;/进程输出时的临时变量private int address;/记录用户进程请求输入的文件在缓冲区的首地址private int length;/记录请求输入的文件长度3.3请求输出类Reqblock记录进程的输出情况,输出进程每运行一次只输出一项信息到输出井,待输出到一个结束标志时,表示一批信息输出完成,在输出井中形成一输出信息块,包括请求进程名,本次输入的信息长度已经信息在数入井中的首地址,将进程中文件放入请求输出块中。public class Reqblock /输出请求类private int reqname; /请求进程名private int length; /本次输出信息长度private int addr; /信息在输出井的首地址3.4 主类Spooling对数据进行初始化,实现进程的同步互斥输入,并对井进行管理,在输出井中申请一个空闲盘块区,并将要打印的数据送入其中;然后为用户申请并填写请求打印表,将该表挂到请求打印队列上。实现简单文件管理,以及打印功能的实现和作业调度算法的实现。(1)Spooling() 构造函数,初始化数据(2)Spooling(Spooling_Frame Spooling_Frame) 构造函数重载,初始化数据(3)main_control 系统主控函数,确定调用的进程(4)require_output_service(Pcb pcb) 请求输出函数(5)SpoolingPcb() Spooling输出函数(6) FCFSPrint() 先来先服务算法(7) SJFPrint() 短作业优先调度算法public class Spooling /输入输出主要处理操作类public Pcb PCB;/用户进程数组private Reqblock reqblock;/请求块数组private int OUT_FenPei;/Spooling系统为每个请求输出的进程在输出井中分别分配一个区private int USE_ShuChuJing; /表示用户进程可使用的输出井的空间private int Situa_ShuChuJing; /表示输出井的使用情况private int Rest_ShuChuKuai; /表示当前系统剩余的请求输出快信息块个数private int Ptr1, Ptr2;/表示请求输出块的使用情况int JobPid=0; /输出缓冲区内作业的编号String SPrint; /作业长度的数组队列 private int s;public Spooling_Frame TTS;public Spooling() /构造函数USE_ShuChuJing = new int3;/表示用户进程可使用的输出井的空间,其初始值都为100USE_ShuChuJing0 = 100;/表示进程1可使用的输出井的空间为100USE_ShuChuJing1 = 100;/表示进程2可使用的输出井的空间为100USE_ShuChuJing2 = 100;/表示进程3可使用的输出井的空间为100Situa_ShuChuJing = new int32;Situa_ShuChuJing00 = 0;/代表OUT_FenPei0的第一个可用空缓冲指针Situa_ShuChuJing01 = 0;/代表OUT_FenPei0的第一个满缓冲指针Situa_ShuChuJing10 = 0;/代表OUT_FenPei1的第一个可用空缓冲指针Situa_ShuChuJing11 = 0;/代表OUT_FenPei1的第一个满缓冲指针Situa_ShuChuJing20 = 0;/代表OUT_FenPei2的第一个可用空缓冲指针Situa_ShuChuJing21 = 0;/代表OUT_FenPei2的第一个满缓冲指针Rest_ShuChuKuai = 10;/表示系统当前剩余的请求输出块的个数,其初始值为10Ptr1 = 0;/ptr1是要输出的第一个请求输出块指针,初值为0Ptr2 = 0;/ptr2是空闲请求输出块指针,初值为0SPrint=new String40; for(int i=0;i40;i+)SPrinti=;PCB = new Pcb4;for (int i = 1; i = 4; i+) PCBi - 1 = new Pcb(i, 0, 0);reqblock = new Reqblock10;OUT_FenPei = new int3100;TTS = new Spooling_Frame(this);3.5 可视化类Spooling_Frame主要用Java面板实现一个简单的系统界面,使系统更直观同时便于操作。public class Spooling_Frame extends JFrame implements ActionListener /界面类 JButton JB1,JB2;public JFrame JF1=new JFrame(Welcome);/欢迎界面框架public JPanel background;/欢迎界面背景面板/*public JFrame JF=new JFrame(基于SPLOOING技术的多任务打印机管理系统仿真);/框架 JButton startButton,clearButton,closeButton,printButton,cipanButton,JB3,JB4,JB5,JB6,JB7; JComboBox JC;JTextField countText,countText2,countText3,tf1,tf2; /用于输入进程需要输出的文件数的个数的文本框 JPanel P,p1,p2,p3,p4,p5,p6,PP,panel1,panel2,panel3,panel4;JLabel topLabel,countlabel,countlabel2,countlabel3,Jl1,Jl2;public JTextArea showText1,showText2,showText3,showText4,showText5,showText6;/用于输出进程模拟输出的过程JScrollPane scrollPane1,scrollPane2,scrollPane3,scrollPane4,scrollPane5,scrollPane6; JDialog jd1,jd2;String pcb1Count,pcb2Count;private Spooling aSpooling;/*public JFrame JF2=new JFrame(文件管理);/文件管理框架public JPanel wenjianguanli,wenjianguanli1,wenjianguanli2; 4.仿真系统结构及关键操作实现4.1 Spooling(Spooling_Frame Spooling_Frame)构造函数重载初始化数据对函数相关数据进行初始化: public Spooling(Spooling_Frame Spooling_Frame) /构造函数重载USE_ShuChuJing = new int3; /表示用户进程可使用的输出井的空间,其初始值都为100USE_ShuChuJing0 = 100; /表示进程1可使用的输出井的空间为100USE_ShuChuJing1 = 100; /表示进程2可使用的输出井的空间为100USE_ShuChuJing2 = 100;/表示进程3可使用的输出井的空间为100Situa_ShuChuJing = new int22;Situa_ShuChuJing00 = 0; /代表OUT_FenPei0的第一个可用空缓冲指针Situa_ShuChuJing01 = 0; /代表OUT_FenPei0的第一个满缓冲指针Situa_ShuChuJing10 = 0;/代表OUT_FenPei1的第一个可用空缓冲指针Situa_ShuChuJing11 = 0; /代表OUT_FenPei1的第一个满缓冲指针Situa_ShuChuJing02 = 0;/代表OUT_FenPei2的第一个可用空缓冲指针Situa_ShuChuJing12 = 0;/代表OUT_FenPei2的第一个满缓冲指针Rest_ShuChuKuai = 10/表示系统当前剩余的请求输出块的个数,其初始值为10Ptr1 = 0; /ptr1是要输出的第一个请求输出块指针,初值为0Ptr2 = 0; /ptr2是空闲请求输出块指针,初值为0SPrint=new String40; for(int i=0;i40;i+)SPrinti=; PCB = new Pcb4;/初始定义三个进程for (int i = 1; i = 4; i+) PCBi - 1 = new Pcb(i, 0, 0);/对进程进行初始化,分别为1,2,3号进程,进程状态和文件数均为0reqblock = new Reqblock10; /初始化定义请求输出块,最大为10块OUT_FenPei = new int3100; /对两个请求输出的用户进程分配一个区TTS = new Spooling_Frame(this); 4.2 main_control 系统主控函数,确定调用的进程决定调用用户进程1,2,3和SPOOLING进程,实现用户进程同步互斥;4.3 require_output_service(Pcb pcb) 请求输出函数图1. 输出请求服务的流程图如上图1为输出请求服务的相关流程图。先判断输出井是否已满,及判断输出井USE_ShuChuJingi是否等于0,若等于0,则请求输出进程进行等待,若不等于0,调用PCBi的随机变量输出到PCBi.X中,并将进程的输出信息PCBi.X送到OUT_FenPei iSitua_ShuChuJingi0中,并且令USE_ShuChuJingi减一,代表已经用掉一个,然后修改空缓冲区指针Situa_ShuChuJingi0,令其加一,代表移到下一个空闲区中,随后进行判断文件输出是否结束,如果未结束则重新进行上述过程,如果结束,则请求输出块,如果没有空闲输出块,则请求输出的进程进行等待状态3,如果还有空闲的输出块,将文件在输出井的位置和长度填入空闲请求块,将进程名i填入请求块,修改空闲请求块指针为(ptr+1)%10,并将空闲请求块数Rest_ShuChuJing减1,随后判断SPOOLING进程是否是等待状态,如果是则唤醒SPOOLING进程,并将文件数目减一。public int require_output_service(Pcb pcb) /请求输出函数,进程结束返回1,进程进入等待状态返回0 /对两个用户进程起作用if(pcb.getX() = 0) /此时没有用户进程输出else/当系统此时剩余的请求输出块的信息个数为零时 ,即输出井已满pcb.setLength(length);/输入的文件长度pcb.setStatus(3);/用户进程进行等待else /此时输出井内容不为空且未满if (USE_ShuChuJingid - 1 != 0) /表示可用的输出井空间没有用完时,当用户进程可使用的输出井的空间不满时 if (pcb.getX()=-1) /规定文件变量产生的数值为0-10之间的数pcb.setX(int) (Math.random() * 10) % 10);/产生10以内的整数pcb.setAddress(Situa_ShuChuJingid - 10);/记录输出井的使用情况4.4 SpoolingPcb() Spooling输出函数图2. Spooling输出进程流程图如上图2为Spooling输出进程流程图。先判断输出块是否为空,如果不为空,按该请求输出信息块reqblock的指针ptrl将输出井中的一个文件的内容输出,释放相应输出井,即修改相应的输出井计数:按请求输出块中进程号修改USE_ShuChuJing数组和Situa_ShuChuJing数组, 释放该请求输出块,修改请求信息块reqblock的指针ptrl=(ptrl+1)%10,Rest_ShuChuJing加一。然后判断是否有等待输出井空的进程,如果有,则唤醒进程,若果没有则判断有等待输出块的进程,如果有则唤醒进程,如果没有,则重新执行上述过程。public int SpoolingPcb() /Spooling输出函数int t = 1;while (t = 1) if (Rest_ShuChuKuai = 10) /初始状态,请求输出块为10else /当请求输出请求块的个数不为10时int id = reqblockPtr1.getReqname() - 1;/将已放入输出请求块中的进程输出int address = reqblockPtr1.getAddr();int length = reqblockPtr1.getLength();s = new intlength;4.5 FCFSPrint() 先来先服务算法 public int FCFSPrint() TTS.showText4.append(n); for(int i=0;i=JobPid;i+) TTS.showText4.append(SPrinti);return 1;4.6 SJFPrint() 短作业优先调度算法public int SJFPrint()TTS.showText4.append(n); for(int i=0;i=JobPid;i+) for(int j=i+1;jSPrintj.length() String temp=SPrinti; SPrinti=SPrintj; SPrintj=temp; for(int i=0;i=JobPid;i+) TTS.showText4.append(SPrinti); return 1; 4.7文件管理:public void createFile()/创建文件public void writeIn(String line) /写入文件public void delete()/删除文件5.测试用例及分析5.1开发调试及运行环境为了完成基于SPOOLING技术的多打印机管理系统仿真实现问题,我选择开发语言为JAVA。在eclipse平台上编写,并在eclipse的控制台运行,Java是由Sun Microsystems公司推出的Java面向对象程序设计语言(以下简称Java语言)和Java平台的总称。由James Gosling和同事们共同研发,并在1995年正式推出。Java最初被称为Oak,是1991年为消费类电子产品的嵌入式芯片而设计的。1995年更名为Java,并重新设计用于开发Internet应用程序。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动态Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器均支持Javaapplet。另一方面,Java技术也不断更新。Java自面世后就非常流行,发展迅速,对C+语言形成有力冲击。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。Java提供了丰富的类库,可以帮助我们很方便的开发Java程序。Java致力于检查程序在编译和运行时的错误。Java自己负责内存管理,提供了垃圾内存回收机制,有效的避免了C+中最头疼的内存泄漏问题。Java的安全性可从两个方面得到保证。一方 面,在Java语言里,删除了指针和释放内存等C+功能,避免了非法内存操作。另一方面,通过Java的安全体系架构来确保Java代码的安全性。Java作为一种网络语言,其源代码被编译成一种结构中立的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。Java源程序被编译成一种与机器无关的字节码格式,在Java虚拟机上运行。因此具有可以移植性,支持多平台。Eclipse Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。Eclipse是著名的跨平台的自由集成开发环境(IDE)。最初主要用来Java语言开发,通过安装不同的插件Eclipse可以支持不同的计算机语言,比如C+和Python等开发工具。Eclipse的本身只是一个框架平台,但是众多插件的支持使得Eclipse拥有其他功能相对固定的IDE软件很难具有的灵活性。许多软件开发商以Eclipse为框架开发自己的IDE。 Eclipse 最初由OTI和IBM两家公司的IDE产品开发组创建,起始于1999年4月。IBM提供了最初的Eclipse代码基础,包括Platform、JDT 和PDE。Eclipse项目IBM发起,围绕着Eclipse项目已经发展成为了一个庞大的Eclipse联盟,有150多家软件公司参与到Eclipse项目中,其中包括Borland、Rational Software、Red Hat及Sybase等。Eclipse是一个开放源码项目,它其实是Visual Age for Java的替代品,其界面跟先前的Visual Age for Java差不多,但由于其开放源码,任何人都可以免费得到,并可以在此基础上开发各自的插件,因此越来越受人们关注。随后还有包括Oracle在内的许多大公司也纷纷加入了该项目,Eclipse的目标是成为可进行任何语言开发的IDE集成者,使用者只需下载各种语言的插件即可。JreJRE为Java Runtime Environment的简称,Java Runtime Environment(包括Java Plug-in)是Sun的产品,包括两部分:Java Runtime Environment和Java Plug-in。JavaRuntimeEnvironment(JRE)是可以在其上运行、测试和传输应用程序的Java平台。它包括Java虚拟机(jvm)、Java核心类库和支持文件。它不包含开发工具(JDK)-编译器、调试器和其它工具。JRE需要辅助软件-Java Plug-in-以便在浏览器中运行applet。Java Plug-in软件允许Java Applet和JavaBean组件在使用Sun的Java Runtime Environment(JRE)的浏览器中运行,而不是在使用缺省的Java运行环境的浏览器中运行。Java Plug-in可用于Netscape Navigator和Microsoft Internet Explorer。J2RE是Java2 Runtime Environment,即Java运行环境,只是强调其匹配Java2平台,有时简称JRE。如果你只需要运行Java程序或Applet,下载并安装它即可。如果你要自行开发 Java软件,请下载JDK(JRE和JDK的区别)。在JDK中附带有JRE。注意由于Microsoft对Java的支持不完全,请不要使用IE自带的虚拟机来运行 Applet,务必安装一个JRE或JDK。5.2不同情境的测试用例,分析模拟结果 图3. 登录界面上图3为登录界面,点击进入系统,就会进入Spooling仿真界面即图4所示界面,点击退出,则退出系统。图4. 仿真界面界面主要有三部分组成,第一部分为可输入区,可以输入用户进程的作业文件个数,并可以对作业调度算法进行选择,第二部分为按钮区,可以选择相应的功能,第三部分为进程输入输出区,可以对进程的输入过程进行同步的可视化体现。 图5. 运行界面测试数据为3,3,5;即用户进程1输入的作业个数为3个,用户进程2输入的作业个数为3个,用户进程3输入的作业个数为5个,然后进程1,2,3进行同步互斥输出,然后调用SPOOLING输出进程将输出结果输入到输出缓冲区中,没有发生死锁现象。 图6. 打印界面一图6为打印界面,选择先来先服务算法则将打印队列中的作业按先来先服务的调度算法打印出来,并且仿真模拟在F盘生成一个print.txt文件,生成的打印文件如图7所示。图7. 磁盘内效果图 图8. 打印界面二图8为打印界面,选择短作业优先算法则将打印队列中的作业按短作业优先的调度算法打印出来,并且仿真模拟在F盘生成一个print.txt文件,生成的打印文件。图9. 文件管理界面图9界面对外存空间进行管理,显示缓存区内容,其显示内容即为将进行管理的数据。图10. 创建文件 图11. 写入文件 该界面功能为创建文件,并将缓存区内容写入文件中模拟了外存管理,由于本实验侧重于SPOOLING技术,外存管理相对比较简单实现了文件创建,写入文件内容,并且可以删除文件。创建文件后在F盘生成text.txt文件如图12。图12. 磁盘创建文件效果图 6.小组分工及实践体会6.1 分工:输入输出模块,打印模块;实践体会:由于课堂上对于文件系统的讲解不是很多,所以我们看书有点吃力,讲解也有点难以理解,所以进度不是十分的顺利,也参考了一些网上的代码。通过一个假期的努力,进一步融会贯通教材内容,掌握程序各功能模块的工作原理,相互联系和来龙去脉,完整地建立系统的概念。激发我的学习热情和主动性,培养我的独立工作能力,在实践活动中,将所学知识综合运用,增长才干,并积累经验。对编程语言又有了更深一层次的认识,并对编程能力有所加强,但还是很多的不足有待改进,对于编程来说还需要大量的实践,才能在发现问题和解决问题中前进与提高。通过本次课设,我加深了对SPOOLING假脱机技术的理解,发现了在学习里对SPOOLING技术理解的缺陷与不足,对此模拟系统有了细微深刻的认识,从请求文件输出到SPOOLING输出的每一细节都有了全新的了解。在设计中, 通过该题目的设计过程,进一步理解和熟练掌握课本中所学的各种知识,学会如何把学到的知识用于解决实际问题,锻炼了自己动手的能力。 在以后的学习中我会更加注意各个方面的能力的协调发展。在课程设计时遇到了很多的问题,在老师的帮助和对各种资料的查阅中将问题解决,培养了我自主动手,独立研究的能力,为今后在学习工作中能更好的发展打下了坚实的基础。 设计其间的内容是很充实的,在其中我学习到了很多平时书本中无法学到的东西,积累了经验,锻炼了自己分析问题,解决问题的能力,并学会了如何将所学的各课知识融会,组织,来配合学习,我收益很大,学到很多。基础课学习中为我打下良好的基础,这是我这次课程设计能够顺利完成的前提。这次课程设计不同于以往的小组合作,这次这个老师要求每个人都必须独立运行,那么就避免了打酱油的情况。每个人都要对自己和自己的小组负责,各自有各自负责的板块你的板块做好了,别人的也做好了,由组长整合,一个完整的课程设计才算完成。各自分工,但又是在作为一个整体,时散时聚,跟以后的工作可能会有些相似。有一句话,旅途的美丽不是结局,而是途中的风景。这次课程设计,我们要的不仅仅是最后的一个运行结果,真正得到的锻炼是,每次翻阅书本时的专注阅读,每次小组失去方向时的重振旗鼓,是的,最美的是过程,得到锻炼的过程。最后感谢老师和助教的指导和教诲,帮助我们学习和成长!6.2 处理模块,文件管理模块,作业调度算法进行作业的打印;实践体会:通过这次的课程设计使我认识到要将操作系统这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。因为与之涉及的很多方面并没有学过,需要自己去自学和实践检验。操作系统课程设计终于要结束了,我们的作品也几乎接近尾声.但是对我来说,这次课程设计带给我的影响远远不会结束.从我接到操作系统课程设计的通知,组队,选选题,设计基本思路,学习,假期开始准备做,到开学第二周的第一天答辩,了解自己的不足,再学习,再到周三和助教答辩以后发现我们小组的整体思路有问题,回去之后全部重新修改,在周五结束的时间上又自己增加了至少一周的时间完善我们小组的设计.过程是有些苦的,担心自己做不出来或者做出来的不符合老师的要求,害怕让老师觉得我们没有认真对待.尤其周三发现整个小组的设计思路完全不对要全部重新修改的时候,真是晴天霹雳!还好老师给的时间还算多,我们也算有惊无险的完成了.下面就来具体谈谈我对这次课程设计的感受吧,还有从中的收获:学习操作系统最主要的还是从书本中学习.书本是一切理论的基础,只有把书本吃透了才能举一反三.课程设计过程中,姜老师一次一次的帮我们分析系统,她的辛勤耕作,传道授业,不仅使我们开阔了视野,拓宽了思路,增长了学识,而且为我们今后的工作和学习打下了牢固的基础,也增强我们对计算机方面的兴趣。姜老师在指导我时,使我树立了远大的学术目标、掌握了基本的研究方法,还使我明白了许多待人接物与为人处世的道理。本设计题目从选题到完成,每一步都是在老师的指导下完成的,倾注了姜老师大量的心血,并为我指点迷津,帮助我开拓研究思路,精心点拨、热忱鼓励才有了今天的结果。感谢我的同学,他们的热心帮助给了我极大的努力热情,他们的微笑给我继续前进的动力,他们的精神深深地感染我为之拼搏在此,再次感谢姜老师,就是得到了老师的帮助,我们才得以顺利的完成了本次课设,而课程设计报告的每次改动都离不开老师的辛勤的工作,正是老师百忙中不辞辛劳的工作,才使我能够顺利完成这篇报告,在这里,对老师表示衷心的感谢,老师您辛苦了。7.存在问题(改进及其他设想)(1)利用随机数产生的进程的临时变量,没有采用键盘输入的形式。(2)程序运行过程中避免出现死锁的情况,进程之间分别分配了足够的资源,不会出现竞争的情况,希望以后有精力继续完善。(3)文件系统管理实现功能较少,没有设计的过于复杂。(4)进程调度算法只采用了先来先服务算法。(5)程序的缺点就是设置的变量过多,后来经过分析和调试,发现很多都是没有必要的,还让程序更加混乱,条理不清楚,后来去掉了不少(6)设计语言改动过大,刚开始认为对C比较熟悉,就简单地选择了C,可后来发现采用C实现界面我们完全没有这个能力,而且比较复杂,所以新学期开学后我们再三商量还是改为了Java程序设计语言。参考文献1 汤子瀛,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论