计算机操作系统实验指导书4_第1页
计算机操作系统实验指导书4_第2页
计算机操作系统实验指导书4_第3页
计算机操作系统实验指导书4_第4页
计算机操作系统实验指导书4_第5页
已阅读5页,还剩103页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

刖s

计算机技术的飞速发展正在引发新一轮世界性技术革命。在经济发展越来越全球化、科

技创新越来越国际化、知识经济已初见端倪的今天,任何一门技术或任何一个领域离开了计

算机恐怕都是不可想象的。然而计算机技术发展之迅速、计算机及其相关IT产品市场竞争

之激烈、计算机产业让人致富之迅猛也同样是人们始料不及的。在新世纪,任何想在技术领

域有一番作为的人,恐怕都不得不面对计算机技术的挑战。

学习计算机软件技术,特别是计算机操作系统技术,除了需要刻苦努力外,还需要掌握

软件和操作系统的原理与设计技巧。这些原理与技巧可以说是计算机前辈们一代接•代不停

努力的结晶,学习和掌握它们对于激发自己的创造力和想象力是很有帮助的。

如何学习和掌握操作系统技术的原理与实际技巧呢?除了听课和读书之外,最好的办法

恐怕就是在实践。例如,自己设计一个小型操作系统,多使用操作系统,多阅读和分析操作

源代码等。当前非常流行的Linux操作系统的原始版就是一位大学生的练习之作。除了上

述练习方法之外,习题和实验是很重要的实践环节。

本书是一本配合《操作系统》课程的实验指导书,共收集了供广大同学实践的七个实验

(其中最后一个可以用作课程设计),包括处理器调度、虚拟存储器、进程同步、驱动调度、

进程通信以及UNIX实践。除了给出题目外,还附带了大量的有效提示,在不降低实验难度

的基础上,给读者最大的启发性提示。当然,这些提示只是一种参考,里面完全可能存在错

误和不妥之处,有待于各路高手的指教,读者可以不局限于这些提示。

本书的编写得到了本学院科学系詹永照老师的大力帮助和支持,他对本书内容的安排组

织上提供了宝贵意见,综合他多年的教学经验给我们作了醍醐灌顶,发聋振瞧的指导。在此,

编者对他表示衷心的感谢!

衷心希望本书能对学习计算机操作系统和计算机软件的人有所帮助。

编者

2004年4月于镇江

1

实验要求4

实验一处理器调度5

一、实验内容5

二、实验目的5

三、实验题目5

四、实验报告8

实验二虚拟存储器9

一、实验内容9

二、实验目的9

三、实验题目9

四、实验报告15

实验三驱动调度16

一、实验内容16

二、实验目的16

三、实验题目16

四、实验报告20

实验四同步机构21

一、实验内容21

二、实验目的21

三、实验题目21

四、实验报告27

实验五UNIX系统28

一、实验内容28

二、实验目的28

三、实验题目28

四、实验报告31

实验六进程间通信32

一、实验内容32

二、实验目的32

三、实验题目32

四、实验报告37

课程设计38

-课程设计的内容38

二、课程设计的要求38

三、课程设计的目的38

四、课程设计具体内容39

第一部分认识LINUX39

第二部分LINUX安装40

第三部分进入LINUX41

第四部分深入了解LINUX42

第五部分LINUX代码分析48

第六部分检查方法65

附录1UNIX辅导66

第一章UNIX常用操作66

1.1启动终端66

1.2登录66

1.3UNIX命令67

1.4注销(退出UNIX系统)70

第二章UNIX文件系统72

2.1UNIX文件系统分类72

2.2UNIX文件类型72

2.3UNIX树型目录结构73

2.4UNIX文件名称73

2.5UNIX文件存取权限74

2.6UNIX重定向与管道75

2.7UNIX文件系统常用命令76

第三章UNIX文件系统常用工具和实用程序78

3.1VI编辑器的最基本用法78

3.2利用FIND命令查找文件79

3.3GREP命令基本用法79

3.4利用CMP命令比较文件80

3.5文件的备份和恢复实用程序80

3.6文件压缩和解压程序82

附录2如何阅读源程序逻辑83

实验要求

1,每位同学准备实验本,上机前作好充分的准备工作,预习本次实验的内容,

事先熟悉与实验有关的软硬件环境。

2,实验时遵守实验室的规章制度,爱护实验设备,不得私自将使用的计算机

加密码,影响其他同学的上机。原则上每人固定实验设备,由始而终地进

行实验,对于实验设备出现的问题,要及时向指导老师汇报。

3,统一以以下格式命名本人的实验文件:

[班级][学号]」实验题号M扩展名]

例:计021班学号为03的学生第四个实验的文件名为:j02103_4.c

4,最终的实验报告按照要求书写(或打印),按时上交,仔细记录实验中的

数据、源程序、实验结果,对于实验过程中出现的问题或疑惑要一并书写,

并作为重点加以思考。

实验一处理器调度

一、实验内容

选择一个调度算法,实现处理器调度。

二、实验目的

在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就绪状态进程

个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。本实验模拟在

单处理器情况下处理器调度,帮助学生加深了解处理器调度的工作。

三、实验题目

本实验有两个题目,学生可选择其中的一题。

第一题:设计一个按优先数调度算法实现处理器调度的进程。

[提示]:

(1)假定系统有五个进程,每个进程用一个进程控制块PCB来代表。进程控制块的格

式为:

进程名

指针

要求求运行时而

优先数一

其中,进程名--作为进程的标识,假设五个进程的进程名分别是P”P2,P.VP4,P5。

指针--按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块

首地址,最后一个进程中的指针为“0”。

要求运行时间一假设进程需要运行的单位时间数。

优先数-一赋予进程的优先数,调度时总是选取优先数大的进程先执行。

状态一一可假设有两种状态,“就绪”状态和“结束”状态,五个进程的初始状态都为

“就绪”状态,用“R”表示,当一个进程运行结束后,它的状态变为“结束”,

用“E”表示。

(2)在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”

和“要求运行时间”。

(3)为了调度方便,把五个进程按给定的优先数从大到小连成队列,用一单元指出队首

进程,用指针指出队列的连接情况。例:

队首标志

k2

k]2k3k5

P3P5

P.P2P4

0k4k3

k5ki

23124

15342

RRRRR

PCB1PCB2PCB3PCB4PCB5

(4)处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优

先数就减“1”。由于本实验是模拟处理器调度,所以,对被选中的进程并不实际的

启动运行,而是执行:

优先数一1

要求运行时间一1

来模拟进程的一次运行。

提醒注意的是:在实际的系统中,当一个进程被选中运行时,必须恢复进程的现场,

它占有处理器运行,直到出现等待事件或运行结束。在这里省去了这些工作。

(5)进程运行一次后,若要求运行时间W0,则再将它加入队列(按优先数大小插入,且

置队首标志);若要求运行时间=0,则把它的状态修改为“结束”(),且退出队列。

(6)若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进

程都成为“结束”状态。

(7)在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以

及运行•次后进称对列的变化。

(8)为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理器调度

程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。

第二题:设计一个按时间片轮转法实现处理器调度的程序。

[提示]

(1)假定系统有五个进程,每一个进程用一个进程控制块PCB来代表。进程控制块的格

式为:

进程名

时间一

要求求运行时而

优先数

状态

其中,进程名-一作为进程的标识,假设五个进程的进程名分别是Qi,Q2,Q3,Q4.QS。

指针一进程按顺序排成循环队列,用指针指出下一个进程的进程控制块首地址,最

后一个进程中的指针指出第•个进程的进程控制块首地址。

要求运行时间--假设进程需要运行的单位时间数。

已运行时间-一假设进程已经运行的单位时间数,初始值为“0”。

状态一有两种状态,“就绪”状态和“结束”状态,初始状态都为“就绪“,用“R”

表示,当一个进程运行结束后,它的状态变为“结束”,用“E”表示。

(2)每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“要求运行时

问”。

(3)把五个进程按顺序排成循环队列,用指针指出队列连接情况。另用一标志单元记录

轮到运行的进程。例如,当前轮到Q2执行,则有:

标志单元

k2

k3k5

PiP2P3P4P5

0

k4k5k3ki

23124

15342

RRRRR

PCB1PCB2PCB3PCB4PCB5

(4)处理器调度总是选择标志单元指示的进程运行。由于本实验是模拟处理器调度的功

能,所以,对被选中的进程并不实际启动运行,而是执行:

已运行时间一1

来模拟进程的一次运行,表示进程已经运行过一个单位的时间。

请同学们注意:在实际的系统中,当一个进程被选中运行时,必须置上该进程可以

运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现等待事件

或运行满一个时间片。在这里省去了这些工作,仅用“已运行时间+1”来表示进程

已经运行满一个时间片。

(5)进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一

个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程

要求运行时间W已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若

该进程的要求运行时间=已运行时间,则表示它已经执行结束,应把它的状态修改为

“结束”(E)且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一

个进程的指针位置。

(6)若“就绪”状态的进程队列不为空,则重复上面(4)和(5)的步骤,直到所有进

程都成为“结束”状态。

(7)在所设计的称序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以

及运行一次后进称对列的变化。

(8)为五个进程任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示或

打印逐次被选中进程的进程名以及进程控制块的动态变化过程。

四、实验报告

(1)实验题目。

(2)程序中使用的数据结构及符号说明。

(3)流程图。

(4)打印一份源程序并附上注释。

(5)打印程序运行时的初值和运行结果,要求如下:

i进程控制块的初始状态

□□□□□

ii.选中运行的进程名以及选中进程运行后的各进程控制块状态。

□□□□□

对于ii要求每选中一个进程运行后都要打印。

实验二虚拟存储器

一、实验内容

模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺

页中断。

二、实验目的

在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的

扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。用这种办

法扩充的主存储器称为虚拟存储器。通过本实验帮助同学理解在分页式存储管理中怎样实现

虚拟存储器。

三、实验题目

本实验有三道题目,其中第一题必做,第二,三题中可任选一个。

第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。

[提示]

(1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作

业的开始几页先装入主存且启动执行。为此,在为作业建立页表时,应说明哪些页

已在主存,哪些页尚未装入主存,页表的格式为:

页号志主存块号在磁盘上的位置

其中,标志一用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标

志位=0,则表示该页尚未装入主存。

主存块号--用来表示已经装入主存的页所占的块号。

在磁盘上的位置--用来指出作业副本的每一页被存放在磁盘上的位置。

(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件

的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这

时根据关系式:

绝对地址=块号X块长+单元号

计算出欲访问的主存单元地址。如果块长为2的事次,则可把块号作为高地址部分,

把单元号作为低地址部分,两者拼接而成绝对地址。若访问的页对应标志为“0”,

则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上

的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。

(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。当访问的页在主存时,则

形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的

执行。当访问的页不在主存时,则输出“*该页页号”,表示产生了一次缺页中断。

该模拟程序的算法如图2-1。

图2-1地址转换模拟算法

(4)假定主存的每块长度为128个字节;现有一个共七页的作业,其中第0页至第3页

已经装入主存,其余三页尚未装入主存;该作业的页表为:

015011

118012

219013

311021

40022

50023

60121

如果作业依次执行的指令序列为:

操作页号单元号操作页号单元号

+070移位4053

4-150+5023

X215存1037

存321以2078

取056+4001

—640存6084

(5)运行设计的地址转换程序,显示或打印运行结果。因仅模拟地址转换,并不模拟指

令的执行,故可不考虑上一述指令序列中的操作。

第二题:用先进先出(FIFO)页面调度算法处理缺页中断。

[提示]:

(1)在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个

中断事件。如果主存中已经没有空闲块,则可用FIFO页面调度算法把该作业中最

先进入主存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出

和装入后都要修改页表页表中对应页的标志。

(2)FIFO页面调度算法总是淘汰该作业中最先进入主存的那一页,因此可以用一个数组

来表示该作业已在主存的页面。假定作业被选中时,把开始的m个页面装入主存,

则数组的元素可定为m个。例如:

P[0],P[l].P[m-1]

其中每一个P[i](i=0,1,m-1)表示一个在主存中的页面号。它们的初值为:

P⑼:=0,P[l]:=lPlm-IJ:=m-l

用一指针k指示当要装入新页时,应淘汰的页在数组中的位置,k的初值为“0”。

当产生缺页中断后,操作系统选择P[k]所指出的页面调出,然后执行:

P[k]:=要装入页的页号

k:=(k+1)modm

再由装入程序把要访问的一页信息装入到主存中。重新启动刚才那条指令执行。

(3)编制一个FIFO页面调度程序,为了提高系统效率,如果应淘汰的页在执行中没有

修改过,则可不必把该页调出(因在磁盘上已有副本)而直接装入•个新页将其覆

盖。因此在页表中增加是否修改过的标志,为“1”表示修改过,为“0”表示未修

改过,格式为:

页号标志主存块号修改标志再磁盘上的位置

由于是模拟调度算法,所以,不实际启动输出一页和装入一页的程序,而用输出调

出的页号和装入的页号来代替一次调出和装入的过程。

把第一题中程序稍作修改,与本题结合起来,FIFO页面调度模拟算法如图2-2。

图2-2FIFO页面调度模拟算法

(4)磁盘上,在磁盘上的存放地址以及已装入主存的页和作业依次执行的指令序列都同

第一题中(4)所示。于是增加了“修改标志”后的初始页表为:

页号标志主存块号修改标志在磁盘上的位置

0150011

1180012

2190013

3110021

400022

500023

600121

按依次执行的指令序列,运行你所设计的程序,显示或打印每次调出和装入的页号,

以及执行了最后一条指令后的数组P的值。

(5)为了检查程序的正确性,可再任意确定一组指令序列,运行设计的程序,核对执行

的结果。

第三题:用最近最少用(LRU)页面调度算法处理缺页中断。

[提示]

(1)在分页式虚拟存储系统中,当硬件发出“缺页中断”后,引出操作系统来处理这个中断

事件。如果主存中已经没有空闲块,则可用LRU页面调度算法把该作业中最先进入主

存的一页调出,存放到磁盘上,然后再把当前要访问的页装入该块。调出和装入后都要

修改页表页表中对应页的标志。

(2)LRU页面调度算法总是淘汰该作业中距现在最久没有访问过的那一页,因此可以用一个

数组来表示该作业已在主存的页面。数组中的第一个元素总是指出当前刚访问的页号,

因此最久没被访问的页总是由最后一个元素指出。如果主存中只有四块空闲块且执行第

一题提示(4)假设的指令序列,采用LRU页面调度算法,那麽在主存中的页面变化情

况如下:

306451246

230645124

123064512

012306451

(3)编制个LRU页面调度程序,为了提高系统效率,如果应淘汰的页在执行中没有修改

过,则可不必把该页调出。参看第二题中提示(3)。模拟调度算法不实际启动输出一页

和装入一页的程序,而用输出调出的页号和装入的页号来代替。把第一题中的程序稍作

改动,与本题集合起来,LRU页面调度模拟算法如图2-3。

图2-3LRU页面调度算

(4)按第一题中提示(4)的要求,建立一张初始页表,表中为每一页增加“修改标志”位(参

考第二题中提示(4))。然后按依次执行的指令序列,运行你所设计的程序,显示或打

印每次调出和装入的页号,以及执行了最后一条指令后的数组中的值。

(5)为了检查程序的正确性,可再任意确定一组指令序列,运行设计的程序,核对执行的结

果。

四、实验报告

(1)实验题目(第二题或第三题)。

(2)程序中使用的数据结构及符号说明。

(3)打印一份源程序并附上注释。

(4)打印初始页表,每次调出(要调出一页时)和装入的页号,执行最后一条指令

后在主存中的页面号(即数组的值)。

—.思考题

如果你有兴趣的话,可把两种页面调度算法都做一下,比较两种调度算法的效率(哪种

调度算法产生缺页中断的次数少);分析在什麽情况下采用哪种调度算法更有利?

实验三驱动调度

一、实验内容

模拟电梯调度算法,实现对磁盘的驱动调度。

二、实验目的

磁盘是•种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅

助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求

访问磁盘的输入输出请求等待处理。系统可采用种策略,尽可能按最佳次序执行要求访问

磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低

为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一

个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度

的职能。

三、实验题目

模拟电梯调度算法,对磁盘进行移臂和旋转调度。

[提示]:

(1)磁盘是可供多个进程共享的存储设备,但一个磁盘每时刻只能为一个进程服务。

当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。

当有多个进程提出输入输出要求而处于等待状态时,可用电梯调度算法从若干个等待访问者

中选择一个进程,让它访问磁盘。选择访问者的工作由“驱动调度”进程来完成。

由于磁盘与处理器是可以并行工作的、所以当磁盘在作为一个进程服务时,占有处理

器的另一进程可以提出使用磁盘的要求,也就是说,系统能动态地接收新的输入输出请求。

为了模拟这种情况,在本实验中设置了一个“接收请求”进程。

“驱动调度”进程和“接收请求”进程能否占有处理器运行,取决于磁盘的结束中断信

号和处理器调度策略。在实验中可用随机数来模拟确定这两个进程的运行顺序,以代替中断

处理和处理器调度选择的过程。因而,程序的结构可参考图3—1

开始

(2)“接收请求”进程建立一张“请求I/O”表,指出访问磁盘的进程要求访问的物理

地址,表的格式为:

进程名柱面号磁道号物理记录号

假定某个磁盘组共有200个柱面,山外向里顺序编号(0—199),每个柱面上有20个

磁道,编号为0—19,每个磁道分成8个物理记录,编号0—7。进程访问磁盘的物理地址

可以用键盘输入的方法模拟得到。图3—2是“接收请求”进程的模拟算法。

图3-2“接收请求”模拟算法

在实际的系统中必须把等待访问磁盘的进程排入等待列队,由于本实验模拟驱动调

度,为简单起见,在实验中可免去队列管理部分,故设计程序时可不考虑“进程排入等待队

列”的工作。

(3)“驱动调度”进程的功能是查“请求I/O”表,当有等待访问磁盘的进程时,按

电梯调度算法从中选择一个等待访问者,按该进程指定的磁盘物理地址启动磁盘为其服务。

对移动臂磁盘来说,驱动调度分移臂调度和旋转调度。电梯调度算法的调度策略是与

移动臂的移动方向和移动臂的当前位子有关的,所以每次启动磁盘时都应登记移动臂方向和

当前位子。电梯调度算法是一种简单而实用的驱动调度方法,这种调度策略总是优先选择与

当前柱面号相同的访问请求,从这些请求中再选择一个能使旋转距离最短的等待访问者。如

果没有与当前柱面号相同的访问请求,则根据移臂方向来选择,每次总是沿臂移动方向选择

一个与当前柱面号最近的访问请求,若沿这个方向没有访问请求时,就改变臂的移动方向。

这种调度策略能使移动臂的移动频率极小,从而提高系统效率•用电梯调度算法实现驱动调

度的模拟算法如图3—3。

(4)图3—1中的初始化工作包括,初始化“请求I/O”表,置当前移臂方向为里移;

置当前位置为0号柱面,0号物理记录。程序运行前可假定“请求I/O”表中已经有如干个

进程等待访问磁盘。

在模拟实验中,当选中一个进程可以访问磁盘时,并不实际地启动磁盘,而用显示:''请

求I/O”表;当前移臂方向;当前柱面号,物理记录号来代替图3—3中的“启动磁盘”这

项工作。

图3-3电梯调度模拟算法

四、实验报告

(1)实验题目。

(2)程序中使用的数据结构及其说明。

(3)打印一份源程序并附上注释。

(4)打印驱动调度进程每次选择访问请求前的“请求I/O”表以及每次选中的进程名、

访问的柱面号、物理记录号和当前移臂方向(用up代表里移,down代表外移。打印格式为:

“请求I/O”表

进程名柱面号物理记录号方向

实验四同步机构

一、实验内容

模拟实现用同步机构避免并发进程执行时可能出现的与时间有关的错误。

二、实验目的

进程是程序在一个数据集合上运行的过程,进程是并发执行的,也即系统中的多个进

程轮流地占用处理器运行。

我们把如干个进程都能进行访问和修改地那些变量成为公共变量。由于进程是并发执

行的,所以,如果对进程访问公共变量不加限制,那么就会产生“与时间有关”的错误,即

进程执行后,所得到的结果与访问公共变量的时间有关。为了防止这类错误,系统必须要用

同步机构来控制进程对公共变量的访问。一般说,同步机构是由若干条原语——同步原语一

一所组成。本实验要求学生模拟PV操作同步机构的实现,模拟进程的并发执行,了解进程

并发执行时同步机构的作用。

三、实验题目

模拟PV操作同步机构,且用PV操作解决生产者——消费者问题。

[提示]:

(I)PV操作同步机构,由p操作原语和V操作原语组成,它们的定义如下:

P操作原语P(s):将信号量s减去1,若结果小于0,则执行原语的进程被置成等待信

号量s的状态。

V操作原语V(s):将信号量s加1,若结果不大于0,则释放一个等待信号量s的进程。

这两条原语是如下的两个过程:

procedurep(vars:semaphore);

begins:=s-l;

ifs<0thenW(s)

end{p}

procedurev(vars:semaphore);

begins:=s+l;

ifs<=0thenR(s)

end{V}

其中W(s)表示将调用过程的进程置为等待信号量s的状态;R(s)表示释放一个等待信号量s

的进程。

在系统初始化时应把semaphore定义为某个类型,为简单起见,在模拟实验中可把上

述的semaphore直接改成integer。

(2)生产者——消费者问题。

假定有一个生产者和消费者,生产者每次生产一件产品,并把生产的产品存入共享缓

冲器以供消费者取走使用。消费者每次从缓冲器内取出一件产品去消费。禁止生产者将产品

放入已满的缓冲器内,禁止消费者从空缓冲器内取产品。假定缓冲器内可同时存放10件产

品。那么,用PV操作来实现生产者和消费者之间的同步,生产者和消费者两个进程的程序

如下:

B:array[0..9]ofproducts;

si,s2:semaphore;

IN,out;integer;

IN:=0;out:=0;

cobegin

procedureproducer;

c:products;

begin

Li:

produce(c);

p(s[);

B[IN]:=C;

IN:=(IN+l)mod10;

v(s2);

gotoLi

end;

procedureconsumer;

x:products;

begin

L2:P(S2);

x:=B[out];

out:=(out+l)mod10;

V(Si);

consume(x);

gotoL2

end;

coend

其中的semaphore和products是预先定义的两个类型,在模拟实现中semaphore用integer

或char等代替。

(3)进程控制块PCB。

为了纪录进程执行时的情况,以及进程让出处理器后的状态,断点等信息,每个进程

都有一个进程控制块PCB。在模拟实验中,假设进程控制块的结构如图4-1。其中进程的状

态有:运行态、就绪态、等待态和完成态。当进程处于等待态时,在进程控制块PCB中要说

明进程等待原因(在模拟实验中进程等待原因为等待信号量Si或S2):当进程处于等待态或

就绪态时,PCB中保留了断点信息,一旦进程再度占有处理器则就从断点位置继续运行;当

进程处于完成状态,表示进程执行结束。

进程名

状态

等待原因

断点

图4-1进程控制块结构

(4)处理器的模拟。

计算机硬件提供了一组机器指令,处理器的主要职责是解释执行机器指令。为了模拟

生产者和消费者进程的并发执行,我们必须模拟一组指令和处理器职能。

模拟的一组指令见图4-2,其中每条指令的功能山一个过程来实现。用变量PC来模拟

“指令计数器”,假设模拟的指令长度为1,每执行一条模拟指令后,PC加1,指出下一条

指令地址。使用模拟的指令,可把生产者和消费者进程的程序表示为图4-3的形式。

定义两个一维数组PA[O..4]和SA[O..4],每一个PA[i]存放生产者程序中的一条模拟

指令执行的入口地址;每个SA[i]存放消费者程序中的一条模拟指令执行的入U地址。于是

模拟处理器执行•条指令的过程为:取出PC之值,按PA[PC]或SA[PC]得模拟指令执行的

入口地址,将PC之值加1,转向由入口地址确定的相应的过程执行。

(5)程序设计

本实验中的程序由三部分组成:初始化程序、处理器调度程序、模拟处理器指令执行程

序。各部分程序的功能及相互间的关系由图4-4至图4-7指出。

模拟的指令功能

p(s)执行p操作原语

V(s)执行V操作原语

putB[IN]:=product;IN:=(IN+1)mod10

GETX:=B[out];out:=(out+l)mod10

produce输入一个字符放入c中

consume打印或显示X中的字符

GOTOLPC:L

NOP空操作

图4-2模拟的处理器指令

序号生产者程序消费者程序

0producePG)

1PG)GET

2PUTV(S1)

3V(S2)consume

4goto0goto0

图4-3生产者和消费者程序

初始化程序:模拟实验的程序从初始化程序入口启动,初始化工作包括对信号量S1、

S2赋初值,对生产者、消费者进程的PCB初始化。初始化后转向处理器调度程序,其流程

如图4-4

图4-4初始化流程

处理器调度程序:在计算机系统中,进程并发执行时,任一进程占用处理器执行完一条

指令后就有可能被打断而让出处理器山其他进程运行。故在模拟系统中也类似处理,每当执

行一条模拟的指令后,保护当前进程的现场,让它成为非运行状态,由处理器调度程序按随

机数再选择个就绪进程占用处理器运行。处理器调度程序流程见图4-5。

模拟处理器指令执行程序:按“指令计数器"PC之值执行指定的质量,且PC加1指向

下一条指令。模拟处理器指令执行的程序流程见图4-6和4-7。

图4-6模拟处理器指令执行

(1)模拟P(S)(2)模拟V(S)

图4-7模拟PV操作的执行

另外,为了使得模拟程序有一个结束条件,在图4-6中附加了“生产者运行结束”的条

件判断,模拟时可以采取人工选择的方法实现。图4-7给出了P(S)和V(S)模拟指令执

行过程的流程。其他模拟指令的执行过程己在图4-2中指出。

四、实验报告

(1)实验题目。

(2)打印源程序并附上注释。

(3)从键盘上输入•组字符,由生产者每次读入一个字符供消费者输;H。运行模拟

程序,打印依次读入的字符和消费者输出的字符。

(4)把生产者和消费者进程中的P操作、V操作都改成空操作指令,观察在两者不

同步的情况下可能出现的与时间有关的错误。打印依次读入的字符和消费者输

出的字符。

实验五UNIX系统

一、实验内容

熟悉UNIX操作系统,在UNIX中使用C语言进行文本处理。

二、实验目的

UNIX操作系统是一个通用的多用户分时操作系统,现已成为高档微机、工作站及若干

小型机系统上的主要操作系统,并在许多领域中获得了广泛的应用。UNIX系统具有简单、

高效、易懂等特点,同时具有良好的可移植性,它代表着多用户操作系统发展的方向。C语

言最初是为开发UNIX操作系统而设计,UNIX核心和所有的用户程序几乎都是用C语言编

写,是UNIX的标准语言。本实验要求学生在熟悉UNIX系统的基础上,使用vi编辑器,

了解用C语言编写文本处理程序的具体过程。

三、实验题目

(1)使用自己的注册号注册UNIX系统,学习如何增加用户、设置用户缺省信息与

修改用户口令、修改用户和用户组属性、删除用户注册号和用户组、目录操作、

文件操作。

(2)参考附录内容学习使用vi编辑器。

(3)使用C语言编写一个词频统计程序,使之能够给出各个单词在输入文件中的出

现次数。

(4)使用C语言编写一个反向打印程序,使之能够按与输入文件中文本行相反的次

序来打印(即后出现的文本行先打印)。

[提示]:

1、从root注册进系统,可以通过OA&M菜单创建用户组并为用户分配注册号,也可

以通过shell命令创建用户组,创建用户组的shell命令格式如下:

groupadd-ggroup_IDgroup_name

为用户分配注册号的shell命令格式如下:

useradd-uuser_number-gprimary_group_ID

-Gsupplementary_group_ID-ccomments

-dhome-directory-sprogram-mlogin」D

其中-u选项用来表示用户ID号,-g选项用来表示主用户组名,-G选项用来表示可由“,”

隔开的多个supplementary_group_ID,-c选项用来表示注释信息,-d选项用来表示主目录名,

-s选项用来表示注册shell程序,-m选项不带参数,它用来将/etc/skel目录中的内容

(如.profile文件和标准目录文件)拷入新的注册号下,login」D是该命令必需的用户注册号。

例:groupadd-g51newuser

useradd-u203-gnewuser-c"newuser"-d/user/liu-s/bin/sh-mliu

如果采用缺省设置,也可以只使用如下shell命令:

useraddliu

分配完注册号后,也可以为用户设置口令。用来设置口令的shell命令格式如下:

passwordoptionslogin_ID

其中任选项options可为如下内容:

-ndays表示口令的有限时间

-xdays表示口令从设置到修改的时间。

例:password-n7-x6liu

或者:

passwordliu

系统在提示输入和重新输入后,确认口令设置成功。

修改用户属性的shell命令格式如下:

usermodoptionslogin_ID

其中,任选项options可以为如下内容:

-ccomment表示注释信息

-dpathname表示当前目录

-ggroup_ID表示主用户组名

-Gsupplemenlary_group」D表示主用户组的增补组名

-1login表示用户注册号

-m表示将/etc/skel目录中的内容拷入新的注册号下

-sprogram表示注册用shell程序

-uuser_ID_number表示用户ID号

-edays表示口令从设置到修改的天数

-fdays表示注册起作用的天数

作为•个例子,我们修改注册shell程序,这时可使用如下shell命令:

usermod-s/bin/cshliu

修改用户组属性的shell命令格式如下:

groupmodoptions

其中,任选项options可为如下内容:

-ggroup」D表示为用户组分配一个新的组ID号

-ogroupJD表示为用户组分配一个重复的组ID号

-ngroup_name表示为用户组分配一个新名字

作为一个例子,我们修改用户组名,这时可使用如下shell命令:

groupmod-nadmin

只删除用户注册号的shell命令格式如下:

userdellogin_ID

实例如下:

userdelliu

删除用户注册号及其所在目录和文件的shell命令格式如下:

userdel-rlogin」D

实例如下:

userdel-rliu

删除用户组的shell命令格式如下:

groupdelgroup_ID

实例如下:

groupdelnewuser

2,从新的子目录中开始工作

使用mkdir命令创建新的子目录c_progso

$mkdirc_progs

$

使用cd命令进入到新创建的子目录中。

$cdc_progs

$

3,输入C程序

输入C程序可以用vi命令来完成。下面就使用vi命令来输入C程序cowpact.c。

/*Removenewlines*/

#include<stdio.h>

main()

(

intc,n=0„max=l;

while((c=getchar())!=EOF)

(

if(c==V)

n++;

else

n=0;

if(cn<=max)

putchar(c);

)

)

上述程序是用来删除空行的,连续两个以上的空行只保留一个空行。

4,编译C程序

由于C语言是

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论