文档介绍:一、课程设计目的进行操作系统课程设计主要是在学****操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。二、课程设计内容与要求模拟仿真“生产者-消费者”问题的解决过程及方法。通过研究Linux的进程机制和信号量,实现生产者消费者问题的并发控制。设计要求:1)生产者与消费者均有二个以上。2)生产者和消费者进程的数目在程序界面上可调,在运行时可随时单个增加与减少生产者与消费者。3)生产者的生产速度与消费者的消费速度均可在程序界面调节,在运行中,该值调整后立即生效。4)多个生产者或多个消费者之间必须有共享对缓冲区进行操作的函数代码。5)每个生产者和消费者对有界缓冲区进行操作后,即时显示有界缓冲区的全部内容、当前生产者与消费者的指针位置,以及生产者和消费者线程标识符。6)采用可视化界面,可在运行过程中随时暂停,查看当前生产者、消费者以及有界缓冲区的状态。生产者与消费者问题是经典进程同步问题的典型代表之一。该课程设计通过了解进程间的两种制约关系,从而理解信号量机制;通过对实例的分析和讨论,理解信号量机制实现进程的同步及互斥的方法;通过对经典进程同步问题的剖析,初步掌握运用信号量解决进程同步问题的方法。本系统的功能是根据输入的生产者进程和消费者进程(缓冲区设为了固定大小20),动态显示生产者进程从生产“产品”到放入缓冲区,消费者进程从缓冲区中取“产品”的整个过程,同时,系统也显示了整个过程中缓冲池中临界资源的变化情况。三、系统分析与设计1、系统分析在操作系统中,线程有时被称为轻量级进程,是CPU使用的基本单位,它与属于同一进程的其他进程共享其他代码段、数据段和其他操作系统资源。在Java中,线程的建立有两种方法:继承Thread类和实现Runnable接口。其中,采用实现Runnable接口建立线程的好处是允许同时继承其他类从而实现多继承,并且在Java中,可采用synchronized或Object类的方法wait(),notify(),notifyAll()来实现多线程同步。Java多线程同步机制的实现是基于管程(Monitor)机制,在Java中每个对象都包含一把同步锁(管程对象)和一个线程等待集合,当对象生成时它们随之自动生成。线程等待集的初值为空,同步锁的初始状态为***状态。只有当对象object的同步锁处于***状态时,对象object的synchronized方法或以对象为同步参数的synchronized块(以下简称synchronized方法(块))才允许访问对象object。当线程thread1运行对象object的synchronized方法(块)时,首先需object的同步锁锁上,thread1将object上锁成功后才继续执行synchronized方法(块)内语句。当synchronized方法(块)正常结束或异常退出时,同步锁解锁动作自动执行。Object类的方法wait(),notify()和notifyAll()可实现线程间的通信。()时,则thread1停止执行,将thread1加入object的线程等待集,并解锁其上锁的所有对象同步锁;()时,从object的线程等待集中随机移出一个线程thread3(在Java语言规范中没有规定选择移出线程的算法,由JVM实现时决定)去参与线程调度。多个生产者进程在生产产品,并将这些产品提供给消费者进程去消费。为使生产者进程与消费者进程能并发执行,在两者之间设置了一个具有20个存储单元的缓冲区,生产者进程将它所生产的产品放入缓冲区中;消费者进程可从缓冲区中取走产品去消费。利用信号量机制来实现多进程(生产者进程和消费者进程)对缓冲区(临界资源)的互斥访问。设置多进程的共享变量为临界资源,同时给它设置一个互斥信号量,多进程利用互斥信号量来完成对临界资源的互斥访问(当信号量为某个值是允许进程访问,否则则不允许进程访问),从而确保共享数据的正确性。2、系统设计:1)生产者-消费者问题的提出并发程序在设计上是有困难,其中最大的问题是进程或者线程间的同步问题,而生产者—消费者问题是最经典的问题之一,其描述如下:有n个生产者和m个消费者,连接在一个有k个单位缓冲区的有界环形缓冲上,pi、cj都是并发进程,只要缓冲区未满,生产者pi生产的产品就可以投入缓冲区;类似地,只要缓冲区不空,消费者进程cj就可以从缓冲区取走并消耗产品。2)