


下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计报告学号:姓 名:班 级:指导教师:报告日期:、课设目的通过对操作系统课程的学习,熟悉进程的概念、进程的管理与存储、进程的调度,通 过实践深入理解进程的调度算法。二、课设任务要求编写一个程序,可以创建若干个虚拟进程,并对若干个虚拟进程进行调度,调度 策略为时间片轮转法,主要任务包括:进程的个数,进程的内容(即进程的功能序列)来源于一个进程序列描述文件,另 外调度运行结果输出到一个运行日志文件;设计PCB适用于时间片轮转法;建立进程队列;实现时间片轮转调度算法,尽量可视化的展示调度的动态过程。总结程序设计的开发过程:需求分析、系统设计、系统实现及文档的收集和整理。三、实验方法与设
2、计分析每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到 达时间为输入进程的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W( Wait)、运行R( Run)、或完成F( Fin ish )三种状态之一。就绪进程获得 CPU后都只能运行一个时间片。用已占用CPU时间加1来表示。如果运行一个时间片后,进程的已占用 CPU时间已达到所需要的运行时间 ,则撤消该进程, 如果运行一个时间片后进程的已占用CPU时间还未
3、达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减1 (即降低一级),然后把它插入就绪队列等待CPU每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB,以便进行检查。重复以上过程,直到所要进程都完成为止四、程序流程图五、程序源代码#in clude"stdafx.h"#in clude<stdio.h>#in clude<stdlib.h>#in clude<stri ng.h>#in clude<ctype.h>#in clude<iostream>#in clude<f
4、stream>using n amespace std;ofstream myfile( "bb.txt",ios:app|ios:tr un c);typedef struct n odechar name10; /* 进程名 */int round;/*进程分配的时间片*/int cputime;/*进程消耗的CUP寸间*/int needtime;/*进程需要的CUP寸间*/int count;/* 进程运行寸间 */char state;/* 进程的状态: 'R': 运行 ,'W' :等待 ,'F' :结束 */
5、struct node *next; /* 指向下一个进程的指针 */PCB;PCB *finish,*ready,*tail,*run;/* 指向三个队列的队首的指针, tail 为就绪队列的队尾指针 */ int N; /* 定义进程的数目 */void firstin( void )if (ready!=NULL)run=ready;ready=ready->next; run->state= 'R' ; run->next=NULL;elserun=NULL;void prt1( char a)void prt2( char a,PCB *p) cou
6、t<<p->name<< " " <<p->state<<endl;myfile<<p->name<<<<p->cputime<<<<p->needtime<<<<p->count<<<<p->round<<myfile<<p->cputime<<myfile<<p->needtime<<myfile<
7、<p->count<< " myfile<<p->state<<endl;myfile<<p->round<<cout<< "name" << " cputime"<< " needtime" <<" count " <<" round" <<" state" <<endl;myfile<<
8、; "name" ;myfile<< "cputime" ;myfile << " needtime" ;myfile<< " count "myfile<< " round" ;myfile<< " state" <<endl;void prt( char algo)PCB *p;prt1(algo);if (run!=NULL)prt2(algo,run);p=ready;while (p!=NULL
9、)prt2(algo,p); p=p->next;p=finish;while (p!=NULL)prt2(algo,p); p=p->next;getchar();void insert(PCB *q)tail->next=q;tail=q;q->next=NULL;void rcreate_task( char algo)PCB *p;int n,time;char na10;ready=NULL;finish=NULL;run=NULL;cout<< " 请输入进程数目 N: " cin>>N;for (n=0;n<
10、;N;n+)<<endl;<<endl;p=(PCB*)malloc( sizeof (PCB); cout<< "Enter the name of process:" cin>>na;cout<< "Enter the time of process:" cin>>time;strcpy(p->name,na); p->cputime=0;p->needtime=time; p->count=0;p->state= 'W' ;p-&g
11、t;round=2;if (ready!=NULL) insert(p);elsep->next=ready;ready=p;tail=p;run=ready;ready=ready->next;run->state= 'R' ;cout<< "创建成功。 " <<endl;void chakan( char algo)if (run->count=run->round)run->count=0;if (ready!=NULL)run->state= 'W' ;insert(r
12、un);firstin();prt(algo);void roundrun( char algo)while (run!=NULL)run->cputime=run->cputime+1; run->needtime=run->needtime-1; run->count=run->count+1;if (run->needtime=0)run->next=finish;finish=run;run->state= 'F' ;run=NULL;if (ready!=NULL)firstin();elseif (run->
13、;count=run->round)run->count=0;if (ready!=NULL)run->state= 'W' ;insert(run);firstin();prt(algo); void caidan()cout<< "*主页 *"<<endl;cout<< "*1.I创建若干进程 *"<<endl;cout<< "*2.C进程进行查看 *"<<endl;cout<< "*3.O进程进行调度
14、*"<<endl;cout<< "*4.H结束 *"<<endl;int main() loop1:caidan();char algo;cin>>algo;if (algo= 'i' |algo= 'I' )rcreate_task(algo);else if (algo= 'c' |algo= 'C' )chakan(algo);else if (algo= 'o' |algo= 'O' )roundrun(algo)
15、;else if (algo二二'h' |algo二二'H')goto loop2;goto loopl;loop2:myfile.close();return 0;六、运行结果Entei't inemaneEntert ine-MrMrMKXJCKXMKICXKMi Mi Cneedt ineroundpane2X J< X X X X H K貝貝貝needt inecountnameGput inecountnameneedtinaneround2io tin d22pound2count2*1needt irtecpat ine 0 0cpa
16、t ime 0请输入进程数目N 2 EnterM:*f JC JK JK 鼻 K JM Mi UK Wm it it it 坯 it itfj mHHi*住it 童 it it nt 負負負 負 jc w: m: xioc'pl | 建!g"干进 程 *»*»*4<*«*>4*»<*«44*><4 ifei 结束创建成功"“杯杠杠杠"圭贡 ;豪耗舞轟舞乱群粧廉帯帯诞廉声莆声料科Mg . Q 彳井秤 1井 fT 住"看"科舞舞耗耗KKKKKKKKKtf/M科料
17、 -3.0逬i进和*«4.H 结東count0_0贞 K X K JU K XJO< X X XX XJC X X K X XX KX JOC 仓"J#旱fifsfcw结束文件迈编辑fj)輕;式©i 查看(V)帮助Qpnamecputimeneedtimecountroundstate制0102Rq0202Unampcputimeneedtimecountroundstateq0202Ru1012Fnamecputinemeedtimecountroundstate1112Ru1012Fnamecputimeneodtimecountroundstateq2
18、S22F1012F七、问题及解决方法(1) 处理器调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次 优先数就减“ 1”由于本实习是模拟处理器调度,所以,对被选中的进程并不实际的启动运 行,而是执行(2) 进程运行一次后,若要求运行时间0,则再将它加入队列(按优先数大小插入,且置队首标志);若要求运行时间=0,则把它的状态修改成结束”(E),且退出队列。(3) 若就绪”状态的进程队列不为空,则重复上面(1)和(2)的步骤,直到所有进程都成为结束”状态。(4) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程的进程名以及运行一次后进程队列的变化。(5) 为五个进程任意确定一组优先数”和要求运行时间”,启动所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。八、心得体会操作系统是计算机系
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年青霉素类抗菌药物项目发展计划
- 离婚房租分配协议书范本(2025版)
- 2025年住院医师规范培训(各省)-上海住院医师中医儿科历年参考题库含答案解析(5卷套题【单项选择题100题】)
- 汽车租赁合伙协议(2025版)
- 礼仪服务合同协议书2025年
- 食品代理协议书范本2025年
- 企业管理咨询合同(2025版)
- 2025年高效蒸汽管网设备合作协议书
- 全新公司单位施工合同(2025版)
- 商业街门面租赁合同书范本2025年
- 神昏中医护理常规
- 2023年佛山顺德区教育系统教师考试真题及答案
- 《园林工程》课件-项目三
- 自备药品使用承诺书
- 物业公司品质管理及检查制度全套
- 2023直流充电接口电路模拟器 技术条件
- (完整word版)A3试卷模板
- 反电诈反洗钱业务知识竞赛题库(必会版)
- 2022《煤矿安全规程》
- GB/T 19473.1-2004冷热水用聚丁烯(PB)管道系统第1部分:总则
- 北京奥运会开幕式解说词
评论
0/150
提交评论