欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统课程设计报告abc.docx

    • 资源ID:15680425       资源大小:429.97KB        全文页数:31页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统课程设计报告abc.docx

    1、操作系统课程设计报告abc操作系统课程设计报告进程调度模拟程序 院 系: 信息工程学院 专 业: 计算机科学与技术 班 级: 计算机122班 姓 名: 张贝贝 学 号: 201210311042 指导教师: 刘晋 目录一、课程题目概述 11.1课程题目 11.2设计要求 1三、总体设计 23.1需求分析 23.2课程设计使用的语言及开发工具 23.3总体设计框架 33.4系统结构图 33.5功能模块分析 33.5数据结构分析 5四、详细设计 64.1界面设计 64.2先来先到算法 124.2.1算法思想 124.2.2算法流程图 124.2.3程序代码分析 134.3动态优先级算法 144.3

    2、.1算法思想 144.3.2算法流程图 154.3.3程序代码分析 154.4时间片轮转算法 174.4.1算法思想 174.4.2算法流程图 174.4.3程序代码分析 184.4基础函数 19六、 程序调试与运行结果说明 21七、遇到的问题及解决办法 23八、 课程设计总结与体会 24参考文献 25一、课程题目概述1.1课程题目 有限的时间内模拟实现操作系统内核及文件系统的进程调度1.2设计要求 编写一个进程调度程序,模拟实现进程的创建、运行、阻塞、完成等进程控制,允许多个进程并行的进程调度程序。(1)系统能够真实模拟多任务操作系统中进程生命周期中的相关活动,主要功能涉及进程管理和进程调度

    3、。(2)进程状态: 每个进程的状态可以是就绪 W(Wait)、运行R(Run)、阻塞B(Blocked)或完成F(Finish)四种状态之一。(3)每个进程相关的数据结构有:进程控制块(PCB)和进程生命周期数据。 进程控制块(PCB):至少应该包含如下信息:进程名、优先级、创建时间、需要运行时间、已使用CPU 时间、进程状态、进程生命周期数据、队列链表等等。 进程生命周期数据:即CPU-I/O 时间序列,它是进程调度、进入不同队列的依据。要求序列有一定长度,在进程创建时随机生成,作为进程PCB 结构的一个数据项。(4)系统管理的数据结构 系统PCB 结构数组; 系统就绪队列、完成队列和阻塞队

    4、列; 系统参数:时钟(可以调节速度,以利于观看系统运行)、时间片大小;e. 系统运行时的显示信息 时钟以时间片为单位计数,系统每次有进程发生状态改变时都给出改变进程的显著提示信息,系统在运行完每个时间片后都要显示所有队列和相关进程的状态(基本是FCB 的值,格式如下仅供参考),以便掌握系统的运行情况。(5)采用:A.时间片轮转调度算法B.先来先服务C.动态优先级(优先级的计算自己决定,但一个进程的优先级要随时间改变,即UNIX 的策略)调度算法。三、总体设计3.1需求分析在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态

    5、地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。本次实验在vs2010环境下实现先来先服务调度算法,时间片轮转调度算法和高优先权调度算法。3.2课程设计使用的语言及开发工具语言:C#开发工具:Microsoft Visual Studio 20103.3总体设计框架 用C#语言编程实现操作模拟操作系统进程调度子系统的基本功能;运用多种算法实现对进程的模拟调度。 通过编写程序实现进程

    6、或作业先来先服务、按时间片轮转、高优先权,进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 用.net框架实现程序界面,嵌套在算法中共同实现。3.4系统结构图图1 系统结构图3.5功能模块分析1.进程概念 进程是被独立分配资源的最小单位。进程是动态概念,必须程序的运行才有进程的概念。2.进程的状态模型:(1)就绪状态:当进程分配到除CPU以外的所有必要资源后,只要再获得CPU,便可立即执行。(2)执行状态:进程已获CPU,其程序正在执行。(3)阻塞状态:正在执行的进程由于发生某事件而暂时无法继续执行,便放弃处理机而处于暂停状态,即进程的执行受到阻塞。3.处理机调度在多道程序设计系统中,

    7、内存中有多道程序运行,他们相互争夺处理机这一重要的资源。处理机调度就是从就绪队列中,按照一定的算法选择一个进程并将处理机分配给它运行,以实现进程并发地执行。4.进程调度算法的功能 记录系统中所有进程的执行情况、选择占有处理机的进程、进行进程的上下文切换。5.进程调度的算法:(1)先来先服务算法 如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,总是把当前处于就绪队列之首的那个进程调度到运行状态。进入运行状态的进程在生命周期的一个CPU时间后进入阻塞排到队尾,由下一个进入内存最早的进程进入执行状态,以此类推。(2)时间片轮转算法 固定时间片,系统将所有的就绪进程按先来先服务的原

    8、则排成一个队列,每次调度时,把CPU分配给队首进程,令其执行一个时间片,然后进入阻塞状态排在队尾,下一个队首进程进入CPU进入执行状态。(3)动态优先级算法 为了照顾紧迫性作业,使之在进入系统后便获得优先处理,引入最高优先权优先。系统将从后备队列中选择若干个优先权最高的作业装入内存。动态优先权是指在创建进程时所赋予的优先权,是可以随进程的推进或其等待的时间的增加而改变的。运行状态进程的优先权随时间自减,阻塞状态进程的优先权随时间自增,当阻塞态的优先权高于运行态的优先权时,进入运行状态,这样依次反复。3.5数据结构分析在本课程设计中我们设计了两个数据结构以代表每个进程的不同信息,分别是进程控制块

    9、PCB和进程生命周期life。关于两个数据结构的全局变量描述如下。1.进程控制块PCB表1 进程控制块PCB变量数据结构变量名称变量含义pcname进程名称,由用户自己决定用以标识不同进程intotime进程进入内存时间,由用户自己决定,表示进程进入内存的时间requiretime进程完成所需时间,由用户自己决定,表示完成某一进城所需要的时间grade进程优先级,有用户自己决定,用以表示进程的优先关系yiyong进程已用时间,表示进程从执行开始已用的时间wancheng进程完成时间,表示进程完成的时间2.生命周期life表2 生命周期life数据结构变量数据结构变量名称变量含义Life表示生命

    10、周期的数组,数组长度由life0决定,life0随机生成CPUtime进程的CPU已用时间IOtime进程的IO已用时间四、详细设计4.1界面设计 本次课程设计我们使用的是c#语言,c#语言具有界面设计非常简洁便于修改的特点,在此次界面设计中我们使用了从c#本身的控件从而实现简洁完整界面设计。1.设置页面整体属性public Form1() InitializeComponent(); tbxgrade.Enabled = false; btcreater.Enabled = false; btstop.Enabled = false; btstart.Enabled = false; thi

    11、s.Size = new Size(811, 637); 图2 系统主界面2.系统设置图3 系统设计界面 选择调度算法和进程数中使用ComoboBox控件的下拉框属性,分别选择算法和进程数,用private void btsure_Click(object sender, EventArgs e) 实现控件按钮事件响应:图4 确定清空按钮 确定按钮和清空数据按钮使用Button控件的按钮属性,其中,清空数据按钮事件触发中使用。private void btclear_Click(object sender, EventArgs e):包括 tbxname.Clear(); tbxinto.Cl

    12、ear(); dataGridView1.Rows.Clear(); dataGridView2.Rows.Clear(); currentTimeTextBox.Clear();等,将主界面上所有数据清空。2.创建进程图5 创建进程界面 进程名、进入内存时间、服务时间以及优先级使用TextBox控件,填入数据。其中,如果选择了“动态优先权调度算法”,则通过private void currentTimeTextBox_TextChanged(object sender, EventArgs e)触发“优先级”按钮,系统确认信息完整后,点击创建进程按钮。3.进程观察区图5 进程观察区界面 if

    13、 (maxreadypri = maxblockpri) dataGridView15, maxblockpro.Value = 就绪; 创建的进程依次通过dataDridView控件显示在表格里。进程创建完毕,通过MessageBox控件弹出窗体,点击确定开始进行模拟。4.时钟界面设计图6 时钟currentTimeTextBox.Text = time.ToString();private void currentTimeTextBox_TextChanged(object sender, EventArgs e)private void currentTimeTextBox_Click(

    14、object sender, EventArgs e)5.执行进度条设计图7 执行进度条用ProgressBar这个控件显示当前执行状态的进程的执行进度:for (int a = 0; a huan.Length; a+) huana = ; this.progressBar1.Value = this.progressBar1.Minimum;进程刚进入执行状态时,进度条显示最小,即最左边; if(d=Convert.ToInt32(pcnum) timer1.Enabled = false; this.progressBar1.Value = this.progressBar1.Maxim

    15、um; 进程执行完,则进度条在最右边。6.进程执行区设计图8 进程执行图界面用DataGridView控件显示各个进程的运行情况for (int b = 0; b Convert.ToInt32(pcnum); b+) if (dataGridView2.Rows.Count Convert.ToInt32(pcnum) dataGridView2.Rows.Add(); dataGridView20, b.Value = dataGridView10, b.Value;for (int b = 0; b Convert.ToInt32(pcnum); b+) if (dataGridView

    16、15, b.Value.ToString() = 执行) for (int v = 0; v Convert.ToInt32(pcnum); v+) if (dataGridView10, b.Value = dataGridView20, v.Value) if (dataGridView2.ColumnCount = time + 1) dataGridView2.ColumnCount+; dataGridView2time, v.Style.BackColor = System.Drawing.Color.Pink; dataGridView2.Columnstime + 1.Head

    17、erCell.Value = (time + 1).ToString(); 7.进程信息输入规范界面设计(1)进入内存时间文本框变化事件private void tbxinto_TextChanged(object sender, EventArgs e) try if (tbxinto.Text != & (Convert.ToInt32(tbxinto.Text.Trim() 20) MessageBox.Show(请输入0至20之间的整数!); tbxinto.Text = ; catch MessageBox.Show(请输入0至20之间的整数!); tbxinto.Text = ;

    18、(2)要求服务时间文本框变化事件private void tbxfinish_TextChanged(object sender, EventArgs e) try if (tbxfinish.Text != & (Convert.ToInt32(tbxfinish.Text.Trim() 20) MessageBox.Show(请输入0至20之间的整数!); tbxfinish.Text = ; catch MessageBox.Show(请输入0至20之间的整数!); tbxfinish.Text = ;(3)优先级文本框变化事件private void tbxgrade_TextChan

    19、ged(object sender, EventArgs e) try if (tbxgrade.Text != & (Convert.ToInt32(tbxgrade.Text.Trim() 20) MessageBox.Show(请输入0至20之间的整数!); tbxgrade.Text = ; catch MessageBox.Show(请输入0至20之间的整数!); tbxgrade.Text = ; (4)进程名文本框变化响应事件private void tbxname_TextChanged(object sender, EventArgs e) if (tbxname.Text.

    20、Length 10) MessageBox.Show(字符数超出限制,请输入1-10位字符!); tbxname.Text = ; for (int a = 0; a huan.Length; a+) if (tbxname.Text = huana&tbxname.Text!=) MessageBox.Show(请确保进程名不重复!); tbxname.Text = ; 8.开始模拟按钮单击响应事件private void btstart_Click(object sender, EventArgs e) btstart.Enabled = false; btstop.Enabled = t

    21、rue; if (cmbdiaodu.Text = 时间片轮转调度算法) timer2.Enabled = true; else timer1.Enabled = true; time+;9.暂停按钮单击响应事件private void btstop_Click(object sender, EventArgs e) if (btstop.Text = 暂停) timer1.Stop(); timer2.Stop(); btstop.Text = 继续; else timer1.Start(); timer2.Start(); btstop.Text = 暂停; 4.2先来先到算法4.2.1算

    22、法思想 先来先服务调度算法的思想是按照进程进入就绪队列的先后顺序调度并分配处理机执行。先来先服务调度算法是一种不可抢占的算法,先进入就绪队列的进程,先被处理机运行。一旦一个进程占有了处理机,它就一直运行下去,直到该进程完成工作或者因为等待某事件而不能继续运行时才释放处理机。4.2.2算法流程图图9 先来先到算法流程图4.2.3程序代码分析1.先来先服务的CPU调度private void FCFS() int d = 0; for (int c = 0; c Convert.ToInt32(pcnum); c+) if (dataGridView15, c.Value.ToString() =

    23、 执行) d+; if (d = 0) findnext(); else pi.CPUtime-; if (pi.CPUtime = 0) if (pi.lposition = pi.life0) dataGridView15, i.Value = 完成; pi.wancheng = time; findnext(); else pi.lposition+; dataGridView15, i.Value = 阻塞; pi.IOtime = pi.lifepi.lposition; ZS.Enqueue(pi.pcname); findnext(); 2.先来先服务的IO调度private v

    24、oid FCFSIOdd() for (int c = 0; c Convert.ToInt32(pcnum); c+) if (dataGridView15, c.Value.ToString() = 阻塞) pc.IOtime-; if (pc.IOtime 0) string suibian = Convert.ToString(ZS.Dequeue(); else JX.Enqueue(pc.pcname); dataGridView15, c.Value = 就绪; pc.lposition+; int m= Convert.ToInt32(ZS.Dequeue();/ 3.先来先服

    25、务的调度算法 在FCFSsf()方法中调用FCFS()方法 和FCFSIOdd()方法。 private void FCFSsf() FCFS(); FCFSIOdd(); 4.3动态优先级算法4.3.1算法思想 进程的执行顺序由高优先级到低优先级,用户给进程指定一个优先级来表示该进程所享有的调度优先权。优先级随其执行情况改变,执行一次,优先级-1,就绪状态下,优先级+1,阻塞状态下优先级不变。该算法核心是确定进程的优先级。4.3.2算法流程图图10 动态优先级算法流程图4.3.3程序代码分析1.改变算法优先级函数void changegrade() for (int c = 0; c Con

    26、vert.ToInt32(pcnum); c+) if (dataGridView15, c.Value.ToString() = 就绪) pc.grade = pc.grade + 1; if (dataGridView15, c.Value.ToString() = 执行) pc.grade = pc.grade - 1; dataGridView13, c.Value = pc.grade.ToString(); 2.设置指针GetMaxReady寻找就绪队列的下一个进程public void GetMaxReady() maxreadypri = 0; for (int c = 0;

    27、c maxreadypri) maxreadypri = Convert.ToInt32(dataGridView13, c.Value); maxreadypro = c; 3.设置指针GetMaxBlock寻找阻塞队列的下一个进程void GetMaxBlock() maxblockpri = 0; for (int c = 0; c maxblockpri) maxblockpri = Convert.ToInt32(dataGridView13, c.Value); maxblockpro = c; 4.定义DPSP方法,比较阻塞中的进程与就绪中的进程的优先级关系,选择优先级大的进入运行状态 void DPSP() Get


    注意事项

    本文(操作系统课程设计报告abc.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开