《操作系统实验报告(共19页).doc》由会员分享,可在线阅读,更多相关《操作系统实验报告(共19页).doc(19页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上学生学号25实验课成绩武汉理工大学学 生 实 验 报 告 书实验课程名称 操作系统 开 课 学 院 计算机科学与技术学院 指导老师姓名 刘军 学 生 姓 名 李安福 学生专业班级 软件sy1201 2014 2015 学年 第 一 学期操作系统实验教学大纲课程编号:课程名称:操作系统/Operating System实验总学时数:12学时适应专业:计算机科学与技术、软件工程承担实验室:计算机科学与技术学院实验中心一、实验教学的目的和任务通过实验掌握Linux系统下常用键盘命令、系统调用、SHELL编程、后台批处理和C程序开发调试手段等基本用法。二、实验项目及学时分配序
2、号实验项目名称实验学时实验类型开出要求01Linux键盘命令和vi2设计必开02Linux下C编程2设计必开03SHELL编程和后台批处理2设计必开04Linux系统调用(time)2设计必开05Linux进程控制(fork)4设计必开三、每项实验的内容和要求:1、 Linux键盘命令和vi要求:掌握Linux系统键盘命令的使用方法。内容:见教材p4, p9, p40, p49-53, p89, p1002、 Linux下的C编程要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输
3、出语句。3、 SHELL编程和后台批处理要求:掌握Linux系统的SHELL编程方法和后台批处理方法。内容: (1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。(2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容,然后输出到屏幕。 4、Linux系统调用使用方法。要求:掌握Linux系统调用使用方法。内容:学习使用time, ctime, sleep, exit等Linux系统调用使用方法。5、Linux系
4、统进程控制要求:掌握Linux系统中进程控制原语fork的使用方法。内容:设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。以上每项实验均要求每人一个Linux联机终端独立完成。四、实验改革与特色完成多用户分时系统Linux下的基本使用级观察级实验。五、教材及实验指导书教材:孟静,操作系统教程题解与实验指导, 高等教育出版社 2002.6 执笔:杨铭熙 审阅:陈天煌 日期2014年12月6审定:徐东平 日期2014年12月6实验课程名称: 操作系统 实验项目名称Linux键盘命令和vi实验成绩实验者李安福专业班级软件sy1201组别同组者实验日期第一部分:实验分析与设计(
5、可加页)一、 实验内容描述(问题域描述)Linux键盘命令和vi要求:掌握Linux系统键盘命令的使用方法。二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)进入vi的命令:vifilename: 打开或新建文件,并将光标置于第一行首vi+nfilename:打开文件,并将光标置于第n行首 vi+filename:打开文件,并将光标置于最后一行首 vi+/patternfilename:打开文件,并将光标置于第一个与pattern匹配的串处 vi-rfilename:在上次正用vi编辑时发生系统崩溃,恢复filename vifilename.fi
6、lename:打开多个文件,依次进行编辑 键盘命令:1.cat命令、more命令、less命令:cat命令是将单个或多个文件的内容显示到屏幕上;more命令和less命令与cat命令相似,以分页形式显示文件内容。2. ls命令:将某一个目录或文件的内容显示出来3. cp命令:文件或目录的复制4. rm命令:删除文件或目录5. mv命令:将文件从一个位置移动到另一个位置6. mkdir命令:创建目录7. rmdir:删除空目录三、主要仪器设备及耗材安装Linux系统的计算机一台。第二部分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题
7、等)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的初始模式,可以使用“上下左右”按键来移动光标,您可以使用“删除字符”或“删除整行”来处理
8、文档。在编辑模式或指令列模式中按【ESC】键可换回命令模式。(2)编辑模式:在命令模式中按下【i, I, o, O, a, A, r, R】等字母之后才会进入编辑模式。按下上述的字母时,在画面的左下方会出现【 -INSERT- 或 -插入- 】的字样,才可以做文字数据输入。 (3)指令列模式:在命令模式当中,输入 【:】或【 / 】就可以将光标移动到最底下那一行,进入指令列模式。在这个模式当中,可以存盘、结束vi 、显示行号等操作。 二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)Free 显示系统中已用空闲内存数量 top:查看系统进程情况三、 实验小结、建
9、议及体会vi编辑器是Linux系统下标准的编辑器,它的强大不逊色于任何文本编辑器。初次实验对Linux常用命令及编辑器的使用操作都不熟悉,但对Linux很好奇。通过实验,学会了如何在现有操作系统的基础上再打开一个操作系统,并对新的窗口进行操作。开始进入的界面有点像DOS环境下的界面,接着可以输入一些语句命令来创建和查看文件、查看根目录及根目录下的内容,以及如何进入文件夹、如何编译并推出编译等。学会vi有助于我们学习Linux。实验课程名称: 操作系统 实验项目名称Linux下C编程实验成绩实验者李安福专业班级软件sy1201组别同组者实验日期第一部分:实验分析与设计(可加页)一、 实验内容描述
10、(问题域描述) Linux下的C编程要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述) #include intmain() inta,b; printf(shurulianggeshu:n); scanf(%d,%d,&a,&b); if(ab) b=a; printf(max=%dn,b); return0; 三、主要仪器设备及耗材Linux操作系统Vi编辑器gcc编译第二
11、部分:实验调试与结果分析(可加页)一、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)二、 实验小结、建议及体会 通过这次实验vi编辑器有了进一步的应用,同时学会了在Linux进行简单的C语言编程,掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。加深了对linux的印象,linux的兼容性很强。C/C+仍旧可以在上面编译成功。在以后的学习中会加大努力加强自己的编程能力。实验课程名称: 操作系统 实验项目名称SHELL编程和后台批处理实验成绩实验者李安福专业班级软件sy1201组别同组者实验日期第一部分:实验分析与设计(可加页)三、 实验内容描述(问题
12、域描述)SHELL编程和后台批处理要求:掌握Linux系统的SHELL编程方法和后台批处理方法。内容: (1) 将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。(2) 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情况。 (3) 修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容,然后输出到屏幕。四、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)C程序文件如下#include intmain() inta,b; printf(shur
13、ulianggeshu:n); scanf(%d,%d,&a,&b); if(ab) b=a; printf(max=%dn,b); return0; test.sh文件如下#!/bin/bashgcc -o tchmod u+x test.out./test.out三、主要仪器设备及耗材linux操作系统Vi编辑器GccBash第二部分:实验调试与结果分析(可加页)四、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等) 调试过程中未发现任何问题 五、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)六、 实验小结、建议及体会在实验中,
14、我学习了Linux中的shell编程语法。其实在shell中可以实现许多用C语言或者其他语言编写的程序功能,并且用shell更加快捷,因为它无需编译,是解释性语言。此次实验让我对Linux下的编程有了进一步的了解。实验课程名称: 操作系统 实验项目名称Linux系统调用(time)实验成绩实验者李安福专业班级软件sy1201组别同组者实验日期第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)Linux系统调用使用方法。要求:掌握Linux系统调用使用方法。内容:学习使用time, ctime, sleep, exit等Linux系统调用使用方法。二、 实验基本原理与设计(包括实
15、验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#include#include#include#includeusing namespace std;int main()while(1) char timebuf100; time_t t; time(&t); strftime(timebuf, sizeof(timebuf),%Y 年 %m 月 %d 日 %H: %M: %S,localtime(&t); couttimebufendl; fflush(stdout); sleep(1);return 0;三、主要仪器设备及耗材Ubuntu操作系统Vi编辑器G+编译器第二部
16、分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)ctime(将时间和日期以字符串格式表示)表头文件#include定义函数char*ctime(consttime_t*timep);函数说明ctime()将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果以字符串形态返回。此函数已经由时区转换成当地时间,字符串格式为“WedJun3021:49:081993n”。若再调用相关的时间日期函数,此字符串可能会被破坏。返回值返回一字符串表示目前当地的时间日期。time(取得目前的时间)表头
17、文件#include定义函数time_ttime(time_t*t);函数说明此函数会返回从公元1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数。如果t并非空指针的话,此函数也会将返回值存到t指针所指的内存。返回值成功则返回秒数,失败则返回(time_t)-1)值,错误原因存于errno中。sleep(让进程暂停执行一段时间)表头文件#include定义函数unsignedintsleep(unsignedintseconds);函数说明sleep()会令目前的进程暂停,直到达到参数seconds所指定的时间,或是被信号所中断。返回值若进程暂停到参数seconds所指定的时间
18、则返回0,若有信号中断则返回剩余秒数。 二、 实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)三、 实验小结、建议及体会通过这次实验学习使用time, ctime, sleep, exit等Linux系统调用使用方法,加深了对Linux下编程的理解,在以后会多多了解Linux系统调用的更多方法,并多加练习。实验课程名称: 操作系统 实验项目名称Linux进程控制(fork)实验成绩实验者李安福专业班级软件sy1201组别同组者实验日期第一部分:实验分析与设计(可加页)一、 实验内容描述(问题域描述)Linux系统进程控制要求:掌握Linux系统中进程控制原语fork
19、的使用方法。内容:设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。二、 实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#include#include#includeusing namespace std;int main()coutParent process id:getpid()endl;pid_t iRet = fork();if(iRet0) coutCreate child process fail!endl;else if(iRet = 0) coutIm child process, and id isgetp
20、id()ppid is:getppid()endl;else coutCreate child process success childthe id is:iRetendl;return 0;三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器G+编译第二部分:实验调试与结果分析(可加页)一、 调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)【进程的创建】 编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符“b”和字符“c”。
21、 【源程序】:#includeint 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很大概率
22、系统会先输出bca是因为ubuntu 9.04在fork()运行之后很大概率先运行子进程,再运行父进程。当然也有可能先运行父进程后子进程,再加上进程间的并发性;导致了输出的多样性。输出次序带有随机性。(2)【进程的控制】 修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句话。【源代码】:#includeint main() int p1, p2; while (p1 = fork() = -1); if (p1 = 0) ;第一个子进程 printf(Child1 is running!n); else while (p2 = fork() = -1); if (p2 = 0) ;第
23、二子进程 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种不同的结果,还是由于系统的调度算法,程序的并发性影响;但由于
24、函数printf( )在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。所以与打印单字符的结果相同。 (3)【进程信号处理】 编写程序使用系统调用 fork()创建两个子进程,再用系统调用 singal()让父进程捕捉键盘上来的中断信号(即按 Ctrl+c 键);当捕捉到中断信号后,父进程用系统调用 Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:Child Process11 is Killed by Parent!Child Process12 is Killed by Parent!父进程等待两个子进程终止后,输出如下的信息后终止:Parent Pr
25、ocess is Killed!【源代码】:#include#includeint 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 Ki
26、lled 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(SIGI
27、NT, 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有很多的不熟悉的地方,在以后会进一步加强。专心-专注-专业
限制150内