




已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统多进程设计-课程设计操作系统课程设计设计文档一、选题根据本人编程的经验以及对操作系统的了解,决定选取题目一以完成本作业。(附:题目一的内容)实现UP、DOWN原语产生3个进程:两个进程模拟需要进入临界区的用户进程。当需要进入临界区时,显示:“进程x请求进入临界区”,同时向管理进程提出申请;申请返回,表示进入了临界区。在临界区中等待一段随机时间,并显示:“进程x正在临界区”;当时间结束,显示:“进程x退出临界区”,同时向管理进程提出退出申请;当申请返回,显示:“进程x已退出临界区。”一个进程作为原语的管理进程,接受其他进程的临界区进入请求:如果允许进入,则根据DOWN 原语的操作步骤设置相应变量,然后返回; 如果不允许进入,则进入循环等待,直到允许为止; 退出时模拟UP 操作。 进程间通信可以采用信号、消息传递、管道或网络通信方式。二、文档2.1 选题相关原理题目要求建立三个进程,模拟进入临界区,然后用一个进程进行管理。在我们的操作系统,通过信号量进行访问是很常见的保证进程同步的方法。在我们的实验中,我决定用DELPIHI来模拟实现这一过程,具体思路如下:DELPHI程序运行后,主进程(在DELPHI中只有一个进程,但我们可以把线程看作进程)就是我们看到的应用程序,这个程序应该理解是一个原语的管理进程,它可能管理我们的临界区,注意是管理,例如我决定用一个数来模拟临界区,如果该数大于0,那么临界区可用;如果该数小于0,那么临界区不可用;这个数的改变只能由主线程来做到,而其它的线程如果要申请临界区或退出临界区只能通过对主线程进行申请。因此这样设计是符合题目要求的。主要考虑建立以下函数,或功能及数据设计:(由于时间关系,就不画流程图了,但应该很容易理解)1、 主进程部分功能部分:(1) 根据线程的请求分配临界区:如果符合条件(临界区可被申请,而且还有临界区还有资源),那么将该资源分配给申请线程,同时显示一下分配情况;如果不符合条件,那么要求线程等待资源;调功能(3)显示状态信息(2) 根据线程的请求释放临界区:如果正在临界区的线程请求退出,则实现DOWN操作,把信号量置位,把资源置位;调功能(3)显示状态信息(3) 显示GUI状态:如当前的状态,临界区资源的个数等等数据部分:(1) 要创建线程的名称列表,因此就可以创各种线程(绝对不止两个都可以)(2) 模拟临界区资源的一个内存变量,模拟是否使用临界区的另一个内存变量(这是因为事实上的控件都不支持线程内读写)2、 子线程部分功能部分:(1) 申请资源:向主线程申请资源,如果成功,进入资源并利用,如果不成功,循环等待并SLEEP,如果10秒后仍没有资源可利用,线程自动停止(以免死锁)并报错误信息(2) 模拟使用:申请得资源后,随机使用一段时间(3) 申请释放;释放资源要向主进程提供申请,如果成功,那么停止,如果不成功,循环等待并SLEEP,如果10秒后仍没有得到主线程的答复,报错误信息并终止;数据部分:(1) 线程的名称,由线程创建时由主线程指定;(2) 是否申请到资源标志(3) 是否终止标志(因此主线程就可以控制是否将线程终止)(4) 休眠时间:如果申请不到资源或不能申请退出等待的时间(5) 显示的信息列表:显示的信息有“不能申请资源”、“不能退出资源”两种情况(暂这样考虑)根据我们的这个设计,应该是能很好的模拟出题目要求的。2.2 设计时有关的数据和代码实现数据和代码实现在这里不详述了,其实就是对上面那部分的实现。主要参考书DELPHI 6 开发人员指南;简单的介绍如下所示(请注意区分功能,因为这里不全的,详细信息请参看源代码部分)2.3 最终结果最终结果,是一模拟程序。程序运行状态如下50操作系统多进程设计三、原代码 采用Delphi 6.0集成工具开发,语言object pascal,开发环境P4 1.8G+384 DDR +Windows 2000运行并测试成功;unit uMain;interface需要完整内容的请联系 ,本文免费, type TMain = class(TForm) GroupBox1: TGroupBox; lbox: TListBox; Panel1: TPanel; StatusBar1: TStatusBar; GroupBox2: TGroupBox; btnstartMonitor: TBitBtn; btnStopMonitor: TBitBtn; GroupBox3: TGroupBox; GroupBox4: TGroupBox; Label3: TLabel; Label4: TLabel; btnCreate: TBitBtn; edtName: TEdit; Label5: TLabel; Label6: TLabel; edtRetry: TSpinEdit; GroupBox5: TGroupBox; Label8: TLabel; edtSource: TEdit; edtUse: TEdit; Label9: TLabel; lvInfo: TListView; Splitter1: TSplitter; edtWaitTime: TSpinEdit; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Label7: TLabel; edtTimes: TSpinEdit; Label10: TLabel; CheckBox1: TCheckBox; Label11: TLabel; procedure btnstartMonitorClick(Sender: TObject); procedure btnStopMonitorClick(Sender: TObject); procedure btnCreateClick(Sender: TObject); private Private declarations public isMonitor: boolean; /is monitor the status ,is false didnt display the statu information procedure AddInfoTolvinfo(index: integer; s: string); function GetInfoFromlvInfo(index: integer): string; procedure AddInfo(s: string); Public declarations end; TDemoProcedure = class(TThread) public ListIndex: integer; constructor Create(); private Private declarations protected procedure Execute; override; procedure WantSource; procedure Wantsourceok; procedure donWantSource; procedure donWantsourceOK; procedure EndThisRun; procedure ShowError; procedure ShowErrorEx; /释放资源被锁定,强制释放以防死锁 end;const sRun = 运行状态; sWait = 申请资源; sWaitOk = 申请资源成功,进行使用期; sExit = 申请释放资源; sExitOk = 释放资源ok;var Main: TMain;implementation$R *.dfmprocedure TMain.btnstartMonitorClick(Sender: TObject);begin isMonitor := true; btnStartMonitor.Enabled := false; btnStopMonitor.Enabled := true;end;procedure TMain.btnStopMonitorClick(Sender: TObject);begin isMonitor := false; btnStartMonitor.Enabled := true; btnStopMonitor.Enabled := false;end;procedure TMain.btnCreateClick(Sender: TObject);var strName: string; waitTime, Retry, Times: integer; p: TListitem; isMore: boolean; /判断该进程是否已存在 i: integer; DemoProcedure: TDemoProcedure;begin strName := Trim(edtName.Text); waitTime := edtWaitTime.Value; Retry := edtRetry.Value; Times := edtTimes.Value; if Trim(edtName.Text) = then begin ShowMessage(模拟进程的名称必须输入,随便输); edtName.SetFocus; exit; end; if (WaitTime = 0) or (Retry = 0) then begin ShowMessage(时间是不能设为小于等于0的数的,随便输); exit; end; if (Times = 0) then begin ShowMessage(重试次数不能少于0); edtTimes.SetFocus; exit; end; isMore := false; for i := 0 to lvinfo.Items.Count - 1 do begin if lvinfo.Itemsi.Caption = strName then begin isMore := true; break; end; end; if isMore then begin ShowMessage(模拟进程的名称要唯一哦); edtName.SetFocus; exit; end; with lvinfo do /如果成功,写入进程信息列表中 begin p := Items.Add; p.Caption := strname; p.SubItems.Add(intTostr(waitTime); p.SubItems.Add(intTostr(Retry); p.SubItems.Add(sRun); end; DemoProcedure.WaitTime := waitTime * 1000; DemoProcedure.RetryTime := Retry * 1000; DemoProcedure.Resume;end;procedure TMain.AddInfotoLvinfo(index: integer; s: string);begin if lvinfo.Items.Count - 1 index then exit; if index = Times); if i = Times then begin /未申请到资源退出 synchronize(self.ShowError); self.Terminate; end; /进行运行态 synchronize(wantsourceOK); /运行 sleep(waittime); /模拟 /运行完毕申请释放资源 i := 0; repeat synchronize(donWantSource); if isDonotWantSource then break else sleep(RetryTime); Inc(i);until (i = Times); if i = Times then synchronize(self.ShowErrorEx); self.Terminate; end; synchronize(donWantSourceOk); synchronize(EndThisRun);/ self.Terminate;end;procedure TDemoProcedure.ShowError;begin with Main do begin addinfoTolvinfo(ListIndex, 超时错误并停止); addinfo(format(%s 经过%d秒重试,仍然没有成功,超时并终止线程, strName, RetryTime); end;end;procedure TDemoProcedure.ShowErrorEx;begin with Main do begin addinfoTolvinfo(ListIndex, 超时错误并停止); addinfo(format(%s 经过%d秒重试,用户仍然锁定不准释放资源,为了防止死锁,强制释放并终止线程, strName, RetryTime); edtuse.Text := 否; Edit1.Text := 无; edtSource.Text := intTostr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 责任课件内容大纲
- 2025版上海房地产买卖合同范本涵盖交易税费及支付方式说明
- 2025年房地产营销代理及品牌策划服务合同
- 2025第一部分:生物制药研发合同协议书
- 2025年智能家居产品广告创意合同示范文本
- 2025版跨境贸易借款合同带保证人及汇率风险对冲下载
- 2025年度建筑材料代购与绿色建筑认证服务合同
- 2025版外籍技术人员引进与管理合同书
- 2025年度专业摄影棚租赁服务合同
- 2025年度高级铺位租赁及商业运营管理合同书
- 2025年有害生物防治员初级理论知识考核试题及答案
- 新版2026统编版小学道德与法治三年级上册 第4课《 科技力量大》第1课时 科技改变生活和科技改变观念 教案设计(教案)
- 学会交流与沟通课件
- 铁路监理培训考试试题及答案
- 2025全国企业员工全面质量管理知识竞赛题库附答案
- 供应链与贸易安全培训课件
- 严禁燃放烟花炮竹课件
- 宫颈息肉课件
- 焊接和切割作业的防火、防爆措施
- 人事任命书红头文件模板
- 探讨恶性肿瘤患者化疗后口腔溃疡治疗及护理的有效措施
评论
0/150
提交评论