




免费预览已结束,剩余17页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数学与计算机学院 课程设计说明书 课 程 名 称 操作系统原理 课程设计 课 程 代 码 题 目 读者写者问题 年级 专业 班 学 生 姓 名 学 号 开 始 时 间 2011 年 12 月 05 日 完 成 时 间 2011 年 12 月 25 日 课程设计成绩 学习态度及平 时成绩 30 技术水平与实际 能力 20 创新 5 说明书撰写质量 45 总 分 100 指导教师签名 年 月 日 西华大学数计学院课程设计说明书 1 目 录 1 引引 言言 1 1 1 1 问题的提出 1 1 2 任务于分析 1 2 程序的主要功能程序的主要功能 2 2 2 1 测试文本录入功能 2 2 2 读者优先判断功能 2 2 3 写者优先判断功能 2 3 程序运行平台程序运行平台 3 3 4 总体设计总体设计 4 4 5 模块分析模块分析 5 5 5 1 测试文本录入模块 5 5 2 读者优先判断模块 5 5 3 写者优先判断模块 5 6 系统测试系统测试 7 7 7 结论结论 8 8 致致 谢谢 8 8 参考文献参考文献 1010 读者写者问题 2 摘 要 在现代操作系统中 几乎毫无例外的都是通过文件系统来组织和管理在计算机 中所存储的大量程序和数据 或者说 文件系统的管理功能 使通过把它所管理的 程序和数据组织成一系列文件来实现的 文件系统负责管理在外存上的文件 并把 对文件的存取 共享和保护等功能调用提供给用户 不仅方便了用户 保证了文件 的安全性 还可有效的提高系统资源的利用率操作系统是一门实践性很强的课程 不仅要学习书本上的理论 而且必须动手实践才能对操作系统基本原理真正理解 本课程设计中的题目能加深学生对教学内容的理解 培养学生初步掌握操作系统基 本功能的设计方法及其实现过程 计算机操作系统是计算机中的关键性技术 它的设计与实现体现了程序设计与 软件工程的精髓 计算机操作系统原理课程那个是计算机科学与技术及相关专业的 核心课程 历来为计算机及信息学科所重视 操作系统原理课程设计正是该课程时 间环节的集中表现 它不仅可使学生巩固理论学习的概念 原理 设计及算法 同 时也可培养软件开发所应有的系统结构设计和软件工程素养 关键词 操作系统 文件系统 功能调用 西华大学数学与计算机学院课程设计说明书 1 1 1 引引 言言 1 1 问题的提出 在 Windows2000 环境下 创建一个控制台进程 此进程包含 n 个线程 用这 n 个线 程来表示 n 个读者或写者 每个线程按相应测试数据文件的要求进行读写操作 用信 号量机制分别实现读者优先和写者优先问题 1 2 任务与分析 具体要求具体要求 读者 写者问题的读写操作限制 包括读者优先和写者优先 写 写互斥 不能有两个写者同时进行写操作 读 写互斥 不能同时有一个线程在读 而另一个线程在写 读 读允许 可以有一个或多个读者在读 读者优先的附加限制 如果读者申请进行读操作时已有另一个读者正在进行读操作 则该读者可直接开始读操作 写者优先的附加限制 如果一个读者申请进行读操作时已有另一个写者在等待访问 共享资源 则该读者必须等到没有写者处于等待状态后才能开始读操作 运行结果显示要求 要求在每个线程创建 发出读写申请 开始读写操作和结束读 写操作时分别显示一行提示信息 以确定所有处理都遵守相应的读写操作限制 课程设计目的 课程设计目的 通过实现经典的读者写者问题 巩固对线程及其同步机制的学习效果 加深对相关 基本概念的理解 并学习如何将基本原理和实际设计有机的结合 读者写者问题 2 2 程序的主要功能 2 1 测试文本录入功能 从指定的文件中录入程序所需要的数据信息 2 2 读者优先判断功能 按 thread info 中信息创建线程并执行 当线程类型为 R 时创建读者线程 2 3 写着优先判断功能 按 thread info 中信息创建线程并执行 当线程类型为 R 时创建读者线程 西华大学数学与计算机学院课程设计说明书 3 3 程序运行平台 Windows98 2000 XP 操作系统 以 VC 6 0 集成开发环境为主要开发工具 读者写者问题 4 4 4 总体设计总体设计 读者优先处理函数写者优先处理函数数 处理读者线程函数处理写者线程函数处理读者线程函数处理写者线程函数 主 函 数 图 4 1 系统总体框架 西华大学数学与计算机学院课程设计说明书 5 5 5 模块分析模块分析 5 1 测试文本录入模块 打开测试数据文本 thread txt 并将其中数据读入 thread info 数组中 int nu 线程号 nu ki de ru 用来临时保存线程信息 char ki 线程类型 double de 延迟时间 double ru 运行时间 file fopen thread txt r if file while feof file fscanf file d c lf lf n thread info n thread num nu thread info n thread kind ki thread info n thread delay de thread info n thread runtime ru fclose file 5 2 读者优先判断模块 1 1 首先调 readfirst 函数 按 thread info 中信息创建线程并执行 当线程类型为 R 时创建读者线程 反之创建写者线程 主要代码如下 for int i 0 idelay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf reader d apply n nu WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount if readcount 1 申请的读者数加 1 EnterCriticalSection 如为第一个读者 等待写者写完 ReleaseMutex rmutex 释放互斥变量 rmutex printf reader d begin to read n nu Sleep ru 执行 printf reader d finished n nu WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount if readcount 0 LeaveCriticalSection ReleaseMutex rmutex 释放 rmutex 3 3 写者线程 rf write 首先申请写操作 然后等待进入临界区 cs write 执行写操 作 最后释放临界资源 cs write 完成写操作 DWORD de DWORD threadinfo p delay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf writer d apply n nu EnterCriticalSection printf writer d begin to write n nu Sleep ru printf writer d finished n nu 西华大学数学与计算机学院课程设计说明书 7 LeaveCriticalSection 5 3 读者优先判断模块 1 1 首先调 writefirst 函数 按 thread info 中信息创建线程并执行 当线程类型为 R 时创建读者线程 反之创建写者线程 主要代码如下 for int i 0 idelay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf reader d apply n nu WaitForSingleObject mutex 1 阻塞互斥变量 mutex EnterCriticalSection WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount readcount 申请的读者数加 1 if readcount 1 EnterCriticalSection 如为第一个读者 等待写者写完 ReleaseMutex rmutex 释放互斥变量 rmutex LeaveCriticalSection 让其他读者进去临界区 ReleaseMutex mutex 释放互斥变量 mutex printf reader d begin to read n nu Sleep ru 执行 printf reader d finished n nu WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount readcount if readcount 0 读者写者问题 8 LeaveCriticalSection ReleaseMutex rmutex 释放 rmutex 3 3 写者线程 wf write 与读者线程有些类似 但也有不同 首先也是申请写操作 然后 用互斥变量 wmutex 完成修改 writecount 及进入临界区 cs write 的过程 若为第一 个申请的写者应等待当前进行的读者读完 之后释放互斥变量 wmutex 执行读操作 注意 此时并未释放临界资源 cs write 即一次仅允许一个写者写 最后释放临 界资源 cs write 完成写操作 然后用互斥变量 wmutex 完成修改 writecount 如为 当前最后一个写者则释放临界区变量 cs read 释放互斥变量 wmutex HANDLE wmutex OpenMutex MUTEX ALL ACCESS false wmutex DWORD de DWORD threadinfo p delay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf writer d apply n nu WaitForSingleObject wmutex 1 阻塞 wmutex 以便修改 writecount writecount 当前申请的写者数加 1 if writecount 1 EnterCriticalSection 如有读者在读 等待 ReleaseMutex wmutex 释放互斥变量 wmutex EnterCriticalSection printf writer d begin to write n nu Sleep ru printf writer d finished n nu LeaveCriticalSection WaitForSingleObject wmutex 1 writecount 当前申请的写者数减 1 if writecount 0 LeaveCriticalSection ReleaseMutex wmutex 释放互斥变量 wmutex 西华大学数学与计算机学院课程设计说明书 9 流程图 结束 将数据读入 threadinfo 数组 输入选择 0 1 或 2 读完 读者数 1 如读者数 为 0 允许写 者写 如有读者在读 直接进入 否 则等写者写完 将读者数 1 调函数 rf write 写操作 等读者读 写者写 调函数 rf read 线程 R线程 W 最后线程 否 是 开始 2 1 0 调函数 readerfirst调函数 writerfirst 最后线程 是 否 读完 读者数 1 如读者数 为 0 允许写 者写 有读者读无写 者等时进入读 读者数 1 反 之等待 线程 R 调函数 rf write 线程 W 写操作 调函数 rf read 等读者读 写者写 读者写者问题 10 6 系统测试 6 1 读者优先结果 图 6 1 选择读者优先 图 6 2 读者优先运行过程及结果 西华大学数学与计算机学院课程设计说明书 11 6 2 写者优先结果 图 6 3 选择写者优先 图 6 4 写者优先运行结果和过程 读者写者问题 12 7 7 结论结论 本次操作系统课程设计完成的是读者 写者问题 通过学习对线程及其同步机制有了很 的学习和掌握 并认识到同步可以保证在一个时间内只有一个线程对某个资源有控制权 共享资源包括全局变量 公共数据成员或者句柄等 同步还可以使得有关联交互作用的代 码按一定的顺序执行 西华大学数学与计算机学院课程设计说明书 13 参考文献参考文献 1 张尧学等编著 计算机操作系统教程 北京 清华大学出版社 2006 02 2 汤子瀛等编著 计算机操作系统 西安 西安电子科技出版社 1996 12 3 陈向群 编著 操作系统教程 北京 北京大学出版社 2007 01 4 罗宇 等编著 操作系统课程设计 北京 机械工业出版社 2005 9 读者写者问题 14 附附 录录 include include include include define N 30 最大线程数 define S 1000 int readcount 0 读者数 int writecount 0 写者数 临界区 CRITICAL SECTION cs write CRITICAL SECTION cs read FILE file struct threadinfo int num 线程号 char kind 线程类型 double delay 延迟时间 double runtime 运行时间 threadinfo thread info N 线程信息数组 HANDLE thread N 线程句柄 读者优先 读者线程 P 保存读者线程信息 void rf read void p HANDLE rmutex OpenMutex MUTEX ALL ACCESS false rmutex DWORD de DWORD threadinfo p delay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf reader d apply n nu WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount if readcount 1 申请的读者数加 1 EnterCriticalSection 如为第一个读者 等待写者写完 ReleaseMutex rmutex 释放互斥变量 rmutex printf reader d begin to read n nu Sleep ru 执行 printf reader d finished n nu WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount if readcount 0 LeaveCriticalSection ReleaseMutex rmutex 释放 rmutex 西华大学数学与计算机学院课程设计说明书 15 读者优先 写者线程 P 保存写者线程信息 void rf write void p DWORD de DWORD threadinfo p delay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf writer d apply n nu EnterCriticalSection printf writer d begin to write n nu Sleep ru printf writer d finished n nu LeaveCriticalSection 读者优先 void readerfirst int n thread for int i 0 idelay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf reader d apply n nu WaitForSingleObject mutex 1 阻塞互斥变量 mutex EnterCriticalSection WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount readcount 申请的读者数加 1 if readcount 1 读者写者问题 16 EnterCriticalSection 如为第一个读者 等待写者写完 ReleaseMutex rmutex 释放互斥变量 rmutex LeaveCriticalSection 让其他读者进去临界区 ReleaseMutex mutex 释放互斥变量 mutex printf reader d begin to read n nu Sleep ru 执行 printf reader d finished n nu WaitForSingleObject rmutex 1 阻塞 rmutex 以便修改 readcount readcount if readcount 0 LeaveCriticalSection ReleaseMutex rmutex 释放 rmutex 写者优先 写者线程 p 保存写者线程信息 void wf write void p HANDLE wmutex OpenMutex MUTEX ALL ACCESS false wmutex DWORD de DWORD threadinfo p delay 1000 延迟时间 DWORD ru DWORD threadinfo p runtime 1000 执行时间 int nu threadinfo p num Sleep de 等待 printf writer d apply n nu WaitForSingleObject wmutex 1 阻塞 wmutex 以便修改 writecount writecount 当前申请的写者数加 1 if writecount 1 EnterCriticalSection 如有读者在读 等待 ReleaseMutex wmutex 释放互斥变量 wmutex EnterCriticalSection printf writer d begin to write n nu Sleep ru printf writer d finished n nu LeaveCriticalSection WaitForSingleObject wmutex 1 writecount 当前申请的写者数减 1 if writecount 0 LeaveCriticalSection ReleaseMutex wmutex 释放互斥变量 wmutex 写者优先 void writerfirst int n thread for int i 0 i n thread i 西华大学数学与计算机学院课程设计说明书 17 if thread info i kind R thread i CreateThread NU
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农村新能源市场2025年技术创新与能源互联网研究报告
- 2025年新能源商用车辆在环卫设施清洁中的应用场景及市场前景报告
- 保险行业数字化理赔服务在信用保险中的信用风险监测报告
- 2025年生物质能广告宣传合规与技术创新案例分析报告
- 2025年智慧工厂射频识别(RFID)技术在供应链管理中的应用案例分析报告
- 安全教育培训纳入刑法课件
- 共享民宿项目在2025年共享经济浪潮中的可行性研究评估报告
- 教育行业质量评估与认证体系在学生法治教育中的实践探索报告
- 2025风力发电设备制造行业:技术创新与新能源产业融合报告
- 2025-2026学年六年级英语上册辽师大版期末模拟测试卷三(含答案)
- 食品公司员工培训计划书
- 风湿性疾病的影像学表现
- 四川省建筑工程地下结构抗浮锚杆关键技术作业规程
- 灭火器正确使用方法
- 国有企业普法培训课件
- 传统建筑对现代建筑的影响与启示
- 用户需求驱动产品设计
- 《铁路旅客运输组织》课件
- 文明礼仪从我做起主题班会课件
- 健康养老与医养结合
- 小学生主题班会 好习惯的养成 课件
评论
0/150
提交评论