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

下载本文档

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

文档简介

题目:操作系统课程设计学 院 数学与计算机学院 学科门类 工 学 专 业 计算机科学与技术 学 号 2010434096 姓 名 贾雨飞 指导教师 朱亮 2012年 7月 8日装订线河北大学学年论文(课程设计)任务书(指导教师用表)学 生 姓 名贾雨飞指 导 教 师朱亮论文(设计)题目 操作系统课程设计主要研究(设计)内容在采用混合索引文件结构、成组链接法的基础上实现单用户的磁盘文件管理部分,包括:文件的逻辑结构、文件的物理结构、目录结构、磁盘分配回收、文件的保护和用户接口。研究方法根据操作系统理论课上学习的操作系统中关于文件管理实现方法,在混合索引文件结构、成组链接法的基础上模拟实现操作系统的文件管理功能和用户接口。主要任务及目标主要任务:在采用混合索引文件结构、成组链接法的基础上实现单用户的磁盘文件管理部分和用户接口。目标:通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解;通过模拟操作系统原理的实现练习编程。主要参考文献1操作系统习题解答与实验指导. 王煜,张明,刘振鹏. 中国铁道出版社. 20072操作系统实验指导. 任爱华. 清华大学出版社. 20043操作系统实验教程(windows版). 姚卫华. 清华大学出版社. 2005 指导教师签字:装订线河北大学学年论文(课程设计)成绩评定表学院: 数学与计算机学院 学生姓名贾雨飞专业 年级2010级 数学与计算机论文(设计)题目操作系统课程设计论文(设计)内容提要本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、教学目的、教学任务与要求、意义以及论文的结构安排;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;最后一部分,结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。指导教师评语成绩: 指导教师(签名): 年 月 日目 录一 引言11.1性质11.2 教学目的11.3 任务和要求11.4意义11.5 论文结构安排1二 系统分析与设计32.1系统要求32.2 实现方法和原理32.2.1文件的逻辑结构32.2.2文件的物理结构32.2.3目录结构42.2.4磁盘状态52.2.5用户接口6三 系统实现73.1磁盘管理73.1.1全局变量73.1.2磁盘的初始化函数73.1.2磁盘的分配83.1.4磁盘的归还83.1.5磁盘状态的显示93.2目录结构的实现103.2.1创建目录103.2.2删除空目录123.2.3删除目录123.3文件133.3.1建立文件133.3.2删除文件143.3.3复制文件173.3.4移动文件173.3.5编辑文件173.4用户接口193.4.1流程图19 3.5创建进程 .3.6进程调度 . 3.7设备申请 . 153.8进程阻塞 . 183.9进程唤醒 . 19四 结束语21参考文献22一 引言1.1性质操作系统是计算机系统中不可缺少的基本系统软件,主要用来管理和控制计算机系统的软硬件资源,提高利用率,为用户提供一个方便、灵活、安全的计算机工作平台。对于大学生来说,操作系统是计算机科学与技术专业的主要专业基础课和主干课。操作系统对计算机系统资源实施管理,是所有其他软件与计算机硬件的唯一接口,所有用户在使用计算机时都要得到操作系统提供的服务。1.2 教学目的通过模拟操作系统的全部或者部分功能的实现,加深对操作系统工作原理和操作系统实现方法的理解,达到联系编程的目的,提高学生运用理论知识分析问题、解决问题的能力,为学生从事科学研究和独立负担计算机及其应用方面的工作打好扎实的基础。1.3 任务和要求 模拟采用多道程序设计方法的单用户操作系统,该操作系统包括四部分内容:文件管理和用户接口、存储管理、设备管理、进程管理。文件的逻辑结构采用流式结构,磁盘的分配采用混合索引结构的分配方式,用户接口提供用户命令接口和图形接口(至少提供一种接口),要求文件名中既可以支持相对路径的文件名,也可支持绝对路径的路径名。存储管理部分主要实现主存空间的分配和回收、存储保护。模拟系统中,采用虚拟页式储管理方案(pcb区域、位示图等单独存放),模拟系统中只管理用户区。屏幕显示要求包括:每个设备是否被使用,哪个进程在使用该设备,哪些进程在等待使用该设备。1.4意义通过模拟操作系统原理的实现,加深对操作系统工作原理和操作系统实现方法的理解,掌握了初步分析实际问题的能力,为其今后在相关领域开展工作打下坚实的基础。同时使学生系统科学地受到分析问题和解决问题的训练,提高运用理论知识解决实际问题的能力。从而锻炼了学生很多方面的能力,有很大的实际意义。1.5 论文结构安排本论文主要阐述四部分内容,引言部分,主要说明本次操作系统课程设计的性质、教学目的、教学任务与要求、意义以及论文的结构安排;系统分析与设计部分,主要阐述系统的主要功能模块以及每个模块计划采用的实现方法和原理;系统实现部分,主要通过流程图等工具描述主要模块的实现流程;最后一部分,结束语部分,主要书写已经实现的本系统存在的不足、改进方案和在课程设计中的实际感受。二 系统分析与设计2.1系统要求本系统要求实现文件的逻辑结构、文件的物理结构、目录结构、磁盘分配和回收、文件的保护和用户接口。2.2 实现方法和原理2.2.1文件的逻辑结构文件的逻辑结构采用流式结构;文件的内容均采用文本文件,系统中有两种文件:l 一种是存放任意字符的文件l 一种是可执行文件:可执行文件的内容就是系统内进程的程序体:文件中要有一种特定命令的“可执行”文件,文件中的命令非常简单,仅仅包括以下几种指令:x=?; 给x赋值一位数x+; x加1x-; x减1!?; 第一个?为a,b,c中某个设备,第二个?为一位数,表示使用设备的时间(由于没有实际设备,所以无法知道设备何时工作完成,所以假定一个数,这个数随着系统时间增加而递减,减到0时,认为是设备工作完成),建议将这个数乘以某个倍数或者做为随机数的种子;end. 表示文件结束,同时将结果写入文件out,其中包括文件路径名和i的值。2.2.2文件的物理结构文件的物理结构采用索引文件,每个文件分配一个索引块(用来存放索引的盘块)把分配给该文件的所有盘块号都记录在该索引块中,按照这种分派方式存储的文件就是索引文件。由于索引块就是一个存放许多盘块号的盘块,因此,为使系统能找到文件存放的地址,文件目录项记录该文件索引块的盘块号和文件长度。为一个大文件分配磁盘空间时,如果所分配除去盘块的盘块号,已经装满一索引块时,便需再为该文件分配另一个索引块,用于将以后继续分配给该文件的盘块号记录其中,以此类推。同时,应为这些索引块再建立一级索引,即系统再分配一索引块,作为一级索引块的索引块,将第一块、第二块、第三块、索引块的盘块号写入此索引块中,这样便形成了二级索引的分配方式。如图2-1所示:目录结构目录结构采用树型目录结构,每个目录项占16个字节,目录项内容包括:l 目录名、文件名:6个字节(当名小于6字节时可以补空格之类特殊字符到6个);l 扩展名:3个字节(可执行文件扩展名为exe,目录没有扩展名);l 目录、文件属性:1字节;(1字节8位,每一位可以代表不同的属性,比如第0位为1表示该目录项为目录(文件夹)的登记项,为0表示是文件的登记项(fcb);第1位表示是否隐藏,第2位表示是否为只读文件)l 文件长度:2字节(目录没有长度,字节数)。l 地址:直接地址项1个,一级索引项1个;l 预留2字节(建议实现2级索引)根目录:根目录位置固定,占用磁盘2块,大小固定,共16项,占用模拟磁盘第1、2块;子目录:位置不固定,大小不固定(至少建立一级子目录,最好支持多级子目录,子目录任意长)。注:删除一个目录项可以采用将目录项的第一个字符改成特殊字符,例如“#”,即目录项第一个字符为“#”则表示这是一个空目录项图2-1 文件索引分配方式2.2.3目录结构目录结构采用树形目录结构,根目录项既可以表示一个普通文件,也可以是下一级目录的目录文件的一个说明项,如此层层类推,形成一个树形层次结构,用一个属性项表示其是文件还是文件夹。如图3-3所示:图2-2 树形目录结构usuhbcelilanxiaadu2ukabchpqabj2y根目录文件目录2.2.4磁盘状态磁盘使用情况用空闲块成组链接法来记录:把空闲块分成若干组,每组十个物理块,把指向一组中各空闲块的指针集中在一起,每一组的第一个空闲块中登记下一组空闲块的块号和空闲块数,余下不足一组块数的空闲块的块号级快数登记在一个专用块中,这样既可方便查找,又可减少为修改指针而启动的磁盘的次数,在本系统中将第0块作为专用块,如图2-1是空闲块成组链接示意图:图2-3 空闲块成组链接示意图2.2.5用户接口用户接口提供用户命令接口,具体实现以下命令:l 创建文件:create 文件名建立新文件,如果原来存在同名文件要提示是否覆盖。建立新文件,可以只建立一个目录项,等编辑文件时再分配文件所需磁盘块。l 拷贝文件:copy 源文件名 目标文件名拷贝文件可同名拷贝,也可更名拷贝;如果目标位置存在同名文件要提示是否覆盖。拷贝文件首先找到源文件的目录项,然后确认目标位置可以存放文件的拷贝(即无同名文件,有同名文件若同意覆盖,则先删除同名文件即可),然后根据源文件目录项建立目标文件的目录项;根据源文件目录项指示的文件索引块和文件内容所在位置,一边为目标文件申请磁盘块,一边将源文件索引块和文件内容读出、复制。l 删除文件:delete文件名 知道要删除的文件,回收其文件所占磁盘块,删除目录项。l 移动文件:move 源文件名 目标文件名注意:磁盘内和磁盘间文件移动的不同,磁盘内的移动实际只是将文件目录项复制到目标处,然后将原始的文件目录删除,并不需要真的移动文件;磁盘间的文件移动实际上是先拷贝文件到目标磁盘,然后再删除源文件。l 显示文件:type 文件名仅仅是显示文件内容。l 编辑文件:edit 文件名注意只读文件不可以修改。在修改文件过程中,文件的长短在变化,注意磁盘块分回收和分配。l 改变文件属性:change 文件名 属性将文件在只读和非只读、隐藏和非隐藏之间转换。l 磁盘格式化命令 format 盘符格式化即将所有磁盘块回收,即认为除0、1、2外磁盘块均为空闲,将根目录所有目录项置为空目录项。l 建立目录:makdir 目录建立目录,若同名目录存在则建立失败。建立对应目录(文件夹)的目录项。l 改变目录路径:chadir目录改变当前工作目录,命令接口上要提示当前工作目录。l 删除空目录:rdir 目录当前目录、非空目录、根目录不能删除,只删除空目录项。l 删除目录:deldir 目录 既可删除空目录又可删除非空目录,对于非空目录,首先要删除其下文件和目录然后才能删除其本身。采用树的后序遍历算法,对目录树进行遍历,遍历中的访问换成删除,文件则调用文件删除,空目录则调用空目录删除。l 运行可执行文件:可执行文件的文件名(可创建创建进程)。上述命令在实际系统中都是需要建立进程才可以实现的,这里由于模拟系统的能力达不到,所以除运行可执行文件需要建立进程外,其他指令执行不必在模拟系统中建立进程。三 系统实现3.1磁盘管理3.1.1全局变量 byte name = new byte6;/目录或文件名 byte kzname = new byte3;/扩展名 byte type ;/属性 第0位为1表示该目录项为目录(文件夹)的登记项, 为0表示是 文件的登记项(fcb);第1位表示是否隐藏,第2位表示是否为只读文件 byte length = new byte2;/文件长度 byte zj_address ;/直接地址 起始地址 byte suoyin_address;/索引地址 byte spare = new byte2; datetime dt; treenode currentnode = new treenode(); public devicetype devtype;/设备类型 public int total;/设备数量 public int usestate;/设备使用状态 char, memoryuser = new char32, 16; /用位示图表示内存分配情况 byte, bitdiagram = new byte4, 8;3.1.2磁盘的初始化函数根据成组连接法,将磁盘的空闲块进行链接,系统初始化具体如下: public static void init()/初始化磁盘块 filestream file = new filestream(e:diskdisk.txt, filemode.open); /初始化专用块 blockgroup.stack0 = 6; blockgroup.stack1 = 5; blockgroup.stack2 = 4; blockgroup.stack3 = 3; blockgroup.top = 4; file.seek(0, seekorigin.begin); /将空闲块的内容写入专用块 file.writebyte(blockgroup.top); for (int i = 0; i blockgroup.top; i+) file.writebyte(blockgroup.stacki); /从第一组开始,将第i组的空闲块数和块号写入第6+(i-1)*10块 for (int i = 1; i = 24; i+) file.seek(6 + (i - 1) * 10) * 128, seekorigin.begin); byte a = (byte)(6 + i * 10); file.writebyte(10); for (int j = 0; j 10; j+) file.writebyte(a); a-; /将第25组的空闲块数和块号写入第246块 file.seek(128 * 246, seekorigin.begin); file.writebyte(10); file.writebyte(0); byte a2 = 255; for (int i = 0; i 1是否查询专用块的内容把该块分配给申请者空闲块数减1其值=0否将该块内容复制到专用块是申请失败把该块分配给申请者结束图3-1 分配一个磁盘块的流程图3.1.4磁盘的归还当归还一块时,只要把归还块的块号登记到专用块的当前组中且将空闲块数加1,如果当前组已经满10块,则把专用块中的内容写到归还的那块中,该归还块作为新组的第一块,如图3-2所示:图3-2 归还一个磁盘块的流程图开始查询l单元的空闲块数,即专用块中记录的空闲块数把专用块内容写入归还块中将归还块号填入专用块的1单元将专用块的0单元置成1结束空闲块数=0) write.seek( 16 * bytenumber, seekorigin.begin); if (buffer.name.length 6) messagebox.show(文件名太长,请重新输入!); write.write(buffer.name, 0,buffer.name.length ); for(int i=0;i 0) int sum = (str.length + 15) / 16; if (a 10) if (memorymanager.judge(sum) = true) /分配内存并加载到内存中 b = memorymanager.allocate(sum); memorymanager.loadcontent(str, b); /初始化pcb pcbarraya.processname = name; pcbarraya.pageadress = b; pcbarraya.sum = sum; pcbarraya.pc = 0; pcbarraya.ir = ; pcbarraya.dr = 0; pcbarraya.psw = interrupt.no; pcbarraya.waittime = -10; pcbarraya.pri = 1024 / str.length; pcbarraya.executetime = 0; pcbarraya.needdevice = devicetype.no; pcbarraya.getdevicetime = 0; pcbarraya.dn = -1; pcbarraya.blockreason = ; insertoneready(a); /是否转向进程调度 int c = judgeattemper(); if (c 10) attemper(c); else insertonewhite(a); 内存不足或文件太长,创建进程失败, 消息 else pcb块不足,创建进程失败, 消息, else 文件为空,不能创建进程, 错误, 3.6进程调度public void attemper(int a) /保护cpu现场 if (execute 10) pcbarrayexecute.pc = pc; pcbarrayexecute.ir = ir; pcbarrayexecute.dr = dr; insertoneready(execute); /选择一个进程,初始化cpu中的寄存器 getoneready(a); execute = a; pc = pcbarraya.pc; ir = pcbarraya.ir; dr = pcbarraya.dr; 3.7设备申请进程的指令申请设备时,读到进程所要申请的设备,调用allocatedev函数 public int allocatedev(devicetype type) int dev = 0; switch (type) case devicetype.a: table0.total-; for (int i = 0; i 3; i+) if (table0.usestatei = 0) table0.usestatei = 1; dev = i; break; break; case devicetype.b: table1.total-; for (int i = 0; i 3; i+) if (table1.usestatei = 0) table1.usestatei = 1; dev = i; break; break; case devicetype.c: table1.total-; for (int i = 0; i 3; i+) if (table2.usestatei = 0) table2.usestatei = 1; dev = i; break; break; return dev; 3.8进程阻塞 public void blockprocess(int a, devicetype b, int time) /保护cpu现场 pcbarraya.pc = pc; pcbarraya.ir = ir; pcbarraya.dr = dr; /判断申请设备是否成功,根据不同情况填写blockreason项 bool d = dev.devisuse(b); if (d = false) pcbarraya.needdevice = b; pcbarraya.havedevice = devicetype.no; pcbarraya.blockreason = 申请 + b + 设备失败; pcbarraya.pc = pcbarraya.pc - 4; else pcbarraya.dn = dev.allocatedev(b); pcbarraya.havedevice = b; pcbarraya.needdevice = devicetype.no; pcbarraya.getdevicetime = stime; pcbarraya.waittime = time; pcbarraya.blockreason = 等待io输入输

温馨提示

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

评论

0/150

提交评论