




免费预览已结束,剩余16页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
湖南工业职业技术学院湖南工业职业技术学院 操作系统实训报告操作系统实训报告 题目:题目:模拟操作系统五大功能模拟操作系统五大功能 专业:专业: 软件软件 实训老师:实训老师: 完成时间:完成时间: 2007-12-27 参与人员参与人员: 2 目目 录录 一,设计思想和算法说明一,设计思想和算法说明-3 1、 进程管理-3 2、 内存管理-3 3、 文件管理-3 4、 文件管理-4 5、 设备管理-5 二,总功能模块图二,总功能模块图-5 三,流程图三,流程图-6 cpu 管理:-6 内存管理: -6 文件管理: -7 4)设备管理:-7 5)作业管理:-8 四,使用说明四,使用说明-8 五,程序清单五,程序清单-8 六,结果分析和调试六,结果分析和调试 -19 cpu 管理:-19 内存管理: -19 文件管理: -19 设备管理:-20 作业管理:-20 七,资料来源及参考书七,资料来源及参考书 -20 一,设计思想和算法说明一,设计思想和算法说明 1、 进程管理进程管理 进程调度算法有 fifo,优先数调度算法,时间片轮转调度算法,分级调度算法,目前主要 3 是考 fifo 和优先数调度算法(静态优先级) 。 输入输入:进程流文件”jincheng.txt” ,其中存储的是一系列要执行的进程, 每个作业包括五个数据项:每个作业包括五个数据项: 进程名 进程状态(1 就绪 2 等待 3 运行) 所需时间 优先数(0 级最高) 进程所占 cpu 的资 源数。 输出输出: : 进程执行流 和等待时间 平均等待时间 cpu 的使用率。 本程序包括本程序包括: :fifo,优先数调度算法,时间片轮转调度算法 2、 内存管理内存管理 内存调度算法有内存调度算法有:最先适应分配算法,最优适应分配算法,最坏适应算法 用户提出内存空间的申请;系统根据申请者的要求,按照一定的分配策略分析内存空间的 使用情况,找出能 满足请求的空闲区,分给申请者;当程序执行完毕或主动归还内存资源时,系统要收回它 所占用的内存空间 或它归还的部分内存空间。 1) 程序运行时首先接收输入:空闲区数据文件”fqu.txt” ,包括若干行,每行有两个数 据项:起始地址、长度(均为整数) ,各数据项以逗号隔开。 2) 建立空闲区表并在屏幕上显示输出空闲区表内容,空闲区表中记录了内存中可供分配 的空闲区的始址和 长度,用标志位指出该分区是否是未分配的空闲区。 3 3) 从用户界面根据用户提示接收一个内存申请,格式为:作业名、申请空间的大小。 4) 按照最差(最坏)适配算法选择一个空闲区,分割并分配,修改相应的数据结构(空 闲区表) ,填写内 存已分配区表(起始地址、长度、标志位) ,其中标志位的一个作用是指出该区域分配给哪 个作业。 5) 重复 3) 、4) ,直到输入为特殊字符(0) 。 6) 在屏幕上显示输出新的空闲区表和已分配区表的内容。 本程序包括本程序包括:fifo,最优适应分配算法,最坏适应算法 3、 文件管理文件管理 主要就是模拟操作系统中的 建立文件、打开文件、读文件、写文件、 、关闭文件、 、删除 文件、 、建立目录、 、 显示目录内容、显示文件内容、 、改变文件属性等操作。1 改变目录格式:cd目录名 功能:功能:工作目录转移到指定的目录下,只要求完成改变到当前目录的某一个子目录 下的功能,不要求实现相对目录以及绝对目录。 1 1)创建文件)创建文件 格式:create文件名 文件长度 功能:创立一个指定名字的新文件,即在目录中增加一项,不考虑文件内容,但必 须能输入文件长度。 2 2)删除文件)删除文件 4 格式:del希望删除的文件名 功能:删除指定的文件 3 3)显示目录)显示目录 格式:lsall 功能:显示全部目录以及文件,输出时要求先输出接近根的目录,再输出子目录。 4 4)创建目录)创建目录 格式:md目录名 功能:在当前路径下创建指定的目录 5 5)删除目录)删除目录 格式:rd目录名 功能:删除当前目录下的指定目录,如果该目录为空,则可删除,否则应提示是否 作删除,删除操作将该目录下的全部文件和子目录都删除。 作业调度主要有 fifo,运算时间短的作业优先,优先数调度算法,响应比最高者优先调度 算法,均衡调度算法 4、 文件管理文件管理 1 1)模拟作业调度算法)模拟作业调度算法 输入输入:作业流文件“zye.txt” ,其中存储的是一系列要执行的作业, 每个作业包括三个数据项: 作业号、作业进入系统的时间(用一整数表示,如 10:10,表示成 1010) 、估计执行时间 (单位分)优先级(0 级最高) 2 2)参数用空格隔开,下面是)参数用空格隔开,下面是 zye.txtzye.txt 文件里面存放的作业:文件里面存放的作业: 1 800 50 2 815 30 3 830 25 4 835 20 5 845 15 6 900 10 7 920 5 其中调度时刻为最后一个作业到达系统的时间! 输出作业号!进入内存的时间!每行输出一个作业信息 本程序包括本程序包括:fifo,运算时间短的作业优先,优先数调度算法,响应比最高者优先调度算法 5、 设备管理设备管理 主要就是模拟操作系统中的设备分配,回收,显示三个功能。 定义四个设备类,设备总数量,空闲数量,分别是: input, 2 , 2 printer, 3, 3 disk, 4 , 4 tape 1, 1 分配一个设备,它的空闲数量就少一个,如果回收一个,它就加一个,如果全部分配出去, 5 你在申请的话,它就提示“占时无设备,请等待” 。还加了一个输出设备表。 二,总功能模块图二,总功能模块图 模拟操作系统五大功能模拟操作系统五大功能 cpu 管理管理 内存管理内存管理 文件管理文件管理 作业管理作业管理 设备管理设备管理 三,流程图三,流程图 cpu 管理:管理: 开始 打开文件 jincheng.txt 显示进程状态 结束 6 开始 选择 该变目录 创建文件 删除文件 显示目录 结束 创建目录 删除目录 输入 exit 内存管理:内存管理: 开始 选择 申请空间 撤销作业 显示 退出 打开文件 fqu.txt 结束 文件管理:文件管理: 否 是 7 4)设备管理:设备管理: 开始 选择 分配 回收 显示 退出 结束 5)作业管理:作业管理: 开始 打开文件 zye.txt 显示作业状态 结束 四,使用说明四,使用说明 1) 首先在 d 盘下建立三张表,表名分别是:jincheng.txt,fqu.txt,zye.txt,它们分别存 放 cup 运行的进程,内存存储的作业,还有作业管理的作业。 (1)第一章表是进程信息表:为 jincheng.txt nameztaitimeyouxianzyuan a2505 b16010 . (2)第二章表内存分给作业表 fqu.txt addresslongztai 8 10032free . (3)第三章表作业分配表:zye.txt iddtimextimeyouxian 1800500 2815301 . 2)运行 cpu 管理首先要输入进程,所以首先输入 d 盘下的文件 jincheng.txt 文件。打开它,使数据进程 进入该系统里面运行。还有作业管理要输入 d 盘下的文件 zye.txt 文件。使作业数据进入系统里面,进行 计算。而内存管理侧是,系统一运行,它自动打开文件。使里面的数据读入系统里面来,不用输入文件。 另外文件管理就是自己在运行时,自己去创建和操作,修改。设备管理在程序里面以定义规定好,进行分 配和调用。 五,程序清单五,程序清单 #include#include #include#include #include#include #include#include #include#include #include#include /文件管理文件管理 / / *目录和文件的结构定义目录和文件的结构定义* typedeftypedef structstruct filenodefilenode charchar name50;name50; /*/*目录或文件的名字目录或文件的名字*/*/ intint type;type; /*0/*0 代表目录,代表目录,1 1 代表普通文件代表普通文件*/*/ structstruct filenodefilenode *next;*next; /*/*指向下一个兄弟结点的指针指向下一个兄弟结点的指针*/*/ structstruct filenodefilenode *sub;*sub; /*/*指向第一个子结点的指针指向第一个子结点的指针*/*/ structstruct filenodefilenode *father;*father; /*/*指向父结点的指针指向父结点的指针*/*/ charchar size10;size10; /*/*如果是文件则表示文件的大小如果是文件则表示文件的大小*/*/ dirfilenode;dirfilenode; dirfilenodedirfilenode *workdir;*workdir; /定义当前工作目录定义当前工作目录 dirfilenodedirfilenode root;root; /定义根目录定义根目录 charchar path100;path100; /定义路径信息定义路径信息 /初始化函数初始化函数 voidvoid initial3()initial3() strcpy(,“root“);strcpy(,“root“); root.type=0;root.type=0; root.next=null;root.next=null; root.sub=null;root.sub=null; root.father=null;root.father=null; strcpy(root.size,“strcpy(root.size,“文档文档“);“); workdir=workdir= strcpy(path,“root“);strcpy(path,“root“); /初始化新结点函数初始化新结点函数 dirfilenodedirfilenode *init5()*init5() dirfilenodedirfilenode *p;*p; p=newp=new dirfilenode;dirfilenode; strcpy(,“);strcpy(,“); root.type=0;root.type=0; root.next=null;root.next=null; root.sub=null;root.sub=null; root.father=null;root.father=null; strcpy(root.size,“strcpy(root.size,“存档存档“);“); returnreturn p;p; /1/1 改变目录改变目录 voidvoid cd(charcd(char dirname)dirname) dirfilenodedirfilenode *p;*p; intint flag=0;flag=0; p=workdir-sub;p=workdir-sub; if(p=null)if(p=null) couttype=0)if(p-type=0) if(!strcmp(p-name,dirname)if(!strcmp(p-name,dirname) flag=1;flag=1; break;break; p=p-next;p=p-next; if(flag=1)if(flag=1) workdir=p;workdir=p; strcat(path,“strcat(path,“ “);“); strcat(path,p-name);strcat(path,p-name); coutname,filename);strcpy(q-name,filename); q-sub=null;q-sub=null; q-type=1;q-type=1; q-next=null;q-next=null; q-father=workdir;q-father=workdir; strcpy(q-size,filesize);strcpy(q-size,filesize); p=workdir-sub;p=workdir-sub; 9 if(p=null)if(p=null) workdir-sub=q;workdir-sub=q; couttype=1)if(p-type=1) if(!strcmp(p-name,filename)if(!strcmp(p-name,filename) flag=1;flag=1; coutnext;p=p-next; if(flag=0)if(flag=0) p=workdir-sub;p=workdir-sub; while(p-next)p=p-next;while(p-next)p=p-next; p-next=q;p-next=q; coutsub;p=workdir-sub; if(p=null)if(p=null) couttype=1)if(p-type=1) if(!strcmp(p-name,filename)if(!strcmp(p-name,filename) flag=1;flag=1; break;break; p=p-next;p=p-next; if(flag=1)if(flag=1) if(p=workdir-sub)if(p=workdir-sub) workdir-sub=p-next;workdir-sub=p-next; elseelse q=workdir-sub;q=workdir-sub; while(q-next!=p)while(q-next!=p) q=q-next;q=q-next; q-next=p-next;q-next=p-next; deletedelete p;p; couttype=0)if(p-type=0) cout.setf(2);cout.setf(2); coutname“name“name“sizename“sizenext;p=p-next; voidvoid dirs(dirfilenodedirs(dirfilenode *p,char*p,char str)/str)/显示显示 charchar newstr100;newstr100; dirfilenodedirfilenode *q;*q; coutsub)if(q-sub) strcpy(newstr,“);strcpy(newstr,“); strcat(newstr,str);strcat(newstr,str); strcat(newstr,“);strcat(newstr,“); strcat(newstr,q-name);strcat(newstr,q-name); dirs(q-sub,newstr);dirs(q-sub,newstr); q=p;q=p; while(q-next)while(q-next) if(q-next-sub)if(q-next-sub) strcpy(newstr,“);strcpy(newstr,“); strcat(newstr,str);strcat(newstr,str); strcat(newstr,“strcat(newstr,“ “);“); strcat(newstr,q-next-name);strcat(newstr,q-next-name); dirs(q-next-sub,newstr);dirs(q-next-sub,newstr); q=q-next;q=q-next; / 显示所有目录显示所有目录 voidvoid lsall()lsall() dirfilenodedirfilenode *p;*p; coutname,dirname);strcpy(q-name,dirname); q-sub=null;q-sub=null; q-type=0;q-type=0; q-next=null;q-next=null; q-father=workdir;q-father=workdir; strcpy(q-size,“strcpy(q-size,“ “);“); p=workdir-sub;p=workdir-sub; if(p=null)if(p=null) 10 workdir-sub=q;workdir-sub=q; couttype=0)if(p-type=0) if(!strcmp(p-name,dirname)if(!strcmp(p-name,dirname) flag=1;flag=1; coutnext;p=p-next; if(flag=0)if(flag=0) p=workdir-sub;p=workdir-sub; while(p-next)while(p-next) p=p-next;p=p-next; p-next=q;p-next=q; coutsub;p=workdir-sub; if(p=null)if(p=null) couttype=0)if(p-type=0) if(!strcmp(p-name,dirname)if(!strcmp(p-name,dirname) flag=1;flag=1; break;break; p=p-next;p=p-next; if(flag=1)if(flag=1) if(p=workdir-sub)if(p=workdir-sub) workdir-sub=p-next;workdir-sub=p-next; elseelse q=workdir-sub;q=workdir-sub; while(q-next!=p)while(q-next!=p) q=q-next;q=q-next; q-next=p-next;q-next=p-next; deletedelete p;p; cout#“,path);printf(“%s:#“,path); gets(string);gets(string); len=strlen(string);len=strlen(string); if(len=0)if(len=0) strcpy(command,“errer“);strcpy(command,“errer“); elseelse /获得命令获得命令 s=null;s=null; s=strchr(string,s=strchr(string, );); if(s!=null)if(s!=null) *s=0;*s=0; strcpy(command,string);strcpy(command,string); /测试命令类型测试命令类型 if(!strcmp(command,“cd“)|!strcmp(command,“cd“)if(!strcmp(command,“cd“)|!strcmp(command,“cd“) comm=1;comm=1; elseelse if(!strcmp(command,“create“)|!strcmp(command,“create“)if(!strcmp(command,“create“)|!strcmp(command,“create“) comm=2;comm=2; elseelse if(!strcmp(command,“del“)|!strcmp(command,“del“)if(!strcmp(command,“del“)|!strcmp(command,“del“) comm=3;comm=3; elseelse if(!strcmp(command,“lsall“)|!strcmp(command,“lsall“)if(!strcmp(command,“lsall“)|!strcmp(command,“lsall“) comm=4;comm=4; elseelse if(!strcmp(command,“md“)|!strcmp(command,“md“)if(!strcmp(command,“md“)|!strcmp(command,“md“) 11 comm=5;comm=5; elseelse if(!strcmp(command,“rd“)|!strcmp(command,“rd“)if(!strcmp(command,“rd“)|!strcmp(command,“rd“) comm=6;comm=6; elseelse if(!strcmp(command,“exit“)|!strcmp(command,“exit“)if(!strcmp(command,“exit“)|!strcmp(command,“exit“) comm=0;comm=0; elseelse comm=100;comm=100; switch(comm)switch(comm) casecase 1:1: /1/1 改变目录改变目录 coutname;cinname; cd(name);cd(name); break;break; casecase 2:2: /2/2 创建文件创建文件 coutnamefilesize;cinnamefilesize; create(name,filesize);create(name,filesize); break;break; casecase 3:3: /3/3 删除文件删除文件 /strcpy(name,s+1);/strcpy(name,s+1); coutname;cinname; del(name);del(name); break;break; casecase 4:4: /4/4 显示目录显示目录 lsall();lsall(); break;break; casecase 5:5: /5/5 创建目录创建目录 coutname;cinname; md(name);md(name); break;break; casecase 6:6: /6/6 删除目录删除目录 coutname;cinname; rd(name);rd(name); break;break; casecase 0:0: /0/0 退出系统退出系统 flag=0;flag=0; break;break; default:default: coutfname;cinfname; if(fp=fopen(“d:zye.txt“,“r“)=null)if(fp=fopen(“d:zye.txt“,“r“)=null) cout1)“1)“1)“1)“current_excellenif(jobsj.visited=0)p=j; current_excellent=jobsj.excellent;current_excellent=jobsj.excellent; jobsp.start_time=current_hour*100+current_minute;jobsp.start_time=current_hour*100+current_minute; jobsp.wait_time=(current_hour-jobsp.wait_time=(current_hour- jobsp.reach_hour)*60+(current_minute-jobsp.reach_hour)*60+(current_minute- jobsp.reach_minite)+jobsp.need_time;jobsp.reach_minite)+jobsp.need_time; cout=n)/*if(i=n)/*没有找到该类设备没有找到该类设备*/*/ cout=n)/*if(i=n)/*没有找到该类设备没有找到该类设备*/*/ couta;cina; switch(a)switch(a) casecase 0 0 : : /*a=0/*a=0 程序结束程序结束*/*/ flag=0;flag=0; coutjtypemm;cinjtypemm; allocate(j,type,mm);/*allocate(j,type,mm);/*分配设备分配设备*/*/ break;break; casecase 2:2: /*a=2/*a=2 回收设备回收设备*/*/ coutjtype;cinjtype; /scanf(“%s%s“,j,type);/scanf(“%s%s“,j,type); reclaim(j,type);/*reclaim(j,type);/*回收设备回收设备*/*/ break;break; casecase 3:3: /*a=3/*a=3 输出设备类表和设备表的内容输出设备类表和设备表的内容*/*/ coutfqu;/cinfqu; if(fp=fopen(“d:fqu.txt“,“r“)=null)if(fp=fopen(“d:fqu.txt“,“r“)=null) coutjob_name;cinjob_name; cinjob_length;cinjob_length; flag=0;flag=0; for(i=0;i=job_length)if(freesi.length=job_length) flag=1;flag=1; if(flag=0)if(flag=0) cout=job_length)if(freesi.length=job_length) t=1;t=1; i+;i+; i-;i-; occupysoccupy_quantity.start=freesi.start;occupysoccupy_quantity.start=freesi.start; strcpy(occupysoccupy_quantity.tag,job_name);strcpy(occupysoccupy_quantity.tag,job_name); occupysoccupy_quantity.length=job_length;occupysoccupy_quantity.length=job_length; occupy_quantity+;occupy_quantity+; if(freesi.lengthjob_length)if(freesi.lengthjob_length) freesi.start+=job_length;freesi.start+=job_length; freesi.length-=job_length;freesi.length-=job_length; elseelse for(j=i;jjob_name;cinjob_name; cinjob_length;cinjob_length; flag=0;flag=0; for(i=0;i=job_length)if(freesi.length=job_length) flag=1;flag=1; if(flag=0)if(flag=0) cout=job_length)if(freesi.length=job_length) t=1;t=1; i+;i+; i-;i-; for(j=0;j=job_length)freesi.start+=job_length; freesi.length-=job_length;freesi.length-=job_length; elseelse for(j=i;jjob_name;cinjob_name; cinjob_length;cinjob_length; flag=0;flag=0; for(i=0;i=job_length)if(freesi.length=job_length) flag=1;flag=1; if(flag=0)if(flag=0) cout=job_length)if(freesi.length=job_length) t=1;t=1; i+;i+; i-;i-; for(j=0;j=job_length)i=j; occupysoccupy_quantity.start=freesi.start;occupysoccupy_quantity.start=freesi.start; strcpy(occupysoccupy_quantity.tag,job_name);strcpy(occupysoccupy_quantity.tag,job_name); occupysoccupy_quantity.length=job_length;occupysoccupy_quantity.length=job_length; occupy_quantity+;occupy_quantity+; if(freesi.lengthjob_length)if(freesi.lengthjob_length) freesi.start+=job_length;freesi.start+=job_length; freesi.length-=job_length;freesi.length-=job_length; elseelse for(j=i;jjob_name;cinjob_name; flag=-1;flag=-1; for(i=0;ichioce;cinchioce; switch(chioce)switch(chioce) casecase 1:1: intint choice;choice; coutchoice;cinchoice; switch(choice)switch(choice) casecase 1:1: earliest();earliest(); break;break; casecase 2:2: excellent();excellent(); break;break; casecase 3:3: worst();worst(); break;break; break;break; casecase 2:2: finished();finished(); break;break; casecase 3:3: view();view(); break;break; casecase 0:0: flag=0;flag=0; break;br
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 41304.3-2025知识管理方法和工具第3部分:会议知识管理
- 2025年国家林草局招考笔试核心题
- 2025年机械安全员B考试高频题库突破
- 2024-2025学年泗阳县中考猜题数学试卷含解析
- 草坪园艺技术使用中常见问题
- 全国政治学术演讲会发言模板
- 2025年汽车维修技术员技能考核试题及答案解析
- 2025年国家中医药博物馆招聘面试模拟题及答案
- 2025年平面广告设计师职业能力鉴定试题及答案解析
- 2025年小学安全知识常见题及答案
- 兽用药品批次追踪与追溯系统考核试卷
- 医院信息透明化责任追究机制
- 《上腔静脉综合征》课件
- 果胶功能化产品开发
- 塞力斯招聘在线测评题
- 西方现代思想讲义
- 在线教育行业智能学习与个性化教育方案
- 工程变更流程ECN
- LED电子显示屏系统设计方案
- 高中英语人教新教材选择性必修一全册词汇表和默写表(分单元编排)
- 矿床学全套教学课件
评论
0/150
提交评论