武汉理工操作系统实验报告_第1页
武汉理工操作系统实验报告_第2页
武汉理工操作系统实验报告_第3页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、学生学号25实验课成绩武汉理工大学实验课程名称 开课学院 指导老师姓名 学生姓名学生实验报告书操作系统计算机科学与技术学院刘军李帅学生专业班级软件11012013 2014 学年 第 一 学期实验课程名称:操作系统实验项目名称Linux键盘命令和vi实验成绩实验者李帅专业班级软件工1101组别同组者实验日期第部分:实验分析与设计(可加页)一、实验内容描述(问题域描述)Linux键盘命令和vi1.要求:掌握Linux系统键盘命令的使用方法1. 使用 mkdir命令建立一个子目录subdir2. 使用cat或more命令查看file1文件的内容。3. 将date命令的用法附加到文件file1的后面

2、:4. 利用Is -l file1命令列出文件file1的较详细的信息。5. 利用rm fa命令将文件fa删除。再利用ls -l命令查看工作目录内容。6. 运行mv file1 file a 命令,然后用ls命令查看这两个文件是否都还在工作目录中2.vi操作1. 了解Vi编辑器的作用和功能2熟悉vi的操作环境和切换方法3掌握vi操作的方式(几个常用键)4.了解常用的快捷键、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)VI编辑器的常见命令:vi file name :打开或新建文件,并将光标置于第一行首vi +n file name:打开文件,并将光

3、标置于第n行首vi + file name:打开文件,并将光标置于最后一行首vi +/pattern file name :打开文件,并将光标置于第一个与 patter n匹配的串处vi -r file name :在上次正用vi编辑时发生系统崩溃,恢复file namevi filename.filename :打开多个文件,依次进行编辑键盘命令:1. cat, more, less 命令2. Is命令3. cp命令4. rm命令5. mv命令VI命令:1. vi进入vi缓冲区2. vi filel:进入文件 filel3. 退出vi三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器第二部

4、分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)1 使用 mkdir命令建立一个子目录subdir2 使用cat或more命令查看filel文件的内容。3 将date命令的用法附加到文件file1的后面:4 利用ls -l file1命令列出文件file1的较详细的信息。5利用rm fa命令将文件fa删除。再利用ls -l命令查看工作目录内容。6运行mv file1 file_a 命令,然后用ls命令查看这两个文件是否都还在工作目录中?显然,只有file_a在工作目录中,而file1不在工作目录中二、实验结果及分析(包括结果描述

5、、实验现象分析、影响因素讨论、综合分析和结论等)Free显示系统中已用空闲内存数量hori2onhoriz on-d esktop:Rm :删除文件或目录onzon文件(巳 编辑(E)查看世)终端任)帮助(凶nonzon-dop文件(日iMts(E)查看但)総端口)帮肋也)hori2on(3horizon-desktopfreetotalusedfreesharedbuffe rscachedMem;59923244399065332139-84238244/+ buffers/cache:1916723175605wap:134138843281336460horizon(ahorizon-

6、 desktop :-$hori2onhori2on-desktop:-$ rm file rm:无法删除没有该文件或目录horizon(3harizon-desktop:rm DesFilehorizon(?horizon-desktop:-$ |三、实验小结、建议及体会Linux对比Windows有些不同需要时间去适应。通过这次实验对Linux操作系 统有了进一步的了解。初步掌握了一些Linux系统常用的命令。通过这仅一个周时间 的学习,我们只是了解了linux的一些最基本知识,我会在后的学习中不断完善和加以扩充linux知识的学习。实验课程名称:操作系统实验项目名称Linux下C编程实验

7、成绩实验者李帅专业班级软件1101组别同组者实验日期第一部分:实验分析与设计 (可加页)一、实验内容描述(问题域描述)Linux下的C编程要求:掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法; 编译、连接和运行方法。内容:设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入 和屏幕输出语句。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#in clude<iostream>using n amespace std;int mai n()int beg in, end;int temp = 0;cout<&

8、lt;"Please en ter two nu mber:"«e ndl;cin> >begi n>>end;if(begi n>end)temp = beg in;beg in = end;end = temp;for(i nt i=beg in; i<=e nd; i+)coutvvivv""cout«e ndl;return 0;三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器 G+编译第二部分:实验调试与结果分析(可加页)一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验

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

10、加强自己的编程能力。加深了对linux的印象,linux的兼容性 很强。C/C+仍旧可以在上面编译成功。实验课程名称:操作系统实验项目名称SHELL编程和后台批处理实验成绩实验者李帅专业班级软件1101组别同组者实验日期第部分:头验分析与设计(可加页)三、实验内容描述(问题域描述)SHELL编程和后台批处理要求:掌握Linux系统的SHELL编程方法和后台批处理方法。内容:(1)将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成, 前台运行。 将上面SHELLL程序后台运行。观察原C程序运行时输入输出情 况。(3)修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输

11、 入内谷可以键盘命令仃位置参数方式交互式输入替代原键盘输入内谷,然后输出到屏幕。四、实验基本原理与设计 (包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑 或者算法描述)test.cpp 文件如下:#in clude<iostream>using 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) II (i=j)aij = 1;elseaij = ai-1j-1 + ai-1j;for(i=0; i<=9;

12、 i+)for(j=0; j<=i; j+)cout«" "<<aij;cout«e 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编辑器第二部分:实验调试与结果分析(可加页),实验过程发现的问题四、调

13、试过程(包括调试方法描述 、实验数据记录,实验现象记录调试过程中未发现任何问题五、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)horizonhorrzon-desktop文件(日编辑廷)查看也)终端任)帮助(也 horizonhorizondesktop:$ sh test-sh11 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 8 28 56 79 55 28 8 11 9 36 84 126 126 84 36 9 1horizon(?horizon-desktop

14、: -$ |六、实验小结、建议及体会通过这次实验熟悉了 shell编程,对Linux下的编程有了进一步的了解 。也对Linux系统 终端方式使用的编辑器 vi有进一步的认识,如何使用命令来打开文件以及在编辑器vi里面编写内容等,。总之,通过这次实验,对课本上的知识有了进一步的理解以及巩固。实验课程名称:操作系统实验项目名称Linux系统调用(time)实验成绩实验者李帅专业班级软件1101组别同组者实验日期第一部分:实验分析与设计 (可加页)一、实验内容描述(问题域描述)学习Linux内核的系统调用,理解、掌握Linux系统调用的实现框架、用户界 面、参数传递、进入/返回过程。阅读Linux内

15、核源代码,通过添加一个简单的系 统调用实验,进一步理解Linux操作系统处理系统调用的统一流程。Linux系统调用使用方法。要求:掌握Linux系统调用使用方法。内容:学习使用time, ctime, sleep, exit 等Linux系统调用使用方法。二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)#i nclude<stdio.h>#in clude< un istd.h>#in clude<time.h>#in clude<iostream>using n amespace std;int m

16、ai n()while(1)char timebuf100;time_t t;time(&t);strftime(timebuf, sizeof(timebuf),"%Y日 %H: %M: %S",localtime(&t);coutvvtimebufvve ndl;fflush(stdout);sleep(1);return 0;在现有的系统中添加一个不用传递参数的系统调用实现遍历进程。实验主要内容:添加系统调用的名字利用标准C库进行包装添加系统调用号在系统调用表中添加相应表项sys_mysyscall 的实现年 m 月 %d这个系统调用的功能是三、主要仪

17、器设备及耗材Ubuntu操作系统Vi编辑器G+编译器第二部分:实验调试与结果分析(可加页),实验过程发现的问题一、调试过程(包括调试方法描述、实验数据记录,实验现象记录 等)#in elude <li nux/uni std.h># in elude <sys/syscall.h>#defi ne _NR_ mysyscall 223int mai n()syscall(_NR_mysyscall);/* 或 syscall(223) */在此加入在屏幕输出每个进程相关信息的代码;用gcc编译源程序# gcc test test.c运行程序# ./test用shell命

18、令查看遍历进程输出的信息#dmesg、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等).long sys getdents64 /* 220 */.long sys_fcntl64.long sysni syscall /* reserved for TUX */.long sysmysyscall.long sysgettidAong sysreadahead 严 225.long syssetxattr.1ong syslsetxattr11 sysx/添加一个系统谓用 asmlinkage int sysmysyscall(void) struct tasks

19、truct *task=init_task;dok- printkM%$t%dt%ldt%dn-,task->co,task->pid r >state,task ->parent->pid);while(task-nexttask(task)!=&init_task);return G;)1三、实验小结、建议及体会这次实验有点难度,但是通过查找资料和与老师的交流之后还是顺利完成了 实验,希望以后相关能力能够得到加强。实验课程名称:操作系统实验项目名称Linux进程控制(fork)实验成绩实验者李帅专业班级软件1101组别同组者实验日期第部分:头验分析与设

20、计(可加页)一、实验内容描述(问题域描述)Linux系统进程控制要求:掌握Linux系统中进程控制原语fork的使用方法。内容:设计C程序,其中主进程创建一个子进程,以特定次序各自执行规 定操作后退出。二、实验基本原理与设计 (包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑 或者算法描述)#i nclude<stdlib.h>#in clude< un istd.h>#in clude<iostream>using n amespace std;int mai n()cout<<"Pare nt process id:&quo

21、t;<<getpid()<<e ndl;pid_t iRet = fork();if(iRetvO)cout«"Create child process fail!"<<e ndl;else if(iRet = 0)coutvv" I'm child process, and id is"<<getpid()<<"ppidis:"vvgetppid()v<e ndl;elsecout<<"Create child process

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

23、。源程序】:#in clude<stdio.h>int 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()生成的子进程和父进程是

24、并行运行 的,所以先运行哪个进程是由系统的调度算法决定的,ubuntu9.04很大概率系统会先输出bca是因为ubuntu 9.04在fork()运行之后很大概率先运行子进程,再 运行父进程。当然也有可能先运行父进程后子进程,再加上进程间的并发性;导 致了输出的多样性。输出次序带有随机性。进程的控制】修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句 话,在观察程序执行时屏幕上出现的现象,并分析原因。源代码】:#in clude<stdio.h> int mai n() in t p1, p2;;第一个子进程;第二子进程;父进程while (p1 = fork() = -

25、1);if (p1 = 0)prin tf("Child1 is runnin g!n");else while (p2 = fork() = -1);if (p2 = 0)prin tf("Child2 is runnin g!n"); elseprin tf("Father is runnin g!n"); return 0;运行多次,大部分运行后输出Child1 is running!Child2 is running!Father is running!少数输出:Child2 is running!Child1 is runn

26、ing! Father is running!Father is running! Child1 is running! Child2 is running!理论上是有6种不同的结果,还是由于系统的调度算法,程序的并发性影响;但 由于函数printf()在输出字符串时不会被中断,因此,字符串内部字符顺序输出不 变。所以与打印单字符的结果相同。创建进程,使用exec函数族使子进程执行新的目标程序,观察并分析 出现的现象。源代码】:#in elude <stdio.h>#in elude <uni std.h>int mai n()printf("=system

27、call exeel testing =n");execlp("date","date",O);prin tf("exec error !n");return 0;输出:=system call execl test ing =2009 年 12 月 04 日 星期五 21:35:18 CST输出结果分析:execlp是一种exec函数,当进程调用一种exec函数时,用指定的目标进程更 好进程的执行映像。Exec调用成功后,调用进程的正文段被指定的文件的正文段 所覆盖。调用成功时,exec不返回,从而不执行exec以后的所有

28、语句,所以本例 就只有输出2009年12月04日星期五21:35:18 CST”的情况。如果调用失败, 返回-1,执行剩余指令。(3)进程信号处理】编写程序使用系统调用fork()创建两个子进程,再用系统调用singal()让父进程捕捉键盘上来的中断信号(即按Ctrl+c键);当捕捉到中断信号后,父进程用系 统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终 止:Child Process11 is Killed by Pare nt!Child Process12 is Killed by Pare nt! 父进程等待两个子进程终止后,输出如下的信息后终止:Par

29、e nt Process is Killed!源代码】:#in clude<stdio.h>#in clude<sig nal.h>int 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);第一个子进程wait_mark = 1;sig nal(SIGINT, SIG_IGN);sig nal(16, stop);wait in g();lockf(1, 1,0);加锁printf("Child Process" is Killed by Parent!n”); lockf(1,

温馨提示

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

评论

0/150

提交评论