操作系统课程设计报告.doc_第1页
操作系统课程设计报告.doc_第2页
操作系统课程设计报告.doc_第3页
操作系统课程设计报告.doc_第4页
操作系统课程设计报告.doc_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统课程设计实验报告姓 名: 学 号: 班级专业: 软 件 工 程 操作系统课程设计-建立基于磁盘存储设备的FAT文件系统一、课程设计要求、目的在现代计算机系统中,用到大量的程序和数据,由于内存容量有限,且不能长期保存,故而平时总是把他们以文件的形式存放在外村中,需要时可随时将他们调入到内存。如果用户直接管理外存上的文件,不仅要求用户熟悉外存的特性,了解各种文件的属性,以及他们在外存上的位置,而且在多用户的环境下,还必须能保持数据的安全性和一致性。显然,这是用户多不能胜任、也不愿意承担的工作。取而代之的是操作系统中又增加了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可以有效的提高系统资源的利用率。课程设计不仅要求我们紧扣课本知识,熟练的掌握课FAT文件系统实现原理上,而且要求最终的软件实现有很好的人机交互界面,从多方面考查我们的学习、实践能力。让我们在实践中去认识FAT文件系统的实现原理,加深对文件系统存储、数据的安全性和一致性理解,在实践中去完善自己的理论知识,纠正理论学习过程中出现的错误。二、课程设计的任务1、首先分配一定容量的磁盘存储空间,作为文件存储空间。2、建立相应的文件系统,使用FAT文件系统。3、为该文件系统设计相应的数据结构来管理目录、磁盘空闲空间、已分配空间等。4、提供文件的创建、删除、移位、改名等功能。5、提供良好的界面,可以显示磁盘文件系统的状态和空间的使用情况。6、提供虚拟磁盘转储功能,可将信息存入磁盘,还可从磁盘读入内存。三、相关原理及算法描述3.1文件系统设计原理本次设计的基于磁盘存储设备的FAT文件系统利用的是二级目录管理方式,分别由用户文件目录UFD( User File Directory )、主文件目录MFD( Master File Diretory )构成。其中UFD由用户的所有文件块组成,在MFD中每个用户目录文件占用一个目录项,其中目录项中包括用户名和指向用户目录文件的指针,其基本构成如图所示: 用户文件目录项的基本信息包括基本信息、地址信息、访问控制信息、使用信息。1. 基本信息u 文件名:通常在不同系统中允许不同的最大长度。可以修改。有些系统允许同一个文件有多个别名;u 别名的数目;u 文件类型:可有多种不同的划分方法,如: 有无结构(记录文件,流式文件) 内容(二进制,文本) 用途(源代码,目标代码,可执行文件,数据) 属性attribute(如系统,隐含等) 文件组织(如顺序,索引等)2. 地址信息u 存放位置:包括哪个设备或文件卷volume,以及各个存储块位置;u 文件长度:以字节、字或存储块为单位。可以通过写入或创建、打开、关闭等操作而变化。3. 访问控制信息u 文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;u 访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等;4. 使用信息u 创建时间u 最晚一次读访问的时间和用户u 最晚一次写访问的时间和用户 在两级目录结构中,如果用户希望有自己的用户文件目录,可以请求系统为自己建立一个用户文件目录;有了自己的UFD后,用户可以根据自己的需要创建新文件。每当此时,OS只需要检查该用户的UFD,判定在该UFD中是否已有同名的另一个文件。若有,用户必须为新文件重命名;若无,便在UFD中建立新目录项,将新文件名及其有关的属性填入到目录项中,并置其状态位为1,。当用户要删除一个文件时,OS也只需要查找该用户的UFD,从中找到指定文件的目录项,在回收该文件所占用的存储空间后,将该目录项删除。3.2文件系统中文件基本操作:创建文件:创建一个新文件时,系统首先要为新文件分配必要的外存空间,并在文件系统的目录下,为止建立一个目录项。目录项中应记录新文件的文件名以及其在外存的地址等属性。删除文件:当已不再需要某文件时,可将它从文件系统中删除。在删除时,系统应该先从目录中找到删除文件的目录项,使之成为空项,然后回收该文件所占用的存储空间。文件的重命名:根据用户的需要更改文件的名称,但更改中必须保证文件名不与相同目录中的其他文件重名。3.3文件系统的存储利用的是显示链接存储方式文件存取:实现“按名存取”。即用户只需向系统提供所需访问的文件的名字,便能快速准确地找到文件在外存上的存储位置。这是目录管理最基本的功能,也是本文件系统向用户提供的最基本的服务。提高对目录的检索速度。通过合理地组织目录结构的方法,可加快对目录的检索速度,而且本系统利用结构体,设置指针对于下一块的物理位置进行了指定,利用自己优化的算法,可以快速而准确的找到目标位置,从而提高了对文件的存取速度。这是在设计一个大、中型文件系统时所追求的主要目标。文件内存显示。利用指针化数组,将各文件所申请的内存放入到数组中,然后利用对数组的快速遍历,来查询被占用的内存地址,同时利用逻辑地址将他们在画面中显示出来,而且是动态刷新。显式链接。把用于链接文件各物理块的指针,显式地存放在内存的一张链接表中。该表在整个磁盘中仅设置一张,表的序号是物理盘块号,从0开始,直至N-1;N为盘块总数。在每个表项中存放链接指针,即下一个盘块号。在该表中,凡是属于某一文件的第一个盘块号,或者说是每一条链的链首指针所对应的盘块号,均作为文件地址被填入相应文件的FCB的“物理地址”字段中。由于查找记录的过程是在内存中进行的,因而不仅显著的提高了检索的速度,而且大大减少了访问磁盘的次数。由于分配给文件的多有盘块号都放在该表中,故把该表称为文件分配表FAT(File Allocation Table)。MS-DOS、Windows及OS/2等操作系统都采用了FAT。图示出了MS-DOS的文件物理结构。这里示出了两个文件:文件A占用三个盘块,其盘块号一次是4/6/11;文件B则依次占用了9/10及5号三个盘块;每个文件的第一个盘块号放在自己的FCB中。整个系统有一张文件分配表FAT。在FAT的每个表项中存放下一个盘块号。对于1.2M的软盘,盘块大小为1KB,每个FAT表项占12位,在每个FAT中共含有1.2K个表项,故共需1.8KB。而对于200MB的硬盘,共含有200K个盘块,因此,FAT的每个表项需2.5个字节,故共需占用500KB。但如果磁盘容量为12GB、盘块的大小为4KB时,应共有3M个盘块;而FAT得每个表项需3个字节,总共需占用9MB的内存。 3.4文件目录项的详细设计根据FAT模拟系统中储存的内容,当使用者在列表控件中选中某个用户,并单击功能选择中用户信息按钮(或选中用户后单击右键,单击显示的菜单上的用户信息)后,显示用户信息的对话框。在用户对话框中,显示此用户当前文件的总数,并可以对用户中的文件进行新建文件、删除文件、重命名和刷新的功能。显示ID为IDD_DIA_FILEDIR的对话框新建用户删除文件重命名刷新单击用户信息按钮(或选中用户后单击右键,单击显示的菜单上的用户信息)退出返回FAT模拟系统界面程序操作流程图四、开发环境 VC+ 6.0五、程序流程图5.1系统功能图5.2系统详细设计路程图5.3文件的基本操作流程图(新建、删除、重命名) 六、程序实现-数据结构6.1数据结构定义及数据成员文件目录项struct FileItemCString Name;int Start;int Size;CTime Time;CString Remark;CString Content;主目录项struct FCBItemCString Name;int Filenum;CString Remark;CTime Time;File UserFile;盘块状态信息struct DiskItemint sign; /sign表示该盘块是否占用 1表示占用,0表示没有占用int next;int GetbankPos( int size ); /获得大小大于size的磁盘块的起始地址int m_SignInit; /标志系统是否初始化int m_UseSize; /已用空间int m_RestSize;/剩余空间DiskItem * m_FileSystem; /系统的盘块int *m_FileSyint;CString m_FileName; /系统初始化时的名称int m_FileSize; /系统开始分配的盘块数目6.2成员函数bool OnFileNew(); /文件系统的新建bool OnFileSave(); /文件系统的保存void FileRename(int fcbnum, int num, CString newname );/更改fcbnum用户的第num个文件的名称void FIleRetDisk( int fcbnum, int num ); /回收fcbnum用户的第num个文件的磁盘资源void FilePop( int fcbnum, int num ); /删除fcbnum用户的第num个文件void FileTributDisk( int start , int size ); /分配磁盘start 表示起始位置bool FilePush_back( int fcbnum , CString name, CString remark, CString content, int size); /fcbnum表示用户的ID,name 文件名, remark备注,content内容,size 大小BOOL FCBPush_back( CString name, CString remark ); /在FCB的尾部加入一个文件目录表bool FCBPop( int num ); /删除FCB中的第num个文件目录表void FCBReName( int num, CString newname );/对文件块中第num个文件目录表进行重命名七、程序实现-程序清单BOOL CMy2Dlg:FCBPush_back( CString name, CString remark )if ( !name.IsEmpty() )FCBItem temp;temp.Name = name;temp.Remark = remark;temp.Time = CTime().GetCurrentTime();temp.Filenum = 0;m_fcb.push_back( temp );m_fcbitemnum+;return true;elsereturn FALSE;bool CMy2Dlg:FCBPop( int num )if ( m_fcbnum-1.UserFile.size() 0 )MessageBox(您不能删除该用户!);return false;FCB:iterator temp1;temp1 = m_fcb.begin();for ( int i = 0; i m_RestSize )return -1;for ( int i = 0; i m_FileSize; i+ ) if ( m_FileSystemi.sign = 0 )return i+1;bool CMy2Dlg:FilePush_back( int fcbnum , CString name, CString remark, CString content, int size )/文件的位置判断代码int start = GetbankPos( size );if ( start = -1 )return false;FileItem temp;temp.Name = name;temp.Remark = remark;temp.Start = start;temp.Size = size;temp.Content = content;temp.Time = CTime().GetCurrentTime();/向用户ID为fcbnum的用户加入文件m_fcb fcbnum-1 .UserFile.push_back( temp );m_fcb fcbnum-1 .Filenum+;/磁盘操作m_RestSize -= size;m_UseSize += size;FileTributDisk( start, size );return true;void CMy2Dlg:FileTributDisk( int start, int size )int temp_size = 0;int temp_pos = 0 ; /用于记录当前磁盘的临时位置for ( int i = start-1; ; )if ( m_FileSystemi.sign = 0 )m_FileSystemi.sign = 1;temp_pos = i;temp_size +;if ( temp_size = size )m_FileSystemtemp_pos.next = -1;break;i = (i+1)%m_FileSize;if ( m_FileSystemi.sign = 0 )m_FileSystemtemp_pos.next = i;void CMy2Dlg:FilePop( int fcbnum, int num )File:iterator it;it = m_fcbfcbnum-1.UserFile.begin();for ( int i = 0; i num-1; i+ )it+;/回收磁盘FIleRetDisk( fcbnum, num );m_fcbfcbnum-1.Filenum-;m_fcbfcbnum-1.UserFile.erase( it );void CMy2Dlg:FIleRetDisk( int fcbnum, int num )int i = m_fcbfcbnum-1.UserFilenum-1.Start-1;int size = m_fcbfcbnum-1.UserFilenum-1.Size;m_UseSize -= size;m_RestSize += size;int temp_size = 0;do m_FileSystemi.sign = 0;temp_size+;i = m_FileSystemi.next; while( i != -1 & temp_size != size);if ( temp_size = size )MessageBox(retdisk is success!);void CMy2Dlg:FileRename(int fcbnum, int num, CString newname)m_fcbfcbnum-1.UserFilenum-1.Name = newname;bool CMy2Dlg:OnFileSave()if ( m_FileName.IsEmpty() )MessageBox(please create new File system!);return false;CFileDialog filedlg( false, txt,(m_FileName+.txt),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,.txt,NULL);if ( filedlg.DoModal() = IDOK )/将文件系统名称写入到磁盘CString ms;ms = filedlg.GetPathName();MessageBox( ms );CFile file( ms, CFile:modeCreate | CFile:modeWrite);CArchive ar( &file, CArchive:store );arm_FileName; /写入磁盘块的初始化大小,剩余容量arm_FileSizem_RestSize; /写入一共有多少用户arm_fcbitemnum;/写入每个用户的信息for ( int i = 0; i m_fcbitemnum; i+ )arm_fcbi.Filenumm_fcbi.Namem_fcbi.Remarkm_fcbi.Time;/写入每个用户的详细情况for ( int j = 0; j m_fcbi.Filenum; j+ )arm_fcbi.UserFilej.Contentm_fcbi.UserFilej.Namem_fcbi.UserFilej.Remarkm_fcbi.UserFilej.Sizem_fcbi.UserFilej.Startm_FileName;arm_FileSizem_RestSizem_fcbitemnum;/初始化用户信息for ( int i = 0; i temp.Filenumtemp.Nametemp.Remarktemp.Time;m_fcb.push_back(temp);/ arm_fcbi.Filenumm_fcbi.Namem_fcbi.Remarkm_fcbi.Time;/写入每个用户的详细情况for ( int j = 0; j tempFile.ContenttempFile.NametempFile.RemarktempFile.SizetempFile.StarttempFile.Time;m_fcbi.UserFile.push_back(tempFile);m_SignInit +;/系统初始化、划定存储容量 if ( m_FileSize 0 )m_FileSystem = new DiskItemm_FileSize;m_FileSyint = new intm_FileSize;for ( int i = 0; i m_FileSize; i+ )m_FileSystemi.sign = 0; /0表示磁盘块没有被分配

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论