操作操作系统大型作业

发布 2021-05-05 18:24:28 阅读 4804

所在班级: 0310401班。

学生学号: 031040109

学生姓名: 李雨晴。

**题目: 生产者和消费者问题

任课教师: 李艳老师。

完成日期: 2023年12月2日

目录。操作系统课程设计 1

一、课程的地位、目标和任务 3

二、课程设计的基本要求 3

1.课程设计要求: 3

2.学习要求: 3

三、题目分析 3

1.题目的特点: 3

2.采用信号量机制: 4

2.1. pv原语操作的动作 4

2.2信号量 4

四、课程设计的内容 5

1.实验程序的结构图(流程图) 5

2. 数据结构及信号量定义的说明 5

2 .1 createthread 5

2.2. createmutex 6

2.3. createsemaphore 6

2.功能模块 7

五、课程实现的内容 7

1.课程设计的实验环境 7

2. 实验的步骤 8

2.1 打开vc 8

2.2在工程中创建源文件" r_":8

2.3通过调用菜单命令项build->build all进行编译连接 8

3.**实现的具体分析 8

3.1.使用信号量解决生产者-消费者问题 10

3.2.使用消息传递解决生产者-消费者问题 12

六、个人体会 15

参考文献 15

附录:具体实现** 16

一、 课程的地位、目标和任务。

操作系统”是计算机专业的核心专业课,“操作系统课程设计”是理解和巩固操作系统基本理论、原理和方法的重要实践环节。

本课程通过设计实现一个综合作业,加深对操作系统原理的理解,提高综合运用所学知识的能力,培养学生独立工作和解决问题的能力,取得设计与调试的实践经验,为今后进一步从事计算机系统软件和应用软件的分析、研制和开发打下良好的基础。

二、 课程设计的基本要求。

教学内容:用信号量机制解决生产者和消费者问题。

重点:信号量实现进程同步的算法。

难点:进程同步的实现。

理解生产者和消费者模型,掌握利用信号量实现进程同步的方法,通过对实际问题的编程实现,获得实际应用和编程能力。

三、 题目分析。

生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法是让生产者此时进行休眠,等待消费者从缓冲区中取走了一个或者多个数据后再去唤醒它。

同样地,当缓冲区已经空了,而消费者还想去取消息,此时也可以让消费者进行休眠,等待生产者放入一个或者多个数据时再唤醒它。

生产者-消费者(producer-consumer)问题非常适合用信号量机制来解决。

为了能让多个进程通过特殊变量展开交互,一个进程在某一关键点上被迫停止执行直至收到对应的特殊变量,通过这一措施,来达到复杂进程间的交互,这种特殊变量就是信号量。为了能够用信号量传送信号,进程可用p、v两个特殊操作来发送和接收信号,如果协作进程的相应信号仍未送到,则进程被挂起直至信号达到为止。

信号量s是一个整数,s大于等于零时代表可供并发进程使用的资源实体数,但s小于零时则表示正在等待使用临界区的进程数。

dijkstra同时提出了对信号量操作的pv原语。

p原语操作的动作是:

1.s减1;

2. 若s减1后仍大于或等于零,则进程继续执行;

3. 若s减1后小于零,则该进程被阻塞后进入与该信号相对应的队列中,然后转进程调度。

v原语操作的动作是:

1. s加1;

2. 若相加结果大于零,则进程继续执行;

3. 若相加结果小于或等于零,则从该信号的等待队列中唤醒一等待进程,然后再返回原进程继续执行或转进程调度。

pv操作对于每一个进程来说,都只能进行一次,而且必须成对使用。在pv原语执行期间不允许有中断的发生。

说明:要保证pv是原子操作,对于操作系统,只须在操作过程中关中断即可。

andrew s. tanenbaum对信号量的定义有所不同,其pv操作也有区别。

信号量是一个整数,其值不小于0。它表示被积累下来的唤醒操作数。

p原语操作的动作是:

1. 检查s是否大于0。

2. 若s>0,则s = s – 1;否则,执行p操作的进程将睡眠,并且此时p操作并未结束。

v原语操作的动作是:

1. s = s + 1。

2. 如果一个或多个进程在该信号量上睡眠,无法完成先前的p操作,则有系统选择其中一个并允许它完成p操作。

四、 课程设计的内容。

1. 实验程序的结构图(流程图)

功能——创建一个在调用进程的地址空间中执行的线程。

格式。handle createthread( lpsecurity_attributes lpthreadattributes,dword dwstacksize,lpthread_start_routine lpstartaddress,lpvoid lpparamiter,dword dwcreationflags,lpdword lpthread );

功能——创建一个命名或匿名的互斥量对象。

格式:handle createmutex(lpsecurity_attributes lpmutexattributes,bool binitialowner,lpctstr lpname);

参数说明:lpmutexattributes——必须取值null。

binitialowner——指示当前线程是否马上拥有该互斥量(即马上加锁)。

lpname——互斥量名称。

功能——创建一个命名或匿名的信号量对象。

格式:handle createsemaphore(lpsecurity_attributes lpsemaphoreattributes,long linitialcount,long lmaximumcount,lpctstr lpname );

参数说明:lpsemaphoreattributes——必须取值null。

linitialcount——信号量的初始值。该值大于0,但小于lmaximumcount指定的最大值。

lmaximumcount——信号量的最大值。

lpname——信号量名称。

参数说明:lpthreadattributes——指向一个lpsecurity_attributes(新线程的安全性描述符)。

dwstacksize——定义原始堆栈大小。

lpstartaddress——指向使用lpthraed_start_routine类型定义的函数。

lpparamiter——定义一个给进程传递参数的指针。

dwcreationflags——定义控制线程创建的附加标志。

lpthread——保存线程标志符(32位)

五、 课程实现的内容。

本实验是在win xp+vc6.0环境下实现的,利用windows sdk编制实例程序。所以试验需要在windows下安装vc后进行。

vc是一个集成开发环境,其中包含了windows sdk所有工具和定义;所以安装了vc后就不用特意安装sdk了。

打开vc, 选择菜单项file->new,选择projects选项卡并建立一个名为" r_wp1"的win32 console applicatoin工程;创建时注意指定创建该工程的目录;

选择菜单项project->add to project->files,在选择框中输入自己想要创建的文件名,这里是" r_";在接下来询问是否创建新文件时回答"yes";然后通过workspace->fileview->source files打开该文件,在其中编辑源文件并保存。

操作系统 软件 操作系统作业

1 信号量的物理含义是什么?2 处于执行状态的进程若同时发生了下列两种情况 1 对某信号量执行p操作后,信号量的值变为负数。2 该进程的时间片到时产生中断。试问,该进程将由执行状态变迁为就绪态,还是阻塞态?简述理由。3 设有n个进程共享一临界区,对于下述情况,说明信号量的初值 含义,并用pv操作写出...

操作系统作业

4.程序并发执行时为什么会失去封闭性和可再现性?因为程序并发执行时,是多个程序共享系统中的各种资源,因而这些资源的状态是由多个程序来改变,致使程序的运行失去了封闭性。而程序一旦失去了封闭性也会导致其再失去可再现性。6.试从动态性,并发性和独立性上比较进程和程序?a.动态性是进程最基本的特性,可表现为...

操作系统作业

一 选择题。1 在进程的组成部分之中,进程在运行中不可修改的部分是 a 私用程序段b 共享程序段。c 数据段d 进程控制块。2 响应比高者优先作业调度算法是以计算时间和 来考虑的。a 输入时间 b 完成时间 c 周转时间 d 等待时间。3 在消息缓冲通信中,消息队列属于 资源。a 临界 b 共享 c...