操作系统实验指导Word文档下载推荐.docx

上传人:b****6 文档编号:21353745 上传时间:2023-01-29 格式:DOCX 页数:31 大小:29.12KB
下载 相关 举报
操作系统实验指导Word文档下载推荐.docx_第1页
第1页 / 共31页
操作系统实验指导Word文档下载推荐.docx_第2页
第2页 / 共31页
操作系统实验指导Word文档下载推荐.docx_第3页
第3页 / 共31页
操作系统实验指导Word文档下载推荐.docx_第4页
第4页 / 共31页
操作系统实验指导Word文档下载推荐.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

操作系统实验指导Word文档下载推荐.docx

《操作系统实验指导Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《操作系统实验指导Word文档下载推荐.docx(31页珍藏版)》请在冰豆网上搜索。

操作系统实验指导Word文档下载推荐.docx

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模板 > 商务科技

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1