欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    【计算机专业】操作系统 先来先服务算法详解-精品文档资料整理.doc

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

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

    【计算机专业】操作系统 先来先服务算法详解-精品文档资料整理.doc

    1、 设计一个按先来先服务调度的算法 参考:山东专升本联盟 提示:(1)假设系统中有5个进程,每个进程由一个进程控制块(PCB)来标识。进程控制块内容如图1-1所示。进程名即进程标识。链接指针:按照进程到达系统的时间将处于就绪状态的进程连接成衣个就绪队列。指针指出下一个到达进程的进程控制块首地址。最后一个进程的链接指针为NULL。估计运行时间:可由设计者任意指定一个时间值。到达时间:进程创建时的系统时间或由用户指定。调度时,总是选择到达时间最早的进程。进程状态:为简单起见,这里假定进程有两种状态:就绪和完成。并假定进程一创建就处于就绪状态,用R表示。当一个进程运行结束时,就将其设置成完成态,用C表示。(2)设置一个队首指针head,用来指出最先进入系统的进程。各就绪进程通过链接指针连在一起。(3)处理机调度时总是选择队首指针指向的进程投入运行。由于本实验是模拟实验,所以对被选中进程并不实际启动运行,而只是执行:估计运行时间减1。用这个操作来模拟进程的一次运行,而且省去进程的现场保护和现场恢复工作。(4)在所设计的程序中应有显示或打印语句,能显示或打印正运行进程的进程名、已运行时间、还剩时间、就绪队列中的进程等。所有进程运行完成时,给出各进程的周转时间和平均周转时间。/* 实验一 先来先服务算法模拟程序* writen by daysky* 2007-11-19*/#include <iostream>#include <list>#include <string>#include <fstream>using namespace std;/控制块结构体struct PCBchar name;/进程名PCB *next;/链接指针int reach_time;/到达时间int left_time;/估计运行时间int begin_time;char status;/R就绪 c完成PCB();PCB(char aname,int areach_time,int aleft_time,int abegin_time=-1,char astatus='R',PCB *anext=NULL);PCB(const PCB &from);PCB:CB()next=NULL;reach_time = -1;left_time = -1;begin_time = -1;status = 'R'PCB:CB(char aname,int areach_time,int aleft_time,int abegin_time,char astatus,PCB *anext)name = aname;reach_time = areach_time;left_time = aleft_time;begin_time = abegin_time;status = astatus;next = anext;PCB:CB(const PCB &from)name = from.name;next = NULL;reach_time = from.reach_time;left_time = from.left_time;begin_time = -1;status = 'R'/* 先来先服务类*/class FirstServeprivate:int systime;/系统时间list<CB *> *ready_list,*all_task;/ 就绪队列 所有任务int together_time;ofstream fout;public:FirstServe();FirstServe(list<CB *> *a_all_task,const char *logfile);bool run();void check_task();void run_ready();void print_ready();FirstServe();FirstServe:FirstServe()systime=0;together_time = 0;ready_list=new list<CB *>();all_task=new list<CB *>();FirstServe:FirstServe(list<CB *> *a_all_task,const char *logfile)systime=0;together_time = 0;ready_list = new list<CB *>();all_task = a_all_task;fout.open(logfile,ios:trunc);/服务执行总调度bool FirstServe:run()int num = all_task->size();while(ready_list->empty()/添加新进程,同时从所有队列中删除刚添加的进程check_task();systime+;/运行直到有任务do/打印就绪队列print_ready();/执行就绪队列run_ready();systime+;check_task();while(!ready_list->empty();/打印平均周转时间fout << "平均周转时间为:" << together_time/num << "!" << endl;return true;/检查到达的任务,添加到就绪队列的尾部void FirstServe:check_task()PCB *current;list<CB *>:iterator it;it = all_task->begin();/这里用循环处理,因为可能有多个同时到达的任务while(it!=all_task->end()current=(*it);if(current->reach_time=systime)PCB *a_pcb = new PCB(*current);/复制进程信息a_pcb->status = 'R'ready_list->push_back(a_pcb);/添加在就绪队列的尾部it = all_task->erase(it); /从所有任务中删除这个任务fout << "进程" << a_pcb->name << "在时刻:" << systime << "进入就绪队列!" << endl;elseit+;/执行就绪队列,运行队列的第一个进程void FirstServe:run_ready()if(ready_list->empty() return;/就绪队列为空就不执行,否则PCB *front = ready_list->front();if(front->begin_time = -1)/进程第一次运行,设置运行起始时间front->begin_time = systime;front->left_time -;/执行一次,估计时间减一fout << "进程" << front->name << "执行在时刻:" << systime << "!" << endl;fout << "进程" << front->name << "已运行时间:" << (systime-front->begin_time+1)<< "!" << endl;fout << "进程" << front->name << "还剩时间为:" << front->left_time << "!" << endl;/当进程完成,改变进程的状态if(front->left_time = 0)front->status = 'C'/打印并计算周转时间,systime-1为完成时间fout << "进程" << front->name << "在时刻:" << systime << "结束!" << endl;int a_time = systime-1-front->reach_time;together_time += a_time;fout << "进程" << front->name << "的周转时间为:" << a_time << "!" <<endl;ready_list->pop_front();/删除第一个元素void FirstServe:print_ready()fout << "就绪队列中的进程有:"list<CB *>:iterator it=ready_list->begin();while(it!=ready_list->end()fout << (*it)->name << "、"it+;fout << endl;FirstServe:FirstServe()fout.close();int main()PCB *a_pcb5;list<CB *> *all_task=new list<CB *>();cout << "正在初始化." << endl;/五个进程的到达时间各不相同a_pcb0 = new PCB('A',9,10);a_pcb1 = new PCB('B',1,30);a_pcb2 = new PCB('C',3,25);a_pcb3 = new PCB('D',5,40);a_pcb4 = new PCB('E',2,33);for(int i=0;i<5;i+)all_task->push_back(a_pcb);FirstServe fs(all_task,"fcfs_log.txt");cout << "正在执行." << endl;fs.run();cout << "执行完毕!" << endl;return 0;

    注意事项

    本文(【计算机专业】操作系统 先来先服务算法详解-精品文档资料整理.doc)为本站会员(安***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

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




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开