操作系统原理实验报告Word下载.doc

上传人:聆听****声音 文档编号:427883 上传时间:2023-04-28 格式:DOC 页数:29 大小:381KB
下载 相关 举报
操作系统原理实验报告Word下载.doc_第1页
第1页 / 共29页
操作系统原理实验报告Word下载.doc_第2页
第2页 / 共29页
操作系统原理实验报告Word下载.doc_第3页
第3页 / 共29页
操作系统原理实验报告Word下载.doc_第4页
第4页 / 共29页
操作系统原理实验报告Word下载.doc_第5页
第5页 / 共29页
操作系统原理实验报告Word下载.doc_第6页
第6页 / 共29页
操作系统原理实验报告Word下载.doc_第7页
第7页 / 共29页
操作系统原理实验报告Word下载.doc_第8页
第8页 / 共29页
操作系统原理实验报告Word下载.doc_第9页
第9页 / 共29页
操作系统原理实验报告Word下载.doc_第10页
第10页 / 共29页
操作系统原理实验报告Word下载.doc_第11页
第11页 / 共29页
操作系统原理实验报告Word下载.doc_第12页
第12页 / 共29页
操作系统原理实验报告Word下载.doc_第13页
第13页 / 共29页
操作系统原理实验报告Word下载.doc_第14页
第14页 / 共29页
操作系统原理实验报告Word下载.doc_第15页
第15页 / 共29页
操作系统原理实验报告Word下载.doc_第16页
第16页 / 共29页
操作系统原理实验报告Word下载.doc_第17页
第17页 / 共29页
操作系统原理实验报告Word下载.doc_第18页
第18页 / 共29页
操作系统原理实验报告Word下载.doc_第19页
第19页 / 共29页
操作系统原理实验报告Word下载.doc_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

操作系统原理实验报告Word下载.doc

《操作系统原理实验报告Word下载.doc》由会员分享,可在线阅读,更多相关《操作系统原理实验报告Word下载.doc(29页珍藏版)》请在冰点文库上搜索。

操作系统原理实验报告Word下载.doc

6.什么是vi?

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

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

命令模式:

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

输入模式:

进行文字输入

末行模式:

保存文件,退出VI

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

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

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

#groupaddgroup1

#useraddstu1–ggroup1

#sustu1

Spasswdstu1回车后敲入密码student1

$exit

#useraddstud2–ggroup1

#sustu2

$passwdstu2

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

$cd~

$mkdirdir1

$cd~

$mkdirdir2

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

$cd..

$ls-1

用户主目录权限为:

drwx--------,即目录的用户可读,写,执行,同组和其它的用户无任何权限

#sustu`

$ls-1

Dir1目录权限为:

drwxr-xr-x,即目录的用户可读,写,执行

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

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

/home/stu1/home/stu2

②根目录如何表示?

/root

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

子目录,父目录

④~表示什么目录?

用户主目录

⑤当前目录如何表示?

Cd~

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

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

#groupaddgroup2

#useraddstu3–ggroup2

#sustu3

$passwd回车后敲入密码student3

$mkdirtext

$cdtext/dir1

(6)使用cat>

sneakers.txt命令,分析命令行catsneakers.txt的显示结果。

$cat>

sneakers.txt

buysomesneakers

thengotothecoffeeshop

thenbuysomecoff

^D

$catsneakers.txt

从键盘中创建一个名为sncakers.txt文件,文件内容为:

buysomesncakers

Thengotothecoffeeshop

Thenbuysomecoff

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

bringthecoffeehome

takeoffshoes

putonsneakers

makesomecoffee

relax!

$cd/home/stu1/dir1

$cat>

home.txt

Bringthecoffeehome

Takeoffshoes

Putonsneakers

Makesomecoffee

Relax!

[ctrl+d]

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

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

$mv/home.txt

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

$catcneakers.txt>

asturday.txt

$cathome.txt>

>

Saturday.txt

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

【使用特权用户方法】

su

mv/home/stu3/text/home/stu2

【修改目录权限方法】

#cp/home/stu3/text/home/stu2

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

2.LinuxC程序开发

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

要求:

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

【源程序】

#include<

sys/types.h>

dirent.h>

stdio.h>

crrno.h>

Intmain(intargc,char*argv[])

{

FILE*in,*out;

Charch;

If(argc!

=3)

Printf(“youforgottoenterafilename\n”);

Exit(0);

}

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

Printf(“cannitopenoutfile\n”);

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

Prntf(“cannotopenoutfile”);

Exit(0);

While(!

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

Fclose(in);

Fclose(out);

【运行命令】

#gcc–otestcopy.c

#./testfile1.cfile2.c

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

DIR*dp;

Structdirent*dirp;

Intn=0;

If(arge!

=2)

{

Printf(“asignleargementisrequired”);

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

Printf(“cannotopen%s”,args[1]);

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程序设计

2014年4月16日第9周星期三

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

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

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

Bashshell

$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

保存用冒号分割的目录路径

PWD

当前工作目录的据对路径名

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

24312+3

56mon-numericargument16inu

三、实验内容

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

#!

/bin/bash

Iftest$#=3

Then

Cases2in

+)letz=$1+$3;

;

-)letz=$1-$3;

/)letz=$1/$3;

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

*)echo”warning-$2invalidoperator!

”exit;

Esac

Echo”answerissz”

Else

Echo”usage-$0value1operatorvalue2”

fi

【运行】

Chmoda+xjisuan

./jisuan2+3

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

Readflag

Whiletest“$flag”

Do

Location=’expr$location=1’

Basename=’exprsubstr=”$flag”1$location’

Echo$basecname

done

Chmoda+xletter

./letter

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

count=$#

cmd=echo

while[$count–gt0]

do

cmd="

$cmd\$$count"

count=`expr$count-1`

eval$cmd

【命令行输入】

chmoda+xmyscript

./myscriptfirstsecondthird

【运行结果】

Thirdsecondfirst

【脚本功能分析】

将命令行输入的参数倒叙显示

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

例如:

$cuts1114

Thisisatestofcutsprogram(输入)

test(显示结果)

Readbline

Echo$aline|cut-c$1-$2

进程控制与通信

2014年4月30日第11周星期三

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为负

Print当前进程是子进程

Elseifpid为0

Print当前进程是父进程

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

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

画出进程家族树。

main()

{fork();

fork();

8个

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

{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=99a=55;

最终a=55

三、实验内容

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

#include 

<

unistd.h>

sys/wait.h>

main 

()

{intstatus;

int 

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

pid1=fork();

(pid1 

== 

0)

pid1=0,my 

process 

id 

is 

%d\n"

getpid());

else 

0)

{printf("

pid1>

0,my 

pid2=fork();

(pid2 

pid2=0,my 

else 

0)

pid2>

0,my 

}

pid3=fork();

(pid3 

pid3=0,pid1=%d,pid2=%d, 

my 

pid1,pid2,getpid());

pid3>

0,pid1=%d,pid2=%d,my 

is%d\n"

wait(&

status);

exit(0);

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

要求:

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

再读出子进程P2发来的信息行,将其转换为小写字母输出。

【源程序】

Intfiledes[2];

Charbuffer[80];

Main()

Pipe(filedes);

Charstr1[80];

Charstr2[80];

Intpid1,pid2,I;

While((pid=fork())==-1);

If(pid1==0)

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

Printf(“child1inputString1\n”);

Scanf(“%s”,str1);

Write(filedes[1],str,sizeof(str1));

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

Else{

While((pid=fork())==-1)

If(pid2==0)

Lockf(filedes[1],1,0)

Printf(“child2inputstring2\n”);

Scanf(“%s”,str2);

Write(filedes[1],str2,sizeof(stru2));

Lockf(fildes[1],0,0);

If(waitpid(pid1,null,0)==pid1){

Read(filedes[0],buffer,80);

For(i=0;

i<

sizeof(str1);

i++)buffer[i]=toupper(buffer[i]);

Printf(“parent==child1:

%s\n”,buffer);

Print

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

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

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

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