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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

操作系统时间片轮转算法.docx

1、操作系统时间片轮转算法进程时间片轮转调度算法一、实验题目:进程时间片轮转调度算法二、实验原理:在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法。三、实验目的:1、加深对进程概念的理解,明确进程和程序的区别。2、深入系统如何组织进程、创建进程。3、进一步认识如何实现处理器调度。4、通过对进程调度算法的设计,深入理解进程调度的原理。5、加深对时间片轮转调度算法的理解。四、实验要求:用C语言编写程序完成单处理机的进程调度,要求采用时间片轮转调度算法。实验具体要求包括:首

2、先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,并对所做工作进行测试。5、运行结果时间片大小为1时(q=1):时间片大小为4时(q=4):6、代码#includestdafx.h#include#include#include#include#defineOK 0#defineOVERFLOW 1char pro20 ; /进程 int processNum; /进程数 int timeSlice = 0; /时间片 typedefcharQlemTypeChar;typedefintQlemTypeInt;typedefintStatus;typedefstructQNo

3、deQlemTypeChar data;QlemTypeInt timeArrive = 0;QlemTypeInt timeService = 0;QlemTypeInt timeCount = 0;QlemTypeInt runCount = 0;QlemTypeInt timeFinal = 0; /完成时间QlemTypeInt timeRound = 0; /周转时间float timeRightRound = 0; /带权周转时间QlemTypeChar proState = W; /进程的状态,W就绪态,R执行态,F完成态 structQNode *next; /链表指针 QNo

4、de, *QueuePtr;typedefstructQueuePtr front; /队头指针QueuePtr rear; /队尾指针LinkQueue;Status InitQueue(LinkQueue &Q)Q.front = Q.rear = (QueuePtr)malloc(sizeof(QNode);if(!Q.front) exit(OVERFLOW);Q.front-next = NULL;returnOK;Status EnQueue(LinkQueue &Q, QlemTypeChare)QueuePtr p;p = (QueuePtr)malloc(sizeof(QNo

5、de);if (!p) exit(OVERFLOW);p-data = e;p-next = NULL;Q.rear-next = p;Q.rear = p;returnOK;Status DeQueue(LinkQueue &Q, QlemTypeChar &e)QueuePtr p;if (Q.front = Q.rear) returnERROR;p = Q.front-next;e = p-data;Q.front-next = p-next;if (Q.rear = p) Q.rear = Q.front;free(p);returnOK;LinkQueue QPro;QNode q

6、q10;void ProGetFirst() /取出就绪队列队首进程InitQueue(QPro);printf(请输入要创建的进程名称:n);for (int i = 0; i processNum-1; i+)fflush(stdin);scanf_s(%c, &proi);fflush(stdin);for (int i = 0; iprocessNum-1; i+)qqi.data = proi;EnQueue(QPro, qqi.data);void scanfData()printf(请输入要创建的进程数目:);scanf_s(%d, &processNum);processNum

7、+;fflush(stdin);printf(n);ProGetFirst();printf(创建进程到达时间:n);int time_Arr10;for (int i = 0; i processNum-1; i+)scanf_s(%d, &time_Arri);for (int i =0; iprocessNum-1; i+)qqi.timeArrive = time_Arri;EnQueue(QPro, qqi.timeArrive);printf(创建进程服务时间:n);int time_Ser10;for (int i = 0; i processNum-1; i+)scanf_s(

8、%d, &time_Seri);for (int i = 0; iprocessNum-1; i+)qqi.timeService = time_Seri;EnQueue(QPro, qqi.timeService);printf(请输入时间片大小::);scanf_s(%d, &timeSlice);printf(n);void ProOutPut1() /获取进程信息printf(进程名t 到达时间t 服务时间t 进程状态t 执行次数n);for (int i = 0; i processNum - 1; i+)printf(%ctt%dtt%dtt%ctt%dn, qqi.data, q

9、qi.timeArrive, qqi.timeService, qqi.proState, qqi.runCount);void CalculatetimeFinal() /计算完成时间int timecou=0;int countTemp = 0;QlemTypeChar ee;for (int i = 0; i processNum - 1; i+)countTemp += qqi.timeService;while (timecou countTemp)for (int i = 0; i = timeSlice)timecou += timeSlice;elsetimecou += (q

10、qi.timeService - qqi.timeCount);/DeQueue(QPro, ee);if (timeSlice qqi.timeService) /时间片大小 qqi.timeService ? qqi.timeService : timeSlice;if (qqi.timeCount + timetemp) = timeSlice) qqi.timeCount += timeSlice;elseqqi.timeCount += (qqi.timeService - qqi.timeCount); elseif (qqi.timeFinal = 0) qqi.timeFina

11、l = timecou;else/时间片大小= 服务时间qqi.timeFinal = timecou; /该进程的完成时间=countfor (int i = 0; i processNum - 1; +i)qqi.timeRound = qqi.timeFinal - qqi.timeArrive;qqi.timeRightRound = (float)qqi.timeRound / qqi.timeService;void ProOutPut2() /获取进程处理后的信息printf(进程名t 到达时间 服务时间 完成时间 周转时间 带权周转n);for (int i = 0; i pr

12、ocessNum - 1; i+)printf( %ctt%dt %dt %dt %dt %.2fn, qqi.data, qqi.timeArrive, qqi.timeService, qqi.timeFinal, qqi.timeRound, qqi.timeRightRound);int_tmain(intargc, _TCHAR* argv)scanfData();ProOutPut1();CalculatetimeFinal();printf(n);printf(CPU处理中.n);printf(完成时间:);for (int i = 0; i processNum - 1; i+)printf(%d, qqi.timeFinal);printf(n);printf(周转时间:);for (int i = 0; i processNum - 1; i+)printf(%d,qqi.timeRound);printf(n);printf(带权周转时间:);for (int i = 0; i processNum - 1; i+)printf(%.2f, qqi.timeRightRound);printf(n);ProOutPut2();return 0;

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

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