操作系统课程设计(采用读写平等策略的读者写者问题)完整版--内含代码

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

淮北师范大学

课程设计

采用读写平等策略的读者写者问题

学号:

姓名:

专业:

指导教师:

日期:

目录

第1部分课设简介 (3)

1.1 课程设计题目 (3)

1.2 课程设计目的.................. 错误!未定义书签。

1.3 课程设计内容 (3)

1.4 课程设计要求 (4)

1.5 时间安排 (4)

第2部分实验原理分析 (4)

2.1问题描述 (4)

2.2算法思想 (5)

2.3主要功能模块流程图 (5)

第3部分主要的功能模块 (6)

3.1数据结构 (6)

3.2测试用例及运行结果 (7)

第4部分源代码 (7)

第5部分总结及参考文献 (22)

5.1 总结 (22)

5.2 参考文献 (23)

第1部分课设简介

1.1 课程设计题目

采用读写平等策略的读者写者问题

1.2课程设计目的

操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。

1)进一步巩固和复习操作系统的基础知识。

2)培养学生结构化程序、模块化程序设计的方法和能力。

3)提高学生调试程序的技巧和软件设计的能力。

4)提高学生分析问题、解决问题以及综合利用C语言进行课程设计的能力。

1.3课程设计内容

用高级语言编写和调试一个采用“读写平等”策略的“读者-- 写者”问题的模拟程序。

1.4课程设计要求

1)读者与写者至少包括ID、进入内存时间、读写时间三项内容,可在界面上进行输入。

2) 读者与写者均有两个以上,可在程序运行期间进行动态增加

读者与写者。

3)可读取样例数据(要求存放在外部文件中),进行读者/写者、

进入内存时间、读写时间的初始化。

4) 要求将运行过程用可视化界面动态显示,可随时暂停,查看

阅览室中读者/写者数目、读者等待队列、读写时间、等待时间。

5) 读写策略:读写互斥、写写互斥、读写平等(严格按照读

者与写者到达的顺序进入阅览室,有写着到达,则阻塞后续到

达的读者;有读者到达,则阻塞后续到达的写者)。

1.5时间安排

1)分析设计贮备阶段(1 天)

2)编程调试阶段(7 天)

3)写课程设计报告、考核(2 天)

第2部分实验原理分析2.1问题描述

有一个被许多进程共享的数据区,这个数据区可以是一个文件,或者主存的一块空间,甚至可以是一组处理器寄存器。有一些只读取这个数据区的进程reader和一些只往数据区中写数据的进程writer 以下假设共享数据区是文件。这些读者和写者对数据区的操作必须满

足以下条件:读—读允许;读—写互斥;写—写互斥。这些条件具体来说就是:

1)任意多的读进程可以同时读这个文件;

2)一次只允许一个写进程往文件中写;

3)如果一个写进程正在往文件中写,禁止任何读进程或写进程访问文件;

4)写进程执行写操作前,应让已有的写者或读者全部退出。这说明当有读者在读文件时不允许写者写文件。

2.2算法思想

三个线性链表,分别为h1、h2、h3。h1为写入序列,h2为就绪序列,h3为执行序列。其中h1用来存放输入进去的读者和写者的信息,h2根据读入内存的时间将h1中的读者写者的信息进行排序,并将排完序的读者与写者信息存在h2中,把h2的内容调入到执行序列h3中,从而执行要求的内容。

2.3主要功能模块流程图

第3部分主要的功能模块3.1 数据结构

主要的数据结构及数据:

int Wmutex=1;//互斥读写的信号量

int readcount=0; //读者数目

struct process//进程结构体

{

int ID; //进程序号

char type; //进程类别(判断是读者还是写者)

int starttime; //进程开始时间

int needtime; //进程读写需要的时间

int runtime; //进程在内存中已运行的时间

struct process *next;

};

process *h1=NULL,*h2=NULL,*h3=NULL;//三个链表

函数成员:

void input()//输入信息函数

void main()//主函数

void choose()//选择函数

void ready(int i)//进入就绪队列函数

int wait(int &a)//等待队列函数

void reader()//读写平等下的读者信息函数

void writer()//读写平等下的写者信息函数

void add(int i)//动态增加函数

void print(int i)//输出函数

void leave()//离开执行队列

3.2测试用例及运行结果

运行程序进入界面后,选择1,运行界面如图1-1;选择2,运行完后查看文件显示如图1-2;选择3查看信息,运行界面如图1-3;在执行过程中按下s可以暂停进程的执行,在进程暂停的情况下,按下a可以增加进程,运行结果如图1-4所示。

图1-1

图1-2

相关文档
最新文档