您好,欢迎访问三七文档
实验教材《操作系统实验指导》作者:任爱华,李鹏,刘方毅编著出版社:清华大学出版社出版时间:2004版次:1•实验时间:第7周-第12周(6周),每周二晚上7:30-9:00•实验地点:文波楼机房217实验时间和地点•实验前,认真学习教材以及实验指导书的相关内容,提前做好实验准备。•实验结束后提交实验报告,实验报告内容应包括(参照《实验报告格式.doc》):–实验目的、实验内容、设计思路和流程框图,源程序(含注释)清单、测试结果以及实验总结。•实验报告杜绝抄袭现象,一经发现雷同,双方成绩均以0分计算。•实验报告完成后班长收齐上交。实验要求实验项目一:进程同步与互斥1、预习要求:进程的基本概念;进程的同步和互斥2、实验目的:(1)掌握进程同步和互斥的含义;(2)能进行多进程的设计。3、实验内容及要求:参照教材第3章和《操作系统实验指导》实验一的要求,用信号量机制实现生产者和消费者问题。实验项目一:进程同步与互斥一、实验目的1.掌握基本的进程同步与互斥算法,理解生产者-消费者问题。2.学习使用Windows2000/XP中基本的同步对象,掌握相关API的使用方法。3.了解Windows2000/XP中多线程的并发执行机制,实现进程的同步与互斥。线程(Thread)进程是一个可以拥有资源的基本单位。进程是一个可以独立调度和分派的基本单位。进程作为一个资源拥有者,在创建、撤消、切换的过程中,OS必须为之付出较大的时空开销。所以系统中进程的数量不宜过多,进程切换的频率不宜过高,但这也就限制了并发程度的进一步提高。进程(Process)的两个基本属性为解决此问题,人们想到将进程的上述两个属性分开,即对作为调度和分派的基本单位,不同时作为拥有资源的基本单位;对于拥有资源的单位,不对之进行频繁切换。线程因而产生。线程的引入引入进程的目的是为了使多个程序并发执行,以改善资源利用率、提高系统吞吐量。引入线程则是为了减少程序并发执行时的所付出的时空开销。定义:线程是进程中的一个实体,是被系统独立调度和分配的基本单位,故又称为轻权(轻型)进程(LightWeightProcess)。线程的定义线程(thread)和进程(process)的关系oneprocessonethreadmultipleprocessesonethreadperprocessoneprocessmultiplethreadsmultipleprocessesmultiplethreadsperprocess线程的特点线程是进程的一个实体,可以作为系统独立调度和分派的基本单位。线程自己基本不拥有系统资源,只拥有少量必不可少的资源:程序计数器、一组寄存器、栈。线程可以与同属于一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程;同一进程中的多个线程之间可以并发执行。系统开销小、切换快。(进程的多个线程都在进程的地址空间活动)例如:Windows2000/XP。线程与进程的比较线程具有进程的许多特征,故又称为轻型进程。在引入线程的OS中,每一个进程都拥有多个线程,至少一个。在传统OS中,拥有资源、独立调度和分派的基本单位都是进程,在引入线程的OS中,线程是调度和分派的基本单位,而进程是拥有资源的基本单位。在同一个进程内线程切换不会产生进程切换,由一个进程内的线程切换到另一个进程内的线程时,才会引起进程切换。线程与进程的比较---调度无论是传统OS,还是引入线程的OS,进程都是拥有资源的独立单位,线程一般不拥有系统资源,但它可以访问隶属进程的资源。即一个进程的所有资源可供进程内的所有线程共享。线程与进程的比较---拥有资源进程的创建和撤消的开销要远大于线程创建和撤消的开销。因为,进程切换时,当前进程的CPU环境要保存,新进程的CPU环境要设置,线程切换时只须保存和设置少量寄存器,并不涉及存储管理方面的操作,因此线程切换的开销远小于进程切换的开销。同一进程内的各线程由于它们拥有相同的地址空间,它们之间的同步和通信的实现也变得比较容易。线程与进程的比较---系统开销线程和进程一样,都有自己的状态。线程中所使用的同步控制机制与进程中所使用的同步控制机制相同。进程的调度、同步等大多由OS内核完成,而线程的控制既可以由OS内核(内核提供API)进行,也可以由用户控制。线程与进程的比较实验项目一:进程同步与互斥二、实验内容及要求实验内容:以生产者-消费者模型为依据,在Windows2000/XP环境下创建一个控制台进程,在该进程中创建n个线程模拟生产者和消费者,实现进程(线程)的同步与互斥。实验要求:学习并理解生产者-消费者模型及其同步和互斥规则;学习了解Windows同步对象及其特性;熟悉实验环境,掌握相关API的使用方法;设计程序,实现生产者-消费者进程(线程)的同步与互斥;每个人提交一份实验报告。–生产者和消费者问题生产者进程的功能:生产东西,供消费者消费;消费者进程的功能:消费生产者生产的东西。实验项目一:进程同步与互斥三、相关基础知识介绍同步对象同步对象是指Windows中用于实现同步与互斥的实体,包括信号量(Semaphore)、互斥量(Mutex)、临界区(CriticalSection)和事件(Events)等。本实验中使用到信号量、互斥量和临界区三个同步对象。同步对象的使用步骤:1.创建/初始化同步对象。2.请求该同步对象,随即进入临界区(这一步相当于P操作)。3.释放该同步对象(这一步相当于V操作)。这些对象在一个线程中创建,在其它线程中都可以使用。实验项目一:进程同步与互斥三、相关基础知识介绍相关API的功能及使用我们利用WindowsSDK提供的API编程实现实验题目的要求,在VC中包含有WindowsSDK的所有工具和定义。要使用这些API,需要包含对这些函数进行说明的SDK头文件——最常见的是Windows.h。下面给出的是本实验使用到的API的功能和使用方法的简单介绍。实验项目一:进程同步与互斥相关API的功能及使用(具体的用法可以参考MSDN)(1)CreateThread功能:创建一个线程,该线程在调用进程的地址空间中执行。格式:HANDLECreateThread(LPSECURITY_ATTRIBUTESlpThreadAttributes,DWORDdwStackSize,LPTHREAD_START_ROUTINElpStartAddress,LPVOIDlpParamiter,DWORDdwCreationFlags,LpdwordlpThread);参数说明:lpThreadAttributes——指向一个LPSECURITY_ATTRIBUTES(新线程的安全性描述符)。dwStackSize——定义原始堆栈大小。lpStartAddress——指向使用LPTHREAD_START_ROUTINE类型定义的函数。lpParamiter——定义一个给进程传递参数的指针。dwCreationFlags——定义控制线程创建的附加标志。lpThread——保存线程标志符(32位)handle在windows中表示一个void型指针,占用32bit空间,用来标示不同的API对象,例如:信号量、线程等实验项目一:进程同步与互斥相关API的功能及使用(2)CreateMutex结合以下2个函数使用:WaitForSingleObject(对应p操作)互斥量上锁;ReleaseMutex(对应v操作)互斥量解锁。功能:创建一个命名的或者匿名的互斥量对象格式:HANDLECreateMutex(LPSECURITY_ATTRIBUTESlpMutexAttributes,BOOLbInitialOwner,LPCTSTRlpName);参数说明:lpMutexAttributes——必须取值NULL。bInitialOwner——指示当前线程是否马上拥有该互斥量(即马上加锁)。lpName——互斥量名称。实验项目一:进程同步与互斥相关API的功能及使用(3)CreateSemaphore功能:创建一个命名的或者匿名的信号量对象。格式:HANDLECreateSemaphore(LPSECURITY_ATTRIBUTESlpSemaphoreAttributes,LONGlInitialCount,LONGlMaximumCount,LPCTSTRlpName);参数说明:lpSemaphoreAttributes——必须取值NULL。lInitialCount——信号量的初始值。该值大于0,但小于lMaximumCount指定的最大值。lMaximumCount——信号量的最大值。lpName——信号量名称。实验项目一:进程同步与互斥相关API的功能及使用(4)WaitForSingleObject功能:使程序处于等待状态,直到信号量或者互斥量出现或者超过规定的等待时间。信号量出现指信号量大于或等于1,互斥量出现指互斥量解锁。在返回之前将信号量减1或者互斥量加锁。格式:DWORDWaitForSingleObject(HANDLEhHandle,DWORDdwMilliseconds);参数说明:hHandle——信号量指针。dwMilliseconds——等待的最长时间(INFINITE为无限等待)。实验项目一:进程同步与互斥相关API的功能及使用(5)ReleaseSemaphore功能:对指定信号量加上一个指定大小的量。成功执行则返回非0值。格式:BOOLReleaseSemaphore(HANDLEhSemaphore,LONGlReleaseCount,LPLONGlppreviousCount);参数说明:hSemaphore——信号量指针。lReleaseCount——信号量的增量。lppreviousCount——保存信号量当前值。实验项目一:进程同步与互斥相关API的功能及使用(6)ReleaseMutex功能:用来打开互斥锁(互斥量解锁),即将互斥量加1。成功调用则返回0。格式:BOOLReleaseMutex(HANDLEhMutex);参数说明:hMutex——互斥量指针。(7)InitializeCriticalSection功能:初始化临界区对象格式:VOIDInitializeCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);参数说明:lpCriticalSection——指向临界区对象的指针。实验项目一:进程同步与互斥相关API的功能及使用(8)EnterCriticalSection功能:该函数用于等待指定临界区对象的所有权。当调用线程被赋予所有权时,该函数返回。格式:VOIDenterCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);参数说明:lpCriticalSection——指向临界区对象的指针。(9)LeaveCriticalSection功能:释放指定临界区对象的所有权。格式:VOIDLeaveCriticalSection(LPCRITICAL_SECTIONlpCriticalSection);参数说明:lpCriticalSection——指向临界区对象的指针。实验项目一:进程同步与互斥四、程序的实现程序的结构包括:一个主函数、分别用于模拟消费者和生产者的两个函数以及三个辅助性的函数。主函数用于初始化缓冲区和各个同步对象,并完成线程信息的读入和记录,最后根据该组线程记录启动模拟线程,并等待所有线程的运行结束后退出整个程序。消费者和生产者函数运行于相应线程中完成对缓冲区的读写动作。三个辅助函数被生产者和消费者函数调用,是生产和消费函数中对缓冲区访问功能的一些包装。四、程序的实现数据结构1.用一个整型数组Buffer_Critic
本文标题:上机实验安排.
链接地址:https://www.777doc.com/doc-2782155 .html