ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:419.22KB ,
资源ID:8305019      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8305019.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统课程设计仿真程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统课程设计仿真程序.docx

1、操作系统课程设计仿真程序目录目录 1第1章 设计内容与要求 21.1 设计内容 21.2 设计要求 21.3 功能要求 2第2章 设计思路 3第3章 设计说明 43.1设计流程图 43.1.1 流程图解 43.1.2 流程图 43.2问题描述 53.3具体设计实现 63.3.1 定义函数 63.3.2 定义结构体 63.4 主函数功能的实现 73.4.1 显示当前进程 73.4.2 创建进程 73.4.3 用新进程替换当前进程映象 83.4.4 进程状态转换 93.4.5 进程调度 103.4.6 上下文切换 113.4.7 平均周转时间 133.4.8 唤醒阻塞进程 143.4.9 退出 1

2、5第4章 总结 16参考文献 18附录源代码 19第1章 设计内容与要求1.1 设计内容设计一个仿真程序,仿真进程管理的五大功能,包括创建进程,用新进程替换当前进程映像,进程状态转换,进程调度,上下文切换。1.2 设计要求详见程序设计基础课程设计任务书。1.3 功能要求 进程管理仿真程序实现下列功能:(1)能接收用户提交的命令并执行该命令。(2)创建模拟进程,执行用户程序(3)管理模拟进程状态转换、(4)用优先级调度算法调度模拟进程的运行,能处理上下文切换。第2章 设计思路设计一个虚拟内核与进程的调度程序,根据题目要求,我首先列举了几个不同的进程结构与其状态的转换,构思!进程的状态的转换有:(

3、1)就绪运行:当CPU空闲时调度程序选中一个就绪进程执行。(2)运行就绪:运行进程使用一些资源或事件发生,如等待设备传输数据或人工干预。(3)等待就绪:所需资源得到满足事件已完成,如设备传输数据结束或人工干预完成。(4)运行:等待:运行进程等待使用资源或事件发生,如等待设备传输数据或人工干预。 1.写了进程控制块(用来存储进程的现场信息,标识信息,控制信息),还设置了就绪队列,阻塞队列等,像:struct ReadyState, BlockedState ,用以存放进程的状态,根据所有的设计要求和内容分析把整个设计分为九个部分,一个是进程的显示,二是进程的创建,三是替换,四是进程的状态改变,五

4、是进程的系统调用等等,mian()函数的总体实现和论文的初稿。2.我是写进程调度算法,我知道我必须把它写好,因为他包括很多的功能,有新进程替换旧进程,进程状态转化,进程调度,上下文切换。首先我先写了一个struct pcb进程控制块用来实现进程状态转化,混合调度算法里面,用循环:while,for去实现进程之各个转换的!我知道我只有将这个步骤写好了,负责执行用户程序的组员才能实现他的功能,所以我必须不断改进。3.进程之间的切换 4.检查该进程是否已经较完善,用了时间片的轮转和先来先服务的调度算法来计算周转时间和带权周转时间。 5.退出程序if(s=9)goto a;6.最后就是将这些步骤都集中

5、起来,让它形成一个完整的程序,并能将其运行出设计要求的结果。再用一个界面函数使其能够循环运行,最后就是检查,看程序是否还有漏洞,并将其修改,大家自我批评和相互批评,争取把缺点指出来,把好的想法和灵感说出来。而且将运行结果美观一下,改善一下视觉效果,让别人更容易懂得这个程序是怎样执行的。 第3章 设计说明3.1设计流程图3.1.1 流程图解要实现进程管理的一些功能,我主要利用主函数来实现。以下流程图主要实现以下功能:功能1 显示当前进程;功能2 创建进程;功能3 用新进程替换当前进程;功能4 进程状态转换;功能5 进程调度;功能 6 上下文切换;功能7 平均周转时间;功能8 唤醒阻塞进程;功能9

6、 退出。3.1.2 流程图main()函数图3.1 3.2问题描述本程序主要用到三个函数,延时函数void delay(int a),排序函数void paixu(int a,int k),和主函数int mian();延时函数的功能主要时对就绪队列中的进程优先能和阻塞队列中的优先能进行排序,主函数的功能主要是实现函数的主要功能。用到的结构体主要有PCB,ReadyState,BlockedState,NAEM.PCB主要存放进程的一些重要信息,如进程名name,进程号pid,进程优先级ppno,进程运行时间pruntime,进程等待时间waittime,进程时间片pts,运行状态state,

7、带权周转时间w,进程等待时间片次数waittimes,中断状态BREAK等信息。本程序的主函数相当于上面的进程管理程序(kernel),几乎所有功能都由它来实现。程序主要就是利用PBC中的一些信息来进行操作,来达到进程调度,状态转换等一些功能的实现来模拟进程管理。系统采用时间轮转和优先级调度混合算法。优先级以优先数表示,优先数越大则优先级越高。调度时,就绪队列中优先数最大的进程优先运行,相同优先数进程按FIFO方式调度。进程运行一个时间片以后,其优先数数减1(即降低一级);进程在就绪队列中等待3个时间片以后,其优先数加1。3.3具体设计实现3.3.1 定义函数要实现进程管理的一些功能,我主要利

8、用主函数来实现,在刚开始我定义了一个延时的函数void delay(int a),这个函数顾名思义,是用来延时的,主要还是为了增强程序的可读书性,没其它的。还有一个函数就是排序函数void paixu(int a,int k),用来对就绪进程和阻塞进程的优先级进行排序,然后帅选出优先级高的进行操作。void paixu(int a,int k)int t; for(int i=0;ik-1;i+) for(int j=0;jk-1;j+) if(ajaj+1) t=aj+1; aj+1=aj; aj=t; void delay(int a) for(int i=0;ia;i+) for(int

9、 j=0;ja;j+); 图3.23.3.2 定义结构体我们知道,进程的一些基本信息都是放在PCB中的,及进程控制块,又因为它是进程存在的唯一标识,所以,PCB中的信息尤其重要。首选我就定义了一个PCB的结构体用来存放进程的信息,如进程名name,进程号pid,进程优先级ppno,进程运行时间pruntime,进程等待时间waittime,进程时间片pts,运行状态state,带权周转时间w,进程等待时间片次数waittimes,中断状态BREAK等信息。定义的这些变量之后,我们就可以很灵活的控制PCB中我们所要的信息了。接下来,我又定义了一个就绪结构体,用来存放就绪进程的信息,优先级和进程名

10、称,一个阻塞结构体,用来存放阻塞进程的信息,优先级和名称,一个名称结构体,用来临时存放进程的信息。核心代码如下:图3.33.4 主函数功能的实现3.4.1 显示当前进程这个功能主要就是显示自定义的进程和后来新创建的进程信息,以便于用户根据进程的信息进行其它的相关操作。3.4.2 创建进程在程序运行之前,程序当中是没有进程的,所以一开始就要创建进程。我首先定义了可以创建20个进程的数组string str20,用来存放进程的名字。当然,也可以定义更多的进程。这创建的时后,为了避免用户每创建一个进程就要输入进程的一些信息,我采用的是随机获取的方式来给进程控制块分配信息,如进程号,进程运行时间,运行

11、状态,优先级等。首先我要说明的是这个程序的设计是根据单道程序设计来设计的,也就是每次只能有一个进程处于运行状态,所以,我采用了一个while语句来实现这个功能,当创建的进程中出现一个处于运行状态时,随后创建的进程当中就只能是处于就绪或阻塞状态了。然后,每创建一个进程,我就根据进程的运行状态分别存放在就绪数组和阻塞数组中。便于以后的调度和操作。核心代码如下:图3.4运行结果:图3.53.4.3 用新进程替换当前进程映象用新进程替换当前进程映像即:用处于就绪或阻塞状态的进程来替换当前正在运行的进程,这个功能比较容易实现,对于就绪进程替换运行进程,只就把优先级最高的就绪进程替换正在运行的进程就可以了

12、,然后把那个运行的进程放入就绪数组中,对于阻塞进程,因为阻塞进程不能直接变为运行进程,它必须先转变为就绪进程才可以再通过进程调度变为运行进程。所以先将阻塞进程放入就绪进程并且从阻塞数组中拿出来,再根据优先级算法和FIFO算法进程调度。部分代码如下:图3.6替换前的状态:图3.7替换后的状态:图3.83.4.4 进程状态转换在功能3中就已经实现了进程之间的转换,所以这个功能实现起来比较容易,只须依照功能三再增加几个状态转换就可以实现了。进程的状态主要有就绪(ready)一个进程具备运行条件,但由于cpu暂时不能运行的状态(当调度给其cpu时就可以运行);等待(blocked)阻塞态或睡眠态,指进

13、程因等待事件的发生而暂时不能运行的状态;运行(running)占有cpu,并在它上运行,故三态之间的转换是关键,须指出的是,这里的就绪变为运行状态是采用肃夺式转换的,所以不管被转换的就绪进程优先级大小,都将它执行运行操作。部分代码如下:图3.93.4.5 进程调度为了在视觉上真正达到一个进程调度的效果,我利用了一个系统函数,system(“cls”).这个函数的功能是清屏,在进程调度的时候,需要用到另外两个函数,排序和延时。算法和思路:首先在屏幕上输出进程的信息(包括运行时间),再调用延时函数延时一秒种左右,调用清屏函数,然后运行进程的运行时间减一,再输出进程的信息,这样就达到了一个动态的效果

14、。当当前进程运行完之后,再从就绪数中先择优级最高的进程执行运行操作并从就绪数组中退出,循环多次就可以达进程调度这个功能了。利用一个变量waittimes来存放就绪进程的等待次数,每调度一次其值加一,加到三如果还没有运行,其优先级就加一,这们就可以实现每个就绪进程都有可能被运行一次。同时,运行进程每调度一个,其优先级也减一。部分代码如下:图4.0图4.1图4.23.4.6 上下文切换这里的功能实现和进程调度差不多,只是在进程运行中间中断并记录它的运行时间,然后,再去运行其优先级高的就绪进程,运行完之后再切回原来的进程,这样就达到了上下文切换的功能。核心代码如下:图4.3运行结果如下:图4.4图4

15、.5图4.63.4.7 平均周转时间这个功能主要是计算,也比较容易实现,先对就绪进程的优先级进程排序,知道它们的运行次序,然后再计算它们各自的带权周转时间,最后就可以计算出平均周转时间了。图4.7运行结果如下:图4.83.4.8 唤醒阻塞进程将阻塞进程放入就绪数组中,并将其从阻塞数组了退出。核心代码如下:图4.9运行结果如下:图5.0图5.13.4.9 退出退出程序,程序结束。图5.2第4章 总结通过两周的努力,虽然不能说很好,但是我却从这次的课程设计中收获了很多,获益匪浅。无论是编程内容的深度,还是从编程技巧都有一定的意义。让我们不仅将已经忘记的知识又重温一遍,并且上图书馆查资料,问XX、老

16、师,掌握了新的知识!让我们的专业知识在短时间内得到了极大的提高。由原来的半生不熟到渐渐巩固,并且有些以前不常用的算法也用到了,在检查程序时看了高手的程序,才真正明白什么是思维的严谨,什么是细心,还有知识的重要性和实践性。只有平时多编程,多练手,才能在最短的时间内编出最实用和最缜密满意的程序。我经常研究其他人的程序,并不是“借鉴”,只是为了打开自己局限性。学习他人的好的方法,为以后编程增加经验。 通过这次课程设计学到了很多,受益良多,我相信自己在这次课程设计之后,不论是个人能力方面有了很多进步。我也会试着去向那些编程高手学习,写一些课外的程序,提高自己的编程能力,为以后的课程设计和专业知识的学习

17、打好基础。当然所有的努力也是为了将来毕业后从事这个行业打好基石。最后我要谢谢朱老师,谢谢他每节课都陪着我们。所以我在每次上机的时候都感觉,有他陪在我们身边,只要我遇到解决不了的难题,我都会得到最及时,最悉心的指导。参考文献1赵伟华等编,实用操作系统教程;机械工业出版社,2005年2Abraham Silberschatz,操作系统概念(第7版 影印版);高等教育出版社,2007年3Gary Nutt(著),潘登(译) Linux操作系统内核实习;机械工业出版社,2004年4张坤等编,操作系统教程;大连理工大学出版社,2010年5李善平等译,Linux教程;清华大学出版社,2005年6杨海燕等编,linux操作系统教程;清华大学出版社,2008年

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1