操作系统课程设计.docx
- 文档编号:28243770
- 上传时间:2023-07-09
- 格式:DOCX
- 页数:49
- 大小:280.75KB
操作系统课程设计.docx
《操作系统课程设计.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计.docx(49页珍藏版)》请在冰豆网上搜索。
操作系统课程设计
学年论文(课程设计)
题目:
操作系统课程设计
学院数学与计算机学院
学科门类工学
专业计算机科学与技术
学号**********
姓名侯亮
指导教师张明
2014年7月12日
河北大学学年论文(课程设计)任务书
(指导教师用表)
学生姓名
侯亮
指导教师
张明
论文(设计)题目
基于文件分配表的文件管理系统
主要研究
(设计)内容
在采用文件分配表的基础上实现单用户的磁盘文件管理部分,包括:
文件的逻辑结构、文件的物理结构、目录结构、磁盘分配回收、文件的保护和用户接口。
研究方法
根据操作系统理论课上学习的操作系统中关于文件管理实现方法,在文件分配表基础上模拟实现操作系统的文件管理功能和用户接口。
主要任务
及目标
主要任务:
在采用文件分配表的基础上实现单用户的磁盘文件管理部分和用户接口。
目标:
通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解;通过模拟操作系统原理的实现练习编程。
主要参
考文献
[1]操作系统习题解答与实验指导.王煜,张明,刘振鹏.中国铁道出版社.2007
[2]操作系统实验指导.任爱华.清华大学出版社.2004
[3]操作系统实验教程(Windows版).姚卫华.清华大学出版社.2005
进度安排
论文(设计)各阶段名称
日期
布置任务
第10周-第11周
整体设计
第12周
编写程序
第13周-第17周
撰写论文
第18周
指导教师签字:
系主任签字:
主管教学院长签字:
河北大学学年论文(课程设计)成绩评定表
学院:
数学与计算机学院
学生姓名
侯亮
专业年级
2012级计科
论文(设计)题目
基于文件分配表的文件管理系统
论文(设计)内容提要
本论文主要阐述四个部分内容,分别为:
引言部分,主要说明本次操作系统课程设计部分,主要阐述系统的主要功能模块、每个模块的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;结束语部分,主要阐述系统实现中不断改进过程、系统缺陷、编写中所得的感受和领悟。
指导教师评语
成绩:
指导教师(签名):
年月日
基于文件分配表的文件管理系统
摘要
本系统根据操作系统理论课上学习的操作系统中关于文件管理实现方法,在采用显式链接存储、文件分配表的基础上实现单用户的磁盘文件管理部分,包括:
文件的逻辑结构、文件的物理结构、目录结构、磁盘分配回收。
本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、教学目的、教学任务与要求、意义以及论文的结构安排;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;最后一部分,结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。
关键词:
操作系统文件管理文件分配表存储管理
一引言
1.1性质
操作系统是计算机科学与技术专业的专业基础课和主干课。
操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统的服务。
1.2教学目的
通过模拟操作系统的文件管理功能的实现,加深对操作系统和原理和操作系统实现方法的理解,达到编程的目的,提高学生运用理论知识分析问题、解决问题的能力,为学生从事科学研究和独立负担计算机及应用方面的工作打好扎实的基础。
1.3任务和要求
模拟采用多道程序设计方法的单用户操作系统,本系统要求实现的逻辑结构、文件的物理结构、目录结构、磁盘的分配回收、文件的保护的实现。
1.4意义
通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解,掌握了初步分析实际问题的能力,为其今后在相关领域开展工作打下坚实的基础。
同时使学生系统科学的收到分析问题和解决问题的训练,提高运用理论只是解决实际问题的能力。
1.5论文结构安排
本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、教学目的、教学任务与要求、意义以及论文的结构安排;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;最后一部分,结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。
二系统分析与设计
2.1系统要求
文件管理和用户接口部分实现的主要是单用户的磁盘文件管理部分,包括文件的逻辑结构、物理结构、目录、磁盘分配回收的实现。
2.1.1文件的逻辑结构
文件的逻辑结构采用流式结构;
文件均采用文本文件;
系统中有两种文件,一种是存放任意字符的文件,一种是可执行文件。
可执行文件的内容就是模拟系统内进程的程序体。
文件中要有一种特定命令的“可执行”文件,文件中的命令非常简单,包括:
x=;给x赋值一位数
x++;x加1
x--;x减1
!
;第一个?
为A,B,C中某个设备,第二个?
为一位数,表示使用设备的时间(由于没有实际设备,所以无法知道设备何时工作完成,所以假定一个数,这个数随着系统时间增加而递减,减到0时,认为是设备工作完成);
end.表示文件结束,同时将结果写入文件out,其中包括文件路径名和x的值。
2.1.2磁盘模拟
用一个文件disk1模拟磁盘,磁盘的每个盘块64字节,模拟磁盘共有128块。
第0、1块存放文件分配表,第2块存放根目录,其余存放子目录和文件。
2.1.3目录结构
目录结构采用树型目录结构。
①目录项内容(8个字节):
目录名、文件名:
3个字节;
扩展名:
2个字节;
目录、文件属性:
1字节;
起始盘块号:
1个字节;
文件长度:
1字节。
②根目录
根目录位置固定,为磁盘第2块,大小固定,共8项,占用模拟磁盘第2块;
③子目录
位置不固定,大小不固定。
2.1.4磁盘分配
磁盘的分配采用链接结构(显式链接)的分配方式。
系统采用文件分配表方式记录磁盘空间的使用情况和链接结构的指针。
因为磁盘有占用磁盘由128块,所以文件分配表中一项需要1字节,而磁盘由128块,因而需要128项,所以模拟磁盘空间中的第0、1块被用来存放文件分配表。
2.1.5屏幕显示
磁盘目录显示,要求显示磁盘的树型目录结构;
磁盘使用情况,显示磁盘每一个磁盘块的空间是占用还是空闲。
2.2实现方法和原理
2.2.1文件的逻辑结构
文件逻辑结构采用流式结构:
文件的内容均采用文本文件,系统有两种文件:
1、一种是存放任意字符的文件
2、一种是可执行文件:
可执行文件的内容就是系统内进程的程序体:
文件中要有一种可执行文件,文家中的命令非常简单,金保国一下几种指令:
x=;给x赋值一位数
x++;x加1
x--;x减1
!
;第一个?
为A,B,C中某个设备,第二个?
为一位数,表示使用设备的时间(由于没有实际设备,所以无法知道设备何时工作完成,所以假定一个数,这个数随着系统时间增加而递减,减到0时,认为是设备工作完成);
end.表示文件结束,同时将结果写入文件out,其中包括文件路径名和x的值。
2.2.2文件的物理结构和目录结构
文件的物理结构采用显式链接存储方式,通过链接文件物理块的指针显示的存放在外村的一张链表中,这张表被称为文件分配表(FAT)。
该表一个磁盘仅设置一张。
磁盘一共有128块,则该表为128项。
若某文件的一个磁盘块号为i,则这个文件下的磁盘的快好j应该记录在表的第i项,如下图2.2.2:
块号
0
1
2
3
4
5
6
7
8
9
...
内容
-1
-1
-1
4
9
0
5
8
-1
12
...
图2.2.2某磁盘文件存放链接指针部分内容
目录结构采用树型目录结构。
每个目录项共占8个字节,目录项的内容包括:
目录名、文件名:
3个字节;
扩展名:
2个字节;
目录、文件属性:
1字节;
起始盘块号:
1个字节;
文件长度:
1字节。
文件的FCB图如下图2.2.2属性字节各位作用示意图:
第0位
第1位
第2位
第3位
第4位
第5位
第6位
第7位
名字
名字
名字
type
type
属性
盘块
长度
2.2.2属性字节各位作用示意图
根目录位置固定,为磁盘第2块,大小固定,共8项,占用模拟磁盘第2块;子目录位置不固定,大小不固定。
2.2.3目录结构
目录结构采用树形目录结构,根目录项既可以表示一个普通文件,也可以是下一级目录的目录文件的一个说明项,如此层层类推,形成一个树形层次结构,如图2.2.3所示:
图2.2.3树形目录结构
2.2.4磁盘状态
磁盘的分配采用链接结构(显式链接)的分配方式。
系统采用文件分配表方式记录磁盘空间的使用情况和链接结构的指针,本设计的磁盘有一个磁盘:
C盘。
因为磁盘有占用磁盘由128块,所以文件分配表中一项需要1字节,而磁盘由128块,因而需要128项,所以模拟磁盘空间中的第0、1块被用来存放文件分配表(样例如2.2.4.1FAT分配表)。
若一个盘块是某个文件的最后一块,填写“-1”表示文件结束。
块号
0
1
2
3
4
5
6
7
8
9
...
内容
-1
-1
-1
4
9
0
5
8
-1
12
...
图2.2.4.1某磁盘文件存放链接指针部分内容
磁盘状态的显示以位示图的方式显示如图2.2.4.2位示图,每个盘块大小为64B,一共是128个盘块。
盘块的块号从0编起,依次为0,1,2,3,···,127。
位示图用字长为16位的字来构造,共128个字,其中已使用的盘块号标号为1,未使用的盘块号标号为0。
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
16
0
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
2
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
3
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
4
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
5
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
6
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
7
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
0/1
2.2.4.2位示图
三系统实现
3.1磁盘管理
3.1.1磁盘的创建
创建过程如下图3.1.1
3.1.1磁盘创建流程图
FileStreamDisk=newFileStream(harddisk,FileMode.Open);//harddisk为要建立的磁盘路径
byte[]FAT=newbyte[128];//FAT表的容量是128,为磁盘创建FAT表
3.1.2磁盘的初始化函数
初始化FAT标的时候读入的disnum的值都为0。
#regionRecordFileFAT(记录文件的FAT表项)
publicvoidRecordFileFAT(int[]disknum,stringharddisk)
{
FileStreamDisk=newFileStream(harddisk,FileMode.Open);
byte[]bydata=newbyte[disknum.Length];
for(inti=0;i { bydata[i]=Convert.ToByte(disknum[i]); } intj=0; while(j! =disknum.Length-1) { Disk.Seek(disknum[j]-1,SeekOrigin.Begin); Disk.WriteByte(bydata[j+1]); j++; } Disk.Seek(disknum[disknum.Length-1]-1,SeekOrigin.Begin); Disk.WriteByte(253); Disk.Close(); } #endregion 3.1.3画树结点 #regionReadFile(读文件画节点) publicvoidReadFile(TreeViewtreeView,ContextMenuStripcontextMenuStrip,ImageListimageList) { treeView.Nodes.Clear();//删除集合中所有树节点 //重新添加树节点 treeView.ImageList=imageList; TreeNoderoot=newTreeNode("计算机",0,0); TreeNodenode_C=newTreeNode("本地磁盘C",4,4); node_C.ContextMenuStrip=contextMenuStrip; treeView.Nodes.Add(root); root.Nodes.Add(node_C); DrawTree(node_C,3,"disk1.txt",contextMenuStrip); treeView.ExpandAll(); } #endregion 3.1.4画树 #regionDrawTree publicvoidDrawTree(TreeNodenode,intdisknum,stringharddisk,ContextMenuStripcontextmenustrip) { char[]charname=newchar[2]; byte[]bytename=newbyte[3]; intn=0; for(inti=0;i<8;i++) { FileStreamDisk=newFileStream(harddisk,FileMode.Open); Disk.Seek(64*(disknum-1)+n,SeekOrigin.Begin); Disk.Read(bytename,0,3);//读文件名 stringname=UTF8Encoding.UTF8.GetString(bytename);//文件名转换为string类型 Disk.Seek(2,SeekOrigin.Current); intattr=Disk.ReadByte(); Disk.Close(); if(attr==8)//目录 { FileStreamDisk1=newFileStream(harddisk,FileMode.Open); TreeNodem_childnode=newTreeNode(name,1,1); m_childnode.ContextMenuStrip=contextmenustrip; node.Nodes.Add(m_childnode); Disk1.Seek(64*(disknum-1)+6+n,SeekOrigin.Begin); intdisknumber=Disk1.ReadByte(); Disk1.Close(); DrawTree(m_childnode,disknumber,harddisk,contextmenustrip); n=n+8; continue; } elseif(attr==2||attr==3)//exe文件 { name+=".ex"; TreeNodee_childnode=newTreeNode(name,2,2); e_childnode.ContextMenuStrip=contextmenustrip; node.Nodes.Add(e_childnode); n=n+8; continue; } elseif(attr==4||attr==5)//txt文件 { name+=".tx"; TreeNodet_childnode=newTreeNode(name,3,3); t_childnode.ContextMenuStrip=contextmenustrip; node.Nodes.Add(t_childnode); n=n+8; continue; } else { n=n+8; continue; } } } #endregion 3.1.5读FAT表画磁盘 磁盘状态的显示如下图3.1.5磁盘状态图: 3.1.5磁盘状态图 完成算法: #regionDrawDisk(读FAT画磁盘) publicvoidDrawDisk(GroupBoxgroupbox,stringharddisk) { groupbox.Controls.Clear(); FileStreamDisk=newFileStream(harddisk,FileMode.Open); byte[]FAT=newbyte[128]; Disk.Seek(0,SeekOrigin.Begin); Disk.Read(FAT,0,128); Disk.Close(); PictureBox[]PB=newPictureBox[128]; for(inti=0;i<3;i++) { PB[i]=newPictureBox();//实例化 PB[i].BorderStyle=BorderStyle.Fixed3D; PB[i].BackColor=Color.GreenYellow; PB[i].Size=newSystem.Drawing.Size(15,15); } for(inti=3;i<128;i++) { PB[i]=newPictureBox();//实例化 PB[i].BorderStyle=BorderStyle.Fixed3D; PB[i].Size=newSystem.Drawing.Size(15,15); } //初始化picturebox的位置 intj=0; intk; intn=0; for(inti=0;i<8;i++) { k=0; while(j! =16*(i+1)) { PB[j].Location=newSystem.Drawing.Point(17+16*k,21+16*n); j++; k++; } n++; } for(inti=3;i<128;i++) { if(FAT[i]! =0) { PB[i].BackColor=Color.Blue; } if(FAT[i]==0) { PB[i].BackColor=Color.Gray; } } for(inti=0;i<128;i++) { groupbox.Controls.Add(PB[i]); } } #endregion 3.1.6磁盘的分配和回收 磁盘的分配时先查找控盘块,然后将空盘块标记由0标记为1,表示已分配。 过程如3.1.6磁盘分配: 为空 未分配完且未检索完FAT表 记录空盘块块号 预分配数量是否相等,是否检索完FAT表 返回disknum FAT表以检索完成 3.1.6磁盘分配 然后再将返回的分配数组记录文件,然后将文件读入数组中,应用RecordFileFAT函数,记录保存的信息,并将磁盘的FAT表存储信息的盘块标记为1。 实现函数: #regionSearchFAT(查找空盘块) publicint[]SearchFAT(intn,stringharddisk) { FileStreamDisk=newFileStream(harddisk,FileMode.Open); byte[]FAT=newbyte[128]; Disk.Seek(0,SeekOrigin.Begin); Disk.Read(FAT,0,FAT.Length); Disk.Close(); intk=0; while(k<128) { if(FAT[k]==0) { break; } k++; } if(k==128) { MessageBox.Show("磁盘已满! ","注意"); returnnull; } int[]disknum=newint[n]; intj=0; for(inti=0;i<128;i++) { if(FAT[i]==0) { while(j { disknum[j]=i+1; j++; break; } if(j
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计