操作系统实验报告finalEDI汇总_第1页
操作系统实验报告finalEDI汇总_第2页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2012201220132013 学年 第 一 学期学生学号0121010680225实验课成绩武汉理工大学学生实验报告书操作系统计算机科学与技术学院实验课程名称开课学院 指导老师姓名 学生姓名 学生专业班级2012201220132013 学年 第 一 学期刘军姬琪软件工程 SYSY10011001实验课程名称:操作系统实验项目名称Linux 键盘命令和 vi实验成绩实验者姬琪专业班级软件工程SY1001组别同组者实验日期年 月曰第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux 键盘命令和 vi1要求:掌握 Linux 系统键盘命令的使用方法1.使用mkdir命令建

2、立一个子目录subdir2.使用cat或more命令查看filel文件的内容。3.将date命令的用法附加到文件filel的后面:4.禾U用Is -I filel命令列出文件filel的较详细的信息。5.利用rm fa命令将文件fa删除。再利用ls -l命令查看工作目录内容。6.运行mv file1 file_a命令,然后用ls命令查看这两个文件是否都还在工作目 录中2.vi 操作1. 了解 vi 编辑器的作用和功能2. 熟悉 vi 的操作环境和切换方法3. 掌握 vi 操作的方式(几个常用键)4. 了解常用的快捷键二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻

3、辑或 者算法描述)VI编辑器的常见命令:vi file name :打开或新建文件,并将光标置于第一行首vi +n file name:打开文件,并将光标置于第 n 行首vi + file name:打开文件,并将光标置于最后一行首vi +/pattern file name:打开文件,并将光标置于第一个与patter n 匹配的串处vi -r file name:在上次正用 vi 编辑时发生系统崩溃,恢复 file namevi file name.file name:打开多个文件,依次进行编辑键盘命令:1.cat, more , less 命令2.Is 命令3.cp 命令4.rm 命令5.

4、mv 命令VI 命令:1. vi 进入 vi 缓冲区2. vi file1 :进入文件 file13.退出 vi三、主要仪器设备及耗材Ubuntu 操作体统Vi 编辑器第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)1使用mkdir命令建立一个子目录subdir$ mkdir subdir$2使用cat或more命令查看filel文件的内容。$ cat file1Sat Mar 17 21:25:14 CST 2012$3将date命令的用法附加到文件file1的后面:man date file1$ man date fi

5、le1$4利用ls -l file1命令列出文件file1的较详细的信息。$ ls -l file1-rw-rw-r- 1 ml2010 ml2010 5690 Mar 17 21:28 file1$5利用rm fa命令将文件fa删除。再利用ls -l命令查看工作目录内容。$ rm fa$ ls -ltotal 12-rw-rw-r- 1 ml2010 ml2010 5690 Mar 17 21:28 file1$6运行mv file1 file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中?ml2010tan subdir$ mv file1 file_aml2010tan su

6、bdir$ lsfile_aml2010tan subdir$显然,只有file_a在工作目录中,而file1不在工作目录中vi共分为三种模式(1) 命令模式:命令模式为vi的初始模式,可以使用“上下左右”按键来移动光标,您可以使用“删除字符”或“删除整行”来处理文档。在编辑模式或指令列模式中按【ESQ键可换回命令模式。(2) 编辑模式:在命令模式中按下【i, I, o, O, a, A, r, R】等字母之后才会进入编辑模式。按下上述的字母时,在画面的左下方会出现【-INSERT-或-插入-】的字样,才可以做文字数据输入。(3)指令列模式:在命令模式当中,输入【:】或【/】就可以将光标移动到

7、最底下那一行,进入指令列模式。在这个模式当中,可以存盘、结束vi、显示行号等操作。二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)Rm:删除文件或目录orizonhonzondesktop:文件巳 編辑(E)查看也)终端(工)帮助(旦)horizongho rizon- desktop:rm file rm:无法删陳没有该文件或目录horizon(3hori;on-desktop:rm DesFilehorizon(?horizon-desktop|三、实验小结、建议及体会Linux 对比 Windows 有些不同需要时间去适应。 通过这次实验对 Linux 操

8、作系 统有了进一步的了解。初步掌握了一些 Linux 系统常用的命令。通过这仅一个周时间 的学习,我们只是了解了lin ux的一些最基本知识,我会在后的学习中不断完善和加以扩充lin ux知识的学习。totalusedfreesharedbufferscachedMem:50923244390065332813984238244-/+ buffers/ca匚h:191672317560Swap:134138849281336460文件任)编辑(E)查看也)终端任)帮助(旦horizon(ahorizon-desktop:*5 freehorizon(ahDrizon-desktop:5Free

9、显示系统中已用空闲内存数量实验课程名称:操作系统实验者姬琪专业班级软件SY1001组别同组者实验日期年 月曰第一部分:实验分析与设计(可加页)、实验内容描述(问题域描述)Linux 下的 C 编程要求:掌握 vi 编辑器的使用方法;掌握 Linux 下 C 程序的源程序编辑方法; 编译、连接和运行方法。内容:设计、编辑、编译、连接以及运行一个C 程序,其中包含键盘输入和屏幕输出语句。1.掌握 vi 编辑器的使用方法;2掌握gcc的使用格式、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述)#in cludeusing n amespace std;in

10、t mai n()int beg in, end;int temp = 0;cout begi nend;if(begi nend)temp = beg in;beg in = end; end = temp;for(i nt i=beg in; i=e nd; i+)coutvvivv;实验项目名称Linux 下 C 编程实验成绩coute ndl;实验课程名称:操作系统实验者姬琪专业班级软件SY1001组别同组者实验日期年 月曰return 0;三、主要仪器设备及耗材Ubuntu 操作体统Vi 编辑器G+编译第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录

11、,实验现象记录,实验过程发现的问题等)(1) .先用 vi JamesJi.c 建立文件(2).在 vi 的插入界面输入#include int main(v oid)pri ntf(JamesJi.gcc!r n);return 0;(3) . 编译生成 JamesJi 文件:gcc -o JamesJi JamesJi.c(4) .运行 JamesJi 文件:./JamesJi二、实验小结、建议及体会通过这次实验 vi 编辑器有了进一步的应用,同时学会了在Linux 进行简单的 C 语言编程,掌握 Linux 下 C 程序的源程序编辑方法;编译、连接和运行方法。在以后 的学习中会加大努力加

12、强自己的编程能力。加深了对 linux 的印象,linux 的兼容性很强。C/C+仍旧可以在上面编译成功。实验课程名称:操作系统实验者姬琪专业班级软件SY1001组别同组者三、实验内容描述(问题域描述)SHELL 编程和后台批处理要求:掌握 Linux 系统的 SHELL 编程方法和后台批处理方法。内容:(1)将编译、连接以及运行上述 C 程序各步骤用 SHELL 程序批处理 完成,前台运行。(2) 将上面 SHELLL 程序后台运行。观察原 C 程序运行时输入输出 情况。(3) 修改调试上面 SHELL 程序和 C 程序, 使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互

13、式输入替代原键盘 输入内容,然后输出到屏幕。四、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述)test.cpp文件如下:#in cludeusing n amespace std;int mai n()int i, j;int a1010 = 0;a00 = 1;for(i=1; i=9; i+)for(j=0; j=i; j+) if(j=0) | (i=j) aij = 1;else aij = ai-1j-1 + ai-1j;for(i=0; i=9; i+)实验项目名称SHELL 编程和后台批处理实验成绩实验日期年 月曰第一部分:实验分析与

14、设计(可加页)for(j=0; jv=i; j+) cout aij;coute ndl;return 0;test.sh文件如下#!/bi n/bash#Program:# This program is used to compile and run a file of cpp #History#2011/06/01g+ -o test.out test.cppchmod u+x test.out./test.out三、主要仪器设备及耗材Ubuntu操作系统Vi编辑器第二部分:实验调试与结果分析(可加页)四、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)调试

15、过程中未发现任何问题五、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)horizonhorrzon-desktop:文件(臼编ts(E)查看也)终端任)帮助(旦)horizonhorizondesktopsh testsh11 112 113 3 11 4 6 4 11 5 10 19 5 11 6 15 29 15 6 11 7 21 35 35 21 7 11 B 28 56 76 5& 28 8 11 9 36 84 126 126 84 36 9 1horizon(ahorizon-desktop:|六、实验小结、建议及体会通过这次实验熟悉了she

16、ll编程,对Linux下的编程有了进一步的了解。 也对Linux系统 终端方式使用的编辑器vi有进一步的认识,如何使用命令来打开文件以及在编辑器vi里面编 写内容等,。总之,通过这次实验,对课本上的知识有了进一步的理解以及巩固。i实验课程名称:操作系统实验项目名称Linux 系统调用(time)实验成绩实验者姬琪专业班级软件SY1001组别同组者实验日期年 月曰第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)学习 Linux 内核的系统调用,理解、掌握 Linux 系统调用的实现框架、用户界 面、参数传递、进入/返回过程。阅读 Linux 内核源代码,通过添加一个简单的系 统调

17、用实验,进一步理解 Linux 操作系统处理系统调用的统一流程。Linux 系统调用使用方法。要求:掌握 Linux 系统调用使用方法。内容:学习使用 time, ctime, sleep, exit 等 Linux 系统调用使用方法。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#i nclude#in clude#in clude#in cludeusing n amespace std;int mai n()while(1)char timebuf100;time_t t;time(&t);strftime(timebuf, siz

18、eof(timebuf),%Y 年 %m 月 %d 日 %H: %M:%S,localtime(&t);coutvvtimebufvve ndl;fflush(stdout);isleep(1);return 0;在现有的系统中添加一个不用传递参数的系统调用。这个系统调用的功能是实现遍历进程。实验主要内容:添加系统调用的名字利用标准 C 库进行包装添加系统调用号在系统调用表中添加相应表项sys_mysyscall 的实现三、主要仪器设备及耗材Ubuntu操作系统Vi编辑器G+编译器第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程

19、发现的问题等)【1】下载并部署内核源代码此步已经在实验 2 中完成。【2】添加系统调用号系统调用号在文件 unistd.h 里面定义。这个文件在 ubuntulO.IO 下位于/usr/include/asm/unistd_32.h。现在我们在 unistd.h 中添加我们的系统调用号:_NR_mysyscall,如下所示:231 #defi ne_NR_mysyscall223/*添加或修改为mysyscall */*注意:不同版本的内核系统调用号不一样,您可以根据内核版本不同对系统调用号进行修改*/添加系统调用号之后, 系统才能根据这个号, 作为索引, 去找 syscall_table中的

20、相应表项。【3】在系统调用表中添加或修改相应表项我们知道,系统调用处理程序(system_call )会根据 eax 中的索引 到系统调用表(sys_call_table )中寻找相应的表项。所以,我们必须在那里添加 我们自己的一个值。在 2.6.36 的内核下,只需要修改arch/x86/kernel/syscall_table_32.S。注意,修改该文件首先要切换至 U root 权限,此外使用 gedit 打开该文件时注意它的扩展名是大写的S。233ong sys_mysyscall/*在对应的位置修改或添加*/234ong sys_gettid235.lo ngsys_readahea

21、d/* 225 */到现在为止,系统已经能够正确地找到并且调用sys_mysyscall。剩下的就只有一件事情,那就是 sys_mysyscall 的实现。【4】sys_mysyscall 的实现我们把一小段程序添加在 kernel/sys.c 里面。在这里,我们并没有 在kernel 目录下另外添加自己的一个文件,这样做的目的是为了简单,而且不用 修改makefile,省去不必要的麻烦。mysyscall 系统调用实现遍历系统中的所有的进程, 并打印每个进 程的进程名字,进程标识符,进程的状态和父进程的标识符。进程名字、pid、进程状态、父进程的指针在 task-struct 结构的字 段中

22、。在内核中使用 printk 函数打印有关变量的值。 遍历进程可以使用 next_task 宏, init_task 进程为 0 号进程。asmli nkage int sys_mysyscall(void) /在此处加入遍历进程的代码;return 0;【5】重新编译内核一定要重新编译内核。内核编译完成后,重新启动编译后的新内核。【6】编写用户态程序要测试新添加的系统调用,需要编写一个用户态测试程序(test.c) 调用mysyscall 系统调用。mysyscall 系统调用中 printk 函数输出的信息在 /var/log/message 文件中。也可以在 shell 下用 dmesg

23、 命令查看。用户态测试程序可以用如下方法实现#in clude # in clude #defi ne _NR_ mysyscall 223int mai n()syscall(_NR_mysyscall);/*或syscall(223) */在此加入在屏幕输出每个进程相关信息的代码;用 gcc 编译源程序# gcc o test test.c运行程序# ./test用 shell 命令查看遍历进程输出的信息#dmesg、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等).long sys getdents64 /* 220 */.long sys_fcntl64lo

24、ng sysni syscall /* reserved for TUX */Aong sysmysyscall.long sys gettidAong sysreadahead严225 */.long syssetxattr.Long syslsetxattr1 1D D sysxxlsysxxl/添扭一个系址调用asmlinkage int sysmysyscall(void) struct taskstruct *task=&init_task;dop rintk( %st%dnidt%dnBftask-com, task-pid,staask-parent-pid);while

25、(task=next_task(task)!=&init_task);return Q;)1三、实验小结、建议及体会这次实验有点难度,但是通过查找资料和与老师的交流之后还是顺利完成了实 验,希望以后相关能力能够得到加强。k-实验课程名称:操作系统实验项目名称Linux 进程控制(fork)实验成绩实验者姬琪专业班级软件SY1001组别同组者实验日期年 月曰第一部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux 系统进程控制 要求:掌握 Linux 系统中进程控制原语 fork 的使用方法。内容:设计 C 程序,其中主进程创建一个子进程,以特定次序各自执行规 定操作后

26、退出。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或 者算法描述)#i nclude#in clude#in cludeusing n amespace std;int mai n() coutPare nt process id:getpid()e ndl; pid_t iRet = fork();if(iRetvO)coutCreate child process fail!e ndl;else if(iRet = 0) coutvv Imchild process, and id isgetpid()ppidis:vvgetppid()ve ndl;

27、elsecoutCreate child process success childthe id is:iRete ndl; return 0;三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器G+编译第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)(1)【进程的创建】 编写一段程序,使用系统调用fork ()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“ a”;子进程分别显示字符“ b”和字符“ c ”,试观察记录屏幕上的显 示结果,并分析原因。

28、【源程序】:#in cludeint mai n()in t p1, p2;while (p1 = fork() = -1);if (p1 = 0)/第一子进程putchar(b);else while (p2 = fork() = -1);if (p2 = 0)putchar(c);/第二子进程elseputchar(a);/父进程return 0;运行多次:主要输出有 bca,偶尔输出 cab 和 cba,abc,bac,acb会有如此多种不同输出,主要是因为 fork()生成的子进程和父进程是并行运行 的,所以先运行哪个进程是由系统的调度算法决定的,ubuntu9.04 很大概率系统会先

29、输出 bca 是因为 ubuntu 9.04 在 fork ()运行之后很大概率先运行子进程, 再运行父进程。当然也有可能先运行父进程后子进程,再加上进程间的并发性;导致了输出的多样性。输出次序带有随机性。【进程的控制】修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句 话,在观察程序执行时屏幕上出现的现象,并分析原因。【源代码】:#in cludeint mai n() in t p1, p2;while (p1 = fork() = -1);if (p1 = 0);第一个子进程prin tf(Child1 is runnin g!n);else while (p2 = fork(

30、) = -1);if (p2 = 0);第二子进程prin tf(Child2 is runnin g!n);else;父进程prin tf(Father is runnin g!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 种不同的结果,还是

31、由于系统的调度算法,程序的并发性影响;但由 于函数 printf()在输出字符串时不会被中断,因此,字符串内部字符顺序输出不 变。所以与打印单字符的结果相同。创建进程,使用 exec 函数族使子进程执行新的目标程序,观察并分析 出现的现象。【源代码】:#in clude #in clude int mai n()prin tf(=system call execl test ing =n);execlp(date,date,O);prin tf(exec error !n);return 0;输出:=system call execl test ing =2009年12月04日星期五21:35

32、:18 CST输出结果分析:execlp 是一种 exec 函数,当进程调用一种 exec 函数时,用指定的目标进程 更好进程的执行映像。Exec 调用成功后,调用进程的正文段被指定的文件的正文 段所覆盖。调用成功时,exec 不返回,从而不执行 exec 以后的所有语句,所以本 例就只有输出“ 2009 年 12 月 04 日星期五 21:35:18 CST 的情况。如果调用失 败,返回-1,执行剩余指令。(3)【进程信号处理】编写程序使用系统调用 fork()创建两个子进程,再用系统调用 singal()让 父进程捕捉键盘上来的中断信号(即按Ctrl+c 键);当捕捉到中断信号后,父进程

33、用系统调用Kill() 向两个子进程发出信号,子进程捕捉到信号后分别输出下列信 息后终止:Child Process11 is Killed by Pare nt!Child Process12 is Killed by Pare nt!父进程等待两个子进程终止后,输出如下的信息后终止:Pare nt Process is Killed!【源代码】:#in clude#in cludeint wait_mark;void wait in g()while (wait_mark = 1);void stop()wait_mark = 0;int mai n()in t p1, p2;while (p1 = fork() = -1);if (p1 = 0);第一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论