




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
/ stdafx.h : include file for standard system include files,/ or project specific include files that are used frequently, but/ are changed infrequently/#if !defined(AFX_STDAFX_H_57C8F7A3_80F8_4D89_8FF4_83D8673D5B32_INCLUDED_)#define AFX_STDAFX_H_57C8F7A3_80F8_4D89_8FF4_83D8673D5B32_INCLUDED_#if _MSC_VER 1000#pragma once#endif / _MSC_VER 1000/ TODO: reference additional headers your program requires here/AFX_INSERT_LOCATION/ Microsoft Visual C+ will insert additional declarations immediately before the previous line.#endif / !defined(AFX_STDAFX_H_57C8F7A3_80F8_4D89_8FF4_83D8673D5B32_INCLUDED_)/ 先来先服务.cpp : Defines the entry point for the console application./#include stdafx.h#include windows.h#include #include #include #include #include #include void Create_ProcInfo(); / 建立进程调度需要的数据void Display_ProcInfo(); / 显示当前系统全部进程的状态void Scheduler_FF();void Cpu_Sched();void IO_Sched();void NextRunProcess();void DisData();void DisResult();int RunPoint; / 运行进程指针,-1时为没有运行进程int WaitPoint; / 阻塞队列指针,-1时为没有阻塞进程int ReadyPoint; / 就绪队列指针,-1时为没有就绪进程long ClockNumber; / 系统时钟int ProcNumber; / 系统中模拟产生的进程总数int FinishedProc; / 系统中模拟产生的进程总数/进程信息结构struct ProcStruct int p_pid; / 进程的标识号 char p_state; / 进程的状态,C-运行 R-就绪 W-组塞 B-后备 F-完成 int p_rserial16; / 模拟的进程执行的CPU和I/O时间数据序列,间隔存储,0项存储有效项数 int p_pos; / 当前进程运行到的序列位置 int p_starttime; / 进程建立时间 int p_endtime; / 进程运行结束时间 int p_cputime; / 当前运行时间段进程剩余的需要运行时间 int p_iotime; / 当前I/O时间段进程剩余的I/O时间 int p_next; / 进程控制块的链接指针 proc10;/ 随机生成进程数量和每个CPU-I/O时间数据序列,进程数量控制在5到10之间, / 数据序列控制在6到12之间,CPU和I/O的时间数据值在5到15的范围 /void Create_ProcInfo(void )int s,i,j; srand(GetTickCount(); / 初始化随机数队列的种子ProcNumber=(float) rand() / 32767) * 5 + 5; / 随机产生进程数量510FinishedProc=0;for(i=0;iProcNumber;i+) / 生成进程的CPU-I/O时间数据序列 proci.p_pid=(float) rand() / 32767) * 1000;proci.p_state=B; / 初始都为后备状态s=(float) rand() / 32767) *6 + 6; / 产生的进程数据序列长度在612间proci.p_rserial0=s; / 第一项用于记录序列的长度for(j=1;j=s;j+) / 生成时间数据序列,数值在1030间proci.p_rserialj=(float) rand() / 32767) *10 + 5;/ 赋其他字段的值proci.p_pos=1;proci.p_starttime=(float) rand() / 32767) *49+1;proci.p_endtime=0; proci.p_cputime=proci.p_rserial1; proci.p_iotime=proci.p_rserial2; proci.p_next=-1; printf(n-n 建立了%2d 个进程数据序列nn, ProcNumber); DisData(); printf(nPress Any Key To Continue.); _getch() ; return ;/ 显示系统当前状态/void Display_ProcInfo(void) int i,n; system(cls) ; printf(n 当前系统模拟%2d 个进程的运行 时钟:%ldnn, ProcNumber,ClockNumber); printf(就绪指针=%d, 运行指针=%d, 阻塞指针=%dn,ReadyPoint,RunPoint,WaitPoint ); if(RunPoint!= -1) printf(当前运行的进程No.%d ID:%dn, RunPoint,procRunPoint.p_pid); printf(%6d,%6d,%6dn,procRunPoint.p_starttime,procRunPoint.p_rserialprocRunPoint.p_pos,procRunPoint.p_cputime); else printf(当前运行的进程ID:No Process Running !n); n=ReadyPoint; printf(nReady Process . n); while(n!=-1) / 显示就绪进程信息 printf(No.%d ID:%5d,%6d,%6d,%6dn,n,procn.p_pid,procn.p_starttime,procn.p_rserialprocn.p_pos,procn.p_cputime ); n=procn.p_next; n=WaitPoint; printf(nWaiting Process . n); while(n!=-1) / 显示阻塞进程信息 printf(No.%d ID:%5d,%6d,%6d,%6dn,n,procn.p_pid,procn.p_starttime,procn.p_rserialprocn.p_pos,procn.p_iotime); n=procn.p_next; printf(n= 后备进程 =n); for(i=0; iProcNumber; i+) if (proci.p_state=B) printf(No.%d ID:%5d,%6dn,i,proci.p_pid,proci.p_starttime); printf(n= 已经完成的进程 =n); for(i=0; iProcNumber; i+) if (proci.p_state=F) printf(No.%d ID:%5d,%6d,%6dn,i,proci.p_pid,proci.p_starttime,proci.p_endtime); /printf(n指针状态.n); /printf(就绪队列指针=%d, 运行指针=%d, 阻塞队列指针=%dn,ReadyPoint,RunPoint,WaitPoint );/ 显示模拟执行的结果/void DisResult(void) int i,j; printf(n-n); for(i=0; i %2d ,proci.p_pid ,proci.p_rserial0 ); printf(%4d,%4d,proci.p_starttime,proci.p_endtime); printf(n ); / 显示进程数据序列/void DisData(void) int i,j; for(i=0; i ,proci.p_pid ,proci.p_rserial0 ); for(j=1; j 0) return;/ printf(n RunPoint=%d,ctime=%d,RunPoint,procRunPoint.p_cputime);getchar();return; / 进程完成本次CPU后的处理 if (procRunPoint.p_rserial0=procRunPoint.p_pos) /进程全部序列执行完成 FinishedProc+; procRunPoint.p_state =F;procRunPoint.p_endtime = ClockNumber; RunPoint=-1; /无进程执行 NextRunProcess(); else /进行IO操作,进入阻塞队列procRunPoint.p_pos+;procRunPoint.p_state =W; procRunPoint.p_iotime =procRunPoint.p_rserialprocRunPoint.p_pos;n=WaitPoint;if(n = -1) /是阻塞队列第一个I/O进程 WaitPoint=RunPoint; elsedo /放入阻塞队列第尾if(procn.p_next = -1) procn.p_next = RunPoint; break;n=procn.p_next; while(n!=-1) ; RunPoint=-1; NextRunProcess(); return;/ I/O调度/void IO_Sched(void) int n,bk;if (WaitPoint=-1) return; / 没有等待I/O的进程,直接返回procWaitPoint.p_iotime-; / 进行1个时钟的I/O时间 if (procWaitPoint.p_iotime 0) return; / 还没有完成本次I/O/ 进程的I/O完成处理 if (procWaitPoint.p_rserial0=procWaitPoint.p_pos) /进程全部任务执行完成 FinishedProc+; procWaitPoint.p_endtime = ClockNumber;procWaitPoint.p_state =F;if(procWaitPoint.p_next=-1) WaitPoint=-1;return ;else /调度下一个进程进行I/O操作 n=procWaitPoint.p_next; procWaitPoint.p_next=-1; WaitPoint=n; procWaitPoint.p_iotime =procWaitPoint.p_rserialprocWaitPoint.p_pos ; return ;else /进行下次CPU操作,进就绪队列bk=WaitPoint;WaitPoint=procWaitPoint.p_next;procbk.p_pos+; procbk.p_state =R; /进程状态为就绪procbk.p_next =-1; n=ReadyPoint; if(n = -1) /是就绪队列的第一个进程 ReadyPoint=bk;return; else do if(procn.p_next = -1) procn.p_next = bk; break ; n=procn.p_next;while(n!=-1); return ;/ 检查是否有新进程到达,有则放入就绪队列/void NewReadyProc(void) int i,n;for(i=0; iProcNumber; i+) if (proci.p_starttime = ClockNumber) / 进程进入时间达到系统时间 proci.p_state=R; proci.p_next=-1; if(ReadyPoint=-1) / 就绪队列无进程 ReadyPoint=i; else / 就绪队列有进程,放入队列尾 n=ReadyPoint; while(procn.p_next!=-1) n=procn.p_next; procn.p_next=i; / for return; / 调度模拟算法/void Scheduler_FF(void) int n,count,pstate; if(ProcNumber=0) printf( 必须首先建立进程调度数据 ! n); system(cls);return; ClockNumber=0;/ 时钟开始计时, 开始调度模拟 while(FinishedProc ProcNumber) / 执行算法 ClockNumber+; / 时钟前进1个单位 NewReadyProc(); / 判别新进程是否到达 Cpu_Sched(); / CPU调度 IO_Sched(); / IO调度 Display_ProcInfo(); /显示当前状态 Sleep(500); DisResult(); getch(); return;/ 主函数/int main(int argc, char* argv) char
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电设备安装施工事故应急预案
- 隧道防震加固技术方案
- 水痘课件试讲
- 知识点3.3从人文层面感知色彩设计构成设计色彩68课件
- 装饰施工图设计新氧科技办公楼北京艾迪尔85课件
- 二零二五年度海沧区人民政府与厦门市水利局共建水利基础设施项目合同
- 2025版房地产商房地产营销推广策划合同
- 二零二五年度仓储物抵押反担保协议
- 二零二五年度玩具代加工业务合作协议
- 2025版大型企业培训中心场地租赁及讲师住宿服务合同
- 基本药物临床应用管理制度
- 放射科新技术介绍
- 盆底功能障碍问卷(PFDI20)
- 居住证申请表(正式版)
- 护士临床思维建立
- 公共场所卫生知识培训材料
- 证据目录范本
- 标准档案盒脊背(格式已设置好)
- GB/T 21475-2008造船指示灯颜色
- 园林绿化工高级技师知识考试题库(附含答案)
- 安医大生殖医学课件04胚胎的培养
评论
0/150
提交评论