已阅读5页,还剩28页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
河北大学2006级操作系统论文(设计)一 引言1.1实验的性质、目的和任务1.1.1性质操作系统是计算机专业的核心系统,此课程设计用于模拟操作系统的实现。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。要掌握操作系统的基本概念、基本原理、设计方法和实现技术,具有初步分析实际操作系统的能力 ,为其今后在相关领域开展工作打下坚实的基础。 1.1.2任务 模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。1.1.3目的 通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解;通过模拟操作系统原理的实现练习编程,进一步了解操作系统的实现方法;练习合作完成系统的团队精神和提高程序设计能力。1.2实验要求和实验意义实现对操作系统的模拟,具体是在采用文件分配表的基础上实现单用户的磁盘文件管理部分和用户接口;加深对操作系统的工作原理和实现方式的理解,提高动手实践的能力。1.3论文结构安排本论文主要内容: 引言、 系统分析与设计、系统实现、结束语、参考文献。二 系统分析与设计2.1系统要求模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。2.2主要模块2.2.1文件模块文件模块的定义 文件是在逻辑上具有完整意义的信息组合,它有一个名字做标识符。一个文件必须要有一个文件名,用户利用文件名来访问文件。文件名通常由一串字符构成,名字的长度因系统而异。文件系统具有5大功能:完成文件存储空间的管理,实现文件名到物理地址的映射,实现文件和目录的操作管理,提供文件共享能力和安全可靠措施,文件系统向用户提供了有关文件和目录操作的接口。文件的逻辑结构文件的逻辑结构采用流式结构,流式文件指文件内的数据不再组成记录,只是一串的信息组合,字符是构成文件的基本单位,这种文件常常按长度来读取所需信息。文件的内容均采用文本文件,系统中有两种文件:一种是存放任意字符的文件;一种是可执行文件:可执行文件的内容就是系统内进程的程序体。文件的物理结构 实验中采用显示链接的物理文件结构,把磁盘中每一块的指针部分提出来,组织在一起,形成文件分配表(FAT表)。一个磁盘仅设置一张文件分配表,磁盘有多少块,文件分配表就有多少项,若文件的一个磁盘块号为i,则这个文件的下一个磁盘的块号应该记录在文件分配表的第i项。磁盘模拟用一个文件C模拟磁盘,磁盘的每个盘块64字节,模拟磁盘共有128块。第0,1块存放文件分配表,第2块存放根目录,其余存放子目录和文件。目录结构目录结构采用树形目录结构。l 目录项内容(8个字节)目录名,文件名:2个字节;扩展名:2个字节(目录没有扩展名)。目录,文件属性:1字节;起始盘块号:1个字节;文件长度:2个字节;l 根目录根目录位置固定,为磁盘第2块;大小固定,共8项,占用模拟磁盘第2块。l 子目录位置不固定,大小不固定。2.2.2用户接口l 创建文件:create 文件名建立新文件,如果原来存在同名文件要提示是否覆盖。l 拷贝文件:copy 源文件名 目标文件名当用户需要拷贝一些文件时,首先要先找到该文件,可同名拷贝,也可更名拷贝。l 删除文件 : delete 文件名l 显示文件: type 文件名 仅显示文件内容。l 编辑文件: edit 文件名 此命令完成对文件的编辑,只读文件不可以修改。l 改变文件属性 : change 文件名 属性 将文件在只读和非只读、隐藏和非隐藏之间转换。l 磁盘格式化: format 盘符l 建立目录: makdir 目录 建立目录,若同名目录存在则建立失败。l 改变目录路径: chadir目录 改变当前目录。l 删除空目录: rdir 目录 当前目录、非空目录、根目录不能删除。l 删除目录: deldir 目录 既可删除空目录又可删除非空目录,对于非空目录,首先要删除其下文件和目录然后才能删除其本身。2.2.3屏幕显示 屏幕显示要求包括:l 用户命令接口,用于系统运行时用户输入命令;l 磁盘目录显示,要求显示磁盘的树型目录结构;l 磁盘使用情况,显示磁盘每一个磁盘块的空间是否空闲。第三章 系统实现3.1文件模块3.1.1创建FAT表这一部分主要实现FAT表的定义和初始化,代码如下:public class FAT public byte fblock = new byte128; /FAT一共128项 public byte leave = 125; /剩余空闲盘块数量 public FAT() /构造函数 fblock0 = fblock1 = fblock2 = 255; for (int i = 3; i 128; i+) fblocki = 0; public byte allempty() /空闲盘块数量 byte num = new byte(); for (int i = 0; i 128; i+) if (fblocki = 0) num+; return num; public byte former(byte num) /查找第一个盘块 if (fblocknum = 0) return 0; /此盘块为空 byte pir = pirorblock(num); for (; pir != num; pir = pirorblock(pir)/若num的前一个块号为它本身,则num为首块号 num = pir; return num; public byte last(byte num) /查找该块的最后一个块号 byte next = nextblock(num); for (; next != num; next = nextblock(next)/无后续盘块时返回为0 num = next; return num; public byte pirorblock(byte num) /查找该块的前一个块号 if (fblocknum = 0) return 0;/此盘块为空 else if (fblocknum = 255) return num;/单独存放一个盘块,为第一个盘块 for (byte i = 3; i leave) MessageBox.Show(磁盘空间不够); return 255; /剩余数目不够 else byte b = new byte(); byte bb = new byte(); b = findempty(); fblockb = 255; for (int i = 0; i 2 & block = 127) byte b = block; byte bb = block; byte i = 0; while (fblockb != 255) bb = fblockb; fblockb = 0; b = bb; i+; fblockb = 0; leave = Convert.ToByte(leave + i + 1); /剩余盘块量增加 return true; else return false; 3.1.2磁盘模拟 这一部分主要实现磁盘的组织情况,代码如下public void initdisk() for (int i = 0; i 128; i+) picturei = new PictureBox(); picturei.Location = new Point(6 + 22 * (i % 16), 20 + 18 * (i / 16); picturei.Size = new Size(16, 12); if (file1.disk.fat.fblocki != 0) picturei.BackColor = Color.Lime; else picturei.BackColor = Color.White; this.groupBox3.Controls.Add(picturei); public void showdisk() for (int i = 0; i 3) MessageBox.Show(输入长度超过三个字符 ,只取前三个); str = str.Remove(3, len - 3); string fullname = treeView1.SelectedNode.FullPath; str += . + tx; fullname += + str; bool a = file1.create(fullname); if (a = true) TreeNode now = treeView1.SelectedNode; TreeNode newnode = new TreeNode(); newnode.Text = str; newnode.SelectedImageIndex = 3; newnode.ImageIndex = 3; now.Nodes.Add(newnode); showdisk(); l 创建可执行文件private void 可执行文件ToolStripMenuItem_Click(object sender, EventArgs e) creatnamelen cnl = new creatnamelen(); cnl.ShowDialog(); string str = ; byte len = Convert.ToByte(str.Length); if (len = 0) return; if (len 3) MessageBox.Show(输入长度超过三个字符 ,只取前三个); str = str.Remove(3, len - 3); string fullname = treeView1.SelectedNode.FullPath; str += . + ex; fullname += + str + . + ex; bool a = file1.create(fullname); if (a = true) TreeNode now = treeView1.SelectedNode; TreeNode newnode = new TreeNode(); newnode.Text = str; newnode.SelectedImageIndex = 1; newnode.ImageIndex = 1; now.Nodes.Add(newnode); showdisk(); l 显示文件private void 显示文件ToolStripMenuItem_Click(object sender, EventArgs e) string fullname = treeView1.SelectedNode.FullPath; TreeNode now = treeView1.SelectedNode; if (now.ImageIndex != 1 & now.ImageIndex != 3) MessageBox.Show(不是文件,不能显示); return; file1.show(fullname, 0); showdisk(); l 编辑文件private void 编辑文件ToolStripMenuItem_Click(object sender, EventArgs e) string fullname = treeView1.SelectedNode.FullPath; TreeNode now = treeView1.SelectedNode; if (now.ImageIndex != 1 & now.ImageIndex != 3) MessageBox.Show(不是文件,不能编辑); return; file1.edit(fullname); showdisk(); l 改变属性private void 改变属性ToolStripMenuItem_Click(object sender, EventArgs e) string fullname = treeView1.SelectedNode.FullPath; TreeNode now = treeView1.SelectedNode; if (now.ImageIndex != 1 & now.ImageIndex != 3) MessageBox.Show(不是文件,不能改变); return; changeexten ct = new changeexten(); ct.ShowDialog(); string ex = ct.extension; bool a = file1.changefile(fullname, ex); if (a = true) string name = now.Text; now.Text = name.Substring(0, 4) + ex; if (ex = ex) now.ImageIndex = 1; now.SelectedImageIndex = 1; else now.ImageIndex = 3; now.SelectedImageIndex = 3; showdisk();l 运行可执行文件private void 运行ToolStripMenuItem_Click(object sender, EventArgs e) TreeNode now = treeView1.SelectedNode; if (now.ImageIndex != 1) MessageBox.Show(不是可执行文件,不能运行); return; string fullname = now.FullPath; string str = file1.show(fullname, 0); creat(str.Length ,str ); l 删除文件private void 文件ToolStripMenuItem1_Click(object sender, EventArgs e) TreeNode del = treeView1.SelectedNode; string fullname = ; fullname = del.FullPath; string str = ; for (int i = 0; i del.Text.Length; i+) char nchar = del.Text.ToCharArray(); if (nchari != 0) str += nchari.ToString(); else break; treeView1.Nodes.Remove(del); file1.dirdelete(fullname); showdisk(); l 拷贝文件 private void 复制ToolStripMenuItem_Click(object sender, EventArgs e) fufrom = treeView1.SelectedNode; if (fufrom.ImageIndex != 1 & fufrom.ImageIndex != 3) MessageBox.Show(不是文件,不能复制); return; fuzhi = fufrom.FullPath; private void 粘贴ToolStripMenuItem_Click(object sender, EventArgs e) TreeNode now = treeView1.SelectedNode; string b = now.FullPath; string to = ; for (int i = 0; i b.Length; i+) char nchar = b.ToCharArray(); if (nchari != 0) to += nchari.ToString(); else break; if (fuzhi != ) bool a = file1.copyfile(fuzhi, to); if (a = true) TreeNode newnode = new TreeNode(); newnode.Text = fufrom.Text; newnode.ImageIndex = fufrom.ImageIndex; newnode.SelectedImageIndex = fufrom.SelectedImageIndex; now.Nodes.Add(newnode); else if (cut != ) if (cutnode = now) return; bool a = file1.copyfile(cut, to); file1.filedelete(cut); if (a = true) TreeNode newnode = new TreeNode(); newnode.Text = cutnode.Text; newnode.ImageIndex = cutnode.ImageIndex; newnode.SelectedImageIndex = cutnode.SelectedImageIndex; now.Nodes.Add(newnode); cut = ; showdisk(); 3.2用户接口模块3.2.1创建文件NYNYYNYYN开始路径名name属性 attribute分离文件名和路径名找到该目录指定的目录不存在,建立文件失败结束d=起始盘块号,将其内容读入缓冲文件存在是最后一项无空目录申请一个磁盘块申请成功磁盘无空间,建立文件失败结束结束指定的文件存在无空目录填写目录N图3-1创建文件的流程图public bool create(string fullname) byte d; byte m; byte cur; int len; /文件长度 string filecontent; /文件内容 byte num = 0; /文件所需块数 byte nbyte; byte buffer1 = new byte64; /存放一个盘块中内容 byte b = finddir(fullname); /文件所在根目录 string strpat = splitfullname(fullname); string pathname = ; for (int i = 0; i strpat.Length - 2; i+) pathname += strpati + ; pathname += strpatstrpat.Length - 2; string str = splitfullname(fullname); / 文件路径名分段 byte roadlen = Convert.ToByte(str.Length); /路径名长度 string name = strroadlen - 1.Split(.)/划分文件名和扩展名 if (string.Compare(name1, ex) != 0 & string.Compare(name1, tx) != 0) MessageBox.Show(文件扩展名错误); return false; char nchar = new char3; /存放文件名 char nchar1 = new char2; /存放扩展名 byte f = empty(b); /根目录是否已满 if (filechongming(fullname) != 255) MessageBox.Show(文件重名); return false; if (f0 = 255 & b = 2) /在根目录中插入 MessageBox.Show(根目录中已满,不能创建文件); return false; else if (f0 != 255) /255为此块盘已满, disk.readblock(f0, 64); disk.rootdir.set(disk.buffer); /文件存放根目录内容 nchar = name0.ToCharArray(); /存放文件名 nchar1 = name1.ToCharArray(); for (int i = 0; i nchar.Length; i+) disk.rootdir.rootf1.filenamei = Convert.ToByte(nchari); for (int i = 0; i 2; i+) disk.rootdir.rootf1.extensioni = Convert.ToByte(nchar1i); if (name1 = ex) disk.rootdir.rootf1.dirORfile = 1; else disk.rootdir.rootf1.dirORfile = 2; createfile cf = new createfile(); cf.ShowDialog(); len = cf.length; filecontent = cf.str; num = Convert.ToByte(Math.Ceiling(double)(len / (double)64);/文件所需盘块数 m = disk.fat.shenqing(len); disk.writefat(); if (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年福建省宁德市儿童福利院招聘3人历年真题汇编及答案解析(夺冠)
- 2026年设备监理师之设备监理合同考试题库【原创题】
- 2026年消防条令纲要知识考试题库附答案(精练)
- 成都轨道交通集团有限公司2025年秋季第二批次校园招聘历年真题汇编带答案解析
- 广元市昭化区2025年公开引进高层次和急需紧缺专业人才考试(50人)历年真题汇编及答案解析(夺冠)
- 2025江西吉安吉州区古南镇街道社区卫生服务中心招募就业见习人员2人历年真题库带答案解析
- 中国铁路成都局集团有限公司2026年度招聘高校毕业生(二)历年真题汇编附答案解析
- 2026年陕西省选调生招录(面向中山大学)历年真题库附答案解析
- 2025榆林电力投资有限责任公司招聘(22人)备考公基题库带答案解析
- 2025广东机电职业技术学院招聘事业编制工作人员5人(第四批)备考公基题库附答案解析
- 公路试验室租赁合同范本
- 市场监管局关于全市企业商业秘密保护工作情况调研报告
- 汇丰银行课件
- 消费群体细分-洞察及研究
- 2025年导游资格证考试押题试卷 导游业务与政策法规实战押题卷
- 2024年公务员省考申论试题山东选调生卷真题试卷解析
- 2025年交安三类人员(C证)考试题库和答案
- 大型会议场所消防安全方案
- 酒店安全巡查日常检查记录表
- DB4205T 57-2018 新型职业农民专业技术职称评定规范
- 2025年事业单位考试职业能力倾向测验(医疗卫生类E类)复习试题及答案
评论
0/150
提交评论