版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、武汉理工大学操作系统课程设计说明书进程调度模拟设计先来先服务、优先级法1需求分析1.1设计目的1.阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。2.掌握一种计算机高级语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.2设计要求1.能够选择不同的调度算法(要求中给出的调度算法);2.能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等;3.根据选择的调度算法显示进程调度队列;4.根据选择的调度算法计算平均周转时间和平均带权周转时间。2. 功能设计2.1数据结构1.进程的结构定义:struct Nodein
2、t num; string name; double run_time; double arrive_time; double start_time; double end_time; int priority; double turn; double turn_weight; Node *next;其中,num表示进程序号,name表示进程名称,run_time;表示进程运行时间,arrive_time表示进程到达时间,start_time表示进程开始执行的时间,end_time表示进程执行结束的时间,priority表示进程的优先级别(用1、2、3表示,且越大优先级越高),turn表示该进
3、程的周转时间,即进程结束时间减去进程开始到达时间,turn_weight表示带权周转时间,即进程的周转时间除以进程的运行时间。2.使用链表储存进程(逆序存储)开 始功能号:0:退出 1:输入进程信息 2:FIFO服务算法 3:优先级算法选择 3输入进程信息输入进程信息,不限制进程个数num= -1 ?NY结束输入进程信息Node *PCB_create()Node *head;head=new Node;head->next=NULL;int n;string na;double r;double a;int p;cout<<endl<<" 进程号:&q
4、uot;cin>>n;cout<<" 进程名:"cin>>na;cout<<"进程运行时间:"cin>>r;cout<<"进程到达时间:"cin>>a;cout<<" 进程优先级:"cin>>p;cout<<endl;Node *tp;tp=new Node;tp->num=n;tp->name=na;tp->run_time=r;tp->arrive_time=a;tp-
5、>priority=p;tp->next=head->next;head->next=tp;while(true)cout<<" 进程号:" cin>>n;if(n=-1) break;cout<<" 进程名:"cin>>na;cout<<"进程运行时间:"cin>>r;cout<<"进程到达时间:"cin>>a;cout<<" 进程优先级:"cin>>
6、p;cout<<endl;Node *tp; tp=new Node; tp->num=n; tp->name=na; tp->run_time=r; tp->arrive_time=a;tp->priority=p; tp->next=head->next; head->next=tp;return head;2.2先来先服务算法设计2.2.1 FIFO进程算法 Node *FIFO(Node *head)Node *tp=head->next;Node *FIFO_link=new Node;Node *temp=new N
7、ode;temp->next=FIFO_link;FIFO_link->num=tp->num;FIFO_link->name=tp->name;FIFO_link->run_time=tp->run_time;FIFO_link->arrive_time=tp->arrive_time;FIFO_link->end_time=tp->end_time;FIFO_link->priority=tp->priority; FIFO_link->next=NULL;Node *p=FIFO_link;tp=tp-&
8、gt;next; int i=0; while(tp!=NULL)Node *q=new Node;q->num=tp->num;q->name=tp->name;q->run_time=tp->run_time;q->arrive_time=tp->arrive_time;q->end_time=tp->end_time;q->priority=tp->priority; q->next=NULL;tp=tp->next; p=temp;while( p->next!=NULL && p
9、->next->arrive_time < q->arrive_time)p=p->next;q->next=p->next;p->next=q;double time=0;Node *tp_1=temp->next;tp_1->start_time=tp_1->arrive_time;tp_1->end_time=tp_1->arrive_time+tp_1->run_time;time=tp_1->end_time;queue_fifo=""queue_fifo=tp_1->
10、name;cout<<"->动态进程队列(查找中):"Sleep(2000);cout<<queue_fifo;Sleep(2000);tp_1=tp_1->next;while(tp_1!=NULL)cout<<"->"Sleep(2000);cout<<tp_1->name;queue_fifo=queue_fifo+" -> "+tp_1->name;tp_1->start_time=time;tp_1->end_time=tp_1-
11、>start_time+tp_1->run_time;time=tp_1->end_time;tp_1=tp_1->next;Sleep(2000);Node *tp_2=temp->next;double sum_turn=0;double sum_turn_weight=0;while(tp_2!=NULL)tp_2->turn=tp_2->end_time-tp_2->arrive_time;tp_2->turn_weight=tp_2->turn/tp_2->run_time;sum_turn=sum_turn+tp_2
12、->turn;sum_turn_weight=sum_turn_weight+tp_2->turn_weight;tp_2=tp_2->next;count+;cout<<"tt查找结束!"<<endl;/cout<<"->进程队列为:"<<queue_fifo<<endl<<endl;turn_all=sum_turn;turn_weight_all=sum_turn_weight;return temp;2.2.2 FIFO算法思想、流程图及打印进程队列1
13、) FIFO算法思想:系统提供了输入进程信息的功能,所以,在程序中可用链表(都指针为head)来存储输入的数据信息,在实现FIFO进程调度算法时,直接使用链表中的进程信息做进程调度;首先从链表的都结点开始查找,将链表的次序重新调整,按照进程到达时间从小到大进行排序,实现方法为:新建一个链表,每次复制head链表中的一个结点,并插入到新建的链表里面去,每次插入都做一个比较,将新插入的结点的到达时间与已插入的结点的到达时间比较,找到对应的位置插入到新建的链表中去,直到head链表结束为止,并将新建链表的头指针返回。2) FIFO算法流程图:开 始head链表扫描结束?N从head链表中取一个结点(
14、第一次为头结点)复制该结点,即申请一个结构体Node,使其与所取结点进程信息一致time_arrive>new_time_arrive ?NYp=p->next将新建结点插入新的链表中结 束3) 打印进程信息打印进程信息算法:void print_fifo(Node *hd)Node *tp=hd->next;cout<<endl;cout.setf(ios:left);cout<<" "<<setw(10)<<"进程号"<<setw(10)<<"进程名&
15、quot;<<setw(12)<<"到达时间"<<setw(12)<<"运行时间"<<setw(12)<<"开始时间"<<setw(12)<<"结束时间"<<endl;while(tp!=NULL)cout<<" "<<setw(10)<<tp->num<<setw(10)<<tp->name<<setw(
16、12)<<tp->arrive_time<<setw(12)<<tp->run_time; cout<<setw(12)<<tp->start_time<<setw(12)<<tp->end_time<<endl;tp=tp->next; 2.3优先级算法设计2.3.1 优先级算法Node *Prior(Node *head)Node *tp=head->next;Node *PRO=new Node;Node *temp=new Node; /temp为新链表的
17、头指针temp->next=PRO;PRO->num=tp->num;PRO->name=tp->name;PRO->run_time=tp->run_time;PRO->arrive_time=tp->arrive_time;PRO->end_time=tp->end_time;PRO->priority=tp->priority;PRO->next=NULL;Node *p=PRO;tp=tp->next; while(tp!=NULL) Node *q=new Node;q->num=tp-&
18、gt;num;q->name=tp->name;q->run_time=tp->run_time;q->arrive_time=tp->arrive_time;q->end_time=tp->end_time;q->priority=tp->priority; q->next=NULL;tp=tp->next; p=temp;while( p->next!=NULL && p->next->priority < q->priority)p=p->next;q->ne
19、xt=p->next;p->next=q;double time=0;Node *tp_1=temp->next;tp_1->start_time=tp_1->arrive_time;tp_1->end_time=tp_1->arrive_time+tp_1->run_time;time=tp_1->end_time;queue_pro=""queue_pro=tp_1->name;cout<<"->动态进程队列(查找中):"Sleep(2000);cout<<qu
20、eue_pro;Sleep(2000);tp_1=tp_1->next;while(tp_1!=NULL)cout<<"->"Sleep(2000);cout<<tp_1->name;queue_pro=queue_pro+" -> "+tp_1->name;tp_1->start_time=time;tp_1->end_time=tp_1->start_time+tp_1->run_time;time=tp_1->end_time;tp_1=tp_1->next;
21、Sleep(2000);cout<<endl;Node *tp_2=temp->next;int count=0;double sum_turn=0;double sum_turn_weight=0;while(tp_2!=NULL)tp_2->turn=tp_2->end_time-tp_2->arrive_time;tp_2->turn_weight=tp_2->turn/tp_2->run_time;sum_turn=sum_turn+tp_2->turn;sum_turn_weight=sum_turn_weight+tp_2
22、->turn_weight;tp_2=tp_2->next;count+;cout<<"tt查找结束!"<<endl;/cout<<"->进程队列为:"<<queue_pro<<endl<<endl;turn_all=sum_turn;turn_weight_all=sum_turn_weight;/cout<<"平均周转时间为:"<<sum_turn/count<<endl;/cout<<&quo
23、t;平均带权周转时间为:"<<sum_turn_weight/count<<endl;return temp;2.3.2优先级算法的思想、输出调度结果及流程图1) 优先级算法思想:优先级算法的思想与FIFO的思想比较相似,也是对进程队列中进行排序,在输入进程信息时,也定义了该进程的优先级,优先级算法对进程队列的排序是按优先级从大到小进行排序的,该算法也是新建一个链表用于保存优先级从大到小的进程队列,并计算对应的数据,如周转时间和带权周转时间,返回头指针。2) 输出调度结果void print_pro(Node *hd)Node *tp=hd->next;
24、cout.setf(ios:left);cout<<" "<<setw(10)<<"进程名"<<setw(12)<<"到达时间"<<setw(12)<<"运行时间"<<setw(12)<<"优先级"<<setw(12)<<"开始时间"<<setw(12)<<"结束时间"<<endl;whil
25、e(tp!=NULL)cout<<" "<<setw(10)<<tp->name<<setw(12)<<tp->arrive_time<<setw(12)<<tp->run_time<<setw(12)<<tp->priority; cout<<setw(12)<<tp->start_time<<setw(12)<<tp->end_time<<endl;tp=tp->
26、next;3) 流程图开 始head链表扫描结束?N从head链表中取一个结点(第一次为头结点)复制该结点,即申请一个结构体Node,使其与所取结点进程信息一致priority>new_priority ?NYp=p->next将新建结点插入新的链表中结 束3.开发平台及源程序的主要部分3.1开发平台Windows 7操作系统 Microsoft visual c+ 6.0环境C+高级语言3.2源程序主要部分int main()Node *fifo,*pro;Node *head;int choice;/string s1="->",s2="&l
27、t;-"/cout<<s1;Sleep(1000);/cout<<s2;while(true)cout<<endl<<endl;cout<<" *"<<endl;cout<<" * 0: 退出 *"<<endl;cout<<"* 1: 输入进程信息 *"<<endl;cout<<"* 2: FIFO算法 *"<<endl;cout<<"* 3
28、: 优先级算法 *"<<endl;cout<<"*"<<endl;cout<<"选择:_bbb"cin>>choice;if(choice=0) break;switch(choice)case 1: head=new Node;head=PCB_create();break;case 2: cout<<endl<<"FIFO:"<<endl; fifo=FIFO(head);print_fifo(fifo);cout.preci
29、sion(5);cout<<"t平均周转时间: "<<turn_all<<"/"<<count<<"="<<turn_all/count<<endl;cout<<"t平均带权周转时间: "<<turn_weight_all<<"/"<<count<<"="<<turn_weight_all/count<<end
30、l;break;case 3: cout<<endl<<"PRORITY:"<<endl;pro=Prior(head);print_pro(pro);cout.precision(5);cout<<"t平均周转时间: "<<turn_all<<"/"<<count<<"="<<turn_all/count<<endl;cout<<"t平均带权周转时间: "<<turn_weight_all<<"/"<<count<<"="<<turn_weight_all/count<&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 挡土墙外架施工方案(3篇)
- 无锡社区围挡施工方案(3篇)
- 果汁茶店营销方案(3篇)
- 湛江车位划线施工方案(3篇)
- 生态滞留池施工方案(3篇)
- 砖墙钢板加固施工方案(3篇)
- 2024年健康卫生教育活动教案(12篇)
- 芸芸切割营销方案(3篇)
- 营销长期活动方案(3篇)
- 酸碱储罐围堰施工方案(3篇)
- 浙江省杭州市S9联盟2024-2025学年高一下学期期中联考历史试卷(含答案)
- 特种设备法律法规知识培训
- 广东省深圳市罗湖区2023-2024学年五年级下学期4月期中科学试题(含答案)
- 儿童外伤药物误服高热惊厥心肺复苏儿童急救培训课件
- 安全生产法律法规汇编(2025版)
- 石化公司120万/年延迟焦化装置工艺手册
- 脾破裂课件教学课件
- 统编版高一语文必修下册第一单元知识清单
- 车辆修理维护合同
- (高清版)JTGT 3364-02-2019 公路钢桥面铺装设计与施工技术规范
- 紫外高级氧化工艺
评论
0/150
提交评论