武汉理工操作系统实验报告DOC.docx

上传人:b****5 文档编号:14595241 上传时间:2023-06-24 格式:DOCX 页数:19 大小:120.19KB
下载 相关 举报
武汉理工操作系统实验报告DOC.docx_第1页
第1页 / 共19页
武汉理工操作系统实验报告DOC.docx_第2页
第2页 / 共19页
武汉理工操作系统实验报告DOC.docx_第3页
第3页 / 共19页
武汉理工操作系统实验报告DOC.docx_第4页
第4页 / 共19页
武汉理工操作系统实验报告DOC.docx_第5页
第5页 / 共19页
武汉理工操作系统实验报告DOC.docx_第6页
第6页 / 共19页
武汉理工操作系统实验报告DOC.docx_第7页
第7页 / 共19页
武汉理工操作系统实验报告DOC.docx_第8页
第8页 / 共19页
武汉理工操作系统实验报告DOC.docx_第9页
第9页 / 共19页
武汉理工操作系统实验报告DOC.docx_第10页
第10页 / 共19页
武汉理工操作系统实验报告DOC.docx_第11页
第11页 / 共19页
武汉理工操作系统实验报告DOC.docx_第12页
第12页 / 共19页
武汉理工操作系统实验报告DOC.docx_第13页
第13页 / 共19页
武汉理工操作系统实验报告DOC.docx_第14页
第14页 / 共19页
武汉理工操作系统实验报告DOC.docx_第15页
第15页 / 共19页
武汉理工操作系统实验报告DOC.docx_第16页
第16页 / 共19页
武汉理工操作系统实验报告DOC.docx_第17页
第17页 / 共19页
武汉理工操作系统实验报告DOC.docx_第18页
第18页 / 共19页
武汉理工操作系统实验报告DOC.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

武汉理工操作系统实验报告DOC.docx

《武汉理工操作系统实验报告DOC.docx》由会员分享,可在线阅读,更多相关《武汉理工操作系统实验报告DOC.docx(19页珍藏版)》请在冰点文库上搜索。

武汉理工操作系统实验报告DOC.docx

武汉理工操作系统实验报告DOC

学生学号

0121110680125

实验课成绩

武汉理工大学

学生实验报告书

 

实验课程名称操作系统

开课学院计算机科学与技术学院

指导老师姓名刘军

学生姓名李帅

学生专业班级软件1101

 

2013—2014学年第一学期

 

实验课程名称:

操作系统

实验项目名称

Linux键盘命令和vi

实验成绩

实验者

李帅

专业班级

软件工1101

组别

同组者

实验日期

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

Linux键盘命令和vi

1.要求:

掌握Linux系统键盘命令的使用方法

1.使用mkdir命令建立一个子目录subdir

2.使用cat或more命令查看file1文件的内容。

3.将date命令的用法附加到文件file1的后面:

4.利用ls-lfile1命令列出文件file1的较详细的信息。

5.利用rmfa命令将文件fa删除。

再利用ls-l命令查看工作目录内容。

6.运行mvfile1file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中

2.vi操作

1.了解vi编辑器的作用和功能

2.熟悉vi的操作环境和切换方法

3.掌握vi操作的方式(几个常用键)

4.了解常用的快捷键

 

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

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命令

2.Is命令

3.cp命令

4.rm命令

5.mv命令

VI命令:

1.vi进入vi缓冲区

2.vifile1:

进入文件file1

3.退出vi

三、主要仪器设备及耗材

Ubuntu操作体统

Vi编辑器

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

1使用mkdir命令建立一个子目录subdir

2使用cat或more命令查看file1文件的内容。

3将date命令的用法附加到文件file1的后面:

4利用ls-lfile1命令列出文件file1的较详细的信息。

5利用rmfa命令将文件fa删除。

再利用ls-l命令查看工作目录内容。

6运行mvfile1file_a命令,然后用ls命令查看这两个文件是否都还在工作目录中?

显然,只有file_a在工作目录中,而file1不在工作目录中

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

Free显示系统中已用空闲内存数量

 

Rm:

删除文件或目录

三、实验小结、建议及体会

Linux对比Windows有些不同需要时间去适应。

通过这次实验对Linux操作系统有了进一步的了解。

初步掌握了一些Linux系统常用的命令。

通过这仅一个周时间的学习,我们只是了解了linux的一些最基本知识,我会在后的学习中不断完善和加以扩充linux知识的学习。

 

实验课程名称:

操作系统

实验项目名称

Linux下C编程

实验成绩

实验者

李帅

专业班级

软件1101

组别

同组者

实验日期

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

Linux下的C编程

要求:

掌握vi编辑器的使用方法;掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。

内容:

设计、编辑、编译、连接以及运行一个C程序,其中包含键盘输入和屏幕输出语句。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

#include

usingnamespacestd;

intmain()

{

intbegin,end;

inttemp=0;

cout<<"Pleaseentertwonumber:

"<

cin>>begin>>end;

if(begin>end)

{

temp=begin;

begin=end;

end=temp;

}

for(inti=begin;i<=end;i++)

{

cout<

}

cout<

return0;

}

三、主要仪器设备及耗材Ubuntu操作体统Vi编辑器G++编译

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

(1).先用viJamesJi.c建立文件

(2).在vi的插入界面输入

#include

intmain(void)

{printf("JamesJi.gcc!

\r\n");

   return0;}

(3).编译生成JamesJi文件:

gcc-oJamesJiJamesJi.c

(4).运行JamesJi文件:

./JamesJi

 

二、实验小结、建议及体会

通过这次实验vi编辑器有了进一步的应用,同时学会了在Linux进行简单的C语言编程,掌握Linux下C程序的源程序编辑方法;编译、连接和运行方法。

在以后的学习中会加大努力加强自己的编程能力。

加深了对linux的印象,linux的兼容性很强。

C/C++仍旧可以在上面编译成功。

 

 

实验课程名称:

操作系统

实验项目名称

SHELL编程和后台批处理

实验成绩

实验者

李帅

专业班级

软件1101

组别

同组者

实验日期

第一部分:

实验分析与设计(可加页)

三、实验内容描述(问题域描述)

SHELL编程和后台批处理

要求:

掌握Linux系统的SHELL编程方法和后台批处理方法。

内容:

(1)将编译、连接以及运行上述C程序各步骤用SHELL程序批处理完成,前台运行。

(2)将上面SHELLL程序后台运行。

观察原C程序运行时输入输出情况。

(3)修改调试上面SHELL程序和C程序,使得在后台批处理方式下,原键盘输入内容可以键盘命令行位置参数方式交互式输入替代原键盘输入内容,然后输出到屏幕。

四、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

test.cpp文件如下:

#include

usingnamespacestd;

intmain()

{

inti,j;

inta[10][10]={0};

a[0][0]=1;

for(i=1;i<=9;i++)

{

for(j=0;j<=i;j++)

{

if((j==0)||(i==j))

a[i][j]=1;

else

a[i][j]=a[i-1][j-1]+a[i-1][j];

}

}

for(i=0;i<=9;i++)

{

for(j=0;j<=i;j++)

cout<<""<

cout<

}

return0;

}

test.sh文件如下

#!

/bin/bash

#Program:

#Thisprogramisusedtocompileandrunafileofcpp

#History

#2011/06/01

g++-otest.outtest.cpp

chmodu+xtest.out

./test.out

三、主要仪器设备及耗材

Ubuntu操作系统

Vi编辑器

第二部分:

实验调试与结果分析(可加页)

四、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

调试过程中未发现任何问题

五、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

六、实验小结、建议及体会

通过这次实验熟悉了shell编程,对Linux下的编程有了进一步的了解。

也对Linux系统终端方式使用的编辑器vi有进一步的认识,如何使用命令来打开文件以及在编辑器vi里面编写内容等,。

总之,通过这次实验,对课本上的知识有了进一步的理解以及巩固。

实验课程名称:

操作系统

实验项目名称

Linux系统调用(time)

实验成绩

实验者

李帅

专业班级

软件1101

组别

同组者

实验日期

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

学习Linux内核的系统调用,理解、掌握Linux系统调用的实现框架、用户界面、参数传递、进入/返回过程。

阅读Linux内核源代码,通过添加一个简单的系统调用实验,进一步理解Linux操作系统处理系统调用的统一流程。

Linux系统调用使用方法。

要求:

掌握Linux系统调用使用方法。

内容:

学习使用time,ctime,sleep,exit等Linux系统调用使用方法。

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

#include

#include

#include

#include

usingnamespacestd;

intmain()

{

while

(1)

{

chartimebuf[100];

time_tt;

time(&t);

strftime(timebuf,sizeof(timebuf),"%Y年%m月%d日%H:

%M:

%S",localtime(&t));

cout<

fflush(stdout);

sleep

(1);

}

return0;

}

在现有的系统中添加一个不用传递参数的系统调用。

这个系统调用的功能是实现遍历进程。

实验主要内容:

添加系统调用的名字

利用标准C库进行包装

添加系统调用号

在系统调用表中添加相应表项

sys_mysyscall的实现

 

三、主要仪器设备及耗材

Ubuntu操作系统

Vi编辑器

G++编译器

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

#include

#include

#define__NR_mysyscall223

intmain()

{

syscall(__NR_mysyscall);   /*或syscall(223) */

//在此加入在屏幕输出每个进程相关信息的代码;

}

 用gcc编译源程序

#gcc–otesttest.c

 运行程序

#./test

 用shell命令查看遍历进程输出的信息

#dmesg

 

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

三、实验小结、建议及体会

这次实验有点难度,但是通过查找资料和与老师的交流之后还是顺利完成了实验,希望以后相关能力能够得到加强。

 

 

实验课程名称:

操作系统

实验项目名称

Linux进程控制(fork)

实验成绩

实验者

李帅

专业班级

软件1101

组别

同组者

实验日期

第一部分:

实验分析与设计(可加页)

一、实验内容描述(问题域描述)

Linux系统进程控制

要求:

掌握Linux系统中进程控制原语fork的使用方法。

内容:

设计C程序,其中主进程创建一个子进程,以特定次序各自执行规定操作后退出。

 

二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)

#include

#include

#include

usingnamespacestd;

intmain()

{

cout<<"Parentprocessid:

"<

pid_tiRet=fork();

if(iRet<0)

cout<<"Createchildprocessfail!

"<

elseif(iRet==0)

{

cout<<"I'mchildprocess,andidis"<

"<

}

else

{

cout<<"Createchildprocesssuccesschild"<<"theidis:

"<

}

return0;

}

 

三、主要仪器设备及耗材

Ubuntu操作体统

Vi编辑器

G++编译

第二部分:

实验调试与结果分析(可加页)

一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)

(1)【进程的创建】

编写一段程序,使用系统调用fork()创建两个子进程,当此进程运行时,在系统中有一个父进程和两个子进程活动,让每一个进程在屏幕上显示一个字符,父进程显示字符“a”;子进程分别显示字符“b”和字符“c”,试观察记录屏幕上的显示结果,并分析原因。

【源程序】:

#include

intmain()

{

intp1,p2;

while((p1=fork())==-1);

if(p1==0)//第一子进程

putchar('b');

else{

while((p2=fork())==-1);

if(p2==0)

putchar('c');//第二子进程

else

putchar('a');//父进程

}

return0;

}

运行多次:

主要输出有bca,偶尔输出cab和cba,abc,bac,acb…

会有如此多种不同输出,主要是因为fork()生成的子进程和父进程是并行运行的,所以先运行哪个进程是由系统的调度算法决定的,ubuntu9.04很大概率系统会先输出bca是因为ubuntu9.04在fork()运行之后很大概率先运行子进程,再运行父进程。

当然也有可能先运行父进程后子进程,再加上进程间的并发性;导致了输出的多样性。

输出次序带有随机性。

 

(2)【进程的控制】

修改已编写的程序,将每个进程输出一个字符改为每个进程输出一句

话,在观察程序执行时屏幕上出现的现象,并分析原因。

【源代码】:

#include

intmain(){

intp1,p2;

while((p1=fork())==-1);

if(p1==0);第一个子进程

printf("Child1isrunning!

\n");

else{

while((p2=fork())==-1);

if(p2==0);第二子进程

printf("Child2isrunning!

\n");

else;父进程

printf("Fatherisrunning!

\n");

}

return0;

}

运行多次,大部分运行后输出:

Child1isrunning!

Child2isrunning!

Fatherisrunning!

少数输出:

Child2isrunning!

Child1isrunning!

Fatherisrunning!

Fatherisrunning!

Child1isrunning!

Child2isrunning!

……

理论上是有6种不同的结果,还是由于系统的调度算法,程序的并发性影响;但由于函数printf()在输出字符串时不会被中断,因此,字符串内部字符顺序输出不变。

所以与打印单字符的结果相同。

 

创建进程,使用exec函数族使子进程执行新的目标程序,观察并分析

出现的现象。

【源代码】:

#include

#include

intmain()

{

printf("===systemcallexecltesting===\n");

execlp("date","date",0);

printf("execerror!

\n");

return0;

}

输出:

===systemcallexecltesting===

2009年12月04日星期五21:

35:

18CST

 

输出结果分析:

execlp是一种exec函数,当进程调用一种exec函数时,用指定的目标进程更好进程的执行映像。

Exec调用成功后,调用进程的正文段被指定的文件的正文段所覆盖。

调用成功时,exec不返回,从而不执行exec以后的所有语句,所以本例就只有输出“2009年12月04日星期五21:

35:

18CST”的情况。

如果调用失败,返回-1,执行剩余指令。

 

(3)【进程信号处理】

编写程序使用系统调用fork()创建两个子进程,再用系统调用singal()让父进程捕捉键盘上来的中断信号(即按Ctrl+c键);当捕捉到中断信号后,父进程用系统调用Kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:

ChildProcess11isKilledbyParent!

ChildProcess12isKilledbyParent!

父进程等待两个子进程终止后,输出如下的信息后终止:

ParentProcessisKilled!

【源代码】:

#include

#include

intwait_mark;

voidwaiting()

{

while(wait_mark==1);

}

voidstop()

{

wait_mark=0;

}

intmain()

{

intp1,p2;

while((p1=fork())==-1);

if(p1==0);第一个子进程

{

wait_mark=1;

signal(SIGINT,SIG_IGN);

signal(16,stop);

waiting();

lockf(1,1,0);;加锁

printf("ChildProcess11isKilledbyParent!

\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("ChildProcess12isKilledbyParent!

\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("ParentProcessisKilled!

\n");

exit(0);

}

}

}

输出结果有两种:

ChildProcessllisKilledbyParent!

ChildProcessl2isKilledbyParent!

ParentprocessisKilled!

ChildProcessl2isKilledbyParent!

ChildProcessllisKilledbyParent!

ParentprocessisKilled!

二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)

 

三、实验小结、建议及体会

通过这次实验掌握Linux系统中进程控制原语fork的使用方法。

同时发现自己对Linux有很多的不熟悉的地方,在以后会进一步加强。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2