操作系统课程设计.ppt
《操作系统课程设计.ppt》由会员分享,可在线阅读,更多相关《操作系统课程设计.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、操作系统课程设计操作系统课程设计读者写者算法安徽理工大学课程设计任务书安徽理工大学课程设计任务书n n 计算机计算机 院系院系 软件软件 教研室教研室n n学学 号号20103029362010302936学生姓名訾振恒专业(班级)电子学生姓名訾振恒专业(班级)电子10-110-1班设计题目读者写者算班设计题目读者写者算法模拟设计技术参数了解进程同步的概念加深对读者写者算法的理解理解信法模拟设计技术参数了解进程同步的概念加深对读者写者算法的理解理解信号量机制的原理掌握运用信号量解决进程同步问题的方法,进而学会运用进号量机制的原理掌握运用信号量解决进程同步问题的方法,进而学会运用进程的同步与互斥
2、用高级语言和程的同步与互斥用高级语言和MFCMFC编写和调试一个简单的读者写者算法程序编写和调试一个简单的读者写者算法程序设计要求设计一个读者写者算法模拟程序以解决进程间的互斥问题。设计要求设计一个读者写者算法模拟程序以解决进程间的互斥问题。(2)(2)对程对程序的每一部分要有详细的设计分析说明。序的每一部分要有详细的设计分析说明。(3)(3)源代码格式要规范。源代码格式要规范。(4)(4)设计合设计合适的测试用例,对得到的运行结果要有分析。适的测试用例,对得到的运行结果要有分析。(5)(5)设计中遇到的问题,设计的设计中遇到的问题,设计的心得体会。心得体会。(6)(6)按期提交完整的程序代码
3、、可执行程序和课程设计报告。工作按期提交完整的程序代码、可执行程序和课程设计报告。工作量课程设计任务要求不少于量课程设计任务要求不少于1010页的报告,要赋有模块图或流程图。工作计划页的报告,要赋有模块图或流程图。工作计划第一周:查找相关资料,并绘制草图!第二周:确定选用第一周:查找相关资料,并绘制草图!第二周:确定选用C+C+语言和语言和MFCMFC为为编程语言,。第三周:写需求分析报告。第四周:着手进行编程,实现算法,编程语言,。第三周:写需求分析报告。第四周:着手进行编程,实现算法,并调试程序。第五周:测试程序并优化功能,最终完成设计报告。参考资料并调试程序。第五周:测试程序并优化功能,
4、最终完成设计报告。参考资料11汤小丹汤小丹 梁红兵梁红兵 哲凤屏哲凤屏 汤子瀛汤子瀛.计算机操作系统(第三版)西安电子科技计算机操作系统(第三版)西安电子科技大学出版社,大学出版社,2007220072杨克昌杨克昌 王岳斌王岳斌 计算机导论(第二版)计算机导论(第二版)MM中国水电出中国水电出版社版社.20053.20053(美)(美)Roger Roger S.PressmanS.Pressman 著著 软件工程软件工程MM 机械工业出版社机械工业出版社 .20094.20094徐孝凯徐孝凯 C+C+语言基础教程(第二版)语言基础教程(第二版)MM 清华大学出版社清华大学出版社.20075.
5、20075郑阿奇郑阿奇 Visual C+Visual C+教程教程MM 清华大学出版社清华大学出版社.2005.2005指导教师签字指导教师签字教研室主任签字教研室主任签字 摘要摘要n n所谓读者写着问题,是指保证一个写者进程必须与其他进所谓读者写着问题,是指保证一个写者进程必须与其他进程互斥地访问共享对象的同步问题。读者写者问题可以这程互斥地访问共享对象的同步问题。读者写者问题可以这样的描述,有一群写者和一群读者,写者在写同一本书,样的描述,有一群写者和一群读者,写者在写同一本书,读者也在读这本书,多个读者可以同时读这本书,但是,读者也在读这本书,多个读者可以同时读这本书,但是,只能有一个
6、写者在写书,并且,读者必写者优先,也就是只能有一个写者在写书,并且,读者必写者优先,也就是说,读者和写者同时提出请求时,读者优先。当读者提出说,读者和写者同时提出请求时,读者优先。当读者提出请求时需要有一个互斥操作,另外,需要有一个信号量来请求时需要有一个互斥操作,另外,需要有一个信号量来判断当前是否可操作。信号量机制是支持多道程序的并发判断当前是否可操作。信号量机制是支持多道程序的并发操作系统设计中解决资源共享时进程间的同步与互斥的重操作系统设计中解决资源共享时进程间的同步与互斥的重要机制,而读者写者则是这一机制的一个经典范例。要机制,而读者写者则是这一机制的一个经典范例。n n总资源数、进
7、程数、已分配的资源都可从文档中直接读出总资源数、进程数、已分配的资源都可从文档中直接读出到到MFCMFC界面,列出进程安全序列。源程序是用高级语言界面,列出进程安全序列。源程序是用高级语言C+C+编程实现。编程实现。n n关键词:读者写者算法关键词:读者写者算法 资源竞争资源竞争 进程互斥进程互斥目录目录n n1 1读者写者算法读者写者算法n n1.1 1.1 系统分析系统分析n n1.1.11.1.1问题描述问题描述n n1.1.21.1.2算法描述算法描述n n1.1.31.1.3设计目的设计目的n n1.2 1.2 系统设计系统设计n n1.2.11.2.1设计要求设计要求n n1.2.
8、21.2.2设计原理设计原理n n1.2.31.2.3设计流程图设计流程图n n1.31.3系统实现系统实现n n1.3.11.3.1数据结构数据结构n n1.3.21.3.2函数声明函数声明n n1.3.31.3.3运行结果运行结果n n2 2总结总结n n2.12.1设计体会设计体会n n参考文献参考文献 1读者写者算法读者写者算法n n1.1 系统分析n n1.1.1问题描述n n(1)多个进程共享一个文件,其中只读文件的称之为读者,其余只写文件的称为写者。读者可以同时读,但是写者只能独立写。n n(2)对(1)修改,使得它对写者优先,即一旦有写者到,后续的读者都必须等待,而无论是否有读
9、者在读文件。1.1.2算法描述算法描述n n写者优先写者优先n n写者优先与读者不同之处在于一旦一个写者到来它应该尽写者优先与读者不同之处在于一旦一个写者到来它应该尽快对文件进行写操作如果有一个写者在等待则新到来的读快对文件进行写操作如果有一个写者在等待则新到来的读者不允许进行读操作。为此应当填加一个整形变量者不允许进行读操作。为此应当填加一个整形变量numwritenumwrite用于记录正在等待的写者的数目用于记录正在等待的写者的数目numwritenumwrite的初值的初值为为0.0.当线程开始调入时当线程开始调入时.只允许一个写者准备读只允许一个写者准备读.等待互斥等待互斥信号信号,
10、保证对保证对numwritenumwrite 的访问的访问,修改互斥修改互斥.即即numwritenumwrite+.+.而而当写者线程进行读操作时当写者线程进行读操作时,则相应写者数目减少则相应写者数目减少(numwritenumwrite-).-).当当numwritenumwrite=0=0 时说明所有的读者都已经读时说明所有的读者都已经读完离开临界区唤醒读者完离开临界区唤醒读者,释放互斥信号释放互斥信号.为了实现写者优先为了实现写者优先应当填加一个个临界区对象应当填加一个个临界区对象readread当有写者在写文件或等待当有写者在写文件或等待时时读者必须阻塞在读者必须阻塞在readre
11、ad上。上。1.1.3设计目的设计目的n n带着下面几个问题,对课题进行深入分析直至解决问题:n n1.了解进程产生互斥的原因;n n2.了解为什么要进行死锁的避免;n n3.掌握读者写者算法的数据结构;n n4.了解算法的执行过程,加深对读者写者算法的理解。1.2 系统设计系统设计n n1.2.11.2.1设计要求设计要求n n1 1分析设计内容,给出解决方案(要说明设计实分析设计内容,给出解决方案(要说明设计实现的原理,采用的数据结构)。现的原理,采用的数据结构)。n n2 2画出程序的基本结构框图和流程图。画出程序的基本结构框图和流程图。n n3 3对程序的每一部分要有详细的设计分析说明
12、。对程序的每一部分要有详细的设计分析说明。n n4 4源代码格式要规范。源代码格式要规范。n n5 5设计合适的测试用例,对得到的运行结果要有设计合适的测试用例,对得到的运行结果要有分析。分析。n n6 6设计中遇到的问题,设计的心得体会。设计中遇到的问题,设计的心得体会。n n7 7按期提交完整的程序代码、可执行程序和课程按期提交完整的程序代码、可执行程序和课程设计报告。设计报告。1.2.2设计原理设计原理n n1.读者写者算法思路:n n先对用户提出的请求优先性选择,即是时间优先,还是写者优先。若满足,则进行相应的优先性选择。然后选择是你读者进入还是写者进入。最后选择是写着完成还是读者完成
13、。2.读者写者算法中用到的主要数据结读者写者算法中用到的主要数据结构:构:n n相关相关WindowsAPIWindowsAPI说明说明:n nCreateThreadCreateThread:创建一个在调用进程的地址空间中执行的线程。创建一个在调用进程的地址空间中执行的线程。n nExitThreadExitThread n nSleep:Sleep:对指定的时间间隔挂起当前的执行线程对指定的时间间隔挂起当前的执行线程n nCreateMutexCreateMutex:创建有名或者无名的互斥对象创建有名或者无名的互斥对象n nReleaseMutex:ReleaseMutex:n nWait
14、ForSingleObjectWaitForSingleObject:当发生当发生(1)(1)指定对象处于信号态指定对象处于信号态(2)(2)超时超时 则该函数返回则该函数返回n nWaitForMultipleObjectWaitForMultipleObject:任意一个或全部指定对象处于信号态或超时间隔已过时,任意一个或全部指定对象处于信号态或超时间隔已过时,返回返回n nCreateSemaporeCreateSemapore:创建一个有名或无名信号对象。创建一个有名或无名信号对象。n nOpenSemaporeOpenSemapore:n nInitializeCriticalSec
15、tionInitializeCriticalSection:初始化临界区对象初始化临界区对象n nEnterCriticalSectionEnterCriticalSection:等待指定临界区对象的所有权。当调用线程被赋予所有权等待指定临界区对象的所有权。当调用线程被赋予所有权时,返回。时,返回。n nLeaveCriticalSectionLeaveCriticalSection:该函数释放指定临界区对象的所有权。该函数释放指定临界区对象的所有权。3.读者写着算法(函数):读者写着算法(函数):n n(1)(1)初始化函数:初始化函数:readHandlel0readHandlel0读者初
16、始化,读者初始化,writeHandlel0 writeHandlel0 写者初始化。写者初始化。n n(2)(2)创建进程:创建进程:HWriteHWrite=CreateThread(LPSECURITY_ATTRIBUTE=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,S)NULL,0,创建写者进程;创建写者进程;HReadHRead=CreateThread(LPSECURITY_ATTRIBUTES=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,)NULL,0,创建读者进程;创建读者进程;n n(3)(3)读
17、者进程:读者进程:void read()void read(),否则为写者进程,否则为写者进程void writevoid write()()。n n(4)(4)intint id,bid,b用这两个变量来判断是时间优先还是写用这两个变量来判断是时间优先还是写者优先。者优先。1.2.3设计流程图设计流程图n n根据算法设计原理及程序结构分析画出程序里程图如下页图,即图2-1所示:图图1-2-1写者优先算法程序流程图写者优先算法程序流程图1.3系统实现系统实现n n1.3.11.3.1数据结构数据结构n n程序使用的全局变量:程序使用的全局变量:n nintint numreadnumread=
18、0,numwrite=0;=0,numwrite=0;n nintint w=1,r=1;w=1,r=1;n nintint id,bid,b;n nintint cxIconcxIcon=GetSystemMetrics(SM_CXICONGetSystemMetrics(SM_CXICON););n nintint cyIconcyIcon=GetSystemMetrics(SM_CYICON);intGetSystemMetrics(SM_CYICON);int WorkxWorkx;n nintint x=(x=(rect.Widthrect.Width()-()-cxIconcxIc
19、on+1)/2;+1)/2;n nintint y=(y=(rect.Heightrect.Height()-()-cyIconcyIcon+1)/2;+1)/2;n nintint i;i;1.3.2函数声明函数声明n n本程序中用到的函数:n nvoid read();/读者进程函数n nvoid write();/写者进程函数1.3.4程序实现,程序清单程序实现,程序清单n n1 1)读者写者初始化)读者写者初始化n nreadHandlel0=CreateSemaphore(NULL,0,1,read1);readHandlel0=CreateSemaphore(NULL,0,1,re
20、ad1);n nreadHandlel0=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_readHandlel0=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,read1);MODIFY_STATE,NULL,read1);n nreadHandlel1=CreateSemaphore(NULL,0,1,read2);readHandlel1=CreateSemaphore(NULL,0,1,read2);n nreadHandlel1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE
21、_readHandlel1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,read2);MODIFY_STATE,NULL,read2);n nwriteHandlel0=CreateSemaphore(NULL,0,1,write1);writeHandlel0=CreateSemaphore(NULL,0,1,write1);n nwriteHandlel0=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_writeHandlel0=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_
22、MODIFY_STATE,NULL,write1);MODIFY_STATE,NULL,write1);n nwriteHandlel1=CreateSemaphore(NULL,0,1,write2);writeHandlel1=CreateSemaphore(NULL,0,1,write2);n nwriteHandlel1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_writeHandlel1=OpenSemaphore(SYNCHRONIZE|SEMAPHORE_MODIFY_STATE,NULL,write2);MODIFY_STATE,NULL,writ
23、e2);tr tr=请按下按钮开始请按下按钮开始 rnrn;n n SetDlgItemText(IDC_EDIT1,str);SetDlgItemText(IDC_EDIT1,str);n n UpdateData(FALSEUpdateData(FALSE););(2)创建写者进程)创建写者进程n nvoid void CMyDlg:OnOKCMyDlg:OnOK()()n n n n/TODO:Add extra validation here/TODO:Add extra validation heren nHWriteHWrite=CreateThread(LPSECURITY_AT
24、TRIBUTES)NULL,0,=CreateThread(LPSECURITY_ATTRIBUTES)NULL,0,n n (LPTHREAD_START_ROUTINE)writeLPTHREAD_START_ROUTINE)write,n n (LPVOID)NULL,(LPVOID)NULL,n n 0,&DWORD1);0,&DWORD1);n n ReleaseSemaphore(writeHandlel0,1,NULL);ReleaseSemaphore(writeHandlel0,1,NULL);n n UpdateData(FALSEUpdateData(FALSE););n
25、 n/CDialog:OnOKCDialog:OnOK();();n n/CDialog:OnOKCDialog:OnOK();();n n(3)创建读者进程)创建读者进程n nvoid CMyDlg:OnButton1()void CMyDlg:OnButton1()n n n n/TODO:Add your control notification handler code here/TODO:Add your control notification handler code heren n HReadHRead=CreateThread(LPSECURITY_ATTRIBUTES)NU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 课程设计
限制150内