操作系统课程设计报告磁盘管理模块告.doc

上传人:laozhun 文档编号:2392278 上传时间:2023-02-17 格式:DOC 页数:69 大小:2.06MB
返回 下载 相关 举报
操作系统课程设计报告磁盘管理模块告.doc_第1页
第1页 / 共69页
操作系统课程设计报告磁盘管理模块告.doc_第2页
第2页 / 共69页
操作系统课程设计报告磁盘管理模块告.doc_第3页
第3页 / 共69页
操作系统课程设计报告磁盘管理模块告.doc_第4页
第4页 / 共69页
操作系统课程设计报告磁盘管理模块告.doc_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《操作系统课程设计报告磁盘管理模块告.doc》由会员分享,可在线阅读,更多相关《操作系统课程设计报告磁盘管理模块告.doc(69页珍藏版)》请在三一办公上搜索。

1、操作系统课程设计报告学号:姓名:班级:指导老师:学院:信息科学与工程学院目录项目概述.3基本概念和原理5详细设计.6总结和心得.24参考文献.25参考代码.25磁盘管理概要说明一、 引言目的:确定磁盘管理模块的总体结构、与其他模块之间的接口和总体流程。使用者:软件开发人员和维护人员。本模块是操作系统模拟软件中的演示磁盘管理的模块,主要来展示文件在磁盘上的存储情况,因此和文件管理模块联系最为紧密。磁盘调度算法是一个专门的演示模块,与磁盘管理模块物理相似,和其他模块无实际联系。二、 总体设计采用java语言,使用图形化界面工具swing,以表格的形式来模拟磁盘存储结构。一行代表一个磁道,每一行的一

2、个小格代表一个盘块。总体采用C/S模式,由文件系统发送消息过来,本模块经过相应的处理后,再返回给文件管理模块其需要的信息。磁盘管理模块与文件管理模块本来是一个完整过程,有了磁盘的存储,才有文件的生成。这两个模块之间要能够进行顺畅的消息传递。三、 模块设计 模块功能:磁盘管理1)接收信息 接收从文件管理系统发送过来的信息。 2)处理信息 对信息进行识别和处理,转交响应的模块功能。 3)改变磁盘 对磁盘进行增、删、改、查并返回新的信息 4)返回信息 把新生成的信息返回给文件管理系统 磁盘调度:1)FCFS算法 2)SSTF算法 3)SCAN算法 4)cscan算法 5)NStepSCAN算法 6)

3、FSCAN算法 性能要求:要求磁盘管理模块的实时性非常好,能够迅速对文件管理模块的请求作出响应。并且需要有统一的消息格式,以便取得一致性。最后还要有较好的容错性能,当磁盘模块出现异常或消息出现某些特殊情况是,要能给出错误提示。磁盘调度模块需要友好的界面。让使用者输入数据,观察各种磁盘调度算法,保证算法的正确性。磁盘管理模块和文件管理模块的接口使用Socket来实现,接收一个专门的文件消息对象,处理完毕后,返回给文件管理模块结果。结果也是一个文件消息对象。四、 数据结构设计 磁盘管理中,采用二维表来存储每一个盘块。磁盘中文件存放形式有链式和索引,单独的文件采用链式存储,文件夹中的文件采用索引节点

4、存储。使用对象来存储数据,进行信息转移。 磁盘调度算法演示中,采用一维数组来存放所有磁道。左边用一系列磁道号静态显示磁道的访问过程,右边就是动态变化。用不同的颜色来区分,将要访问磁道、已访问的磁道和新的磁道访问请求。五、 运行设计 磁盘管理模块 磁盘信息DiskMessageControl文件操作 Message Message 读取磁盘信息Blocks 修改磁盘信息 初始数据 改变 返回用户输入 存储 结果用户界面:0| file1 |22|file1 |-1磁盘大小:128KB 已用空间:32KB 可用空间:36KB 当前文件:file1 磁盘调度管理运行算法 用户 选择数据 性能结果用户

5、界面总磁道数:100 原始请求数据:4,20,44,8,78 添加磁道请求: 添加 其实磁道: 初始方向:六、 故障处理说明出现故障,磁盘会产生一个Message对象,对象中的异常信息能够描述异常,并返回给文件系统。故障原因文件创建失败磁盘已满、需要空间剩余空间、文件名重复找不到该文件文件信息错误修改文件失败磁盘已满、需要空间剩余空间七、 其他设计当需求发生变化后,要能够修改并满足新的需求。如磁盘初始空间要求更大、要求增加二级索引节点,增加文件类型后也要能够较好维护。磁盘管理的基本概念和原理首先用,给用户展示磁盘的分布情况,未分配给任何文件的盘块号为黑色。分配给同一文件的盘块号为同一种颜色,系

6、统总共获取了十四种颜色。因此可以看到彩色的磁盘分布情况。除了使用颜色区分盘块所属的文件,每个盘块上面写明了盘块的编号,所分配的文件类型,所分配文件的名字,以及其父文件的节点。默认情况下,其父节点为-1,就是直接放在根目录下的文件所有的文件类型分为两种,一种是“文件”,用file表示。一种是“文件夹”,用folder表示。文件的大小任意,只要不超出磁盘的空间。而文件夹的大小就是固定的,只能是1。文件夹中有十个索引节点,每个节点链接到一个文件或文件夹,以此建立起一棵以文件夹为根节点的文件树。此外在现实框的最下层,显示了磁盘的使用情况。总盘块数,已使用盘块和未使用盘块。展示给用户的界面如下图所示 每

7、一个盘块的信息显示实图文件夹:文件:文件夹的子文件:磁盘的使用信息:磁盘管理及调度模块详细设计说明书 一、引言 目的:确定磁盘管理模块的总体结构、与其他模块之间的接口和总体流程。使用者:软件开发人员和维护人员。本模块是操作系统模拟软件中的演示磁盘管理的模块,主要来展示文件在磁盘上的存储情况,因此和文件管理模块联系最为紧密。磁盘调度算法是一个专门的演示模块,与磁盘管理模块物理相似,和其他模块无实际联系二、 软件结构磁盘管理模块采用C/S模式,模块又分成三个子模块。磁盘管理、图形化显示,磁盘调度分为一个模块,六个功能。三、 模块设计说明磁盘管理模块磁盘管理模块需要对磁盘进行增删查改操作,以下是每一

8、个操作的流程图。磁盘演示模块的整体流程图对应于这个模块的用户界面如下:New代表新建一个文件,delete选项用来删除一个文件,add选项用来为一个文件增加空间,dec选项为一个文件减小空间,rename给文件重命名。整个显示的是一个JToolBar类,JToolBar需要增加动作类来产生Button按钮,总共new出了五个抽象动作类,于是出现了上面看到的五个按钮。相应的代码如下/新建一个工具条JToolBar toolBar = new JToolBar();toolBar.setFloatable(true);/新建五个抽象动作类ToolBarAction file_new = new T

9、oolBarAction(NEW,null,this);ToolBarAction file_del = new ToolBarAction(DELETE,null,this);ToolBarAction file_add = new ToolBarAction(ADD,null,this);ToolBarAction file_dec = new ToolBarAction(DEC,null,this);ToolBarAction file_sea = new ToolBarAction(RENAME,null,this);/把第一个按钮加入工具条toolBar.setFloatable(t

10、rue);JButton jb;jb = toolBar.add(file_new);jb.setActionCommand(NEW);/设置其产生事件所显示的命令jb.setToolTipText(新建); jb.setFocusPainted(false);toolBar.addSeparator(); /增加一个隔离栏/把第删除按钮加入工具条jb = toolBar.add(file_del);jb.setActionCommand(DELETE);/设置其产生事件所显示的命令jb.setToolTipText(开始);jb.setFocusPainted(false);toolBar.

11、addSeparator();jb = toolBar.add(file_add);/把第增加按钮加入工具条jb.setActionCommand(ADD);/设置其产生事件所显示的命令jb.setToolTipText(增加);jb.setFocusPainted(false);toolBar.addSeparator();jb = toolBar.add(file_dec);/把第减少按钮加入工具条jb.setActionCommand(DEC);/设置其产生事件所显示的命令jb.setToolTipText(减少);jb.setFocusPainted(false);toolBar.ad

12、dSeparator();jb = toolBar.add(file_sea);/把第重命名按钮加入工具条jb.setActionCommand(RENAME);/设置其产生事件所显示的命令jb.setToolTipText(查找);jb.setFocusPainted(false);toolBar.addSeparator();this.add(toolBar,BorderLayout.NORTH); /设置其布局,放在最上面为新建的文件分配磁盘空间,该函数是Disk中的allocate方法public Message allocateSpace(Message message)删除一个文件

13、的流程图,该函数是Disk中的deleteFF()方法,public void deleteFF(int startAdd)修改一个文件的流程图,它对应Disk中的两个函数,addSpace和reclaimSpace(Message),程序中是:public Message addSpace(Message message),public Message reclaimSpace(Message message)。文件重命名的流程图如下,其对应的是renewFile函数,public void renewFile(Message message)文件重命名最开始设计时,把消息模块也加入了程序中

14、,后来这个模块被删掉了。1)接收消息 功能名称:接收消息参与执行者:用户前置条件:一个合法的登录用户程序流: A.if 没有消息 继续等待 else 获取消息If 消息对象是Message实例 交给消息控制着处理返回 AElse 返回Message实例,提示该消息类型错误。 End IfEnd if2) 消息处理功能名称:消息处理参与执行者:消息控制对象前置条件:收到一个 Message对象程序流: A if 操作类型合法If 文件类型合法把消息交给磁盘来处理Else 把消息交给磁盘处理添加操作消息文件类型无法识别End ifElse 生成新信息,返回操作类型不合法End if3) 磁盘分配功

15、能名称:磁盘分配参与执行者:磁盘对象前置条件:已经收到一个可操作的消息对象程序流:if 磁盘未满 If 所需空间=剩余空间 if 此文件的父文件为文件夹 找到其父文件 把一个空闲的盘块号分配给新文件,并把改记录添加到父文件的索引中。继续给改文件分配全部空间生成新的信息对象并返回 Else 分配给该文件新的空间 生成新的信息对象并返回 End if 返回空间不足信息 End if 返回磁盘已满信息 End if4) 发送消息 功能名称:发送消息 参与执行者:消息发送对象 前置条件:已经从磁盘对象模块获取了一个消息对象 程序流: 发送消息 磁盘调度模块功能名称:磁盘调度参与执行那个者:用户前置条件

16、:已经登录的合法用户程序流: A。 用户输入数据 If 用户选择fcfs算法 运行fcfs算法Else if 用户选择sstf算法 运行 sstf算法Else if 用户选择scan算法 运行 scan算法Else if 用户选择ccsan算法 运行 ccan算法Else if 用户选择 NStepScan算法 运行 NStepScan算法Else if 用户选择 Fscan算法 运行 NStepScan算法End if If 有新的磁盘访问加入添加到磁盘队列中 End if 磁盘管理和调度模块的类图磁盘管理的完成情况经过两个星期的努力,最终完成本模块所要求的任务。对磁盘的增删改查都定义了良好

17、的借口,便于和文件管理模块集成。此外,我也单独写了一个磁盘调度模块,用来展示五种磁盘调度算法。不过,我并没有完成当初预想的任务,即把我的模块写成C/S模式,并加入一个消息管理模块,专门来接受、发送、处理消息。由于我们的模块不是很庞大,王昭阳直接调用我写给他的函数即可。最后,我还负责整合团队中其他三位成员的代码,并加入了注册登录界面。下面来看我们的系统。首先是模拟Linux多用户登录,输入账号和密码,便可以进入我们的系统。如果用户还未有账号和密码,可以先注册,再进入系统。1)进入系统点击登录后,就可以看到我们模拟操作系统的各种管理了。2)选择演示模块界面上的四个按钮,分别代表我们四人负责的模块

18、其中虚拟文件系统已经包跨了磁盘管理与调度系统,但我编写的模块独立性很强,接口定义良好,作为一个单独的模块演示也很好看。由于磁盘调度与磁盘管理和文件管理没有太多关系,用户会看到两个窗口,第一个是磁盘管理窗口,第二个是磁盘调度算法窗口。 实际效果如下面截图3)新建文件磁盘上本来就有一些文件和文件夹,我们把它当做系统文件。点击新增按钮,会弹出一个窗口,提示用户输入相应的数据。如新建一个大小为5,名字为li,直接放在根目录下的文件。点击确定,磁盘上就会多出五个绿色的盘块号,并写着li,实际如下面所示当你点击new时,就会new一个FileDialog类,该类继承了抽象坚挺器接口,如下所示。public

19、 class FileDialog extends JDialog implements ActionListener用户输入数据后,点击确定,系统获取用户输入的数据,并调用相应的方法,为文件分配盘块。代码如下if (dialog_type.equals(NEW) /用户要新增一个文件/创建函数所需的信息对象m = new Message(text_name.getText(), text_fileType.getSelectedItem().toString(), Integer.parseInt(text_size.getText(), Integer.parseInt(text_pare

20、ntN.getText();/调用分配空间方法m = d.allocateSpace(m);4)删除文件当用户点击delete时,也会有一个相应的对话框弹出,示意用户所需要输入的数据。输入8并按确定后,初始盘块为8的文件就被删除了,结果如下图删除的流程和新建差不多,系统获取用户输入的信息后,new一个信息对象,便执行删除方法,代码如下else if (dialog_type.equals(DELETE) /执行删除功能/创建删除磁盘上文件所需的信息m = new Message(Integer.parseInt(text_fileSA.getText();m = d.reclaimSpace(

21、m);/执行删除方法frame.setMessage(m);5) 增加空间点击增加空间按钮,同样有一个增加空间的对话框,用户输入必须的数据后,就可以为相应的盘块号增加空间。这次拿初始盘块号为1,末尾盘块号为3的文件,增加空间为3。未增加前分布和颜色如下点击增加增加以后,盘块分布如下6) 减少空间减少是增加的逆操作,下面值演示,不解释了减少空间后,分布如下7) 重命名点击重命名按钮,输入重命名文件的其实盘块号,文件大小,以及需要改变的新名称,就可以更改文件的名称了。更改后的名称如下,其颜色也会有相应的改变。 磁盘调度算法,磁盘调度模块总共展示五种磁盘算法,fcfs算法,sstf算法,scan算法

22、,cscan算法,NS算法。磁道的总数由用户自己决定,初始盘块号也有用户自己决定。如果用户不想输入磁盘数和初始磁道,那么系统会分配一个默认值。默认情况下,磁道的总数是10,初始盘块号为100。需要点击创建磁道来获取初始化磁道的信息,一步步如下图 上面显示的是初始化后,磁道的分布情况。左边是磁道出现的先后顺序,由于没有开始演示调度算法,访问距离和平均访问距离都为0。右边则按磁道的编号来展示磁道的分布,最小编号牌最上面,最大编号排最下面。黑色的代表未被访问的磁道,红色的代表初始磁道号。如果点击fcfs算法,左边会给每一个磁道填上相应的访问距离,并统计平均访问距离,右边会按照磁道访问的先后顺序,以此

23、显示磁道的颜色。蓝色代表将要访问的磁道,绿色代表已经被访问过的磁道。磁盘调度算法演示完成后,右边的磁盘便会恢复原状。下面展示每一种磁盘调度算法的演示情况由于NStepScan算法是scan算法的累加,于是没有动态演示效果,只有静态的访问顺序。 总结和心得经过两个星期的努力,终于如愿完成了操作系统课程设计。整个过程虽然比较辛苦,有时也会感到比较烦躁,但我学到了很多东西,领悟了许多道理。学习1. 第一次真实感受到软件工程方法所带来的巨大成效。以前都只是凭着脑子想东西,就一行行写下了代码。写出来的东西没有一个清晰的架构,整个过程也没有明显的步骤。基本上是想到哪就写到哪,写出来的程序能完成功能,但兼容

24、性很差,更别提到和其他的模块兼容。这次,我们小组按照软件工程的一般做法。从概要设计,详细设计,程序设计,编码,模块测试,集成测试,系统测试和最后的交付验收,我们每一步都做了相应的工作,结果很让人满意。我们各自都提出了自己的设想,最后也都基本完成了各自设计的程序。 2要勇于想象。我以前从来都没有写过磁盘管理模块的相关程序,这次我阅读了磁盘管理和调度的基本原理后,就有了初步的想法。接着把自己所想的东西,变成自己可以看到的东西。Java的功能十分强大,我想是想的相应算法,它都提供了相应的接口和类来供我使用。自己做出了漂亮的磁盘管理界面后,心中也十分欢快。3. 要擅于参考优秀的代码。我以前从未用 ja

25、va图形界面工具Swing做过如此复杂的动态想过演示。一个个控件、按钮、以及数据的输入和输出,我都不知道如何整理。但我从一个漂亮的图形界面程序中学习良好的架构,从而做出了自己想要的效果。 当然,在这个过程中,也遇到了很多问题,有客观的,也有主观的,下面我分析这些问题都是怎样的,以及我是怎样解决的。问题1. 接口问题。磁盘管理模块和文件管理模块联系十分紧密,但偏偏分成了两个模块,分别给两个人做。我们要写一个公用的接口,以便到时候集成到一起时,能够让磁盘分配和文件分配同步。我们考虑再三,便决定用一个javaBean来作为信息的在体,我们进行增删查改时都是根据这个对象中的信息来进行操作。除此之外,我

26、们没一个操作都对应一个独立的方法,这样操作间就不会有太大的影响。 最后,我们把两个模块集成到一起时,很快就实现了同步,因为大家都用了类似的接口。 2.数据结构的使用。用什么来记录磁盘上文件的数据,以及如何记录文件的分配情况。要能够既快又节省空间。最后我使用了一个二维的boolean数组来记录磁盘的使用情况,当这个数据为false时,该盘块号没有被使用,为true时,就使用了。那么进行增删改查时,都要根据这个二维布尔数组来进行操作。而相应的存储磁盘的信息,就存放在一个Block二维数组中,现实磁盘信息就存储在JButton的数组中,这样,存储,现实,和整体磁盘信息分离,能够很好的兼容其他的情况,

27、能根据需求做出相应的改变。最后,我很高兴自己能够设计出这样的一个磁盘管理系统。日后再遇到一些任务时,便可以更好的应对。这次可程设计,也为我日后编写程序打下了坚实的基础。自己这么多天的努力总算没有白费,以后我可以自信的说自己能够设计出对用户友好的,并且有漂亮图形界面的软件。参考文献:(1)汤小丹,梁红兵,哲凤屏,汤子瀛 计算机操作系统 西安电子科技大学出版社 (2)胡志刚等. 计算机操作系统. 中南大学出版社,2005(3)陈向群等. Windows内核实验教程. 机械工业出版社,2004(4)罗宇等. 操作系统课程设计. 机械工业出版社,2005代码如下 我所负责模块的结构 DiskDemo.

28、javapackage com.csu.disk.display;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.Dimension;import java.awt.Font;import java.awt.GridLayout;import java.awt.Toolkit;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JMenu;import javax.s

29、wing.JMenuBar;import javax.swing.JMenuItem;import javax.swing.JPanel;import javax.swing.JSplitPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JToolBar;import javax.swing.UIManager;import com.csu.action.ToolBarAction;import com.csu.attemper.AttemperAlgorithm;import

30、 com.csu.disk.pojo.Message;public class DiskDemo extends JFrameprivate static final int WIDTH=800;private static final int HEIGHT=600;private Disk disk;private Message message = new Message();private JButton demoBlocks;private Container container;private JPanel blocksPanel,buttonPanel,lTextPanel,bTe

31、xtPanel;private JTextArea lText,bText;private JTabbedPane bTextTab; private JMenu menu1,menu2 ;private JMenuItem item1,item2;private JMenuBar bar;/private JScrollPane ;public DiskDemo()super(Demo disk assignment);demoBlocks = new JButtonDisk.diskRodesDisk.diskColumns;disk = new Disk(this);setFrame()

32、;initData();/UIManager.put(Button.font,new Font(隶书,1,15);public static void main(String args)new DiskDemo();public void initData()Message message = new Message(hu,folder,1,-1);disk.allocateSpace(message);message = new Message(qiao,file,3,-1);disk.allocateSpace(message);message = new Message(nan,file

33、,3,0);disk.allocateSpace(message);message = new Message(li,folder,1,0);disk.allocateSpace(message);message = new Message(jia,file,6,-1);disk.allocateSpace(message);changeDiskInfo();public void setFrame()/菜单menu1 = new JMenu(开始); item1 = new JMenuItem(退出);menu1.add(item1);JMenu menu2 = new JMenu(关于);

34、 item2 = new JMenuItem(介绍);menu2.add(item2);bar = new JMenuBar();bar.add(menu1);bar.add(menu2);this.setJMenuBar(bar);/新建一个工具条JToolBar toolBar = new JToolBar();toolBar.setFloatable(true);/新建五个抽象动作类ToolBarAction file_new = new ToolBarAction(NEW,null,this);ToolBarAction file_del = new ToolBarAction(DEL

35、ETE,null,this);ToolBarAction file_add = new ToolBarAction(ADD,null,this);ToolBarAction file_dec = new ToolBarAction(DEC,null,this);ToolBarAction file_sea = new ToolBarAction(RENAME,null,this);/把第一个按钮加入工具条toolBar.setFloatable(true);JButton jb;jb = toolBar.add(file_new);jb.setActionCommand(NEW);/设置其产生

36、事件所显示的命令jb.setToolTipText(新建); jb.setFocusPainted(false);toolBar.addSeparator(); /增加一个隔离栏/把第删除按钮加入工具条jb = toolBar.add(file_del);jb.setActionCommand(DELETE);/设置其产生事件所显示的命令jb.setToolTipText(开始);jb.setFocusPainted(false);toolBar.addSeparator();jb = toolBar.add(file_add);/把第增加按钮加入工具条jb.setActionCommand(

37、ADD);/设置其产生事件所显示的命令jb.setToolTipText(增加);jb.setFocusPainted(false);toolBar.addSeparator();jb = toolBar.add(file_dec);/把第减少按钮加入工具条jb.setActionCommand(DEC);/设置其产生事件所显示的命令jb.setToolTipText(减少);jb.setFocusPainted(false);toolBar.addSeparator();jb = toolBar.add(file_sea);/把第重命名按钮加入工具条jb.setActionCommand(R

38、ENAME);/设置其产生事件所显示的命令jb.setToolTipText(查找);jb.setFocusPainted(false);toolBar.addSeparator();this.add(toolBar,BorderLayout.NORTH); /设置其布局,放在最上面/*设置左边 tab 面板*/JTabbedPane queues = new JTabbedPane(JTabbedPane.TOP);blocksPanel = new JPanel();blocksPanel.setLayout(new GridLayout(Disk.diskRodes,Disk.diskC

39、olumns);blocksPanel.setBackground(Color.gray);for(int i=0;iDisk.diskRodes;i+)for(int j=0;jDisk.diskColumns;j+)JButton block = new JButton();block.setBackground(Color.black);block.setToolTipText(R+i+C+j+Block+(i*Disk.diskColumns+j);demoBlocksij = block;blocksPanel.add(block);/磁盘总体信息bText = new JTextA

40、rea();bText.setBackground(Color.lightGray);bText.setEditable(false);bText.setBackground(Color.white);String diskInfo = 磁盘大小:+Disk.totalBlocks+t已用空间:+(Disk.totalBlocks-Disk.freeB)+t剩余空间:+Disk.freeB;bText.setText(diskInfo);bTextTab = new JTabbedPane();bTextTab.add(磁盘信息,bText);/*整体显示布局*/JSplitPane jsp

41、= new JSplitPane(JSplitPane.VERTICAL_SPLIT,true,blocksPanel,bTextTab);jsp.setDividerLocation(450);JTabbedPane jtb2 = new JTabbedPane();jtb2.add(磁盘分配, jsp);AttemperAlgorithm aal = new AttemperAlgorithm();/jtb2.add(磁盘调度,aal.jsp2);jtb2.validate();this.add(jtb2,BorderLayout.CENTER);Dimension d = Toolkit.getDefaultToolkit().getScreenSize();this.setBounds(int)d.getWidth()-WIDTH)/2, (i

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号