操作系统实验报告书.docx
- 文档编号:6756691
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:24
- 大小:85.07KB
操作系统实验报告书.docx
《操作系统实验报告书.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告书.docx(24页珍藏版)》请在冰豆网上搜索。
操作系统实验报告书
《操作系统原理》
实验报告书
班级:
学号:
姓名:
指导教师:
2014-2015学年第一学期
实验名称:
LINUX用户界面
实验时间:
2014年10月8日第_周星期三
一、实验目的
1熟悉Linux字符操作界面,熟练掌握常用Shell命令。
2.熟悉Linux中文本编辑方法,学会编辑软件vi的使用。
3.了解Linux编绎器gcc的功能,掌握基于Linux平台的C程序开发。
二、实验预习(预备知识的问题及回答)
1.为什么在Linux系统中,诸如光盘、U盘等要先挂载而后才能使用?
如何获得U盘的
设备名?
装载点在文件系统中的位置是什么?
由于文件系统的差异,Linux在默认情况下并不支持软盘,光盘,U盘,所以需要通过装
在相应盘片才可以访问其中的数据
装载点是挂载文件系统的目录位置
2.从虚拟机界面退出进入WindowsOS界面的操作是Ctrl+Alt,从
WindowsOS界面进入虚拟机界面的方法是鼠标点击虚拟机界面。
3.权限的含义是什么?
如何使用数字法设定文件的权限?
Linux系统中的每个文件和目录都有相应的访问许可权限,访问权限分为只读(r),可写
(w)和可执行三种,有三种不同类型的用户可以对文件或者目录进行访问,分别是文件所有者(u),同组用户(g)和其它用户(o)。
所有的文件和目录都被创建他们的人所拥有。
只要你是这个文件的所有者或者你登陆为用户,你就拥有了改变所有者,群组和其他人权限的
权利。
使用数字法改变权限:
命令格式chmod权限数值文件名
说明给指定文件赋予数值所规定的权限
在数字设定法中,每种权限设置均可以用数值来代表,其中0表示没有权限,1表示可执
行权限,2表示可写权限,4表示可读权限,这些值之和便可以用来设定特定权限。
4.什么过滤操作?
在Linux中如何实现?
过滤操作:
将一个命令的输出作为一个命令的输入Linux实现的命令格式:
命令|命令
一般用ls+通配符,或grep,sed或awk这些支持正则表达式的工具都可以实现。
5•在Linux中挂载u盘并能显示其文档的中文信息,所使用的挂载命令是:
Mount/dev/sdal/mnt/usb。
6.什么是vi?
其三种操作模式的含义是什么?
给出三种工作模式间的转换图。
vi是一个功能强大命令繁多的工具,其兼容于众多的类Unix系统,使用十分广泛。
但是它并不提供排版功能,仅提供文字编辑功能。
命令模式:
vi启动后的默认模式,控制光标的移动,复制删除文字,进入输入模式和末行
模式
输入模式:
进行文字输入
末行模式:
保存文件,退出VI
三、实验内容(包含实验所用命令或相关程序源代码)
1.shelI操作命令(给出每题所用的Shell命令或命令结果)
(1)创建名为stu1、stu2的2个用户,设置密码分别为student1和student2,并将它们设为
组group1中的成员。
#groupaddgroup1
#useraddstu1-ggroup1
#sustu1
Spasswdstu1回车后敲入密码student1
$exit
#useraddstud2-group1
#sustu2$passwdstu2
$exit
(2)在每个用户的主目录下建立2个目录,分别命名为dirl和dir2。
#sustul
$cd~
$mkdirdirl
$exit
#sustu2
$cd~
$mkdirdir2
$exit
(3)查找stul用户主目录、下属各子目录的默认存取权限,并给出结论。
#sustul
$cd..
$ls-1
用户主目录权限为:
drwx,即目录的用户可读,写,执行,同组和其它的用户无任何权
限
#suStu'
$cd~
$ls-1
Dirl目录权限为:
drwxr-xr-x,即目录的用户可读,写,执行
(4)调试pwd和cd命令,回答下列关于Linux文件系统中目录的有关问题。
1用户主目录的绝对路径如何表示?
/home/stu1/home/stu2
2根目录如何表示?
/root
3•和••分别表示什么目录?
子目录,父目录
4〜表示什么目录?
用户主目录
5当前目录如何表示?
吐
(5)新建用户stu3,设置其密码为student3,并将其设置为group2中成员。
尔后,以stu3登录,在其主目录下建立名为text的目录,在text目录下再建立名为dir1的子目录,并使
其成为当前目录。
#groupaddgroup2
#useraddstu3-ggroup2
#sustu3
$passwd回车后敲入密码student3
$cd~
$mkdirtext
$mkdirdirl
$cdtext/dirl
(6)使用cat>sneakers.txt命令,分析命令行catsneakers.txt的显示结果。
$cat>sneakers.txt
buysomesneakers
thengotothecoffeeshop
thenbuysomecoff
AD
$catsneakers.txt
从键盘中创建一个名为sneakers.txt文件,文件内容为:
buysomesncakers
Thengotothecoffeeshop
Thenbuysomecoff
(7)使用上题的方法,在dirl目录中建立home.txt文件,其内容为:
bringthecoffeehome
takeoffshoes
putonsneakers
makesomecoffee
relax!
$cd/home/stul/dirl
$cat>home.txt
Bringthecoffeehome
Takeoffshoes
Putonsneakers
Makesomecoffee
Relax!
[ctrl+d]
(8)试写出实现下列功能的shell命令:
1将home.txt文件移至其上级目录中(即text目录下)。
$mv/home.txt
2将home.txt添加到sneakers.txt尾部形成新的文件saturday.txt。
$catcneakers.txAasturday.txt
$cathome.txt»Saturday.txt
3将text目录树从stu3用户主目录下移至stu2主目录下。
【使用特权用户方法】
su
mv/home/stu3/text/home/stu2
【修改目录权限方法】
#cp/home/stu3/text/home/stu2
(9)试画出上述命令后,用户stu1、stu2和stu3主目录中的目录树(3棵子树)
2.LinuxC程序开发
copy功能。
(1)编写LinuxC程序,把一个文件的内容复制到另一个文件中,即实现简单的要求:
程序输入的第一个参数是源文件,第二个参数是目标文件。
【源程序】
#include
#include
#include
#include
Intmain(intargc,char*argv[])
{
FILE*in,*out;
Charch;
lf(argc!
=3)
{
Printf(youforgottoenterafilename'n”;Exit(0);
}
lf(in=fopen(argv[1],””)==NULL
{
Printf(Cannitopenoutfile\n”;
Exit(0);
}
lf(out=fopen(argv[2],"w”)==NULL
{
Prntf(Cannotopenoutfile”;Exit(0);
}
While(!
feof(in))fputc(in),out);
Fclose(in);
Fclose(out);
【运行命令】
#gcc-otestcopy.c
#./testfilel.cfile2.c
saturday.txt文件的权限
(2)编写LinuxC程序,列出stu2主目录中的文件信息,并将其中
设置为文件所有者可读可写、同组用户只读、其他用户无权限。
【源程序】
#include
#include
#include
#include
Intmain(intargc,char*argv[])
{
DIR*dp;
Structdirent*dirp;
Intn=0;
lf(arge!
=2)
{
Printf(asignleargementisrequired”Exit(0);
}
If(dp=opendir(argv[1])==NULL)
{
Printf(“annotopen%s",args[1]);
Exit(O);
}
While(((dirp=readdir(dp))!
=NULL)&&(*=50))
{
lf(n%仁=O)printf(“”;
N++;
Printf(%10s\n",dirp->d_name);
}
System(chmod640/home/stu2/text/dir1/Saturday.txt”
}
【运行命令】
#gcc-otestlist.c
#./test.home/stu2
实验名称:
SHELL程序设计
实验时间:
2014_年10_月_22^日第八周星期三
一、实验目的
熟悉SHELL脚本编程的步骤,掌握基于Bash的Shell脚本开发
二、实验预习(预备知识的问题及回答)
1.Linux系统默认的shell语言是什么?
欲查看该shell的版本,应使用什么命令?
Bashshell
$echo$BASH_VERSION
2.预习shell有关变量和参数的相关知识,回答下列问题。
(1)假设用户进行了如下的赋值操作:
$person=jenny
试给出下面命令的输出结果。
1)echoperson.person
2)echo$personjenny
3)echo$person'$person
4)echo$person”jenny
(2)填充下列与环境变量、位置变量和预定义变量相关的表格。
Shell变量
定义
HOME
保护用户注册目录的绝对路径
PATH
保存用冒号分割的目录路径
PWD
当前工作目录的据对路径名
PS1
主提示符,特权用户为#,普通用户为$
$0
当前shell程序的文件名
$#
位置参数的个数
$?
前一个命令执行后返回的状态
$$
当前进程的PID
3.写出下列expr命令的输出:
(1)
expr
index
Value”a'
(2)
expr
value
•c*〉
v.*u
(3)
expr
a?
?
aaa
:
a\+'
(4)
expr
a?
?
aaa
:
a\?
‘
(5)
expr
2+3
(6)
expr
2+
3
(7)
expr
2\*
3
(8)
expr
5+
'expr2+3'
(9)
expr
length
operatingsystem
(10)
expr
substrlinux23
2
4
31
2+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”warning2invalidoperator!
"exit;;
EsacEcho”answessz”
Else
Echo”usage$0value1operatorvalue2”
fi
【运行】
Chmoda+xjisuan
./jisuan2+3
2•编写一个以文件列表作为输入的过滤器程序,要求文件名含有以句点过滤器输出每个文件的不带句点和后缀的文件名。
【源程序】
Readflag
Whiletest“$flag”
Do
Location=?
expr$location=1?
Basename=?
exprsubstr=”$flag$location?
Echo$basecname
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
【脚本功能分析】
将命令行输入的参数倒叙显示
分隔的后缀,
n和第二个参数m所限
4•设计一个程序cuts,它从标准输入读入数据,获取由第一个参数定范围的数据(包括这两个字符),n和m都是整数。
例如:
Thisisatestofcutsprogram(输入)
test(显示结果)
【源程序】
#!
/bin/bash
Readbline
Echo$aline|cut-c$1-$2
实验名称:
进程控制与通信
实验时间:
2014年月互日第十周星期三
一、实验目的
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
Printer当前进程是父进程
3•图示pipe系统调用生成无名管道时所涉及的数据结构。
hkJi-41]
4.在UNIX系统中运行下面程序,最多可以产生多少个进程?
画出进程家族树。
main()
{fork();
fork();
fork();
}
5•下列程序运行后,a的值是多少?
main()
{inta,pid;
a=55;
pid=fork();
if(pid<0){printf("errorinfork!
");exit(O);}
elseif(pid==0){sleep(5);a=99;printf(n”,a“tee%(5);exit(0);}
else{sleep(7);
printf(“a=%®);wait(O);
}
}
a=99a=55;最终a=55
三、实验内容
i调试下面的程序,观察可能的并发结果,给出简要分析,并画出进程家族树。
#inelude
#inelude
#include
main()
{intstatus;
intpid1=-1,pid2=-1,pid3=-1;
pid1=fork();
if(pid1==0)
printf("pid1=0,myprocessidis%d\n”,getpid());
elseif(pid1>0)
{printf("pid1>0,myprocessidis%d\n”,getpid());
pid2=fork();
if(pid2==0)
printf("pid2=0,myprocessidis%d\n”,getpid());
elseif(pid2>0)
printf(”pid2>0,myprocessidis%d\n”,getpid());
}
pid3=fork();
if(pid3==0)
printf("pid3=0,pid1=%d,pid2=%d,myprocessidis%d\n",pid1,pid2,getpid());
elseif(pid3>0)
printf("pid3>0,pid1=%d,pid2=%d,myprocessidis%d\n",pid1,pid2,getpid());
wait(&status);
exit(0);
}
2•编程实现进程间管道通信。
要求:
父子进程共享一无名管道,两个子进程作为发送方分别向管道发送一行信息,父
进程先读出子进程P1发来的信息行,将其转换为大写字母输出;再读出子进程P2发
来的信息行,将其转换为小写字母输出。
【源程序】
Intfiledes[2];
Charbuffer[80];
Main()
{
Pipe(filedes);
Charstr1[80];
Charstr2[80];
Intpid1,pid2,l;
While((pid=fork())==-1);
If(pid1==0)
{
Lockf(filedes[1],1,0);
Printf(“child1inputString1);
Scanf(“%s‘,str1);
Write(filedes[1],str,sizeof(str1));
Lockf(filedes[1],0,0);Exit(O);
}
Else
{
While((pid=fork())==-1)
If(pid2==0)
{
Lockf(filedes[1],1,0)
Printf(“chin”);
Scanf(“%s‘,str2);
Write(filedes[1],str2,sizeof(stru2));
Lockf(fildes[1],0,0);
Exit(0);
}
Else
{
If(waitpid(pid1,null,0)==pid1)
{
Read(filedes[0],buffer,80);
For(i=0;i Printf(“parent==child1: %”’buffer); } ElsePrintf(“waitpidlerror! ”); lf(waitpid(pid2,NULL,0)==pid2) { Read(filees[0],bufferm80); For(i=0;i Buffer[i]=tolower(buffer[i]); Printf(“parent==child2: %”,buffer); } Else Printf(“waitpid2error! ”); } } } 【运行与测试】 frMlCRiOMIbDBIillIJFlHjJl-oI, (irooIhi'Ii)in/Iri1 iIdin|HUiI11rmgI bInvryuu ■rnIrIIIIIII1LXI丨 rhiId2lfl|XiI4Ir ntLMl parenL・chiI: i淞Iuu: 附加题 3•学习下面共享存储区的内容,并用共享存储区的方式实现“观察者一一报告者”问题(共享的count变量存于共享存储区),并验证“与时间有关的错误”。 共享存储操作使得两个或两个以上的进程可以共用一段物理内存(一般情况下,两个进程的 数据区是完全独立的,父进程用fork创建子进程后,子进程会复制父进程数据到自己的数 据区)。 (1)创建共享内存 #include intshmget(key_tkey,size_tsize,intpermflags); 参数key是共享内存的标识,size是共享内存段的最小字节数,permflags是访问权限,值的 设置同semget一样。 (2)共享内存的控制 #include intshmctl(intshmid,intcommand,structshmid_ds*shm_stat); command可设为IPC_STAT,IPC_SET,IPC_RMID。 参数shm_stat指向存放属性的结构体,具体内容请参考手册。 (3)共享内存的附接和断开 #include void*shmat(intshmid,constvoid*addr,intshmflags); intshmdt(constvoid*addr); 由于两个函数需指出进程地址空间中的地址,因此比较复杂。 简化的方法是将shmat中的地 址设为NULL。 【源程序】 【运行与测试】 实验名称: 虚拟存储 实验时间: 2014年12月10日第15周星期三 一、实验目的 1,掌握虚拟存储器的概念,理解实现虚拟存储器的基本方法 2,体会分页存储器管理中,页面置换的过程 3,进一步认识多种页面置换算法的实现机制 二、实验预习(预备知识的问题及回答) 1•描述请求分页的地址转换过程。 2.解释FIFO页面置换算法所产生的Belady现象。 Belady现象是指当进程分配的内存块数增加时,进程缺页率反而上升的现象。 FIFO算法在 页面置换时,总是淘汰先进入主存的页面,而先进入主存的页面并不一定是以后用不到的页
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告书