资源描述:
《位示图管理磁盘空间 操作系统课设.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、课程设计报告(2009--2010年度第一学期)课程名称:操作系统课程设计课设题目:用位示图管理磁盘空间的分配与回收院系:班级:姓名:学号:指导教师:设计周数:一周成绩:2010年1月9日设计报告内容一、需求分析(1)假定现有一个磁盘组,共40个柱面。每个柱面4个磁道,每个磁道又划分成4个物理记录。磁盘的空间使用情况用位示图表示。位示图用若干个字构成,每一位对应一个磁盘块。1表示占用,0表示空闲。为了简单,假定字长为16位,其位示图如图9—1所示。系统设一个变量S,记录磁盘的空闲块个数。位0123456789101112131415字01111110100
2、11111012....39图9—1位示图(2)申请一个磁盘块时,由磁盘块分配程序查位示图,找出一个为0的位,并计算磁盘的物理地址(即求出柱面号、磁道号(也即磁头号)和扇区号)。由位示图计算磁盘的相对块号的公式如下:相对块号一字号×16+位号之后再将相对块号转换成磁盘的物理地址:由于一个柱面包含的扇区数=每柱面的磁道数×每磁道的扇区数=4×4=16,故柱面号=相对块号/16的商,即柱面号=字号磁道号=(相对块号/16的余数)/4的商,即(位号/4)的商物理块号=(相对块号/16的余数)/4的余数,即(位号/4)的余数(3)当释放一个相对物理块时,运行回收程
3、序,计算该块在位示图中的位置,再把相应位置0。计算公式如下:先由磁盘地址计算相对块号:相对块号=柱面号×16+磁道号×4+物理块号再计算字号和位号:字号=相对块号/16的商,也即字号=柱面号位号=磁道号×物理块数/每磁道+物理块号(4)按照用户要求,申请分配一系列磁盘块,运行分配程序,完成分配。然后将分配的相对块号返回用户,并将相对块号转换成磁盘绝对地址,再显示系统各表和用户已分配的情况。二、整体功能及设计程序用JAVA语言实现,共设置四个模块。分别是:初始化,分配,回收,全部回收。为每个模块设计一个按钮,当点击相应按钮时使用对应功能。使用二组数组data
4、[40][16]记录位示图使用情况;inta,b,c;分别表示柱面号、磁道号和扇区号。intn表示相对块号。程序共有两个显示区,一个为位示图表格,另一个为分配回收的磁盘块的地址,共有三个功能块,分配,回收,和全部回收。开始申请n个磁盘块还有足够空闲块返回查找位示图从第一个开始找到n个为0的磁盘块由字位号计算出相对块号,柱面号,磁道号,物理块号等参数并输出。将位示图和图表内相应位修改为1,并修改空闲数组和已分配数组空闲块-1,分配+1返回开始输入要释放的磁盘相对块号将磁盘块号转换成对应位示图的字位号将位示图和图表对应为设置为0空闲块个数+1,分配-1,并修改
5、空闲数组和已分配数组返回图1磁盘空间分配框图图2磁盘空间单个回收框图开始将已分配数组中存储的所有相对块号依次转换成字位号并修改位示图和图表的对应位置。分配数组清空,遍历位示图,重新记录空闲数组和空闲盘块。返回图3磁盘空间全部回收框图三、编程实现importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;importjava.util.*;classWSTimplementsActionListener{JFramef;JTextFieldtf1,tf2;JTabletable;JScrollPan
6、epane1,pane2;JPanelp1,p2,p3,p4;JTextAreata;JLabell1,l2;JButtonb1,b2,b3,b4;Stringdata[][];//位示图二维数组Stringname[];intempty[];//空闲盘块相对块号数组intused[];//已分配盘块相对块号数组intS,T;//空闲盘块数,已分配盘块数publicWST(){f=newJFrame("位示图");data=newString[40][16];name=newString[16];for(inti=0;i<16;i++){name[i]="
7、"+i;}S=0;T=0;empty=newint[640];used=newint[640];table=newJTable(data,name);tf1=newJTextField(5);tf2=newJTextField(5);ta=newJTextArea(10,15);pane1=newJScrollPane(table);pane2=newJScrollPane(ta);p1=newJPanel();p2=newJPanel();p3=newJPanel();p4=newJPanel(newGridLayout(2,3,2,2));l1=new
8、JLabel("磁盘分配块数");l2=newJLabel("要回