河北大学2006级操作系统论文(设计)1一引言1.1实验的性质、目的和任务1.1.1性质操作系统是计算机专业的核心系统,此课程设计用于模拟操作系统的实现。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。要掌握操作系统的基本概念、基本原理、设计方法和实现技术,具有初步分析实际操作系统的能力,为其今后在相关领域开展工作打下坚实的基础。1.1.2任务模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。1.1.3目的通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解;通过模拟操作系统原理的实现练习编程,进一步了解操作系统的实现方法;练习合作完成系统的团队精神和提高程序设计能力。1.2实验要求和实验意义实现对操作系统的模拟,具体是在采用文件分配表的基础上实现单用户的磁盘文件管理部分和用户接口;加深对操作系统的工作原理和实现方式的理解,提高动手实践的能力。1.3论文结构安排本论文主要内容:引言、系统分析与设计、系统实现、结束语、参考文献。河北大学2006级操作系统论文(设计)2二系统分析与设计2.1系统要求模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。2.2主要模块2.2.1文件模块2.2.1.1文件模块的定义文件是在逻辑上具有完整意义的信息组合,它有一个名字做标识符。一个文件必须要有一个文件名,用户利用文件名来访问文件。文件名通常由一串字符构成,名字的长度因系统而异。文件系统具有5大功能:完成文件存储空间的管理,实现文件名到物理地址的映射,实现文件和目录的操作管理,提供文件共享能力和安全可靠措施,文件系统向用户提供了有关文件和目录操作的接口。2.2.1.2文件的逻辑结构文件的逻辑结构采用流式结构,流式文件指文件内的数据不再组成记录,只是一串的信息组合,字符是构成文件的基本单位,这种文件常常按长度来读取所需信息。文件的内容均采用文本文件,系统中有两种文件:一种是存放任意字符的文件;一种是可执行文件:可执行文件的内容就是系统内进程的程序体。2.2.1.3文件的物理结构实验中采用显示链接的物理文件结构,把磁盘中每一块的指针部分提出来,组织在一起,形成文件分配表(FAT表)。一个磁盘仅设置一张文件分配表,磁盘有多少块,文件分配表就有多少项,若文件的一个磁盘块号为i,则这个文件的下一个磁盘的块号应该记录在文件分配表的第i项。2.2.1.4磁盘模拟用一个文件C模拟磁盘,磁盘的每个盘块64字节,模拟磁盘共有128块。第0,1块存放文件分配表,第2块存放根目录,其余存放子目录和文件。2.2.1.5目录结构目录结构采用树形目录结构。目录项内容(8个字节)目录名,文件名:2个字节;扩展名:2个字节(目录没有扩展名)。河北大学2006级操作系统论文(设计)3目录,文件属性:1字节;起始盘块号:1个字节;文件长度:2个字节;根目录根目录位置固定,为磁盘第2块;大小固定,共8项,占用模拟磁盘第2块。子目录位置不固定,大小不固定。2.2.2用户接口创建文件:create文件名建立新文件,如果原来存在同名文件要提示是否覆盖。拷贝文件:copy源文件名目标文件名当用户需要拷贝一些文件时,首先要先找到该文件,可同名拷贝,也可更名拷贝。删除文件:delete文件名显示文件:type文件名仅显示文件内容。编辑文件:edit文件名此命令完成对文件的编辑,只读文件不可以修改。改变文件属性:change文件名属性将文件在只读和非只读、隐藏和非隐藏之间转换。磁盘格式化:format盘符建立目录:makdir目录建立目录,若同名目录存在则建立失败。改变目录路径:chadir目录改变当前目录。删除空目录:rdir目录当前目录、非空目录、根目录不能删除。删除目录:deldir目录既可删除空目录又可删除非空目录,对于非空目录,首先要删除其下文件和目录然后才能删除其本身。2.2.3屏幕显示屏幕显示要求包括:用户命令接口,用于系统运行时用户输入命令;磁盘目录显示,要求显示磁盘的树型目录结构;磁盘使用情况,显示磁盘每一个磁盘块的空间是否空闲。河北大学2006级操作系统论文(设计)4第三章系统实现3.1文件模块3.1.1创建FAT表这一部分主要实现FAT表的定义和初始化,代码如下:publicclassFAT{publicbyte[]fblock=newbyte[128];//FAT一共128项publicbyteleave=125;//剩余空闲盘块数量publicFAT()//构造函数{fblock[0]=fblock[1]=fblock[2]=255;for(inti=3;i128;i++)fblock[i]=0;}publicbyteallempty()//空闲盘块数量{bytenum=newbyte();for(inti=0;i128;i++)if(fblock[i]==0)num++;returnnum;}publicbyteformer(bytenum)//查找第一个盘块{if(fblock[num]==0)return0;//此盘块为空bytepir=pirorblock(num);for(;pir!=num;pir=pirorblock(pir))//若num的前一个块号为它本身,则num为首块号num=pir;returnnum;}publicbytelast(bytenum)//查找该块的最后一个块号{bytenext=nextblock(num);for(;next!=num;next=nextblock(next))//无后续盘块时返回为0num=next;returnnum;}publicbytepirorblock(bytenum)//查找该块的前一个块号{河北大学2006级操作系统论文(设计)5if(fblock[num]==0)return0;//此盘块为空elseif(fblock[num]==255)returnnum;//单独存放一个盘块,为第一个盘块for(bytei=3;i128;i++)if(fblock[i]==num)returni;return255;//没找到}publicbytenextblock(bytenum)//查找该块的下一个块号{if(fblock[num]!=255)returnfblock[num];elsereturnnum;//该块为最后一块}publicbytenumall(bytenum){bytei=1;bytenext=nextblock(num);for(;next!=num;num=next,next=nextblock(next))i++;returni;}publicbooladd(byteblock){byteb=last(block);byten;if(findempty()==0){MessageBox.Show(磁盘空间不够);returnfalse;}else{n=findempty();fblock[b]=n;fblock[n]=255;returntrue;}}publicbytedirshenqing(){if(leave==0)河北大学2006级操作系统论文(设计)6{MessageBox.Show(磁盘空间不够);return255;//剩余数目不够}byteb=findempty();fblock[b]=255;leave--;returnb;}publicbyteshenqing(intlength)//根据文件长度申请盘块{byten=Convert.ToByte(Math.Ceiling((double)(length/(double)64)));//共需多少盘块if(nleave){MessageBox.Show(磁盘空间不够);return255;//剩余数目不够}else{byteb=newbyte();bytebb=newbyte();b=findempty();fblock[b]=255;for(inti=0;in-1;i++){bb=findempty();fblock[bb]=b;b=bb;}leave=Convert.ToByte(leave-n);returnb;//首块号}}publicboolhuishou(byteblock)//回收盘块{if(block2&&block=127){byteb=block;bytebb=block;bytei=0;while(fblock[b]!=255){bb=fblock[b];河北大学2006级操作系统论文(设计)7fblock[b]=0;b=bb;i++;}fblock[b]=0;leave=Convert.ToByte(leave+i+1);//剩余盘块量增加returntrue;}else{returnfalse;}}}3.1.2磁盘模拟这一部分主要实现磁盘的组织情况,代码如下publicvoidinitdisk(){for(inti=0;i128;i++){picture[i]=newPictureBox();picture[i].Location=newPoint(6+22*(i%16),20+18*(i/16));picture[i].Size=newSize(16,12);if(file1.disk.fat.fblock[i]!=0)picture[i].BackColor=Color.Lime;elsepicture[i].BackColor=Color.White;this.groupBox3.Controls.Add(picture[i]);}}publicvoidshowdisk(){for(inti=0;i128;i++){picture[i].Location=newPoint(6+22*(i%16),20+18*(i/16));picture[i].Size=newSize(16,12);if(file1.disk.fat.fblock[i]!=0)picture[i].BackColor=Color.Lime;elsepicture[i].BackColor=Color.White;this.groupBox3.Controls.Add(picture[i]);}河北大学2006级操作系统论文(设计)8}3.1.3利用窗体实现文件的操作创建txt文件privatevoid文件ToolStripMenuItem_Click(objectsender,EventArgse){creatnamelencnl=newcreatnamelen();cnl.ShowDialog();stringstr=cnl.name;bytelen=Convert.ToByte(str.Length);if(len==0)return;if(len3){MessageBox.Show(输入长度超过三个字符,只取前三个);str=str.Remove(3,len-3);}stringfullname=treeView1.SelectedNode.FullPath;str+=.+tx;fullname+=\\+str;boola=file1.create(fullname);if(a==true){TreeNodenow=treeView1.SelectedNode;TreeNodenewnode=newTreeNode();newnode.Text=str;newnode.SelectedImageIndex=3;newnode.ImageIndex=3;now.Nodes.Add(newnode);showdisk();}创建可执行文件privatevoid可执行文件ToolStripMenuItem_Clic