操作系统实验指导Word文档下载推荐.docx
- 文档编号:21353745
- 上传时间:2023-01-29
- 格式:DOCX
- 页数:31
- 大小:29.12KB
操作系统实验指导Word文档下载推荐.docx
《操作系统实验指导Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。
4.3保留和退出vi1
4.4vi态1
4.5在vi中移动光标1
4.6删除正文1
4.7修改正文1
附录3源程序1
exam1.c创建子进程示例11
exam2.c创建子进程示例21
exam3.c利用管道实现单向通信1
exam4.c利用管道实现父子进程双向通信1
exam5.c实现进程互斥示例程序1
exam6.c实现进程同步示例程序1
exam7.c生产者和消费者问题1
exam8.c请求页式存储管理页面置换算法比较1
实验一熟悉Linux环境
实验目的:
掌握linux常用命令的用法、
vi编辑器的使用及Emacs编辑器的用法。
实验内容:
Linux常用命令:
ls、mkdir、rm、cp、pwd……
vi编辑器的使用
Emacs编辑器的使用
实验二进程创建及进程通信
掌握linux进程创建的基本方法及进程间的通信
利用fork()创建子进程,利用pipe()实现进程间的通信。
实验三生产者-消费者问题
掌握进程之间的同步与互斥
利用信号量实现生产者-消费者问题。
实验四存储管理实验
通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式管理的页面置换算法。
(1)通过随机数产生一个页地址流,共640页
(2)用户内存容量为4页到32页
(3)计算并输出下述各种算法在不同内存容量下的命中率。
1)FIFO先进先出算法
2)LRU最近最少使用页面算法
3)OPT最佳淘汰算法
上机实验报告内容
一实验题目与要求
二总的设计思想及环境语言、工具等
三数据结构与模块说明(功能与框图)
四源程序
五运行结果与运行情况
六自我评价与总结
1你认为你完成的作业哪些地方做得比较好或较出色。
2差距与局限,什么地方做的不太好,或什么地方可以做得更好,进一步的工作。
3从本作业得到的收获。
对编写与调试过程中经验教训的总结。
4对实验题的评价和改进意见
附录1Cygwin使用指南
1引言
cygwin是一个在windows平台上运行的unix模拟环境,是cygnussolutions公司开发的自由软件。
它对于学习unix/linux操作环境非常有用。
2机理
cygnus当初首先把gcc,gdb,gas等开发工具进行了改进,使他们能够生成并解释win32的目标文件。
然后,他们要把这些工具移植到windows平台上去。
一种方案是基于win32api对这些工具的源代码进行大幅修改,这样做显然需要大量工作。
因此,他们采取了一种不同的方法——他们写了一个共享库(就是cygwin.dll),把win32api中没有的unix风格的调用(如fork,spawn,signals,select,sockets等)封装在里面,也就是说,他们基于win32api写了一个unix系统库的模拟层。
这样,只要把这些工具的源代码和这个共享库连接到一起,就可以使用unix主机上的交叉编译器来生成可以在windows平台上运行的工具集。
以这些移植到windows平台上的开发工具为基础,cygnus又逐步把其他的工具(几乎不需要对源代码进行修改,只需要修改他们的配置脚本)软件移植到windows上来。
这样,在windows平台上运行bash和开发工具、用户工具,感觉好像在unix上工作。
3安装设置cygwin
3.1安装
要安装网络版的cygwin,可以到,点击"
InstallCygwinNow!
"
。
这样会先下载一个叫做setup.exe的GUI安装程序,用它能下载一个完整的cygwin。
按照每一屏的指示可以方便的进行安装。
3.2改变cygwin的最大存储容量
Cygwin程序缺省可以分配的内存不超过384MB(program+data)。
多数情况下不需要修改这个限制。
然而,如果需要更多实际或虚拟内存,应该修改注册表的HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER区段。
添加一个DWORD键heap_chunk_in_mb并把它的值设为需要的内存限制,单位是十进制MB。
也可以用cygwin中的regtool完成该设置。
例子如下:
regtool-iset/HKLM/Software/Cygnus\Solutions/Cygwin/heap_chunk_in_mb1024
regtool-vlist/HKLM/Software/Cygnus\Solutions/Cygwin
附录2Linux简介
1Linux的产生
Linux操作系统的历史是与Unix操作系统的历史联系在一起的,在较小的程度上与一个称作Minix的程序也联系在一起。
在1991年,一个名为LinusTorvals的芬兰大学生,他由于付不起研究Unix的巨大费用,他就产生了自己做一个与Unix性能相似的免费的系统供所有计算机爱好者使用。
他把Minix系统中的一些计算机科学概念集成起来模仿Unix系统,几个月后,他开发出了Linux核心0.02版,Linux诞生了。
Linux的发展离不开Internet网络,可以说是网络的产物,是全世界计算机爱好者开发出来的。
它是自由的免费的软件。
Linux只是一个内核,Linux发行版是Linux内核以及各种应用软件的集合,那么Linux出现了两种版本号。
一种是内核版本,一种是发行版本号。
例:
发行版本:
RedHat7.2,内核版本号:
2.4.10。
Linux内核版本号的格式是由3位数字组成n.x.y:
其中数字n是主版本号;
数字x是标志位,当x是偶数时,表示此版本为稳定版,当x是奇数时,表示此版本为测试版,内核不很稳定;
数字y表示错误修正次数。
一般情况下,数字越大表示版本越高。
2文件存取权限和所有权限
每一个目录和文件都有一个所有者、一个分组和一系列存取权限。
存取权限本身又分为对应着所有者、分组和全体用户的几个组成部分。
文件的存取权限是使用长格式化文件列表命令(ls-l)列文件清单时出现在最左边的第一数据段。
这个数据段又可以被分解为10个标志位。
(1)类型标志位
存取权限数据段的第一位,或者第一个字母表示的是这个项目的类型,许多不同的项目会用到这个标志位:
-—表示该项目是一个普通文件
d—表示该项目是一个目录
l—表示该项目是一个符号链接
s—表示该项目是一个可执行文件,不论谁都可以像它的所有者那样调用它运行
c—表示该项目是一个字符设备驱动程序
b—表示该项目是一个块设备驱动程序
(2)存取权限三位组
存取权限的其余部分每三位一组,分为三组。
类型位后面的第1个三位组定义了其所有者的存取权限。
第2个三位组定义了其所在分组的存取权限;
第3个三位组则说明了系统上任何人的存取权限。
从上面的介绍可以看出,认真设置这些标志位是非常重要的。
(3)解读三位组
解读各个三位组的方法是完全一样的。
每一个三位组是由3个不同的数据位组成的:
•读标志位(r)
•写标志位(w)
•执行标志位(x)
这些标志位永远都按照同一个顺序显示为rwx的形式。
区别某个标志位是处于允许(on)还是禁止(off)的状态就要看该标志位是显示为一个字母还是一个连字符(-)。
举例来说,在rw-存取权限数据段表示读标志位在允许状态、写标志位在允许状态、但是执行标志位就是禁止状态;
所以这个三位组就表示具有读和写的权限,但是没有可执行权限。
3常用命令用法
3.1查询命令说明的man命令
Linux操作系统中的许多命令都带有扩展文档。
获得帮助最快的方法是使用man(英文manual的缩写)命令。
它将显示该命令的使用手册页—如果这个命令有使用手册页的话。
输入“mancommand”打开一个使用手册页;
按下q键从中退出。
如果在某个使用手册页的开始部分说明这个文档将不再继续有效,需要另外使用texinfo程序阅读,请使用“infocommand”的格式阅读这个文件。
用法:
man[命令名称]
由于显示画面很长,我们可用pageup和pagedown来上下切换画面。
注意:
Linux中区分大小写,命令一般用小写。
3.2列出文件列表的ls命令
作用:
显示当前目录有哪些文件和子目录。
不加任何参数:
显示当前目录的内容。
-a显示所有文件和目录(若无此参数,句点开始的文件和目录不会显示出来)
-A显示所有文件和目录(它比-a少显示.和..两项)
-F在特殊文件或目录上加上标示(子目录后加/,程序文件后加上*)
-l以长格式显示。
会显示文件或目录的详细信息。
ls
ls–a
ls-al//参数的混合使用
ls-l|more//符号|为管道操作,将ls–l的输出作为more的输入
3.3切换目录的cd命令
cd..切换到上一级目录
cd/切换到根目录
cd~切换到用户目录
“.”表示当前目录。
cd<
path>
切换到指定的路径
3.4建立目录的mkdir命令
mkdirdata在当前目录下建立data子目录
mkdir/data在根目录下建立子data目录
注意:
用户不能在一个不存在的目录下建立子目录。
3.5删除目录的rmdir命令
rmdir可用来删除空的子目录。
rmdirdata
rmdir/data
如果要删除具有文件或子目录的目录,用rm会比较方便。
3.6拷贝文件的cp命令
cpdata1.txtdata2.txt
cpdata3.txt/tmp/data
关于cp命令的参数。
-i覆盖相同文件名称前先询问用户。
-v显示命令的执行过程
-r递归拷贝,即拷贝时将所有目录一并拷贝。
3.7删除文件或目录的rm命令
rmdata.txt
rm*
参数说明:
-f强迫删除文件,不询问用户
-r递归删除。
(将参数中列出的全部目录和子目录删除)
-i进行交互式删除
每次以一个page显示
一般和别的命令用管道符配合使用。
例如:
ls-l|more
显示文件的内容
catdata.txt显示文件的内容
3.10移动或更改文件名的mv命令
mvdata.txt..移动文件
mvdata1.txtdata2.txt更改文件名
3.11显示目前所在目录的pwd命令
pwd
3.12less命令
与more命令相似,一次以一个page显示,可以前翻、后翻
less文件名称
寻找文件与目录
find/-namegzip-print
3.14显示文件类型的file命令
file文件名
3.15搜寻字符串的grep命令
一般用来过滤先前的结果,而避免显示太多不必要的信息。
3.16重定向与管道符
|管道操作,前一个命令的输出是后一个命令的输入
〉可将结果输出到文件中,如果该文件原来就存在,则该文件原有内容会被删除。
》将结果附加到文件后面,原文件内容不会被清除。
ls–l>
dir.txt
catdata1.txt>
>
all_data.txt
修改文件的权限
chmodu+rwxfile1
chmodu-xfile1
chmodg+rw,o+rfile1//同组用户对file1增加权限是可读、可写,其它用户则只能读
chmod700file1
查询正在执行的进程
终止正在执行的进程
清除屏幕
4vi的用法
任何计算机用户最常做的事之一就是创建和编辑文件,包括文档、报告和文字等。
在Linux/Unix操作系统中vi是一个有效的、相对简单的全屏幕编辑。
使用vi,只要知道少量基本命令,然后,就能逐步扩大你的能力,去使用大量更复杂的命令。
4.1vi概述
•vi表示“visualeditor”(直观编辑)。
•vi是一个Linux/Unix操作系统世界中极为普遍的全屏幕文本编辑器。
•vi提供了面向行和面向屏幕的有力特点,能完成任何正文编辑任务。
•vi使你能创建新文件、修改旧文件。
4.2调用vi
•在命令行上打入:
$vifilename
•如果文件存在,就能看到指定文件的前24行。
•如果文件是新的,就能在屏幕底部看到告诉你正在创建新文件的信息。
•一行开始处的波折号(~)表示文件的结尾。
4.3保留和退出vi
•在改变文件的屏幕样本时,未改变原始正文文件。
•改变成命令态,并打入:
w,则写或保留,作出对文件的改变。
•最好你经常保留你的改变。
如果你不常保留,在掉电或计算机故障时,就损失了你的工作结果。
•当你完成了在文件上的工作后,打入:
wq,写你改变后的文件,退出vi。
•:
x和ZZ完成与:
wq同样的工作。
•不要保留任何修改的退出,打入:
q!
,如果你已做了改变,但不希望保留它,这种用法是有用的。
4.4vi态
•vi使用了二种状态:
命令态和插入态。
•当vi处于命令态时,打入的内容作为命令来解释。
•大多数vi命令是单字符。
•当vi处于插入态时,可打入正文给文件。
•调用vi后,设置为命令态。
•从插入态改变为命令态,按<
ESC>
键。
•从命令态改变成插入态,使用以下插入命令之一。
a.命令i在光标处插入正文。
b.命令I在一行开始处插入正文。
c.命令a在光标后追加正文。
d.命令A在行尾追加正文。
e.命令o在光标下面新开一行。
f.命令O在光标上面新开一行。
•在插入态处,不能打入命令,必须先按<
键,返回到命令态。
•你不知道自己处于何态,按<
,不管原先是何态,都回到命令态。
4.5在vi中移动光标
•在全屏幕编辑时,能移动光标到文件的某位置,以便打入正文或作改变。
•若键盘上有箭头键,就能在命令态中用它们,将光标进行上、下、左、右移动。
•在命令态中,使用以下命令,在文件内部移动。
a.h往左移动光标一个字符。
b.l往右移动光标一个字符。
c.k
向上移动光标一行。
d.j向下移动光标一行。
e.w向前移动光标一个字。
f.b向后移动光标一个字。
g.$移动光标到一行结尾处。
h.O移动光标到一行开始处。
i.G移动光标到文件结尾。
j.1G移动光标到文件开始。
k.<
ctrl>
+u向上移动半个屏幕。
l.<
+d向下移动半个屏幕。
4.6删除正文
•x删除光标处字符。
•X删除光标前字符。
•dw删除下一字符。
•dd删除整个一行。
•在删除命令前打入的数,表示执行此命令多少次,例如:
15dd删除下15行。
•d$或D将从光标处到行结尾处均删除。
•d0或d^将从光标处到行开始处均删除。
•u恢复前一次所做的删除。
4.7修改正文
•r后跟的一个新字符代替在光标处的字符。
•R打入需代替的一组正文字符,修改完后按<
返回命令态。
•cw代替整个字,从打入起到按<
止。
•c$或C将替代光标到行结尾处的正文。
•c0将替代从光标到行开始处的正文。
•cc使整个行空白,但保留光标位置,让你开始打入。
•如删除命令一样,在命令前打入的数,表示执行该命令多少次。
附录3源程序
exam1.c创建子进程示例1
//父进程创建一个子进程,父进程显示"
金木水火土"
,子进程显示"
日月星辰"
多次运行该程序会得到不同的运行结果。
#include<
unistd.h>
stdio.h>
stdlib.h>
main()
{
intpid,n=0;
srand(getpid());
/*设置随机种子*/
if((pid=fork())!
=0)
while(n<
5)
{printf("
%d"
n++);
printf("
金木水火土\n"
);
sleep(rand()%3);
}//睡眠
else
日月星辰\n"
}
exam2.c创建子进程示例2
//子进程改变了全局变量globa和局部变量vari的值。
通过调试运行,体会进程的运动轨迹。
sys/types.h>
intgloba=4;
intmain(void)
{pid_tpid;
intvari=5;
printf("
beforefork\n"
if((pid=fork())<
0){
printf("
forkerror\n"
exit(0);
}
elseif(pid==0){
globa++;
vari--;
Childchangedthevarianfgloba.\n"
}
elseprintf("
Parentdidn'
tchangedthevariandgloba.\n"
globa=%d,vari=%d\n"
globa,vari);
}
exam3.c利用管道实现单向通信
//利用管道实现单向通信
#defineMAXLINE80
{intn,fd[2];
pid_tpid;
charline[MAXLINE];
if(pipe(fd)<
0)
{
pipeerror!
\n"
exit
(1);
if((pid=fork())<
{printf("
elseif(pid>
close(fd[0]);
write(fd[1],"
Howareyou?
15);
Parent:
successfully!
else{
close(fd[1]);
n=read(fd[0],line,MAXLINE);
Child:
Readingfromthepipe:
%s\n"
line);
exam4.c利用管道实现父子进程双向通信
//利用管道实现父子进程双向通信
{intn,fd1[2],fd2[2];
if(pipe(fd1)<
pipe1error!
if(pipe(fd2)<
pipe2error!
exit
(2);
close(fd1[0]);
close(fd2[1]);
write(fd1[1],"
n=read(fd2[0],line,MAXLINE);
close(fd1[1]);
close(fd2[0]);
n=read(fd1[0],line,MAXLINE);
write(fd2[1],"
I'
mfine,andyou?
30);
successfully\n"
exam5.c实现进程互斥示例程序
由于cgywin模拟器软件没有完全模拟linux的功能,比如信号量,内存共享、消息缓冲器等,所以实现进程的同步和互斥较为困难。
本指导书提供了一个模拟的P和V操作,利用它可实现进程的互斥与同步,本模拟程序在运行过程中可能会出现一些问题,感兴趣的同学可参考本程序,共同研究探讨,逐步完善。
/*源程序sem.h
模拟P和V操作,在使用信号量时,先通过set_sem_init(intorder,intvalue)函数对信号量赋初值,参数order说明信号量序号,value为信号呈的初值。
P操作的调用为p(intorder),order为信号量的序号。
V操作的调用为v(intorder),order为信号量的序号,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 指导