操作系统实验报告.doc
《操作系统实验报告.doc》由会员分享,可在线阅读,更多相关《操作系统实验报告.doc(19页珍藏版)》请在咨信网上搜索。
______________________________________________________________________________________________________________ 学生学号 0121210680225 实验课成绩 武汉理工大学 学 生 实 验 报 告 书 实验课程名称 操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 刘军 学 生 姓 名 李安福 学生专业班级 软件sy1201 2014 — 2015 学年 第 一 学期 《操作系统》实验教学大纲 课程编号: 课程名称:操作系统/Operating System 实验总学时数:12学时 适应专业:计算机科学与技术、软件工程 承担实验室:计算机科学与技术学院实验中心 一、实验教学的目的和任务 通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。 二、实验项目及学时分配 序号 实验项目名称 实验学时 实验类型 开出要求 01 Linux键盘命令和vi 2 设计 必开 02 Linux下C编程 2 设计 必开 03 SHELL编程和后台批处理 2 设计 必开 04 Linux系统调用(time) 2 设计 必开 05 Linux进程控制(fork) 4 设计 必开 三、每项实验的内容和要求: 1、 Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 内容:见教材p4, p9, p40, p49-53, p89, p100 2、 Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 3、 SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容: (1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容,然后输出到屏幕。 4、Linux系统调用使用方法。 要求:掌握Linux系统调用使用方法。 内容:学习使用time, ctime, sleep, exit等Linux系统调用使用方法。 5、Linux系统进程控制 要求:掌握Linux系统中进程控制原语fork的使用方法。 内容:设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。 以上每项实验均要求每人一个Linux联机终端独立完成。 四、实验改革与特色 完成多用户分时系统Linux下的基本使用级观察级实验。 五、教材及实验指导书 教材:孟静,《操作系统教程题解与实验指导》, 高等教育出版社 2002.6 执笔:杨铭熙 审阅:陈天煌 日期2014年12月6 审定:徐东平 日期2014年12月6 实验课程名称: 操作系统 实验项目名称 Linux键盘命令和vi 实验成绩 实验者 李安福 专业班级 软件sy1201 组别 同组者 实验日期 第一部分:实验分析与设计(可加页) 一、 实验内容描述(问题域描述) Linux键盘命令和vi 要求:掌握Linux系统键盘命令的使用方法。 二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) 进入vi的命令: vi filename : 打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename....filename :打开多个文件,依次进行编辑 键盘命令: 1. cat命令、more命令、less命令:cat命令是将单个或多个文件的内容显示到屏幕上;more命令和less命令与cat命令相似,以分页形式显示文件内容。 2. ls命令:将某一个目录或文件的内容显示出来 3. cp命令:文件或目录的复制 4. rm命令:删除文件或目录 5. mv命令:将文件从一个位置移动到另一个位置 6. mkdir命令:创建目录 7. rmdir:删除空目录 三、主要仪器设备及耗材 安装Linux系统的计算机一台。 第二部分:实验调试与结果分析(可加页) 一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 1 使用mkdir命令建立一个子目录subdir 2 使用cat或more命令查看file1文件的内容。 3 将date命令的用法附加到文件file1的后面: 4 利用ls -l file1命令列出文件file1的较详细的信息。 5 利用rm fa命令将文件fa删除。再利用ls -l命令查看工作目录内容。 6 运行mv file1 file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中? 显然,只有file_a在工作目录中,而file1不在工作目录中 vi 共分为三种模式 (1)命令模式:命令模式为vi的初始模式,可以使用“上下左右”按键来移动光标,您可以使用“删除字符”或“删除整行”来处理文档。在编辑模式或指令列模式中按【ESC】键可换回命令模式。 (2)编辑模式:在命令模式中按下【i, I, o, O, a, A, r, R】等字母之后才会进入编辑模式。按下上述的字母时,在画面的左下方会出现【 --INSERT-- 或 --插入-- 】的字样,才可以做文字数据输入。 (3)指令列模式:在命令模式当中,输入 【:】或【 / 】就可以将光标移动到最底下那一行,进入指令列模式。在这个模式当中,可以存盘、结束vi 、显示行号等操作。 二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) Free 显示系统中已用空闲内存数量 top:查看系统进程情况 三、 实验小结、建议及体会 vi编辑器是Linux系统下标准的编辑器,它的强大不逊色于任何文本编辑器。初次实验对Linux常用命令及编辑器的使用操作都不熟悉,但对Linux很好奇。通过实验,学会了如何在现有操作系统的基础上再打开一个操作系统,并对新的窗口进行操作。开始进入的界面有点像DOS环境下的界面,接着可以输入一些语句命令来创建和查看文件、查看根目录及根目录下的内容,以及如何进入文件夹、如何编译并推出编译等。学会vi有助于我们学习Linux。 实验课程名称: 操作系统 实验项目名称 Linux下C编程 实验成绩 实验者 李安福 专业班级 软件sy1201 组别 同组者 实验日期 第一部分:实验分析与设计(可加页) 一、 实验内容描述(问题域描述) Linux下的C编程 要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。 内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。 二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include<stdio.h> int main() { int a, b; printf("shu ru liang ge shu:\n"); scanf("%d,%d",&a,&b); if(a>b) { b = a; } printf("max = %d\n",b); return 0; } 三、主要仪器设备及耗材 Linux操作系统 Vi编辑器 gcc编译 第二部分:实验调试与结果分析(可加页) 一、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 二、 实验小结、建议及体会 通过这次实验vi编辑器有了进一步的应用,同时学会了在Linux进行简单的C语言编程,掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。加深了对linux的印象,linux的兼容性很强。C/C++仍旧可以在上面编译成功。在以后的学习中会加大努力加强自己的编程能力。 实验课程名称: 操作系统 实验项目名称 SHELL编程和后台批处理 实验成绩 实验者 李安福 专业班级 软件sy1201 组别 同组者 实验日期 第一部分:实验分析与设计(可加页) 三、 实验内容描述(问题域描述) SHELL编程和后台批处理 要求:掌握Linux系统的SHELL编程方法和后台批处理方法。 内容: (1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。 (2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容,然后输出到屏幕。 四、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) C程序文件如下 #include<stdio.h> int main() { int a, b; printf("shu ru liang ge shu:\n"); scanf("%d,%d",&a,&b); if(a>b) { b = a; } printf("max = %d\n",b); return 0; } test.sh文件如下 #!/bin/bash gcc -o t chmod u+x test.out ./test.out 三、主要仪器设备及耗材 linux操作系统 Vi编辑器 Gcc Bash 第二部分:实验调试与结果分析(可加页) 四、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 调试过程中未发现任何问题 五、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 六、 实验小结、建议及体会 在实验中,我学习了Linux中的shell编程语法。其实在shell中可以实现许多用C语言或者其他语言编写的程序功能,并且用shell更加快捷,因为它无需编译,是解释性语言。此次实验让我对Linux下的编程有了进一步的了解。 实验课程名称: 操作系统 实验项目名称 Linux系统调用(time) 实验成绩 实验者 李安福 专业班级 软件sy1201 组别 同组者 实验日期 第一部分:实验分析与设计(可加页) 一、 实验内容描述(问题域描述) Linux系统调用使用方法。 要求:掌握Linux系统调用使用方法。 内容:学习使用time, ctime, sleep, exit等Linux系统调用使用方法。 二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include<stdio.h> #include<unistd.h> #include<time.h> #include<iostream> using namespace std; int main() { while(1) { char timebuf[100]; time_t t; time(&t); strftime(timebuf, sizeof(timebuf),"%Y 年 %m 月 %d 日 %H: %M: %S",localtime(&t)); cout<<timebuf<<endl; fflush(stdout); sleep(1); } return 0; } 三、主要仪器设备及耗材 Ubuntu操作系统 Vi编辑器 G++编译器 第二部分:实验调试与结果分析(可加页) 一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) ctime(将时间和日期以字符串格式表示) 表头文件 #include<time.h> 定义函数 char *ctime(const time_t *timep); 函数说明 ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“Wed Jun 30 21 :49 :08 1993\n”。若再调用相关的时间日期函数,此字符串可能会被破坏。 返回值 返回一字符串表示目前当地的时间日期。 time(取得目前的时间) 表头文件 #include<time.h> 定义函数 time_t time(time_t *t); 函数说明 此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t 并非空指针的话,此函数也会将返回值存到t指针所指的内存。 返回值 成功则返回秒数,失败则返回((time_t)-1)值,错误原因存于errno中。 sleep(让进程暂停执行一段时间) 表头文件 #include<unistd.h> 定义函数 unsigned int sleep(unsigned int seconds); 函数说明 sleep()会令目前的进程暂停,直到达到参数seconds 所指定的时间,或是被信号所中断。 返回值 若进程暂停到参数seconds 所指定的时间则返回0,若有信号中断则返回剩余秒数。 二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 三、 实验小结、建议及体会 通过这次实验学习使用time, ctime, sleep, exit等Linux系统调用使用方法,加深了对Linux下编程的理解,在以后会多多了解Linux系统调用的更多方法,并多加练习。 实验课程名称: 操作系统 实验项目名称 Linux进程控制(fork) 实验成绩 实验者 李安福 专业班级 软件sy1201 组别 同组者 实验日期 第一部分:实验分析与设计(可加页) 一、 实验内容描述(问题域描述) Linux系统进程控制 要求:掌握Linux系统中进程控制原语fork的使用方法。 内容:设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。 二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include<stdlib.h> #include<unistd.h> #include<iostream> using namespace std; int main() { cout<<"Parent process id:"<<getpid()<<endl; pid_t iRet = fork(); if(iRet<0) cout<<"Create child process fail!"<<endl; else if(iRet == 0) { cout<<"I'm child process, and id is"<<getpid()<<"ppid is:"<<getppid()<<endl; } else { cout<<"Create child process success child"<<"the id is:"<<iRet<<endl; } return 0; } 三、主要仪器设备及耗材 Ubuntu操作体统 Vi编辑器 G++编译 第二部分:实验调试与结果分析(可加页) 一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) (1)【进程的创建】 编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。 【源程序】: #include<stdio.h> int main() { int p1, p2; while ((p1 = fork()) == -1); if (p1 == 0) //第一子进程 putchar('b'); else { while ((p2 = fork()) == -1); if (p2 == 0) putchar('c'); //第二子进程 else putchar('a'); //父进程 } return 0; } 运行多次:主要输出有bca,偶尔输出cab和cba,abc,bac,acb…会有如此多种不同输出,主要是因为fork()生成的子进程和父进程是并行运行的,所以先运行哪个进程是由系统的调度算法决定的,ubuntu9.04很大概率系统会先输出bca是因为ubuntu 9.04在fork()运行之后很大概率先运行子进程,再运行父进程。当然也有可能先运行父进程后子进程,再加上进程间的并发性;导致了输出的多样性。输出次序带有随机性。 (2)【进程的控制】 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话。 【源代码】: #include<stdio.h> int main() { int p1, p2; while ((p1 = fork()) == -1); if (p1 == 0) ;第一个子进程 printf("Child1 is running!\n"); else { while ((p2 = fork()) == -1); if (p2 == 0) ;第二子进程 printf("Child2 is running!\n"); else ;父进程 printf("Father is running!\n"); } return 0; } 运行多次,大部分运行后输出: Child1 is running! Child2 is running! Father is running! 少数输出: Child2 is running! Child1 is running! Father is running! Father is running! Child1 is running! Child2 is running! …… 理论上是有6种不同的结果,还是由于系统的调度算法,程序的并发性影响;但由于函数printf( )在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。所以与打印单字符的结果相同。 (3)【进程信号处理】 编写程序使用系统调用 fork()创建两个子进程,再用系统调用 singal()让父进程捕捉键盘上来的中断信号(即按 Ctrl+c 键);当捕捉到中断信号后,父进程用系统调用 Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止: Child Process11 is Killed by Parent! Child Process12 is Killed by Parent! 父进程等待两个子进程终止后,输出如下的信息后终止: Parent Process is Killed! 【源代码】: #include<stdio.h> #include<signal.h> int wait_mark; void waiting() { while (wait_mark == 1); } void stop() { wait_mark = 0; } int main() { int p1, p2; while ((p1 = fork()) == -1); if (p1 == 0) ;第一个子进程 { wait_mark = 1; signal(SIGINT, SIG_IGN); signal(16, stop); waiting(); lockf(1, 1, 0); ;加锁 printf("Child Process11 is Killed by Parent!\n"); lockf(1, 0, 0); ;解锁 exit(0); } Else { while ((p2 = fork()) == -1); if (p2 == 0) ;第二个子进程 { wait_mark = 1; signal(SIGINT, SIG_IGN); signal(17, stop); waiting(); lockf(1, 1, 0); ;加锁 printf("Child Process12 is Killed by Parent!\n"); lockf(1, 0, 0); ;解锁 exit(0); } Else ;父进程 { wait_mark = 1; signal(SIGINT, stop); waiting(); kill(p1, 16); kill(p2, 17); wait(0); wait(0); printf("Parent Process is Killed!\n"); exit(0); } } } 输出结果有两种: Child Processll is Killed by Parent! Child Processl2 is Killed by Parent! Parent process is Killed! Child Processl2 is Killed by Parent! Child Processll is Killed by Parent! Parent process is Killed! 二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等) 三、 实验小结、建议及体会 在本实验中,我学习了在Linux中利用fork来创建子进程的过程。加深了对进程、子进程、进程号等概念的直观认识。通过实验掌握Linux系统中进程控制原语fork的使用方法。同时发现自己对Linux有很多的不熟悉的地方,在以后会进一步加强。 Welcome To Download !!! 欢迎您的下载,资料仅供参考! 精品资料- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文