杨斌操作系统实验报告.docx
- 文档编号:4870452
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:17
- 大小:467.69KB
杨斌操作系统实验报告.docx
《杨斌操作系统实验报告.docx》由会员分享,可在线阅读,更多相关《杨斌操作系统实验报告.docx(17页珍藏版)》请在冰豆网上搜索。
杨斌操作系统实验报告
操作系统实验三
实验报告
准考证号:
010110100383姓名:
杨斌
专业:
计算机及应用专业层次:
大专
考核地点:
西安电子科技大学北校区考核时间:
2011年11月24日
实践考核评语及成绩评定(由指导老师填写)
教师签名:
年月日
主考院校:
西安电子科技大学
实验三_B
一.实验题目
用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。
(题目四)
二.实验目的
(1)进一步认识虚拟存储器的工作原理;
(2)进一步认识文件系统的内部功能以及内部实现;
(3)深入理解操作系统中文件系统的理论知识,加深对教材中的重要算法的理解;
(4)掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
三.实验内容以及要求
(1)设计一个支持n个用户的简单二级文件系统,每个用户可保存m个文件,用户在一次运行中只能打开一个文件;
(2)采用二级或二级以上的多级文件目录管理;
(3)对文件应设置存取控制保护方式,如“只能执行”、“允许读”、“允许写等”;
(4)系统的外部特征应接近于真实系统,可设置下述文件操作命令:
Login用户登录;Dir列出文件目录;Create建立文件;Delete删除文件;Read读文件;Write写文件;Open打开文件;Close关闭文件。
(5)通过键盘使用该文件系统,系统应显示操作命令的执行结果。
四.实验环境
操作系统:
Windows7
开发语言:
VC++
开发工具:
MicrosoftVisualC++2008ExpressEdition
五.程序设计思想
通过阅读实验指导书,整理出实验大体的思路,确定实体以及它们之间的关系。
实体关系有三张表(主文件目录,用户文件目录以及打开文件目录)、命令服务和用户构成。
用户负责输入命令。
命令服务实现命令检查以及调用相关模块执行相应的命令功能。
(1)主文件目录(MFD),包括用户名和文件目录指针;
structuserMFD[1]={{"0",0}};//MFD(用户名文件目录指针)
(2)用户文件目录(UFD),包括文件名、保护码以及文件长度;
structfileUFD[10];//用户文件目录(UFD-文件名保护码文件长度)
(3)打开文件目录(AFD),包括打开文件名、打开保护码以及读写指针。
采用数组形式存储打开的文件,数组每个元素保存一个打开文件的信息
StructfileAFD[5]={{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0},{"0",0,0,0}};//运行文件目录(AFD)——一次运行用户可以打开个文件
在此模拟文件管理系统中可以实现的操作有:
(1)用户登录:
login,用户通过登录从而使用系统功能;
(2)创建文件:
create,创建一个指定名字的新文件,即在目录中增加一项,不考虑文件的内容。
对于重名文件给出错误信息。
(3)删除文件:
delete,当没在用户使用指定文件时,将其删除。
文件不存在时给出错误信息。
(4)打开文件:
open,打开用户文件目录中已创建的文件,显示打开成功。
若文件不存在,则提示用户该输入有误。
(5)关闭文件:
close,关闭用户文件目录中存在并且已打开的文件,显示关闭成功。
若文件不存在,则提示用户该输入有误。
(6)读取文件:
read,系统先判断在用户文件目录上是否存在该文件,若存在则判断该文件是否已打开,接着判断该文件的权限,若能读取则显示“该文件的状态是正在读”,若权限不够,则提示该错误信息。
(7)写入文件:
write,若要写的文件既不是在用户文件目录上不存在的也不是未打开的,则接着判断该用户是否有权限写入文件有权
限,则显示出“文件的状态是正在写”,若无权限,则提示该错误信息。
(8)列出文件目录:
dir,显示出该目录下的所有文件。
(9)退出登录:
exit,输入exit命令可退出当前用户登录,使其他用户登录。
六.实验系统结构
1.实验算法流程图
2.算法设计
(1)该程序可分为以下几个模块:
voidlogin();
voiddir();
voidcreate();
voiddelet();
voidopen();
voidclose();
voidread();
voidwrite();
voidsave();
(2)主要函数模块分析
1)创建文件:
其中重点使用了strcmp函数,它是比较两个字符串的大小,返回比较的结果。
voidcreate()
{charname[10];
inti,j=0,flag;
for(i=0;i<10;i++)
{if(!
strcmp(UFD[i].name,"0"))
j++;}
if(j>9)
{cout<<"文件夹己满,请先删除"< dir();} else{ do{cout<<"请输入文件名: "< cin>>name; flag=0; for(i=0;i<10;i++) {if(! strcmp(UFD[i].name,name))//如果有重名的文件 {cout<<"文件名重复,请重新输入"< flag=1;break;} } }while(flag==1); for(i=0;i<10;i++) {if(! strcmp(UFD[i].name,"0"))//找到第一个空的文件 {strcpy(UFD[i].name,name); do {cout<<"请输入保护码(选择-2,0-可读,-可写,-可读写): "< cin>>UFD[i].code; if(UFD[i].code! =0&&UFD[i].code! =1&&UFD[i].code! =2) cout<<"输入错误,重新输入保护码"< }while(UFD[i].code! =0&&UFD[i].code! =1&&UFD[i].code! =2); cout<<"请输入文件长度(选择数字): "< cin>>UFD[i].size; cout<<"己建立文件"< break;} } dir(); } } 2)写文件: voidwrite() {charname[10]; intj,flag=0; cout<<"请输入文件名: "< cin>>name; for(j=0;j<5;j++) { if(! strcmp(AFD[j].name,name))//如果AFD有这个文件 {flag=1;break; } } if(flag==1) if(AFD[j].code==1||AFD[j].code==2) {AFD[j].pwrite='W'; cout<<"文件的状态是正在写"< } elsecout<<"无权限写此文件"< else {cout<<"运行队列中无此文件,请先打开文件"< } cout< dir(); } 七.实验运行结果 (1)运行程序得到初始化界面如下: (2)当用户选择所要登录的文件后,系统调用dir()函数,列出该用户文件目录下的所有文件,并提示用户选择所需要进行的操作: (3)用户通过输入相应的操作命令,进入到不同的界面。 当用户需要创建一个新的文件的时候,输入命令: c,根据提示,输入正确的信息后,显示出以下内容: (4)当需要删除时,用户输入操作命令d并输入想要删除的文件名,若该文件存在,则可顺利删除,如下图显示: 若输入的是不存在文件,则系统提示出错: 打开文件(o)和关闭文件(k)操作显示与删除操作类似。 (5)若想读取一个文件,则选择r操作,若该文件存在,已打开并且用户具备读的操作权限,则读操作成功,显示结果如下: 若该用户文件未打开,则显示结果如下,读操作不成功: 若该操作文件具备已存在在该文件目录下以及已经打开,但是用户不具备读的权限,读文件的操作还是失败,显示结果如下: 写入的操作与读操作类似。 (6)当输入的操作为: s,则文件被保存,显示结果如下: (7)当用户输入e操作时,系统将退出登录,返回初始页面。 实验三_A 一.实验题目 模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及用先进先出(FIFO)页面调度算法处理缺页中断。 (题目一和二) 二.实验目的 (1)理解在分页式存储管理中怎样实现虚拟存储器; (2)掌握分页式虚拟存储管理中硬件的地址转换和缺页中断; (3)学会如何用先进先出(FIFO)页面调度算法处理缺页中断; (4)加深对存储管理的作用和工作原理的理解; (5)进一步认识主存空间的分配和回收方法。 三.实验内容以及要求 本实验的目的是通过设计和调试一个简单请求分页式系统,加深对虚拟存储管理中页面调度算法FIFO、LRU等的理解。 具体要求如下: (1)设计一个模拟请求分页式的系统; (2)采用FIFO或LRU页面置换算法; (3)根据输入的页面访问次序,及初始分配的块数,进行模拟; (4)如果发生页面置换则将置换出的页面显示出来,并显示该页面是否被修改等信息。 四.实验环境 操作系统: Windows7 开发语言: VC++ 开发工具: MicrosoftVisualC++2008ExpressEdition 五.问题分析 请求页式存储管理主要需要解决以下问题: 系统如何获知进程当前所需页面不在主存;当发现缺页时,如何把所缺页面调入主存;当主存中没有空闲的页框时,为了要接受一个新页,需要把老的一页淘汰出去,根据什么策略选择欲淘汰的页面。 本程序中采用先来先服务的淘汰方式。 各进程的虚拟空间被划分成若干个长度相等的页。 页长的划分和内存外存之间的数据传输速度以及内存大小等有关。 页式管理还把内存空间也按页的大小划分为页面,然后把页式虚拟地址与内存页面物理地址建立一一对应页表,并用相应的硬件地址变换机构,来解决离散地址变换问题。 在作业或进程开始执行之前,把该作业或进程的程序段和数据全部装入内存的各个页面中,并通过页表和硬件地址变换机构实现虚拟地址到内存物理地址的地址映射。 六.设计思想 页式虚拟存储管理是在页式存储管理的基础上实现的,首先把作业信息作为副本存放在磁盘上,作业执行时,把作业信息的部分页面装入主存储器,作业执行时若所访问的页面已经在主存中,则进行地址转换,得到绝对地址,否则产生“缺页中断”由操作系统把当前所需的页面装入主存。 在页式虚拟存储系统中,把虚拟空间分成页,称为逻辑页;内存空间也分成同样大小的页,称为物理页。 假设逻辑页号为0,1,2,……,m,物理页号为0,1,……,n,显然有m>n。 由于页的大小都取2的整数幂个字,所以,页的起点都落在低字段为零的地址上。 因此,虚存地址分为两个字段: 高位字段为逻辑页号,低位字段为页内行地址,实存地地址也分两个字段: 高位字段为物理页号,低位字段为页内行地址。 由于两者的页面大小一样,所以页内行地址相等。 虚拟地址到主存实地址的变换是由放在主页的页表来实现。 在页表中,对应每一个虚存逻辑页号有一个表目,表目内容至少要包含该逻辑页所在的主存页面地址(物理页号),用它作为主存地址的高字段,与虚存地址的页内行地址字段相拼接,就产生了完整的实主存地址据此来访问主存。 页式管理的地址变换如图1所示。 如访问该逻辑页就要产生页面失效中断,启动输入输出子系统,根据页表项目中查得的外存地址,由磁盘等外存中读出新的页到主存中来。 修改位指出主存页面中的内容是否被修改过,替换时是否要写主存,替换控制位指出需替换的页等。 七.实验系统结构 1.实验算法流程图 2.算法设计 (1)该程序可分为以下几个模块: intmain();//主函数 voidInit();//初始化程序 voidDisplay();//显示页表情况的函数 voidInput();//输入指令程序 voidCheck(intt);//查页表程序 voidInter(intm);//缺页中断处理程序 voidComp(intw);//处理绝对地址函数 voidChange();//修改页表函数 (2)主要函数模块分析 1)地址变换函数: 输入指令进行操作的页号和单元号,判断该页是否在主存中。 若在,则直接计算绝对地址并输出,否则发生缺页中断。 输出指令执行后的页表情况后再询问用户是否还有后继指令。 voidComp(intw){//绝对地址函数 intaddress=Page[w][2]*1024+unit;//计算绝对地址 if(oper=='C'){Page[w][3]=1;}//C代表存,如果是存指令,置L页的修改标志为1 cout<<"绝对地址: "< cout<<"-----------------指令执行后页表情况如下------------------"< Display();//输出指令执行后的页表情况 cout< 有,0: 无"< cin>>temp; } 2)缺页中断处理函数: 当用户输入操作判断该页不在主存上时,发生缺页中断,输出“该页页号*”,并模拟FIFO进行页面调度算法把该作业中最先进入主存的一页调出,存放在磁盘上,然后再把当前要访问的页装入该块。 voidInter(intm){//缺页中断处理程序 cout<<"该页页号*"< //模拟FIFO页面调度 J=P[k];//暂存P[k]值 if(Page[J][3]==1)//判断J页的修改标志是否为1 cout<<"OUT"< cout<<"IN"< P[k]=L;//修改P[k]为当前指令中的页号L Change();//调用修改页表函数,进行页表修改 k=(k+1)%N_z;//k值修改 Check(L);//继续查看页表 } 3)修改页表函数: 当一个页面调出和装入后都需要修改页表中对应页的标志。 voidChange(){//修改页表函数 intp; for(inti=1;i<=2;i++) {p=Page[L][i];//修改页标志、主存块号 Page[L][i]=Page[J][i]; Page[J][i]=p; } } 八.实验运行结果 (1)运行程序得到初始化界面如下: (2)用户按提示输入相应的指令,若指令输入后系统判断该页在主存上,则显示结果如下: (3)若用户输入指令后系统判断该页不在主存上,此时显示结果如下: (4)当运行完后,系统提示是否还有后继指令,若选择0: 无,则该系统自动关闭。 调试过程: (1)在编写代码时,数据是按照实验指导书上的进行初始化的,在初次运行时,在磁盘上的位置显示的数字被系统理解成八进制了,于是,数据被更改了。 后来查了相关资料了解到,由于本实验页表中的数据全部为整型,所以最后将元素“在磁盘上的位置”的输入和输出均舍去前面的0,否则将会以八进制处理。 (2)调试过程中,遇到了很多问题。 先是分配(创建)物理块问题,然后是如何实现FIFO调度的问题,当程序调试到可运行的时候时,发现输出的结果不对。 而且当一组数据结果正确时,用另一组数据时又出现结果错误。 经过一次次的调试和修改,以及多组数据的测试后,终于完成了实验。 九.实验总结 通过这次实践课程,使我掌握了文件系统的管理,应用和请求分页式存储管理的页面置换算法,对课堂所学的知识进一步加深,将理论上的东西亲手进行了实践。 从实验中,进一步加深了对操作系统的内部运作情况的了解,使自己真正懂得了操作系统的基本功能,以及操作系统在计算机中的重要地位,是我认识到一个好的操作系统需要能够实现最优化的系统资源调用,对各个作业进行最佳的调度,缩短作业的周转时间和等待时间,并且让CPU等硬件资源的利用率达到最高,从而使计算机的性能达到最佳状态。 同时,在这次实验中也用到了很多别的方面的知识,是一次对所学知识的复习以及对新知识具体应用。 通过这次实验,使我对操作系统和编程产生了更大的兴趣,我想我会在这条路上继续走下去。 我相信,只要不断的严格要求自己,注意培养自己的思维能力和实践动手能力,就一定会取得更好的成绩。 在编程和调试的过程中,感觉对于程序语言的运用还是有些生疏,经常会出现一些棘手的问题,这些问题也不是都可以从相关资料中找到解决方案,有些问题是不易排除的,这就需要通过自己理性的分析得出问题的解决方案。 总的来说通过这次的实验使我学到了很多在平时的学习中学习不到的东西,对自己的实际动手能力和应用所学知识的能力都是一个很好的锻炼,以后要多多加强这方面的尝试。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)