《(精品论文)进程调度算法的模拟操作系统 课程设计》由会员分享,可在线阅读,更多相关《(精品论文)进程调度算法的模拟操作系统 课程设计(68页珍藏版)》请在金锄头文库上搜索。
1、目录目录课题1: 进程调度算法的模拟51设计目的52任务及要求52.1设计任务及要求53算法及数据结构53.1算法的总体思想(流程)53.2数据结构模块63.2.1功能63.2.2数据结构63.3随机数字产生方法模块63.3.1功能63.3.2算法63.4先到先服务(FCFS)模块73.4.1功能73.4.2数据结构73.4.3算法73.5SJF(最短作业优先)调度算法模块73.5.1功能73.5.2数据结构83.5.3算法83.6优先级调度算法模块103.6.1功能103.6.2数据结构103.6.3算法103.7RR时间片轮转调度算法模块123.7.1功能133.7.2数据结构133.7.
2、3算法133.8主函数模块143.8.1功能143.8.2数据结构143.8.3算法143.9进程的初始化模块163.9.1功能163.9.2数据结构163.9.3算法164实验结果及分析174.1实验结果174.1.1先到先服务算法演示:174.1.2SJF(最短作业优先)调度算法演示:194.1.3优先度调度算法演示:204.1.4RR(轮转法)调度算法演示:254.2结果分析27课题2: 系统动态分配资源的模拟301设计目的302任务及要求302.1设计任务及其要求303算法及数据结构303.1算法的总体思想(流程)303.2数据结构模块313.3随机数字产生方法模块324.2.1功能3
3、24.2.2数据结构324.2.3算法323.4用户自定义模块323.4.1功能323.4.2数据结构323.4.3算法323.5打印系统现在状态模块343.5.1功能343.5.2数据结构343.5.3算法343.6打印系统安全状态变化模块353.6.1功能353.6.2数据结构353.6.3算法363.7进程申请资源模块373.7.1功能373.7.2数据结构373.7.3算法373.8选择菜单模块413.8.1功能413.8.2数据结构413.8.3算法413.9系统自动生成系统状态模块423.9.1功能423.9.2数据结构423.9.3算法423.10主函数模块433.10.1功能4
4、33.10.2数据结构433.10.3算法434实验结果及分析444.1实验结果444.1.1用户自定义演示444.1.2系统自动生成504.2结果分析50课题3:内存的置换算法演示511设计目的512任务及要求512.1设计任务及其要求513算法及数据结构513.1算法的总体思想(流程)513.1.1先进先出页面置换算法(FIFO)513.1.2最近最少使用算法(LRU)513.1.3最佳置换算法(OPT)523.1.4最近最不经常使用置换算法(NUR)523.2先进先出的算法(FIFO)523.2.1功能523.2.2数据结构523.2.3算法523.3最近最少使用算法(LRU)543.3
5、.1功能543.3.2数据结构543.3.3算法543.4最佳淘汰算法(OPT)563.4.1功能563.4.2数据结构563.4.3算法563.5最近最不经常使用算法(NUR)583.5.1功能583.5.2数据结构583.5.3算法583.6主函数模块603.6.1功能603.6.2数据结构603.6.3算法604实验结果及分析614.1实验结果614.1.1先进先出的算法(FIFO)614.1.2最近最少使用算法(LRU)634.1.3最佳淘汰算法(OPT)654.1.4最近最不经常使用算法(NUR)664.2结果分析6814进程调度算法课题1: 进程调度算法的模拟1 设计目的同时通过用
6、C语言编程实现进程调度的算法,更好地掌握操作系统的原理及实现方法2 任务及要求2.1 设计任务及要求1用语言来实现对n个进程采用不同调度算法的进程调度。2每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程编号ID,其中0为闲逛进程,用户进程的标识数为1,2,3。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态,0:就绪态;1:运行态;2:阻塞态。(6
7、)队列指针next,用来将多个进程控制块PCB链接为队列。3优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。(2)进程每运行一个时间片,优先数减3。4在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。3 算法及数据结构3.1 算法的总体思想(流程)对于先到先服务算法,只需要给定每个进程的进程号,然后依次顺序执行就可以了。对于SJF(最短作业优先)调度算法需要判断作业的alltime时间,alltime最小的最先执行,依次按照时间的从小到大执行进程。对于优先度调度算法,需要先判断优先度的大小,优先度最大的先执行,进程
8、运行完毕以后,按照优先数的改变的原则进行改变,然后继续判断所有的优先数的大小,依旧是优先数最大的先执行,直到执行完毕。对于RR时间片轮转调度算法,需要依次执行时间片用完即阻塞,转交给下一个进程执行,直到所有进程运行完毕。3.2 数据结构模块3.2.1 功能进程的结构体声明与函数的声明3.2.2 数据结构struct Processint Pro_Id; /进程编号IDint Priority; /进程优先级,随机产生int CPUtime; /进程占用的CPU时间CPUtimeint Alltime; /进程共需运行时间 ,随机产生int State; /进程状态struct Process
9、* Next;/*函数声明*/intrandom_num();/随机数字产生struct Process * INITIAL(int *n);/进程的初始化int printall(struct Process * P1 );/打印所有进程的具体信息int get_maxpri(struct Process * P1);/获取优先度最高的进程号int get_mintime(struct Process * P1); /获作业时间最短的进程号void alert_status(struct Process * P1,int m);/修改进程的状态void alert_pri(struct Pr
10、ocess * P1,int m); /修改进程的优先度void FCFS(struct Process * Head); /先来先服务算法void Priority(struct Process *Head,int n); /优先级调度算法struct Process * alert_sjf(struct Process *P2,int m);/修改sjf算法状态void SJF(struct Process *Head,int n) ; /SJF调度算法void RR(struct Process *Head,int n); /RR时间片调度算法3.3 随机数字产生方法模块3.3.1 功能
11、随机产生数字,用于进程初始化时的优先度与alltime赋值3.3.2 算法/*随机数字产生方法*/int random_num()int m;m=rand()%100;if (m=0)m=1; return m;/随机数函数结束3.4 先到先服务(FCFS)模块3.4.1 功能模拟进程的先到先服务调度算法,按照进程编号依次运行。3.4.2 数据结构void FCFS(struct Process * Head); /先来先服务算法printall(struct Process * Head);/打印所有进程信息3.4.3 算法/*先来先服务算法*/void FCFS(struct Proces
12、s * Head) struct Process * P1,*P2; P1=Head; while(P1!=NULL) P1-State=1; /printf(%3d n,P1-State); P2=Head; printall(P2);printf(按任意键,继续演示.n);getchar(); P1-CPUtime=P1-Alltime; P1-State=3; /printf(%3d号进程运行完毕n,P1-Pro_Id); / Sleep(1000+P1-Alltime*10); P1=P1-Next; /while P2=Head; printall(P2); printf(演示结束,
13、谢谢。n);/FCFS结束3.5 SJF(最短作业优先)调度算法模块3.5.1 功能将每个进程与其下一个CPU区间段相关联。当CPU为可用时,它会赋给具有最短后续CPU区间的进程。如果两个进程具有同样长度的CPU区间,那么可以使用FCFS调度来处理。3.5.2 数据结构void SJF(struct Process *Head,int n)SJF的主函数,用于调度SJF算法int get_mintime(struct Process * P1)获取所有进程中最小时间的进程,返回进程号struct Process * alert_sjf(struct Process *P2,int m)进程运行以后,修改进程的状态3.5.