学年论文(课程设计)
题目:基于混合索引结构的文件管理系统
学院数学与计算机学院
学科门类工学
专业软件工程
学号2009432125
姓名刘宝
指导教师刘海博
2011年12月30日
河北大学学年论文(课程设计)任务书
(指导教师用表)
学生姓名 刘宝 指导教师 刘海博 论文(设计)题目 基于混合索引结构的文件管理系统 主要研究
(设计)内容 在采用混合索引文件结构、成组链接法的基础上实现单用户的磁盘文件管理部分,包括:文件的逻辑结构、文件的物理结构、目录结构、磁盘分配回收、文件的保护和用户接口。 研究方法 根据操作系统理论课上学习的操作系统中关于文件管理实现方法,在混合索引文件结构、成组链接法的基础上模拟实现操作系统的文件管理功能和用户接口。 主要任务
及目标 主要任务:在采用混合索引文件结构、成组链接法的基础上实现单用户的磁盘文件管理部分和用户接口。
目标:通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解;通过模拟操作系统原理的实现练习编程。 主要参
考文献 [1]操作系统习题解答与实验指导.王煜,张明,刘振鹏.中国铁道出版社.2007
[2]操作系统实验指导.任爱华.清华大学出版社.2004
[3]操作系统实验教程(Windows版).姚卫华.清华大学出版社.2005
进度安排 论文(设计)各阶段名称 日期 布置任务 第12周-第13周 整体设计 第14周 编写程序 第15周-第19周 撰写论文 第18周 指导教师签字:
系主任签字:
主管教学院长签字:
河北大学学年论文(课程设计)成绩评定表
学院:数学与计算机学院
学生姓名 刘宝 专业年级 软件工程09级 论文(设计)题目 基于混合索引结构的文件管理系统 论文(设计)内容提要
本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、教学目的、教学任务与要求、意义以及论文的结构安排;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;最后一部分,结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。
指导教师评语
成绩:指导教师(签名):年月日 基于混合索引结构的文件管理系统
摘要
本系统根据操作系统理论课上学习的操作系统中关于文件管理实现方法,在采用混合索引文件结构、成组链接法的基础上实现单用户的磁盘文件管理部分,包括:文件的逻辑结构、文件的物理结构、目录结构、磁盘分配回收、文件的保护和用户接口。
本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、教学目的、教学任务与要求、意义以及论文的结构安排;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;最后一部分,结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。
关键词:操作系统文件管理混合索引
ABSTRACT
Accordingtothesystemoperatingonthetheoryoflearningintheoperatingsystemonthedocumentmanagementmethod,usedinmixed-indexfilestructureofthegroup''slinkstolawbasedonsingle-userdiskfilemanagement,including:thelogicalstructureofthedocument,documentThephysicalstructureofthedirectorystructure,thedistributionoftherecoverydisk,fileprotectionanduserinterface.
Thispaperonafour-part,theintroductoryremarks,themainoperatingsystemthatthenatureofthecurriculumdesign,thepurposeofteaching,teachingandmissionrequirements,aswellasthesignificanceofthepaperstructure;partoftheanalysisanddesign,mainlyoncorefunctionsofthesystemmodulesEachmodule,aswellastherealizationoftheplantoadoptthemethodsandprinciples;partofthesystem,mainlythroughtheflowchart,andothertoolstodescribethemainmoduleoftheprocesstoachieve;thelastpartoftheconcludingpartofthewritinghasbeenthemainachievementoftheshortcomingsofthesystemtoimprovetheprogramandCurriculumdesignintherealfeelings.
keywords:OperatingsystemDocumentManagementIndexMixed
目录
一引言 1
1.1性质 1
1.2设计目的 1
1.3任务和要求 1
1.4意义 1
1.5论文结构安排 1
二系统分析与设计 2
2.1系统要求 2
2.2实现方法和原理 2
2.2.1文件管理和用户接口 2
2.2.2存储管理 4
2.2.3设备管理 4
2.2.4进程管理 4
三系统实现 6
3.1文件管理 6
3.1.1创建文件 6
3.1.2删除文件 10
3.1.3移动文件 11
3.1.4改变文件属性 12
3.1.5编辑文件 13
3.1.6显示文件 14
3.1.7建立目录 15
3.1.8删除空目录 16
3.1.9删除目录 17
3.2存储管理 18
3.3设备管理 18
3.4进程管理 18
四结束语 20
参考文献 20
一引言
1.1性质
操作系统是计算机科学与技术专业的主要专业基础课和主干课。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。
1.2设计目的
通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解。
通过模拟操作系统原理的实现练习编程。
1.3任务和要求
模拟采用多道程序设计方法的单用户操作系统,本系统要求实现文件管理和用户接口,存储管理,设备管理,进程管理。
1.4意义
通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解,掌握了初步分析实际问题的能力,为其今后在相关领域开展工作打下坚实的基础。同时使学生系统科学地受到分析问题和解决问题的训练,提高运用理论知识解决实际问题的能力。
1.5论文结构安排
本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、设计目的、任务和要求以及意义;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;程序截图部分,主要是程序的截图;结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。二系统分析与设计
2.1系统要求
本系统要求实现文件管理和用户接口,存储管理,设备管理,进程管理。
2.2实现方法和原理
2.2.1文件管理和用户接口
磁盘模拟,由于磁盘内容是断电后不丢失的,因此用文件模拟磁盘。要求模拟系统存在两块硬盘:用一个文件disk1模拟磁盘c,一个文件disk2模拟磁盘d,磁盘的每个盘块64字节,模拟磁盘共有256块。磁盘中第0块存放专用块内容,第1、2块存放根目录,其余存放子目录和文件。
文件的逻辑结构采用流式结构。文件的物理结构采用索引文件,每个文件分配一个索引块(用来存放索引的盘块)把分配给该文件的所有盘块号都记录在该索引块中,按照这种分派方式存储的文件就是索引文件。
由于索引块就是一个存放许多盘块号的盘块,因此,为使系统能找到文件存放的地址,文件目录项记录该文件索引块的盘块号和文件长度。为一个大文件分配磁盘空间时,如果所分配除去盘块的盘块号,已经装满一索引块时,便需再为该文件分配另一个索引块,用于将以后继续分配给该文件的盘块号记录其中,以此类推。
同时,应为这些索引块再建立一级索引,即系统再分配一索引块,作为一级索引块的索引块,将第一块、第二块、第三块、……索引块的盘块号写入此索引块中,这样便形成了二级索引的分配方式,如果文件非常大的时候,还可以用三级、四级索引分配方式。本系统实现二级索引。
文件的索引分配方式如下。
图2-1文件索引分配方式
文件的内容均采用文本文件,系统中有两种文件:一种是存放任意字符的文件,一种是可执行文件:可执行文件的内容就是系统内进程的程序体。文件中要有一种特定命令的可执行文件。
目录结构采用树型目录结构。目录项内容共十六个字节。目录名和文件名占六个字节,扩展名占三个字节,目录和文件属性占一字节,文件长度占二字节。根目录位置固定,占用磁盘两块,大小固定,共十六项。子目录位置不固定,大小不固定。
磁盘的分配采用混合索引结构的分配方式。系统采用成组链接法记录磁盘空间的使用情况。空闲块每组登记十个空闲块,专用块占用第零块。索引块中每个盘块号占用四字节,登记三十二块。
用户接口提供用户命令接口,要求文件名中既可以支持相对路径的文件名,也可支持绝对路径的路径名。
屏幕显示要求包括:用户命令接口,用于系统运行时用户输入命令;磁盘目录显示,要求显示磁盘的树型目录结构;磁盘使用情况,显示磁盘每一个磁盘块的空间是否空闲。
2.2.2存储管理
存储管理部分主要实现主存空间的分配和回收、存储保护。
模拟系统中,采用页式存储管理方案,系统区包括pcb区域、位示图,用数组模拟其他内存区域,大小为512字节。
采用数组来模拟主存的用户区,每个数组元素占用一个字节,实验中主存大小为512个字节,每个主存块16个字节。
本次实验采用页式管理策略对主存进行分配和回收策略,采用位示图记录主存使用情况,当有程序要存放入主存时,查看空闲块总数是否够用,如果够用,先分配一块用来存放页表,然后查位示图中为“0”的位,根据查到的位所在的字号和位号可计算出对应的块号,同时在该位填上占用标志“1”,并填写页表;不够用,分配失败。
根据页表归还存储空间时,可以根据归还块的块号推算出在位示图中的位置:
字号=[块号/位示图中字长]
位号=块号mod位示图中字长
然后把这一位的“1”清成“0”,表示该块成为空闲块了,最后回收页表所占用空间。
2.2.3设备管理
设备管理主要包括设备的分配和回收。模拟系统中有A、B、C三种独占型设备,A设备3个,B设备2个,C设备1个。数据结构,因为模拟系统比较小,因此只要设备表设计合理既可。设备分配采用先来先服务策略。设备回收,回收设备后,要注意唤醒等待设备的进程。屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。
2.2.4进程管理
进程管理主要包括进程调度,进程的创建和撤销、进程的阻塞和唤醒,中断作用的实现。
用函数CPU()模拟中央处理器。该函数主要负责解释“可执行文件”中的命令。
主要寄存器的模拟,用全局变量模拟重要寄存器,如CPU重要寄存器,程序状态寄存器PSW、指令寄存器IR,程序计数器PC,数据缓冲寄存器DR等。
中断的发现应该是硬件的工作,这里在函数CPU()中加检测PSW的方式来模拟,在CPU()函数中,每执行一条指令之前,先检查PSW,判断有无中断,若有进行中断处理,然后再运行解释指令。CPU()函数应该不断循环执行的。
模拟中断的种类和中断处理方式。程序结束,将结果写入文件out,其中包括文件路径名和x的值,调用进程撤销原语撤销进程,然后进行进程调度。
I/O中断:将输入输出完成的进程唤醒,将等待该设备的一个进程同时唤醒。
时钟的模拟。系统中的绝对时钟和相对时钟用全局变量模拟。系统时钟用来记录开机以后的时间。这里的系统时钟并不是计算机的真正的时钟,这里所说的时间只是一个单位。
进程控制块内容包括进程标识符、主要寄存器内容、进程状态、阻塞原因等等。本模拟系统最多容纳10个进程块。
PCB区域用数组模拟。进程控制块根据内容的不同组成不同的队列,空白进程控制块链、就绪队列和阻塞队列,正在运行的进程只有一个,系统初始时只有空白进程控制块链。
进程调度采用抢占式优先级调度算法。进程调度函数的主要工作是:将正在运行的进程保存在该进程对应进程控制块中;从就绪队列中选择一个进程;将这个进程中进程控制块中记录的各寄存器内容恢复到CPU各个寄存器内。
进程控制建立四个函数模拟进程创建、撤销、阻塞和唤醒四个原语。
进程创建的主要工作是:第一步,申请空白进程控制块;第二步,申请主存空间,申请成功,装入主存;第三步,初始化进程控制块;第四步,进程链入就绪队列,根据情况决定是否转向进程调度。
进程撤销的主要工作是:第一步,回收进程所占内存资源;第二步,回收进程控制块;第三步,在屏幕上显示进程执行结果。
进程阻塞的主要工作是:第一步,保存运行进程的CPU现场;第二步,修改进程状态;第三步,将进程链入对应的阻塞队列,然后转向进程调度。
进程唤醒的主要工作是:第一步,将进程由阻塞队列中摘下;第二步,修改进程状态为就绪;第三步,链入就绪队列,根据情况决定是否转向进程调度。
屏幕显示要求包括:显示系统时钟;显示正在运行的进程的进程名、运行的指令、中间结果、相对时钟寄存器内容;显示就绪队列中进程名;显示阻塞队列中进程名。
三系统实现
3.1文件管理
3.1.1创建文件
用“create”函数创建一个文件,形式是“create(path)”path是文件路径。
判定path的格式的正确性,如有无扩展名,扩展名是否正确(“txt”或“exe”),文件名长度是否超过要求,文件路径是否存在,要创建的文件是否已经存在,磁盘空间是否够用等。
判断是否存在所建路径的函数如下:
publicintsearch(string[]paths,intpathsNum)
{
intdiskNum=2;
for(inti=1;diskNum!=255&&i diskNum=searchpart(paths[i],diskNum);
returndiskNum;
}
publicintsearchpart(stringpath,intdiskNum)
{
intdd=diskNum64;
byte[]buffer=newbyte[64];
buffer=diskTobuffer(dd,64);
for(intj=0;j<8;j++)
{
byte[]fcb=newbyte[8];
for(intk=0;k<8;k++)
fcb[k]=buffer[j8+k];
if(fcb[4]>7)
{
byte[]bb=newbyte[3];
for(intp=0;p<3;p++)
bb[p]=fcb[p];
stringstr=System.Text.Encoding.Default.GetString(bb);
str=str.Trim();
if(str.Equals(path))
{
diskNum=fcb[5];
returndiskNum;
}
}
}
if(getFAT(diskNum)!=255)
{
diskNum=getFAT(diskNum);
diskNum=searchpart(path,diskNum);
returndiskNum;
}
else
return255;
}
判断是否已经存在要创建的文件的函数如下,找不到返回255。
publicintsearchfile(stringfilename,stringfiletype,intdiskNum)
{
intdd=diskNum64;//实际字节号
byte[]buffer=newbyte[64];//buffer是存放第diskNum块磁盘块的缓冲
buffer=diskTobuffer(dd,64);
for(intj=0;j<8;j++)//将盘块切分成8个FCB
{
byte[]fcb=newbyte[8];//存放一个FCB
for(intk=0;k<8;k++)
fcb[k]=buffer[j8+k];
byte[]name=newbyte[3];
for(intp=0;p<3;p++)
name[p]=fcb[p];
stringstr=System.Text.Encoding.Default.GetString(name);
str=str.Trim();
if(str.Equals(filename))
{
byte[]bb=newbyte[3];
bb=System.Text.Encoding.Default.GetBytes(filetype);
if(fcb[3]==bb[0])
returnfcb[5];
}
}
if(getFAT(diskNum)!=255)
{
diskNum=getFAT(diskNum);
diskNum=searchfile(filename,filetype,diskNum);
returndiskNum;
}
else
return255;
}
判断磁盘空间是否够用,返回值是255时不够用。
publicbyteallocate()
{
for(inti=3;i<128;i++)
{
if(FAT[i]==0)
{
FAT[i]=255;
FATTodisk();
return(byte)i;
}
}
return255;
}
创建用bufferTodisk()函数:
publicvoidbufferTodisk(byte[]file,intbegin,intnumber)
{
FileStreamfs=newFileStream(path,FileMode.Open,FileAccess.Write);
fs.Seek(begin,SeekOrigin.Begin);
fs.Write(file,0,number);
fs.Close();
}
3.1.2删除文件
先要判断要删除的文件所在路径是否存在,用search()函数。若存在,再判断要删除的文件是否存在,用searchfile()函数。
若要删除的文件存在,则修改FAT表,再将FAT表写入磁盘。
图3-1删除文件流程图
3.1.3移动文件
移动文件要用到两个路径,源路径和目的路径。要判断两条路径是否都存在,用search()函数,两条路径都存在才能进行移动。
判断源文件是否存在,存在才能移动。判断目的文件是否存在,若已经存在则移动失败。
图3-2移动文件流程图
3.1.4改变文件属性
判断要更改的文件的所在路径是否存在,再判断要更改的文件是否存在。
图3-3改变文件属性流程图
3.1.5编辑文件
主要功能是在编辑区进行对文件的编辑。
图3-4编辑文件流程图
3.1.6显示文件
判断要显示的文件路径是否正确。然后显示在编辑区。
图3-5显示文件流程图
3.1.7建立目录
判断要创建的目录是否存在,目录名是否超出长度,磁盘空间是否够用等。
图3-6建立目录流程图
3.1.8删除空目录
要判断此目录是否为空目录,要删除目录是否存在等。
图3-7删除空目录流程图
3.1.9删除目录
用deldir(path)函数,path是待删除的目录的全路径名。先要找到要删除的目录,找到后删除。
图3-8删除目录流程图
3.2存储管理
存储管理部分主要实现主存空间的分配和回收、存储保护。
内存空间的分配采用最优分配法进行分配,先在内存中查找满足需求的最小内存空间,若没有找到,则返回错误信息。找到可用空闲区,开始分配,若空闲区大小与要求分配的空间差小于minisize大小,则空闲区全部分配出去,若空闲区大小与要求的空间差大于minisize大小,则从空闲区划出一部分分配。block()原语。申请到设备,设备的时间片开始执行。
3.4进程管理
这里在函数CPU中加检测PSW的方式来模拟,在CPU()函数中,每执行一条指令之前,先检查PSW,判断有无中断,若有进行中断处理,然后再运行解释指令。CPU()函数应该不断循环执行的。模拟中断的种类和中断处理方式。
程序结束(执行指令end形成的中断,软中断):将结果写入文件out,其中包括文件路径名和x的值,调用进程撤销原语撤销进程,然后进行进程调度;
I/O中断(设备完成输入输出):将输入输出完成的进程唤醒,将等待该设备的一个进程同时唤醒。
程序状态字PSW=0时没有中断,如果CPU中没有运行的进程,要调用新进程,如果就绪队列为空,就调用闲逛进程,如果就绪队列有进程,占用CPU执行。
PSW不为0有中断。PSW=1时程序结束要处理end中断,PSW=2处理I/O中断,PSW=3处理时钟中断。
进程控制块内容包括进程标识符、主要寄存器内容、进程状态、阻塞原因等等。本模拟系统最多容纳10个进程块。
进程控制块根据内容的不同组成不同的队列,空白进程控制块链、就绪队列和阻塞队列,正在运行的进程只有一个,系统初始时只有空白进程控制块链。进程调度,采用抢占式优先级调度算法。
进程创建的主要流程是:申请空白进程控制块,empty为空闲的进程控制块连接成的队列,如果empty的首尾相接说明没有空闲的进程控制块,创建进程失败。如果有空闲控制块就修改empty的内容。申请主存空间,申请成功,装入主存,查找内存中是否有足够空间。没有足够空间就归还刚申请的进程控制块。初始化进程控制块;内存申请成功就初始化进程控制块,包括进程的名字,在内存中的起始地址。最后将进程链入就绪队列,根据情况决定是否转向进程调度。
进程撤销的主要流程是:回收进程所占内存资源,在已分分区表中查找相应的对应项,寻找回收内存的上下邻空闲区,有空闲区就合并,然后回收。没有就直接填入回收区。回收进程控制块,将回收的进程控制块挂入空闲队列empty。在屏幕上显示进程执行结果。
进程阻塞的主要流程是:保存运行进程的CPU现场,修改进程状态,将进程链入对应的阻塞队列,然后转向进程调度。
进程唤醒的主要工作是:将进程由阻塞队列中摘下,修改进程状态为就绪,链入就绪队列,根据情况决定是否转向进程调度。
四结束语
通过这次课程实验,主要是熟悉了对文件的主要操作,例如文件的创建,要考虑好多问题,包括文件是否已经存在,文件路径是否正确,磁盘空间是否够用等,熟悉了解决这些问题的办法。还有对节点的操作等。
熟悉了FCB和PCB的主要作用,和对FCB和PCB的主要操作。
熟悉了就绪队列、阻塞队列的作用,和CPU对就绪队列的调用,进入阻塞队列或就绪队列的条件。
提高了编程能力,加深了对操作系统的理解。
参考文献
[1]操作系统习题解答与实验指导.王煜,张明,刘振鹏.中国铁道出版社.2007
[2]操作系统实验指导.任爱华.清华大学出版社.2004
[3]操作系统实验教程(Windows版).姚卫华.清华大学出版社.2005
河北大学2009级操作系统学年论文(课程设计)
20
装
订
线
装
订
线
用searchfile()搜索同名文件
开始
MessageBox.Show("不存在此路径!")
返回值是225
是
否
用search(paths,pathsNum)查找路径
存在同名文件
否
是
修改FAT表
结束
MessageBox.Show("不存在此!")
开始
MessageBox.Show("路径错误!")
源路径和目的路径都存在
否
是
源文件存在
是
否
结束
目标文件存在
否
写新FCB,删除旧的FCB
是
开始
MessageBox.Show("路径错误!")
要更改的文件路径存在
否
是
文件存在
是
否
结束
关键字正确
是
更改文件属性
否
MessageBox.Show("文件不存在!")
MessageBox.Show("关键字错误!")
开始
MessageBox.Show("只读文件不能编辑!")
要更改的文件是只读文件
是
否
路径正确
是
结束
对文件进行编辑
否
MessageBox.Show("路径错误")
开始
显示文件
是
结束
否
MessageBox.Show("路径错误")
路径正确
开始
MessageBox.Show("目录名过长!")
目录名长度合格
否
是
路径存在
是
结束
目录已存在
否
创建目录
磁盘空间足够
是
MessageBox.Show("不存在此路径!")
MessageBox.Show("该目录名已存在")
MessageBox.Show("磁盘空间不够!")
是
否
否
开始
是
结束
否
删除空目录
当前目录为非空目录
MessageBox.Show("当前目录为非空目录")
删除目录存在
是
否
MessageBox.Show("不存在此目录")
开始
否
结束
是
删除目录
要删除目录路径存在
MessageBox.Show("不存在此路径")
要删除目录存在
是
否
MessageBox.Show("不存在此目录")
|
|