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

上传人:b****5 文档编号:6825198 上传时间:2023-01-10 格式:DOCX 页数:84 大小:435KB
下载 相关 举报
操作系统课程设计报告之磁盘管理模块告.docx_第1页
第1页 / 共84页
操作系统课程设计报告之磁盘管理模块告.docx_第2页
第2页 / 共84页
操作系统课程设计报告之磁盘管理模块告.docx_第3页
第3页 / 共84页
操作系统课程设计报告之磁盘管理模块告.docx_第4页
第4页 / 共84页
操作系统课程设计报告之磁盘管理模块告.docx_第5页
第5页 / 共84页
点击查看更多>>
下载资源
资源描述

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

《操作系统课程设计报告之磁盘管理模块告.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计报告之磁盘管理模块告.docx(84页珍藏版)》请在冰豆网上搜索。

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

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

操作系统课程设计报告

 

学号:

姓名:

班级:

指导老师:

学院:

信息科学与工程学院

 

项目概述…………………………....3

基本概念和原理…………………………5

详细设计………………………….....6

总结和心得...............................................................24

参考文献...................................................................25

参考代码....................................................................25

 

磁盘管理概要说明

1、引言

目的:

确定磁盘管理模块的总体结构、与其他模块之间的接口和总体流程。

使用者:

软件开发人员和维护人员。

本模块是操作系统模拟软件中的演示磁盘管理的模块,主要来展示文件在磁盘上的存储情况,因此和文件管理模块联系最为紧密。

磁盘调度算法是一个专门的演示模块,与磁盘管理模块物理相似,和其他模块无实际联系。

2、总体设计

采用java语言,使用图形化界面工具swing,以表格的形式来模拟磁盘存储结构。

一行代表一个磁道,每一行的一个小格代表一个盘块。

总体采用C/S模式,由文件系统发送消息过来,本模块经过相应的处理后,再返回给文件管理模块其需要的信息。

磁盘管理模块与文件管理模块本来是一个完整过程,有了磁盘的存储,才有文件的生成。

这两个模块之间要能够进行顺畅的消息传递。

3、模块设计

模块功能:

磁盘管理

1)接收信息接收从文件管理系统发送过来的信息。

2)处理信息对信息进行识别和处理,转交响应的模块功能。

3)改变磁盘对磁盘进行增、删、改、查并返回新的信息

4)返回信息把新生成的信息返回给文件管理系统

磁盘调度:

1)FCFS算法2)SSTF算法3)SCAN算法4)cscan算法5)NStepSCAN算法6)FSCAN算法

性能要求:

要求磁盘管理模块的实时性非常好,能够迅速对文件管理模块的请求作出响应。

并且需要有统一的消息格式,以便取得一致性。

最后还要有较好的容错性能,当磁盘模块出现异常或消息出现某些特殊情况是,要能给出错误提示。

磁盘调度模块需要友好的界面。

让使用者输入数据,观察各种磁盘调度算法,保证算法的正确性。

磁盘管理模块和文件管理模块的接口使用Socket来实现,接收一个专门的文件消息对象,处理完毕后,返回给文件管理模块结果。

结果也是一个文件消息对象。

4、数据结构设计

磁盘管理中,采用二维表来存储每一个盘块。

磁盘中文件存放形式有链式和索引,单独的文件采用链式存储,文件夹中的文件采用索引节点存储。

使用对象来存储数据,进行信息转移。

磁盘调度算法演示中,采用一维数组来存放所有磁道。

左边用一系列磁道号静态显示磁道的访问过程,右边就是动态变化。

用不同的颜色来区分,将要访问磁道、已访问的磁道和新的磁道访问请求。

5、运行设计

磁盘管理模块

磁盘信息

Disk

MessageControl

文件操作

MessageMessage读取磁盘信息

Blocks

修改磁盘信息

初始数据改变返回

用户输入

存储结果

用户界面:

0|file1|2

2|file1|-1

磁盘大小:

128KB已用空间:

32KB可用空间:

36KB当前文件:

file1

磁盘调度管理

运行算法

用户

选择数据

性能结果

用户界面

总磁道数:

100原始请求数据:

4,20,44,8,78添加磁道请求:

添加

其实磁道:

初始方向:

6、故障处理说明

出现故障,磁盘会产生一个Message对象,对象中的异常信息能够描述异常,并返回给文件系统。

故障

原因

文件创建失败

磁盘已满、需要空间>剩余空间、文件名重复

找不到该文件

文件信息错误

修改文件失败

磁盘已满、需要空间>剩余空间

7、其他设计

当需求发生变化后,要能够修改并满足新的需求。

如磁盘初始空间要求更大、要求增加二级索引节点,增加文件类型后也要能够较好维护。

磁盘管理的基本概念和原理

首先用,给用户展示磁盘的分布情况,未分配给任何文件的盘块号为黑色。

分配给同一文件的盘块号为同一种颜色,系统总共获取了十四种颜色。

因此可以看到彩色的磁盘分布情况。

除了使用颜色区分盘块所属的文件,每个盘块上面写明了盘块的编号,所分配的文件类型,所分配文件的名字,以及其父文件的节点。

默认情况下,其父节点为-1,就是直接放在根目录下的文件

所有的文件类型分为两种,一种是“文件”,用file表示。

一种是“文件夹”,用folder表示。

文件的大小任意,只要不超出磁盘的空间。

而文件夹的大小就是固定的,只能是1。

文件夹中有十个索引节点,每个节点链接到一个文件或文件夹,以此建立起一棵以文件夹为根节点的文件树。

此外在现实框的最下层,显示了磁盘的使用情况。

总盘块数,已使用盘块和未使用盘块。

展示给用户的界面如下图所示

每一个盘块的信息显示实图

文件夹:

文件:

文件夹的子文件:

磁盘的使用信息:

磁盘管理及调度模块详细设计说明书

一、引言

目的:

确定磁盘管理模块的总体结构、与其他模块之间的接口和总体流程。

使用者:

软件开发人员和维护人员。

本模块是操作系统模拟软件中的演示磁盘管理的模块,主要来展示文件在磁盘上的存储情况,因此和文件管理模块联系最为紧密。

磁盘调度算法是一个专门的演示模块,与磁盘管理模块物理相似,和其他模块无实际联系

2、软件结构

磁盘管理模块采用C/S模式,模块又分成三个子模块。

磁盘管理、图形化显示,磁盘调度分为一个模块,六个功能。

 

3、模块设计说明

磁盘管理模块

磁盘管理模块需要对磁盘进行增删查改操作,以下是每一个操作的流程图。

磁盘演示模块的整体流程图

对应于这个模块的用户界面如下:

New代表新建一个文件,delete选项用来删除一个文件,add选项用来为一个文件增加空间,dec选项为一个文件减小空间,rename给文件重命名。

整个显示的是一个JToolBar类,JToolBar需要增加动作类来产生Button按钮,总共new出了五个抽象动作类,于是出现了上面看到的五个按钮。

相应的代码如下

//新建一个工具条

JToolBartoolBar=newJToolBar();

toolBar.setFloatable(true);

//新建五个抽象动作类

ToolBarActionfile_new=newToolBarAction("NEW",null,this);

ToolBarActionfile_del=newToolBarAction("DELETE",null,this);

ToolBarActionfile_add=newToolBarAction("ADD",null,this);

ToolBarActionfile_dec=newToolBarAction("DEC",null,this);

ToolBarActionfile_sea=newToolBarAction("RENAME",null,this);

//把第一个按钮加入工具条

toolBar.setFloatable(true);

JButtonjb;

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.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.addSeparator();

jb=toolBar.add(file_sea);//把第重命名按钮加入工具条

jb.setActionCommand("RENAME");//设置其产生事件所显示的命令

jb.setToolTipText("查找");

jb.setFocusPainted(false);

toolBar.addSeparator();

this.add(toolBar,BorderLayout.NORTH);//设置其布局,放在最上面

为新建的文件分配磁盘空间,该函数是Disk中的allocate方法

publicMessageallocateSpace(Messagemessage)

 

删除一个文件的流程图,该函数是Disk中的deleteFF()方法,

publicvoiddeleteFF(intstartAdd)

修改一个文件的流程图,它对应Disk中的两个函数,addSpace和reclaimSpace(Message),程序中是:

publicMessageaddSpace(Messagemessage),publicMessagereclaimSpace(Messagemessage)。

文件重命名的流程图如下,其对应的是renewFile函数,

publicvoidrenewFile(Messagemessage)

文件重命名

最开始设计时,把消息模块也加入了程序中,后来这个模块被删掉了。

1)接收消息

功能名称:

接收消息

参与执行者:

用户

前置条件:

一个合法的登录用户

程序流:

A.if没有消息

继续等待

else

获取消息

If消息对象是Message实例

交给消息控制着处理

返回A

Else

返回Message实例,提示该消息类型错误。

EndIf

Endif

2)消息处理

功能名称:

消息处理

参与执行者:

消息控制对象

前置条件:

收到一个Message对象

程序流:

Aif操作类型合法

If文件类型合法

把消息交给磁盘来处理

Else把消息交给磁盘处理

添加操作消息文件类型无法识别

Endif

Else生成新信息,返回操作类型不合法

Endif

3)磁盘分配

功能名称:

磁盘分配

参与执行者:

磁盘对象

前置条件:

已经收到一个可操作的消息对象

程序流:

if磁盘未满

If所需空间<=剩余空间

if此文件的父文件为文件夹

找到其父文件

把一个空闲的盘块号分配给新文件,并把改记录添加到父文件的索引中。

继续给改文件分配全部空间

生成新的信息对象并返回

Else分配给该文件新的空间

生成新的信息对象并返回

Endif

返回空间不足信息

Endif

返回磁盘已满信息

Endif

4)发送消息

功能名称:

发送消息

参与执行者:

消息发送对象

前置条件:

已经从磁盘对象模块获取了一个消息对象

程序流:

发送消息

磁盘调度模块

功能名称:

磁盘调度

参与执行那个者:

用户

前置条件:

已经登录的合法用户

程序流:

A。

用户输入数据

If用户选择fcfs算法

运行fcfs算法

Elseif用户选择sstf算法

运行sstf算法

Elseif用户选择scan算法

运行scan算法

Elseif用户选择ccsan算法

运行ccan算法

Elseif用户选择NStepScan算法

运行NStepScan算法

Elseif用户选择Fscan算法

运行NStepScan算法

Endif

If有新的磁盘访问加入

添加到磁盘队列中

Endif

磁盘管理和调度模块的类图

 

 

磁盘管理的完成情况

经过两个星期的努力,最终完成本模块所要求的任务。

对磁盘的增删改查都定义了良好的借口,便于和文件管理模块集成。

此外,我也单独写了一个磁盘调度模块,用来展示五种磁盘调度算法。

不过,我并没有完成当初预想的任务,即把我的模块写成C/S模式,并加入一个消息管理模块,专门来接受、发送、处理消息。

由于我们的模块不是很庞大,王昭阳直接调用我写给他的函数即可。

最后,我还负责整合团队中其他三位成员的代码,并加入了注册登录界面。

下面来看我们的系统。

首先是模拟Linux多用户登录,输入账号和密码,便可以进入我们的系统。

如果用户还未有账号和密码,可以先注册,再进入系统。

1)进入系统

点击登录后,就可以看到我们模拟操作系统的各种管理了。

2)选择演示模块

界面上的四个按钮,分别代表我们四人负责的模块

其中虚拟文件系统已经包跨了磁盘管理与调度系统,但我编写的模块独立性很强,接口定义良好,作为一个单独的模块演示也很好看。

由于磁盘调度与磁盘管理和文件管理没有太多关系,用户会看到两个窗口,第一个是磁盘管理窗口,第二个是磁盘调度算法窗口。

实际效果如下面截图

3)新建文件

磁盘上本来就有一些文件和文件夹,我们把它当做系统文件。

点击新增按钮,会弹出一个窗口,提示用户输入相应的数据。

如新建一个大小为5,名字为li,直接放在根目录下的文件。

点击确定,磁盘上就会多出五个绿色的盘块号,并写着li,实际如下面所示

当你点击new时,就会new一个FileDialog类,该类继承了抽象坚挺器接口,如下所示。

publicclassFileDialogextendsJDialogimplementsActionListener

用户输入数据后,点击确定,系统获取用户输入的数据,并调用相应的方法,为文件分配盘块。

代码如下

if(dialog_type.equals("NEW")){//用户要新增一个文件

//创建函数所需的信息对象

m=newMessage(text_name.getText(),text_fileType

.getSelectedItem().toString(),Integer

.parseInt(text_size.getText()),Integer

.parseInt(text_parentN.getText()));

//调用分配空间方法

m=d.allocateSpace(m);

4)删除文件

当用户点击delete时,也会有一个相应的对话框弹出,示意用户所需要输入的数据。

输入8并按确定后,初始盘块为8的文件就被删除了,结果如下图

删除的流程和新建差不多,系统获取用户输入的信息后,new一个信息对象,便执行删除方法,代码如下

elseif(dialog_type.equals("DELETE")){//执行删除功能

//创建删除磁盘上文件所需的信息

m=newMessage(Integer.parseInt(text_fileSA.getText()));

m=d.reclaimSpace(m);//执行删除方法

frame.setMessage(m);

5)增加空间

点击增加空间按钮,同样有一个增加空间的对话框,用户输入必须的数据后,就可以为相应的盘块号增加空间。

这次拿初始盘块号为1,末尾盘块号为3的文件,增加空间为3。

未增加前分布和颜色如下

点击增加

增加以后,盘块分布如下

6)减少空间

减少是增加的逆操作,下面值演示,不解释了

减少空间后,分布如下

7)重命名

点击重命名按钮,输入重命名文件的其实盘块号,文件大小,以及需要改变的新名称,就可

以更改文件的名称了。

更改后的名称如下

,其颜色也会有相应的改变。

磁盘调度算法,

磁盘调度模块总共展示五种磁盘算法,fcfs算法,sstf算法,scan算法,cscan算法,NS算法。

磁道的总数由用户自己决定,初始盘块号也有用户自己决定。

如果用户不想输入磁盘数和初始磁道,那么系统会分配一个默认值。

默认情况下,磁道的总数是10,初始盘块号为100。

需要点击创建磁道来获取初始化磁道的信息,一步步如下图

上面显示的是初始化后,磁道的分布情况。

左边是磁道出现的先后顺序,由于没有开始演示调度算法,访问距离和平均访问距离都为0。

右边则按磁道的编号来展示磁道的分布,最小编号牌最上面,最大编号排最下面。

黑色的代表未被访问的磁道,红色的代表初始磁道号。

如果点击fcfs算法,左边会给每一个磁道填上相应的访问距离,并统计平均访问距离,右边会按照磁道访问的先后顺序,以此显示磁道的颜色。

蓝色代表将要访问的磁道,绿色代表已经被访问过的磁道。

磁盘调度算法演示完成后,右边的磁盘便会恢复原状。

下面展示每一种磁盘调度算法的演示情况

由于NStepScan算法是scan算法的累加,于是没有动态演示效果,只有静态的访问顺序。

 

总结和心得

经过两个星期的努力,终于如愿完成了操作系统课程设计。

整个过程虽然比较辛苦,有时也会感到比较烦躁,但我学到了很多东西,领悟了许多道理。

学习

1.第一次真实感受到软件工程方法所带来的巨大成效。

以前都只是凭着脑子想东西,就一行行写下了代码。

写出来的东西没有一个清晰的架构,整个过程也没有明显的步骤。

基本上是想到哪就写到哪,写出来的程序能完成功能,但兼容性很差,更别提到和其他的模块兼容。

这次,我们小组按照软件工程的一般做法。

从概要设计,详细设计,程序设计,编码,模块测试,集成测试,系统测试和最后的交付验收,我们每一步都做了相应的工作,结果很让人满意。

我们各自都提出了自己的设想,最后也都基本完成了各自设计的程序。

2要勇于想象。

我以前从来都没有写过磁盘管理模块的相关程序,这次我阅读了磁盘管理和调度的基本原理后,就有了初步的想法。

接着把自己所想的东西,变成自己可以看到的东西。

Java的功能十分强大,我想是想的相应算法,它都提供了相应的接口和类来供我使用。

自己做出了漂亮的磁盘管理界面后,心中也十分欢快。

3.要擅于参考优秀的代码。

我以前从未用java图形界面工具Swing做过如此复杂的动态想过演示。

一个个控件、按钮、以及数据的输入和输出,我都不知道如何整理。

但我从一个漂亮的图形界面程序中学习良好的架构,从而做出了自己想要的效果。

当然,在这个过程中,也遇到了很多问题,有客观的,也有主观的,下面我分析这些问题都是怎样的,以及我是怎样解决的。

问题

1.接口问题。

磁盘管理模块和文件管理模块联系十分紧密,但偏偏分成了两个模块,分别给两个人做。

我们要写一个公用的接口,以便到时候集成到一起时,能够让磁盘分配和文件分配同步。

我们考虑再三,便决定用一个javaBean来作为信息的在体,我们进行增删查改时都是根据这个对象中的信息来进行操作。

除此之外,我们没一个操作都对应一个独立的方法,这样操作间就不会有太大的影响。

最后,我们把两个模块集成到一起时,很快就实现了同步,因为大家都用了类似的接口。

2.数据结构的使用。

用什么来记录磁盘上文件的数据,以及如何记录文件的分配情况。

要能够既快又节省空间。

最后我使用了一个二维的boolean数组来记录磁盘的使用情况,当这个数据为false时,该盘块号没有被使用,为true时,就使用了。

那么进行增删改查时,都要根据这个二维布尔数组来进行操作。

而相应的存储磁盘的信息,就存放在一个Block二维数组中,现实磁盘信息就存储在JButton的数组中,这样,存储,现实,和整体磁盘信息分离,能够很好的兼容其他的情况,能根据需求做出相应的改变。

最后,我很高兴自己能够设计出这样的一个磁盘管理系统。

日后再遇到一些任务时,便可以更好的应对。

这次可程设计,也为我日后编写程序打下了坚实的基础。

自己这么多天的努力总算没有白费,以后我可以自信的说自己能够设计出对用户友好的,并且有漂亮图形界面的软件。

参考文献:

(1)汤小丹,梁红兵,哲凤屏,汤子瀛计算机操作系统西安电子科技大学出版社

(2)胡志刚等.计算机操作系统.中南大学出版社,2005

(3)陈向群等.Windows内核实验教程.机械工业出版社,2004

(4)罗宇等.操作系统课程设计.机械工业出版社,2005

代码如下

我所负责模块的结构

DiskDemo.java

packagecom.csu.disk.display;

importjava.awt.BorderLayout;

importjava.awt.Color;

importjava.awt.Container;

importjava.awt.Dimension;

importjava.awt.Font;

importjava.awt.GridLayout;

importjava.awt.Toolkit;

importjavax.swing.JButton;

importjavax.swing.JFrame;

importjavax.swing.JMenu;

importjavax.swing.JMenuBar;

importjavax.swing.JMenuItem;

importjavax.swing.JPanel;

importjavax.swing.JSplitPane;

importjavax.swing.JTabbedPane;

importjavax.swing.JTextArea;

importjavax.swing.JToolBar;

importjavax.swing.UIManager;

importcom.csu.action.ToolBarAction;

importcom.csu.attemper.AttemperAlgorithm;

importcom.csu.disk.pojo.Message;

 

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

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1