操作系统实验报告书 施敏宇.docx

上传人:b****4 文档编号:4278465 上传时间:2023-05-06 格式:DOCX 页数:32 大小:155.68KB
下载 相关 举报
操作系统实验报告书 施敏宇.docx_第1页
第1页 / 共32页
操作系统实验报告书 施敏宇.docx_第2页
第2页 / 共32页
操作系统实验报告书 施敏宇.docx_第3页
第3页 / 共32页
操作系统实验报告书 施敏宇.docx_第4页
第4页 / 共32页
操作系统实验报告书 施敏宇.docx_第5页
第5页 / 共32页
操作系统实验报告书 施敏宇.docx_第6页
第6页 / 共32页
操作系统实验报告书 施敏宇.docx_第7页
第7页 / 共32页
操作系统实验报告书 施敏宇.docx_第8页
第8页 / 共32页
操作系统实验报告书 施敏宇.docx_第9页
第9页 / 共32页
操作系统实验报告书 施敏宇.docx_第10页
第10页 / 共32页
操作系统实验报告书 施敏宇.docx_第11页
第11页 / 共32页
操作系统实验报告书 施敏宇.docx_第12页
第12页 / 共32页
操作系统实验报告书 施敏宇.docx_第13页
第13页 / 共32页
操作系统实验报告书 施敏宇.docx_第14页
第14页 / 共32页
操作系统实验报告书 施敏宇.docx_第15页
第15页 / 共32页
操作系统实验报告书 施敏宇.docx_第16页
第16页 / 共32页
操作系统实验报告书 施敏宇.docx_第17页
第17页 / 共32页
操作系统实验报告书 施敏宇.docx_第18页
第18页 / 共32页
操作系统实验报告书 施敏宇.docx_第19页
第19页 / 共32页
操作系统实验报告书 施敏宇.docx_第20页
第20页 / 共32页
亲,该文档总共32页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统实验报告书 施敏宇.docx

《操作系统实验报告书 施敏宇.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告书 施敏宇.docx(32页珍藏版)》请在冰点文库上搜索。

操作系统实验报告书 施敏宇.docx

操作系统实验报告书施敏宇

 

《操作系统原理》

实验报告书

班级:

信息1101

学号:

*********

*******

*******

 

2013-2014学年第一学期

实验名称:

LINUX用户界面

实验时间:

年月日第周星期

一、实验目的

1.熟悉Linux字符操作界面,熟练掌握常用Shell命令。

2.熟悉Linux中文本编辑方法,学会编辑软件vi的使用。

3.了解Linux编绎器gcc的功能,掌握基于Linux平台的C程序开发。

二、实验预习(预备知识的问题及回答)

1.为什么在Linux系统中,诸如光盘、U盘等要先挂载而后才能使用?

如何获得U盘的设备名?

装载点在文件系统中的位置是什么?

由于文件系统的差异,linux在默认情况下并不支持软盘光盘U盘,所以需要装在相应的盘片才能访问其中的数据

装载点就是挂载文件系统的目录位置

2.从虚拟机界面退出进入WindowsOS界面的操作是ctrl+ait,从WindowsOS界面进入虚拟机界面的方法是鼠标点击虚拟机界面。

3.权限的含义是什么?

如何使用数字法设定文件的权限?

权限的含义

Linux系统中的每个文件和目录都有相应的访问许可权限,访问权限分为只读(r),

可写(w)和可执行三种。

有三种不同类型的用户可对文件或目录进行访问,分别是文件所

有者(u),同组用户(g)和其他用户(o)。

所有的文件和目录都被创建它们的人所“拥有”,只要你是这个文件的所有者或你登录为根用户,你就拥有了改变所有者、组群和其他人权限的权利。

 

使用数字法改变权限

命令格式

chmod 权限数值文件名

说明

给指定文件赋予数值所规定的权限。

在数字设定法中,每种权限设置均可用数值来代表,其中

0表示没有权限,

1表示可执行权限,

2表示可写权限,

4表示可读权限,这些值之和便可用来设立特定权限。

所以数字属性的格式应为3个0~7的八进制数,3个数表示的次序为u、g和o。

4.什么过滤操作?

在Linux中如何实现?

答:

过滤操作:

将一个命令(程序)的输出作为另一个命令(程序)的输入

Linux实现的命令格式:

命令丨命令

5.在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是:

mount/dev/sda1/mnt/sub。

6.什么是vi?

其三种操作模式的含义是什么?

给出三种工作模式间的转换图。

vi有3种基本工作模式:

命令模式(CommandMode):

vi启动后的默认模式,控制光标的移动、复制删除文字、进入输入模式和末行模式

输入模式(InsertMode):

进行文字输入

末行模式(LastLineMode):

保存文件、退出vi

图示三种工作模式转换图。

 

三、实验内容(包含实验所用命令或相关程序源代码)

1.shell操作命令(给出每题所用的Shell命令或命令结果)

(1)创建名为stu1、stu2的2个用户,设置密码分别为student1和student2,并将它们设为组group1中的成员。

#Groupaddgroup1

#Useraddstu1–ggroup1

#Useraddstu2–ggroup1

$Passwdstu1

Student1

Student1

$Passwdstu2

Student2

Student0

(2)在每个用户的主目录下建立2个目录,分别命名为dir1和dir2。

#Sustu1

$Cd

$Mkdirdir1

$Mkdirdir2

$Exit

#Sustu2

$Cd

$Mkdirdir1

$Mkdirdir2

(3)查找stu1用户主目录、下属各子目录的默认存取权限,并给出结论。

#Sustu1

$Cd

$Ls-l

(4)调试pwd和cd命令,回答下列关于Linux文件系统中目录的有关问题。

用户主目录的绝对路径如何表示?

/home/stu1/home/stu2

根目录如何表示?

/root

.和..分别表示什么目录?

子目录父母目录

~表示什么目录?

主目录

⑤当前目录如何表示?

Cd

(5)新建用户stu3,设置其密码为student3,并将其设置为group2中成员。

尔后,以stu3登录,在其主目录下建立名为text的目录,在text目录下再建立名为dir1的子目录,并使其成为当前目录。

#Groupaddgroup2

$Useraddstu3–ggroup2

$Passwdstu3

Student3

Student3

#Sustu3

$Cd

$Cdtext

$Mkdirdir1

$Cddir1

 

(6)使用cat>sneakers.txt命令,分析命令行catsneakers.txt的显示结果。

$cat>sneakers.txt

buysomesneakers

thengotothecoffeeshop

thenbuysomecoff

^D

$catsneakers.txt

答$cat>sneakers.txt

buysomesneakers

thengotothecoffeeshop

thenbuysomecoff

ctrlD

 

(7)使用上题的方法,在dir1目录中建立home.txt文件,其内容为:

bringthecoffeehome

takeoffshoes

putonsneakers

makesomecoffee

relax!

$Exit

#Sustu1

$Cd

$Cddir1

$Cat>home.txt

bringthecoffeehome

takeoffshoes

putonsneakers

makesomecoffee

relax!

CtrlD

 

(8)试写出实现下列功能的shell命令:

将home.txt文件移至其上级目录中(即text目录下)。

答$exit

#Sustu1

$Cd/home/stu1/dir1

$Mr/home/stu1/dir1/home.txt./home/stu1

将home.txt添加到sneakers.txt尾部形成新的文件saturday.txt。

答$exit

#Sustu1

$Cd/home/stu1

$Catsneakers.txt>Saturday.txt

$Cathome.txt>>Saturday.txt

将text目录树从stu3用户主目录下移至stu2主目录下。

【使用特权用户方法】

su

mv/home/stu3/text/home/stu2

【修改目录权限方法】

将Saturday.txt文件从stu2目录中复制到stu1目录中。

#cp/home/stu1/saturday.txt/home/stu2

(9)试画出上述命令后,用户stu1、stu2和stu3主目录中的目录树(3棵子树)。

 

2.LinuxC程序开发

(1)编写LinuxC程序,把一个文件的内容复制到另一个文件中,即实现简单的copy功能。

要求:

程序输入的第一个参数是源文件,第二个参数是目标文件。

【源程序】

#include

#include

intmain(intargc,char*argv[])

{

FILE*in,*out;

charch;

if(argc!

=3)

{

printf(“Youforgottoenterafilename\n”);

exit(0);

}

if((in=fopen(argv[1],“r”))==NULL)

{

printf(“cannotopeninfile\n”);

exit(0);

}

if((out=fopen(argv[2],“w”))==NULL)

{

printf(“cannotopenoutfile\n”);

exit(0);

}

while(!

feof(in))fputc(fgetc(in),out);

fclose(in);

fclose(out);

 

【运行命令】

#gcc–otestcopy.c

#./testfile1.cfile2.c

(2)编写LinuxC程序,列出stu2主目录中的文件信息,并将其中saturday.txt文件的权限设置为文件所有者可读可写、同组用户只读、其他用户无权限。

【源程序】

#include

#include

#include

#include

intmain(intargc,char*argv[])

{

DIR*dp;

structdirent*dirp;

intn=0;

if(argc!

=2)

{

printf(“asingleargmentisrequired”);

exit(0);

}

if((dp=opendir(argv[1]))==NULL)

{

printf(“cannotopen%s”,argv[1]);

exit(0);

}

while(((dirp=readdir(dp))!

=NULL)&&(n<=50))

{

if(n%1==0)printf(“”);

n++;

printf(“%10s\n”,dirp->d_name);

}

system(“chmod640/home/stu2/text/dir1/saturday.txt”);

}

【运行命令】

#gcc–otestlist.c

#./test/home/stu2

 

实验名称:

SHELL程序设计

实验时间:

年月日第周星期

一、实验目的

1.熟悉Shell脚本编程的步骤,掌握基于Bash的Shell脚本开发。

2.掌握Shell脚本中变量、条件测试的使用。

3.掌握Shell脚本中的控制流结构和函数的使用。

二、实验预习(预备知识的问题及回答)

1.Linux系统默认的shell语言是什么?

欲查看该shell的版本,应使用什么命令?

答:

Linux系统默认的shell语言是Bashshell。

欲查看该shell的版本,应使用的命令是:

$echo$BASH_VERSION

2.预习shell有关变量和参数的相关知识,回答下列问题。

(1)假设用户进行了如下的赋值操作:

$person=jenny

试给出下面命令的输出结果。

1)echopersonperson

2)echo$personjenny

3)echo‘$person’$person

4)echo“$person”jenny

(2)填充下列与环境变量、位置变量和预定义变量相关的表格。

Shell变量

定义

HOME

用于保存用户注册目录的绝对路径

PATH

保存用冒号分隔的目录路径,shell将按PATH变量中给出的顺序搜索这些目录,找到第一个与命令名一致的可执行文件将被执行。

PWD

当前工作目录的绝对路径名,该变量取值随cd命令的使用而变化。

PS1

主提示符,默认特权用户为#,普通用户为$。

$0

表示当前shell程序的文件名。

$#

表示位置参数的个数。

$?

前一命令执行后返回的状态。

$$

当前进程的pid。

3.写出下列expr命令的输出:

(1)exprindex“value”‘a’

(2)expr“value”:

‘v.*u’

(3)expr“aaa”:

‘a\+’

(4)expr“aaa”:

‘a\?

(5)expr2+3

(6)expr2+3

(7)expr2\*3

(8)expr5+`expr2+3`

(9)exprlength“operatingsystem”

(10)exprsubstrlinux23

答:

(1)2

(2)4(3)3(4)1(5)2+3(6)5

(7)6(8)non-numericargument(9)16(10)inu

三、实验内容

1.编写Shell脚本,从命令行中接收一个二元算术表达式并计算其结果。

【源程序】

#!

/bin/bash

iftest$#=3

then

case$2in

+)letz=$1+$3;;

-)letz=$1-$3;;

/)letz=$1/$3;;

x|X)letz=$1*$3;;

*)echo“Warning-$2invalidoperator!

”exit;;

esac

echo“Answeris$z”

else

echo“Usage-$0Value1operatorvalue2”

fi

 

【运行】

chmoda+xjisuan

./jisuan2+3

2.编写一个以文件列表作为输入的过滤器程序,要求文件名含有以句点“.”分隔的后缀,过滤器输出每个文件的不带句点和后缀的文件名。

【源程序】

readflag

whiletest“$flag”!

=“#”#输入的文件列表以井号结束

do

location=`expr“$flag”:

“.*\.”`

location=`expr$location–1`

basename=`exprsubstr“$flag”1$location`

echo$basename

readflag

done

【运行】

chmoda+xletter

./letter

 

3.将下面的shell脚本命名为myscript,分析其功能:

count=$#

cmd=echo

while[$count–gt0]

do

cmd="$cmd\$$count"

count=`expr$count-1`

done

eval$cmd

【命令行输入】

chmoda+xmyscript

./myscriptfirstsecondthird

【运行结果】

答:

thirdsecondfirst

【脚本功能分析】

答:

将命令输入的参数倒序显示

 

4.设计一个程序cuts,它从标准输入读入数据,获取由第一个参数n和第二个参数m所限定范围的数据(包括这两个字符),n和m都是整数。

例如:

$cuts1114

Thisisatestofcutsprogram(输入)

test(显示结果)

【源程序】

#!

/bin/bash

readaline

echo$aline|cut–c$1-$2

 

实验名称:

进程控制与通信

实验时间:

年月日第周星期

一、实验目的

1.加深进程概念的理解,体会进程创建过程,进一步认识进程的异步并发特征。

2.了解Linux系统中,进程通信的基本原理,重点掌握进程的信号通信和管道通信机制。

3.掌握Linux系统中,与进程控制和进程通信相关的系统调用。

二、实验预习(预备知识的问题及回答)

1.写出下列系统调用功能:

(1)fork()用于创建进程

(2)getpid()用于获取当前进程id号

(3)wait()用于等待子进程结束

(4)exit()用于进程自我终止

(5)pipe()用于创建无名管道

(6)signal()用于在信号与信号处理函数之间创建对应关系

(7)kill()用于发送信号给制定进程

2.阅读fork系统调用,用伪码写出其实现流程。

pid=fork()

ifpid为负

printfork调用失败

elseifpid为0

print当前进程是子进程

elsepid为正

print当前进程是父进程

3.图示pipe系统调用生成无名管道时所涉及的数据结构。

 

4.在UNIX系统中运行下面程序,最多可以产生多少个进程?

画出进程家族树。

main()

{fork();

fork();

fork();

}

答:

最多可以产生8个进程

 

5.下列程序运行后,a的值是多少?

main()

{inta,pid;

a=55;

pid=fork();

if (pid< 0)     {   printf("error in fork!

");exit(0);}

elseif(pid==0){sleep(5);a=99;printf(“a=%d\n”,a);sleep(5);exit(0);}

else{sleep(7);

printf(“a=%d\n”,a);

wait(0);

}

}

答:

程序的运行结果为a=99,a=55;最终a=55

 

三、实验内容

1.调试下面的程序,观察可能的并发结果,给出简要分析,并画出进程家族树。

#include 

#include 

#include

main ()

{intstatus;

int pid1=-1,pid2=-1,pid3=-1;

 pid1=fork();

 if (pid1 == 0)

              printf("pid1=0,my process id is %d\n",getpid());

else if (pid1 > 0)

{printf("pid1>0,my process id is %d\n",getpid());

pid2=fork();

if (pid2 == 0)

printf("pid2=0,my process id is %d\n",getpid());

else if (pid2 > 0)

printf(" pid2>0,my process id is %d\n",getpid());

}

pid3=fork();

 if (pid3 == 0)

              printf("pid3=0,pid1=%d,pid2=%d, my process id is %d\n",pid1,pid2,getpid());

 else if (pid3 > 0)

               printf("pid3>0,pid1=%d,pid2=%d,my process id is%d\n",pid1,pid2,getpid());

wait(&status);

exit(0);

}

 

答:

可能情况1:

pid1=0,myprocessIDis3937

pid1>0,myprocessIDis3936

pid2=0,myprocessIDis3939

pid2>0,myprocessIDis3936

pid3=0,pid1=3937,pid2=3939,myprocessIDis3941

pid3>0,pid1=3937,pid2=3939,myprocessIDis3936

pid3=0,pid1=0,pid2=-1,myprocessIDis3938

pid3>0,pid1=0,pid2=-1,myprocessIDis3937

pid3=0,pid1=3937,pid2=0,myprocessIDis3940

pid3>0,pid1=3937,pid2=0,myprocessIDis3939

可能情况2:

pid1=0,myprocessIDis3937

pid3=0,pid1=0,pid2=-1,myprocessIDis3938

pid3>0,pid1=0,pid2=-1,myprocessIDis3937

pid1>0,myprocessIDis3936

pid2=0,myprocessIDis3939

pid2>0,myprocessIDis3936

pid3=0,pid1=3937,pid2=3939,myprocessIDis3941

pid3>0,pid1=3937,pid2=3939,myprocessIDis3936

pid3=0,pid1=3937,pid2=0,myprocessIDis3940

pid3>0,pid1=3937,pid2=0,myprocessIDis3939

 

进程家族树为:

 

2.编程实现进程间管道通信。

要求:

父子进程共享一无名管道,两个子进程作为发送方分别向管道发送一行信息,父进程先读出子进程P1发来的信息行,将其转换为大写字母输出;再读出子进程P2发来的信息行,将其转换为小写字母输出。

【源程序】

答:

#include

#include

#include

#include

#include

intfiledes[2];

charbuffer[80];

main()

{

pipe(filedes);

charstr1[80];

charstr2[80];

intpid1,pid2,i;

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

if(pid1==0)

{

lockf(filedes[1],1,0);

printf("child1inputstring1\n");

scanf("%s",str1);

write(filedes[1],str1,sizeof(str1));

lockf(filedes[1],0,0);

exit(0);

}

else{

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

if(pid2==0)

{

lockf(filedes[1],1,0);

printf("child2inputstring2\n");

scanf("%s",str2);

write(filedes[1],str2,sizeof(str2));

l

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

当前位置:首页 > 自然科学 > 物理

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

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