




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 操作系统课程设计 采用采用 读写平等读写平等 策略的策略的 读者读者 写者问题写者问题 学 院 计算机科学与技术 专 业 学 生 姓 名 学 号 指导教师姓名 2014 年 3 月 17 日 2 目目 录录 第 1 部分 课设简介 3 1 1 课程设计题目 3 1 2 课程设计目的 3 1 3 课程设计内容 3 1 4 课程设计要求 3 1 5 时间安排 4 第 2 部分 实验原理分析 4 2 1 问题描述 4 2 2 算法思想 5 2 3 主要功能模块流程图 5 第 3 部分 主要的功能模块 7 3 1 数据结构 7 3 2 测试用例及运行结果 7 第 4 部分 源代码 10 第 5 部分 总结及参考文献 23 5 1 总结 23 5 2 参考文献 24 3 第 1 部分 课设简介 1 1 课程设计题目 采用 读写平等策略 的 读者写者 问题 1 2 课程设计目的 操作系统课程设计是计算机专业重要的教学环节 它为学生提 供了一个既动手又动脑 将课本上的理论知识和实际有机的结合起 来 独立分析和解决实际问题的机会 1 进一步巩固和复习操作系统的基础知识 2 培养学生结构化程序 模块化程序设计的方法和能力 3 提高学生调试程序的技巧和软件设计的能力 4 提高学生分析问题 解决问题以及综合利用 C 语言进行课程 设计的能力 1 3 课程设计内容 用高级语言编写和调试一个采用 读写平等 策略的 读者 写者 问题的模拟程序 1 4 课程设计要求 1 读者与写者至少包括 ID 进入内存时间 读写时间三项内 4 容 可在界面上进行输入 2 读者与写者均有两个以上 可在程序运行期间进行动态增 加读者与写者 3 可读取样例数据 要求存放在外部文件中 进行读者 写 者 进入内存时间 读写时间的初始化 4 要求将运行过程用可视化界面动态显示 可随时暂停 查 看阅览室中读者 写者数目 读者等待队列 读写时间 等待 时间 5 读写策略 读写互斥 写写互斥 读写平等 严格按照读 者与写者到达的顺序进入阅览室 有写着到达 则阻塞后续到 达的读者 有读者到达 则阻塞后续到达的写者 1 5 时间安排 1 分析设计贮备阶段 1 天 2 编程调试阶段 7 天 3 写课程设计报告 考核 2 天 5 第 2 部分 实验原理分析 2 1 问题描述 有一个被许多进程共享的数据区 这个数据区可以是一个文件 或者主存的一块空间 甚至可以是一组处理器寄存器 有一些只读 取这个数据区的进程 reader 和一些只往数据区中写数据的进程 writer 以下假设共享数据区是文件 这些读者和写者对数据区的操 作必须满足以下条件 读 读允许 读 写互斥 写 写互斥 这 些条件具体来说就是 1 任意多的读进程可以同时读这个文件 2 一次只允许一个写进程往文件中写 3 如果一个写进程正在往文件中写 禁止任何读进程或写进程 访问文件 4 写进程执行写操作前 应让已有的写者或读者全部退出 这 说明当有读者在读文件时不允许写者写文件 2 2 算法思想 三个线性链表 分别为 h1 h2 h3 h1 为写入序列 h2 为就绪 序列 h3 为执行序列 其中 h1 用来存放输入进去的读者和写者的 信息 h2 根据读入内存的时间将 h1 中的读者写者的信息进行排序 6 并将排完序的读者与写者信息存在 h2 中 把 h2 的内容调入到执行 序列 h3 中 从而执行要求的内容 2 3 主要功能模块流程图 7 开始 ready int i type reader r writer w runtime runtime needt ime 离开 h3 h1 Null 互斥读写的信号量 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 互斥读写的信号量 int readcount 0 读者数目 void input void main struct process int ID 进程序号 char type 进程类别 判断是读者还是写者 12 int starttime 进程开始时间 int needtime 进程读写需要的时间 int runtime 进程在内存中已运行的时间 struct process next process h1 NULL h2 NULL h3 NULL void choose 选择 int a process p q q h1 process malloc sizeof process FILE fp scanf d switch a case 1 手动输入 int i j printf t t 输入进程数 fp fopen file txt w scanf d fprintf fp d n i for j 1 i 0 i j p process malloc sizeof process q next p printf t t 第 d 个进程 n j printf t t 进程序号 t 读或写 t t 开始时间 t 执行 时间 n t t scanf d c d d fprintf fp d c d d n p ID p type p starttime p needtime printf n p runtime 0 13 q q next p next NULL fclose fp p h1 h1 h1 next p next NULL free p break case 2 文件读入 if fp fopen file txt r NULL printf 文件打开失败 n system pause system cls main fscanf fp d for j 1 i 0 i j p process malloc sizeof process q next p fscanf fp d c d d p runtime 0 q q next p next NULL fclose fp p h1 h1 h1 next p next NULL free p break 14 case 3 int k if fp fopen file txt r NULL printf 文件打开失败 n system pause system cls main printf t t 进程序号 t 读或写 t t 开始时间 t 执行时 间 n fscanf fp d k 0 for j 0 i 0 i j p process malloc sizeof process q next p fscanf fp d c d d if p type r p type R k printf t t d t t c t t d t t d n p ID p type p starttime p needtime p runtime 0 q q next p next NULL j j k printf t t 读者数目 printf t d n k printf t t 写者数目 printf t d n j 15 fclose fp p h1 h1 h1 next p next NULL free p system pause system cls main break case 4 exit 0 default printf t t 您输入的有错误 请重新输入 n system pause system cls main void input 输入函数 printf t t 读写平等策略 n printf t t t1 请输入进程信息 n printf t t t2 文件载入进程信息 n printf t t t3 查看进程信息 n printf t t t4 退出 n printf t t n printf t t 请选择 choose void ready int i 进入就绪队列 process p q j k 16 p h1 q h2 int t 0 if h2 NULL q h2 process malloc sizeof process q next NULL t 1 else while q next NULL q q next j process malloc sizeof process j next head1 while h1 starttime i q next head1 h1 h1 next q q next q next NULL j next head1 if h1 NULL break p h1 while p NULL if p starttime i 17 k j while k next p k k next k next p next q next p q q next p p next q next NULL else p p next h1 j next j next NULL free j if t 1 p h2 h2 h2 next p next NULL free p int wait int if anext NULL t 1 else while p next NULL p p next if readcount 0 p next h2 h2 h2 next p p next p next NULL readcount 19 if readcount 0 h2 h2 next p p next p next NULL readcount else Wmutex if t 1 p h3 h3 h3 next p next NULL free p void writer 读写平等下的写者信息 if wait Wmutex 1 h2 h2 next h3 next NULL else Wmutex void add int i 动态增加 process p q 20 int a p head1 q process malloc sizeof process printf t t 进程序号 scanf d printf t t t 读或写 fflush stdin scanf c printf t t 开始时间 scanf d q starttime a i printf t t 执行时间 scanf d q runtime 0 q next NULL if h1 NULL while p next NULL p p next p next q else h1 q void print int i 输出函数 process p p h3 while p NULL 21 p runtime p p next printf n t t 执行 d n i printf t t 执行队列 p h3 if p NULL printf else while p NULL printf d p ID p p next printf n t t 等待队列 p h2 if p NULL printf else while p NULL printf d p ID p p next printf n void leave 离开执行队列 process p q p q process malloc sizeof process p next NULL while h3 NULL 22 if h3 needtime h3 runtime p next h3 p p next else if h3 type r h3 type R readcount if readcount 0 Wmutex 1 else signal Wmutex h3 h3 next p next NULL h3 q next q next NULL free q void main int i 0 input while h1 NULL h2 NULL h3 NULL i if h1 NULL ready i if h2 NULL 23 while h2 type r reader if h3 NULL if h3 type w break if h2 NULL break if h2 NULL if h2 type w writer print i leave Sleep 1000 交出线程占用 CPU 时间一秒钟 fflush stdin 清空缓冲区 char ch if kbhit 1 检查当前是否有键盘输入 若有则返回 一个非 0 值 否则返回 0 ch getch if ch S ch s printf t t 已暂停 任意键继续 n 添加新 的进程输入 a n ch getchar if ch a add i 24 printf n n t t 执行完毕 n system pause system cls Wmutex 1 readcount 0 main while 1 第 5 部分 总结及参考文献 5 1 总结 通过这次操作系统的课程设计 我研究了读者与写者
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 古风之奇闻趣事:三年级语文阅读教学教案
- 家用电器行业试卷库
- 新型智库在公共议题中的知识传播与决策影响
- 学校与社会三方协同在基础教育融合中的作用
- 电力工程安装维修服务合同协议
- 小学生批判性思维能力的培养
- 产品分类一览表(农业)
- 低空经济与大数据技术的整合
- DB15-T 2578-2022 草种质资源收集技术规程
- 学生心理健康与教育质量的关联
- 小学语文修改语段课件
- (新版)供电可靠性理论考试题库大全-上(单选、多选题)
- C型钢检验报告
- AS9100D体系标准中文版
- 艾滋病、梅毒、乙肝试验室检测技术
- 学前教育学备课课件(共54张PPT)
- 空调安装安全协议书1
- WS T 510-2016病区医院感染管理规范
- 中南大学计算机体系结构题库
- 儿童身高预测与促进课件
- 年产3000吨新茶饮及抹茶智能精深产能加工项目可行性研究报告-甲乙丙资信
评论
0/150
提交评论