操作系统实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

福州大学数学与计算机科学(软件)学院实验报告课程名称:计算机操作系统学号:221100218姓名:专业:软件工程年级:2011级学期:2012学年第2学期2013年10月24日-2-实验一Linux操作系统的使用和分析一、实验目的本实验主要学习和掌握Linux操作系统的基本应用。通过本实验,学生能够熟练掌握Linux环境下各种基本操作命令接口的应用。从系统安全角度出发,学习掌握系统的基本安全优化和配置,在操作系统层次进行有效安全加固,提高Linux系统的安全性能。通过本次实验,有助于学生进一步理解操作系统原理中的相关内容,加深认识。二、实验要求1、熟练掌握Linux系统的基本操作命令。2、熟悉Linux系统的基本配置。3、实现Linux系统的安全加固。4、掌握一种以上的网络应用软件的安装、配置与应用。三、实验内容系统的启动,如图:关闭使用shutdowm还有列出文件夹内的信息ls,cp复制拷贝,touch创建文件命令等等①下载文件压缩包proftpd-1.3.4d.tar.gz,解压如图:-3-②然后修改安装路径:③之后用make编译文件④在安装路径/home/liaoenrui/11里的etc中修改文件的组名和用户名:将groud命名ftp,user也命名为ftp,然后用groudadd和useradd命令将这两个添加在该目录的sbin目录下:-4-⑤最后运行文件,./profile即可四、实验总结通过本次的操作系统的上机实验,我熟练了Linux系统的基本操作命令,并且对安装文件有更深入的了解,比如在上述安装过程中对于通过froftpd来架构linux的ftp,由于之前都是用window系统,所以对于这些非常的生疏,因此在请教了多人和上网查询之后,终于有所了解,并且成功的将此实验顺利完成。在本次实验中,我发现自己的动手能力又有很大的提高,相信以后继续努力的话会有更大的进步,当然这也要归功于老师的教导。参考文献[1]NeilMaththewRichardStonesLinux程序设计第四版人民邮电出版社[2]周茜,赵明生.中文文本分类中的特征选择研究[J].中文信息学报,2003,Vol.18No.3-1-实验二Linux进程通信一、实验目的1)了解有关Linux系统调用;2)学习有关Linux的进程创建,理解进程创建后两个并发进程的执行。二、实验内容在Linux环境下,用C/C++语言编程,使用系统调用fork创建进程多个子进程。(1)调试并完成下列程序,完成实验要求:#includestdio.h#includesys/types.h#includeunistd.hintmain(){pid_tpid1;pid_tpid2;pid1=fork();pid2=fork();printf(pid1:%d,pid2:%d\n,pid1,pid2);}要求:A.请说出执行这个程序后,将一共运行几个进程。B.观察运行结果,并给出分析与解释。答:A.执行这个程序后,将一共运行4个进程。A.运行结果如下:-2-分析与解释:fork()函数能够建立子进程,且使得子进程得到父进程地址空间的一个复制;而且,当创建成功时,如果是父进程则返回0,子进程则返回子进程的ID,但是,fork()创建的进程并不是从该程序开头开始执行,它只是和父进程一样继续执行后续代码,因此在之后的语句中,父子进程同时创建一个进程,就形成了四个进程,如图上所示。所以,,在上面的截图中,第一次fork()函数时成功产生了父子进程pid分别为2775和0,第二次使用fork()函数时父子进程又各产生了一对父子进程父进程产生的父子进程的pid分别为2776和0,子进程产生的父子进程的pid分别为0和2777。因为进程是并发的,他的调度我们无法干预,所以出现的结果并非都是一成不变的,执行多次后,输出的顺序有可能不一样。(2)参考下面的相关程序实例,编写一个管道实验程序,实现两个进程之间的数据通信。要求:父进程顺序写入若干个字符串,子进程顺序读出内容,并写入文件piple.txt,并显示出来。(写出设计步骤、数据结构、关键代码、实验结果及其分析说明)答:①设计步骤:用pipe()创建一个管道fd,用fork调用产生两个进程(父进程和子进程);将父进程将要传输给子进程的信息写在readbuffer;然后使子进程通过读端用write函数从缓存中读取父进程传输的消息。②数据结构:定义一个字符数组string用于存放父进程将要传输给子进程的消息,使用read函数和write函数配对实现管道的运行。③关键代码:#includeunistd.h#includestdlib.h#includefcntl.h#includesys/stat.h#includesys/types.hintmain(void){intfd[2],out;pid_tchildpid;charstring[]={abcdefghijklmnopqrstuvwxyz};charreadbuffer[27];pipe(fd);childpid=fork();-3-if(childpid==-1){printf(forkerror);exit(1);}elseif(childpid!=0){close(fd[0]);write(fd[1],string,sizeofstring);exit(0);}else{close(fd[1]);read(fd[0],readbuffer,27);printf(%s\n,readbuffer);out=open(pipo.txt,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);write(out,readbuffer,80);}return0;}④实验结果:⑤分析说明:管道是用于进程间通信的一种通信机制。Pipe函数在两个程序之间传递数据不需要启动shell来解释请求的命令,同时还提供了对数据的更多控制,因此用它来创建管道非常方便。-4-三、实验总结在做这个实验之前,一直觉得这是一个非常复杂的实验,一直不太愿意去碰它。终于不得不做了,发现其实没有想象中的那么难。而且,通过这个实验,让我了解了关于页面调度方面的一些知识,对于系统是如何调度页面的更加的清晰明了。通过这次的实验,使我学到了不少实用的知识,更重要的是,做实验的过程,思考问题的方法,这与做其他的实验是通用的,真正使我们受益匪浅。在实验课上,由于时间关系以及考虑不全面,所以导致实验初始时的不完善,这启发了我要进行多方面的思考和研究,尤其是对于进程并发执行这种具有不确定性的问题,更要从多角度进行思索,并动手进行实际操作以及检验,才能验证自己的想法是否正确。四、参考文献[1]中国IT实验室[2]陈向群,马洪兵.现代操作系统[M].北京:机械工业出版社,2009.7[3]黄志洪,钟耿扬,Linux操作系统[B].北京:冶金工业出版社,2003.[4]周巍松.Linux系统分析与高级编程技术[M].北京:机械工业出版社,2000-5-实验三页面置换算法一、实验目的本实验主要对操作系统中请求分页式内存管理及其应用的一些关键算法进行模拟。学生通过设计与实现Clock算法,能够加强对相应理论的理解,并对了解操作系统内部的基本处理原理与过程也有很多益处。二、实验要求基本要求:描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。1)初始化:输入作业可占用的总页框数,初始化置空。2)输入序列:输入一个页号访问请求序列,依次占用相应页框,直至全部占用;3)Clock算法:当页框全部占用后,对于后续新的页号访问请求,执行Clock算法,淘汰1个页面后装入新的页号。4)显示当前分配淘汰序列:显示淘汰的页号序列。描述Clock算法的基本原理、必要的数据结构、算法执行流程图、编码实现。三、实验内容基本原理:时钟页面置换算法是把所有的页面都保存在一个类似钟面的环形链表中,一个表针指向最老的页面,在采用请求分页机制的操作系统中,当运行一个程序的时候,若要访问的页面不在内存中而需要把它们调入内存,但此时内存已无空闲空间,为了保证该进程能正常运行,需选择内存中暂时不用的页面调出到磁盘交换区。选择调出哪个页面,由页面算法决定。页面置换算法的好坏,直接影响系统的性能,所以一个好的页面置换算法,应尽可能选择调出较长时间内不会再访问的页面,以保证较低的缺页率。如图所示。-6-当发生缺页中断时,算法首先检查表针指向的页面,如果它的R位是0就淘汰该页面,并把新的页面插入这个位置,然后把表针前移一个位置;如果R位是1就清除R位并把表针前移一个位置,重复这个过程直到找到了一个R位为0的页面为止改进型的Clock算法的思想:如图:-7-在将一个页面换出时,如果该页已被修改过,便须将它重新写到磁盘上;但如果该页未被修改过,则不必将它拷回磁盘。同时满足这两条件的页面作为首先淘汰的页。由访问位uesbit和修改位change可以组合成下面四种类型的页面:1类(usebit=0,change=0):该页最近既未访问、又未修改,是最佳淘汰页。2类(usebit=0,change=1):该页最近未访问,但被修改,并不是好的淘汰页。3类(usebit=1,change=0):最近已被访问,但未被修改,该页有可能再被访问。4类(usebit=1,change=1):最近已被访问且被修改,该页有可能再被访问。在内存中的每个页必定是这四类页面之一,在进行页面置换时,可采用与简单Clock算法相类似的算法,其差别在于须同时检查访问位和修改位,以确定该页是四类页面中的哪一种。此算法称为改进型Clock算法。其执行过程可分成以下三步:(1)从指针所从当前位置开始扫描循环队列,寻找usebit=0且change=0的页面,将遇到的第一个页面作为所选中的淘汰页。在第一次扫描间不改变访问位usebit。(2)如果第一步失败,即查找一周后未遇到第一类页面,则开始第二轮扫描,寻找usebit=0且change=1的第二类页面,将所遇到的第一个这类页面作为淘汰页。在第二轮扫描期间,将所有经过的页面的访问位置0。(3)如果第二步也失败,即未找到第二类页面,则将指针返回到开始的位置,并将所有的访问位复0。然后,重复第一步,如果仍失败,必要时再重复第二步,此时就一定能够找到被淘汰的页。算法流程设计:STEP1:输入分配的页框数,页面访问次数和要访问的页面号序列,在当前路径下建-8-一个in.txt的文件作为输入使用。STEP2:内存页面初始化。内存中页面的int数据结构为数组,用余项含有页号值now和访问位值usebit,修改位change。开始时页号均为-1,访问位为0,修改位也为0。STEP3:测试数据。具体算法是依要访问的页面号,运用写在main()函数里的clock算法查找是否已经存在于内存中。若存在,则修改其访问位为1.若不存在,触发缺页中断。最后,打印当前内存状态。如此循环直至测试串都访问完毕主要函数实现://CLOCK算法if(mark[num]){printf(命中页%d*,num);usebit[num]=1;if(work[now]==num)now=(now+1)%len;//若是当前指针所在位置则移位,否则不变}else{miss++;mark[num]=usebit[num]=1;change[num]=cha;if(work[now]==-1){//判断是否还有空的内存块work[now]=num;now=(now+1)%len;printf(插入页%d*,num);}else{while(true){//循环的查找最佳的替换块for(inti=0;ilen;i++){//超找usebit=0,change=0的块if(usebit[work[now]]==0&&change[work[now]]==0){f1=tru

1 / 14
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功