进程调度算法磁盘调度算法银行家算法操作系统课程设

合集下载

操作系统 实验 进程调度 银行家算法 多线程编程 存储管理 磁盘调度

操作系统 实验 进程调度 银行家算法 多线程编程  存储管理 磁盘调度

实验一进程调度实验学时:2学时实验类型:设计实验要求:必修一、实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。

因而引起进程调度。

本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。

二、实验内容1.优先权法、轮转法简化假设1)进程为计算型的(无I/O)2)进程状态:ready、running、finish3)进程需要的CPU时间以时间片为单位确定2.算法描述1)优先权法——动态优先权当前运行进程用完时间片后,其优先权减去一个常数。

2)轮转法三、流程图四、实验程序代码package进程调度;/***@author**/public class CPCB {private String name;private int time;private int count;public int getCount() {return count;}public void setCount(int count) { this.count = count;}public String getName() {return name;}public void setName(String name) { = name;}public int getTime() {return time;}public void setTime(int time) {this.time = time;}}package进程调度;/***@author**/class PCB{private String name;private int time ;private int priority ;public int getTime(){return time;}public void setTime(int time){this.time = time;}public int getPriority(){return priority;}public void setPriority(int priority){ this.priority = priority;}public String getName() {return name;}public void setName(String name) { = name;}}package进程调度;import java.util.LinkedList;/***@author**/class process{private final static int nap_time = 500;private LinkedList<PCB> queue = new LinkedList<PCB>();private LinkedList<CPCB> cqueue = new LinkedList<CPCB>();//优先权算法public void go(int p_Num) throws Exception{for(int i = 0;i<p_Num;i++){PCB pcb = new PCB();int time = (int)(Math.random()*20+1);int pri = (int)(Math.random()*20+4);pcb.setName("进程"+i);pcb.setTime(time);pcb.setPriority(pri);queue.add(pcb);}queue = this.sort(queue);int i=0;while(queue.size()!=0){PCB pcb = (PCB)queue.getFirst();System.out.println(i+"\t\t"+pcb.getName()+"运行\t"+"优先级:"+pcb.getPriority()+"---所需时间:"+pcb.getTime());// Thread.sleep(nap_time);int pre = pcb.getPriority() - 3;int time = pcb.getTime() - 1;if(time<=0){System.out.println(pcb.getName()+"\t\t进程运行结束");PCB p = (PCB)queue.removeFirst();System.out.println("移除队列的进程是\t\t"+p.getName()+"\n队列中还有"+queue.size()+"个进程\n");}else{queue.remove();pcb.setPriority(pre);pcb.setTime(time);// System.out.println("运行后:"+i+"----"+pcb.getName()+"---优先级:"+pcb.getPriority()+"---所需时间:"+pcb.getTime());queue.add(pcb);queue = this.sort(queue);}i++;}}//时间片轮转调度算法public void cycle(int p_Num) throws Exception{final int time = 3; //定义轮转时间片数for(int i = 0;i<p_Num;i++){CPCB cpcb = new CPCB();cpcb.setTime((int)(Math.random()*20)+1);cpcb.setName("进程"+i);cpcb.setCount(0);cqueue.add(cpcb);}while(cqueue.size()!=0){CPCB cpcb = (CPCB)cqueue.getFirst();while(cpcb.getCount()!=time){// Thread.sleep(nap_time);cpcb.setTime(cpcb.getTime() - 1);cpcb.setCount(cpcb.getCount()+1);for(int i=0;i<cqueue.size();i++)//输出进程运行情况{CPCB cpcb1 = (CPCB)cqueue.get(i);System.out.println(cpcb1.getName()+"\t\t所需时间片数"+cpcb1.getTime()+"\t\t已占用CPU时间片数"+cpcb1.getCount());}if(cpcb.getTime()==0){System.out.println(cpcb.getName()+"运行结束\n"+"-------------移除队列的是"+cpcb.getName()+"-------------");cqueue.removeFirst();System.out.println("-------------队列中还有"+cqueue.size()+"个进程--------------");break;}if(cpcb.getCount()==time){// cqueue.remove();System.out.println("----因为"+cpcb.getName()+"占用CPU时间片数"+cpcb.getCount()+"="+time);System.out.println(cpcb.getName()+"时间片运行结束"+cpcb.getCount()+cpcb.getTime());CPCB p = (CPCB)cqueue.removeFirst();cqueue.add(p);cpcb.setCount(0);break;}}}}public LinkedList<PCB> sort(LinkedList<PCB> processes){for(int i=0;i<processes.size();i++){PCB thread = new PCB();thread = processes.get(i);for(int j=i+1;j<processes.size();j++){if(thread.getPriority() < processes.get(j).getPriority()){PCB mythread = new PCB();mythread = thread;//thread = processes.get(j);processes.set(i, processes.get(j));processes.set(j, mythread);}}}return processes;}}package 进程调度;import java.io.BufferedReader;import java.io.InputStreamReader;/**** @author 邱福文**/public class MainFun{public void FPF(){}public static void main (String[] args) throws Exception{Integer n2;do{System.out.print("请输入进程数:");BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));String str = sin.readLine();Integer n = Integer.parseInt(str);System.out.print("请输入调度算法:\n"+"1为优先权\n"+"2为轮转法\n"+"0 退出\n");BufferedReader sin2 = new BufferedReader(new InputStreamReader(System.in));String str2 = sin2.readLine();process p = new process();// do{n2 = Integer.parseInt(str2);switch(n2){case 0:break;case 1:p.go(n);break;case 2:p.cycle(n);break;default:System.out.print("输入有误请重新输入");break;}}while(n2!=0);}}五、实验结果请输入进程数:3请输入调度算法:1为优先权2为轮转法0 退出10 进程0运行优先级:19---所需时间:181 进程1运行优先级:19---所需时间:152 进程0运行优先级:16---所需时间:173 进程1运行优先级:16---所需时间:144 进程0运行优先级:13---所需时间:165 进程1运行优先级:13---所需时间:136 进程2运行优先级:10---所需时间:87 进程0运行优先级:10---所需时间:158 进程1运行优先级:10---所需时间:129 进程2运行优先级:7---所需时间:710 进程0运行优先级:7---所需时间:1411 进程1运行优先级:7---所需时间:1112 进程2运行优先级:4---所需时间:613 进程0运行优先级:4---所需时间:1314 进程1运行优先级:4---所需时间:1015 进程2运行优先级:1---所需时间:516 进程0运行优先级:1---所需时间:1217 进程1运行优先级:1---所需时间:918 进程2运行优先级:-2---所需时间:419 进程0运行优先级:-2---所需时间:1120 进程1运行优先级:-2---所需时间:821 进程2运行优先级:-5---所需时间:322 进程0运行优先级:-5---所需时间:1023 进程1运行优先级:-5---所需时间:724 进程2运行优先级:-8---所需时间:225 进程0运行优先级:-8---所需时间:926 进程1运行优先级:-8---所需时间:627 进程2运行优先级:-11---所需时间:1 进程2 进程运行结束移除队列的进程是进程2队列中还有2个进程28 进程0运行优先级:-11---所需时间:829 进程1运行优先级:-11---所需时间:530 进程0运行优先级:-14---所需时间:731 进程1运行优先级:-14---所需时间:432 进程0运行优先级:-17---所需时间:633 进程1运行优先级:-17---所需时间:334 进程0运行优先级:-20---所需时间:535 进程1运行优先级:-20---所需时间:236 进程0运行优先级:-23---所需时间:437 进程1运行优先级:-23---所需时间:1 进程1 进程运行结束移除队列的进程是进程1队列中还有1个进程38 进程0运行优先级:-26---所需时间:339 进程0运行优先级:-29---所需时间:240 进程0运行优先级:-32---所需时间:1进程0 进程运行结束移除队列的进程是进程0队列中还有0个进程请输入进程数:3请输入调度算法:1为优先权2为轮转法0 退出2进程0 所需时间片数8 已占用CPU时间片数1 进程1 所需时间片数6 已占用CPU时间片数0 进程2 所需时间片数13 已占用CPU时间片数0 进程0 所需时间片数7 已占用CPU时间片数2 进程1 所需时间片数6 已占用CPU时间片数0 进程2 所需时间片数13 已占用CPU时间片数0 进程0 所需时间片数6 已占用CPU时间片数3 进程1 所需时间片数6 已占用CPU时间片数0 进程2 所需时间片数13 已占用CPU时间片数0 ----因为进程0占用CPU时间片数3=3进程0时间片运行结束36进程1 所需时间片数5 已占用CPU时间片数1 进程2 所需时间片数13 已占用CPU时间片数0 进程0 所需时间片数6 已占用CPU时间片数0 进程1 所需时间片数4 已占用CPU时间片数2 进程2 所需时间片数13 已占用CPU时间片数0 进程0 所需时间片数6 已占用CPU时间片数0 进程1 所需时间片数3 已占用CPU时间片数3 进程2 所需时间片数13 已占用CPU时间片数0 进程0 所需时间片数6 已占用CPU时间片数0 ----因为进程1占用CPU时间片数3=3进程1时间片运行结束33进程2 所需时间片数12 已占用CPU时间片数1 进程0 所需时间片数6 已占用CPU时间片数0 进程1 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数11 已占用CPU时间片数2 进程0 所需时间片数6 已占用CPU时间片数0 进程1 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数10 已占用CPU时间片数3 进程0 所需时间片数6 已占用CPU时间片数0----因为进程2占用CPU时间片数3=3进程2时间片运行结束310进程0 所需时间片数5 已占用CPU时间片数1 进程1 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数10 已占用CPU时间片数0 进程0 所需时间片数4 已占用CPU时间片数2 进程1 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数10 已占用CPU时间片数0 进程0 所需时间片数3 已占用CPU时间片数3 进程1 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数10 已占用CPU时间片数0 ----因为进程0占用CPU时间片数3=3进程0时间片运行结束33进程1 所需时间片数2 已占用CPU时间片数1 进程2 所需时间片数10 已占用CPU时间片数0 进程0 所需时间片数3 已占用CPU时间片数0 进程1 所需时间片数1 已占用CPU时间片数2 进程2 所需时间片数10 已占用CPU时间片数0 进程0 所需时间片数3 已占用CPU时间片数0 进程1 所需时间片数0 已占用CPU时间片数3 进程2 所需时间片数10 已占用CPU时间片数0 进程0 所需时间片数3 已占用CPU时间片数0 进程1运行结束-------------移除队列的是进程1--------------------------队列中还有2个进程--------------进程2 所需时间片数9 已占用CPU时间片数1 进程0 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数8 已占用CPU时间片数2 进程0 所需时间片数3 已占用CPU时间片数0 进程2 所需时间片数7 已占用CPU时间片数3 进程0 所需时间片数3 已占用CPU时间片数0 ----因为进程2占用CPU时间片数3=3进程2时间片运行结束37进程0 所需时间片数2 已占用CPU时间片数1 进程2 所需时间片数7 已占用CPU时间片数0 进程0 所需时间片数1 已占用CPU时间片数2 进程2 所需时间片数7 已占用CPU时间片数0 进程0 所需时间片数0 已占用CPU时间片数3 进程2 所需时间片数7 已占用CPU时间片数0 进程0运行结束-------------移除队列的是进程0--------------------------队列中还有1个进程--------------进程2 所需时间片数6 已占用CPU时间片数1进程2 所需时间片数4 已占用CPU时间片数3----因为进程2占用CPU时间片数3=3进程2时间片运行结束34进程2 所需时间片数3 已占用CPU时间片数1进程2 所需时间片数2 已占用CPU时间片数2进程2 所需时间片数1 已占用CPU时间片数3----因为进程2占用CPU时间片数3=3进程2时间片运行结束31进程2 所需时间片数0 已占用CPU时间片数1进程2运行结束-------------移除队列的是进程2--------------------------队列中还有0个进程--------------请输入进程数:实验二银行家算法一、实验目的死锁会引起计算机工作僵死,因此操作系统中必须防止。

操作系统十大算法具体内容

操作系统十大算法具体内容

操作系统十大算法具体内容操作系统是计算机系统的核心组成部分,主要负责管理计算机的硬件资源和提供各种系统服务。

操作系统算法是操作系统实现各种功能和服务的基础,包括进程调度、内存管理、文件系统等方面。

下面将介绍操作系统中的十大算法,以及它们在操作系统中的具体内容:1.进程调度算法进程调度算法决定了操作系统如何选择就绪队列中的进程分配处理机资源。

常见的进程调度算法包括先来先服务调度算法(FCFS)、最短作业优先调度算法(SJF)、轮转调度算法(RR)等。

这些算法基于进程的优先级、执行时间、资源需求等考虑,来决定选择哪个进程获得处理机资源。

2.内存管理算法内存管理算法决定了如何有效地分配和回收内存资源。

常见的内存管理算法包括固定分区算法、动态分区算法和虚拟内存管理算法等。

这些算法根据进程的内存需求和空闲内存空间的情况,来决定如何分配和回收内存资源。

3.页面置换算法页面置换算法是一种在虚拟内存管理中使用的算法,用于将进程的页面从磁盘中换入内存,并选择合适的页面进行置换。

常见的页面置换算法有最佳置换算法(OPT)、先进先出置换算法(FIFO)、最近最少使用置换算法(LRU)等。

这些算法根据页面的访问情况和页面的驻留时间来决定选择哪个页面进行置换。

4.文件管理算法文件管理算法决定了如何组织和管理文件系统中的文件。

常见的文件管理算法有顺序文件组织算法、索引文件组织算法、哈希文件组织算法等。

这些算法根据文件的访问特点和性能需求,来决定如何组织和管理文件数据。

5.磁盘调度算法磁盘调度算法决定了操作系统如何调度磁盘上的IO请求,以提高磁盘的访问效率。

常见的磁盘调度算法有先来先服务调度算法(FCFS)、最短寻半径优先调度算法(SSTF)、扫描调度算法(SCAN)等。

这些算法根据磁盘的寻道距离和IO请求的到达时间等因素,来决定选择哪个IO请求进行调度。

6.死锁检测和解决算法死锁是指多个进程因为互相等待而无法继续执行的情况。

进程调度与死锁银行家算法

进程调度与死锁银行家算法

武夷学院实验报告
课程名称:__操作系统__ 项目名称:__进程调度与死锁银行家算法__
姓名:_王芬岚_专业:_计算机科学与技术_ 班级:_2班__学号:_20144012002_同组成员_无_
1注:1、实验准备部分包括实验环境准备和实验所需知识点准备。

2、若是单人单组实验,同组成员填无。

2注:实验过程记录要包含实验目的、实验原理、实验步骤,页码不够可自行添加。

#include <iostream.h> #include <queue>
#include <string>
3注:1、实验小结应包含实验所需知识点和实验方法的总结,实验心得体会等。

2、分组实验需包含同组讨论内容。

实验报告成绩(百分制)__________ 实验指导教师签字:__________。

操作系统课程设计银行家算法算法的模拟实现

操作系统课程设计银行家算法算法的模拟实现

枣庄学院信息科学与工程学院课程设计任务书题目银行家算法算法的模拟实现学生1: __________________________________________________学生2: __________________________________________________专业: ________________ 计算机应用技术 __________________课程: ________________ 操作系统 _________________________指导教师:__________ 职称: ________________完成时间:2014年12月----2015年1月枣庄学院信息科学与工程学院制2014年12月10日课程设计任务书及成绩评定课程设计的任务和具体要求操作系统课程设计是操作系统课程学习的延续。

主要目的是配合操作系统课程的学习,对Linux操作系统有一定掌握,能够熟练操作,并能在Linux系统下模拟实现操作系统的功能,有助于对操作系统的理解。

本次课程设计共分两部分,其中第一部分为操作题,同学们需要对Linux的基本的命令(常用的几个,讲课的时候强调的),这部分,任课教师实时检查,让学生用命令完成一定的功能,然后,根据完成情况评定成绩。

第二部分为编程设计题,每组同学必须独立完成,可以选择进程调度,也可以根据自己的兴趣,选择模拟实现磁盘调度、银行家算法、页面置换算法等。

指导教师签字:_________________ 日期: ______________________________指导教师评语成绩:______________ 指导教师签字: _______________________ 日期: _____________目录1引言1.1linux 及其特点 .................. ... .. (4)1.1.1Linux 的概述 (4)1.2Linux 的结构 (4)1.3Linux 的版本............. ... . (5)2常用命令基本介绍2.1Linux目录命令 (5)2.2Linux文件命令 ...... (5)3银行家算法3.1实验目的......... (6)3.2实验内容.......................... ................................................................ .. (6)3.3实验方法........................................................................................... .. (7)3.3.1算法流程图............................................................................ ....... .. (7)3.3.2算法数据结构 (7)3.4实验代码........................................................................................................................................ …3.5运行示例 (17)4实验小结................................................................................................................................... .. (17)实用程序:的Linux标准系统都有一套称为应用程序的程序集,它们是专门的程序,包括文本编辑器,编程语言,X Win dow,办公套件,In ternet工具,数据库等1.3Lin ux 的版本:内核版本:根据约定,次版本号为奇数时,表示该版本加入新内容,但不一定很稳定,相当于测试版;次版本号为偶数时,表示这是一个可以使用的稳定版本。

操作系统课设 磁盘调度算法程序设计

操作系统课设 磁盘调度算法程序设计

操作系统课设磁盘调度算法程序设计操作系统课设——磁盘调度算法程序设计1:引言1.1 背景1.2 目的和范围1.3 参考文献2:磁盘调度算法概述2.1 磁盘调度的目标2.2 磁盘调度的分类2.3 磁盘调度算法的评价指标3:磁盘调度算法实现3.1 先来先服务(FCFS)算法3.1.1 算法描述3.1.2 算法优缺点3.1.3 算法实现代码示例3.2 最短寻找时间优先(SSTF)算法3.2.1 算法描述3.2.2 算法优缺点3.2.3 算法实现代码示例 3.3 扫描(SCAN)算法3.3.1 算法描述3.3.2 算法优缺点3.3.3 算法实现代码示例 3.4 循环扫描(C-SCAN)算法 3.4.1 算法描述3.4.2 算法优缺点3.4.3 算法实现代码示例 3.5 LOOK算法3.5.1 算法描述3.5.2 算法优缺点3.5.3 算法实现代码示例4:测试与性能评估4.1 测试环境4.2 测试用例设计4.3 对比磁盘调度算法的性能5:结论5.1 结果分析5.2 局限性和未来工作6:附件本文档附带了以下附件:- 磁盘调度算法实现的源代码- 测试用例和数据- 测试结果统计表格7:法律名词及注释7.1 磁盘调度算法:针对磁盘上的存储数据进行调度和访问的算法。

7.2 先来先服务(FCFS)算法:根据请求的到达顺序,依次服务每个请求。

7.3 最短寻找时间优先(SSTF)算法:根据当前磁头位置来寻找最近的请求进行服务。

7.4 扫描(SCAN)算法:磁头从一端开始,向一侧移动并服务请求,直到到达边界,然后返回另一侧。

7.5 循环扫描(C-SCAN)算法:磁头从一端开始,扫描到达边界后回到另一端,重新开始扫描。

7.6 LOOK算法:磁头在服务请求的过程中,只在磁盘上实际存在请求的区域内移动。

计算机操作系统课程设计题目及要求

计算机操作系统课程设计题目及要求

一、设计题目
二、设计步骤
1.需求分析:了解基本原理,确定算法的基本功能,查找相关资料,
画出基本的数据流图;
2.总体设计:确定算法的总体结构、数据结构、模块关系和总体流程;
3.详细设计:确定模块内部的流程和算法步骤。

4.上机编码和调试;
5.实际数据运行测试与分析;
6.课程设计总结报告撰写。

三、课程设计报告撰写
课程设计报告主要内容:
①概述:设计主要完成的任务和解决的主要问题;
②设计的基本概念和原理;
③总体设计:实现的方法和主要技术路线;
④详细设计:使用主要控件、函数;
⑤测试与数据分析
⑥完成的情况、简要的使用说明;
⑦结果分析
⑧总结:特色、经验、教训和感受;
⑨参考文献
⑩。

进程调度算法 操作系统课程设计

进程调度算法  操作系统课程设计

计算机科学与应用系操作系统原理课程设计报告题目:进程调度算法班级: 0510074姓名: lee hye 专业:计算机科学与技术指导老师: hhh进程调度算法一、实验目的通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。

二、实验内容1、用C语言或C++语言来实现对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)队列指针next,用来将多个进程控制块PCB链接为队列。

3、优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1.(2)进程每运行一个时间片,优先数增加1.4、在调度前,系统中拥有的进程数PCB_number有键盘输入,进初始化后,所有的进程控制块PCB连接成就绪队列。

5、为了清楚的观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来。

三、实验步骤1、进程管理程序调式好后,运行进程管理程序(1)输入1选择优先权调度算法模拟。

(2)输入开始进程个数n,创建n个PCB并加入就绪队列ready_queue中。

(3)就绪队列ready_queue不为空,调度就绪队列中第一个进程运行,否则,从闲逛队列idleprocess中调度闲逛进程运行。

(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queue 中,且将该进程从ready_queue中删除。

《操作系统》实验指导书

《操作系统》实验指导书

操作系统实验指导书专业:计算机科学与技术;软件工程课程名称:操作系统课程类别:专业必修课计算机与通信工程学院2009目录第1篇Linux操作系统使用 (1)实验1Linux系统的安装及基本操作 (1)实验2Linux 的常用命令与基本管理 (38)第2篇操作系统算法模拟 (53)实验1 银行家算法 (53)实验2 进程调度 (55)实验3 动态分区分配 (56)实验4 页式存储管理 (57)实验5 虚拟存储管理器的页面调度 (59)实验6 文件管理 (62)实验7 磁盘存储空间的分配与回收 (64)实验8 磁盘调度 (66)附录 (67)实验1报告写法 (67)实验2报告的写法 (67)算法模拟部分 (68)第1篇Linux操作系统使用实验1Linux系统的安装及基本操作一、实验目的1.掌握Red Hat Enterprise Linux 5的安装方法。

2.了解Linux操作系统的启动与登录方法。

3.掌握Red Hat Linux图形用户界面下的基本操作。

二、实验工具与设备1.实验工具:Red Hat Enterprise Linux 5光盘或镜像文件。

2.实验设备:计算机(带CD-ROM)一台。

三、实验预备知识虚拟机简介虚拟机,顾名思义就是虚拟出来的电脑,这个虚拟出来的电脑和真实的电脑几乎完全一样,所不同的是他的硬盘是在一个文件中虚拟出来的,所以你可以随意修改虚拟机的设置,而不用担心对自己的电脑造成损失。

虚拟机中有自己的CPU、主板、内存、BIOS、显卡、硬盘、光驱、软驱、网卡、声卡、串口、并口和US B等设备。

Vmware介绍Vmware是一个“虚拟PC”软件。

它使你可以在一台机器上同时运行二个或更多Windows、DOS、LINUX系统。

与“多启动”系统相比,VMWare采用了完全不同的概念。

多启动系统在一个时刻只能运行一个系统,在系统切换时需要重新启动机器。

VMWare是真正“同时”运行,多个操作系统在主系统的平台上,就象标准Wi ndows应用程序那样切换。

操作系统课程设计报告磁盘调度算法

操作系统课程设计报告磁盘调度算法

课程设计课程设计名称:操作系统应用课程设计专业班级:学生姓名:xxxxx学号:指导教师:课程设计时间: 2010.12.20-2010.12.26计算机科学专业课程设计任务书说明:本表由指导教师填写,由教研室主任审核后下达给选题学生,装订在设计(论文)首页一 .课程设计需求分析操作系统是计算机系统的一个重要系统软件。

我们在本课程的实验过程中,了解实际操作系统的工作过程,在实践中加深对操作系统原理的理解。

磁盘存储器不仅容量大,存取速度快,而且可以实现随机存取,是当前存放大量程序和数据的理想设备,故在现代计算机系统中,都配置了磁盘存储器,并以它为主来存放文件。

这样,对文件的操作,都将涉及到对磁盘的访问。

磁盘I/O速度的高低和磁盘系统的可靠性都将直接影响到系统性能。

因此,设法改善磁盘系统的性能,已成为现代操作系统的重要任务之一。

磁盘性能有数据的组织、磁盘的类型和访问时间等。

磁盘调度的目标是使磁盘的平均寻道时间最少。

也正因为这样,我们有必要对各算法进行模拟,进而比较、分析、了解。

本实验设计的目的是通过设计一个磁盘调度模拟系统,以加深对最短寻道时间优先(SSTF)、N步扫描算法(NStepSCAN)等磁盘调度算法的理解。

让我们更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强动手能力。

二.课程设计原理设备的动态分配算法与进程调度相似,也是基于一定的分配策略的。

常用的分配策略有先请求先分配、优先级高者先分配等策略。

在多道程序系统中,低效率通常是由于磁盘类旋转设备使用不当造成的。

操作系统中,对磁盘的访问要求来自多方面,常常需要排队。

这时,对众多的访问要求按一定的次序响应,会直接影响磁盘的工作效率,进而影响系统的性能。

访问磁盘的时间因子由3部分构成,它们是查找(查找磁道)时间、等待(旋转等待扇区)时间和数据传输时间,其中查找时间是决定因素。

因此,磁盘调度算法先考虑优化查找策略,需要时再优化旋转等待策略。

操作系统课程设计选题

操作系统课程设计选题

多道批处理系统的两级调度-1李旭欣李彩燕林广声
多道批处理系统的两级调度-2周理彬梁丹彤农思雯
多道批处理系统的两级调度-3王彬彬马少滨张楷豪
两道批处理系统的两级调度-1徐彬林泳林志聪
两道批处理系统的两级调度-2王南佳孙秦英谢德强
进程调度侯正之许树炯温景钊
多级文件系统-1魏如南曾志坤黄锦玲帕尔哈提·阿布都克力木多级文件系统-2丁越曾祥杰刘海峰
请求调页存储管理方式的模拟-1黄劲黄威豪张宇辰
请求调页存储管理方式的模拟-2张志泉张晓龙吕慧苍
请求调页存储管理方式的模拟-3
请求调页存储管理方式的模拟-4
银行家算法邹国琴杜径舟陈启伟
编程演示三种存储管理方式的地址换算过程马书鸿叶志锴余植荣
磁盘调度算法1陈晓聪陈俊豪李峥旭
磁盘空间管理-1陈兆龙何勇杰杜信杰
磁盘空间管理-2黄炜东张锦添曾志鹏
磁盘空间管理-3冼世勇
磁盘空间管理-4周东辉庄俊华
都克力木。

磁盘调度算法课程设计

磁盘调度算法课程设计

磁盘调度算法课程设计一、课程目标知识目标:1. 理解磁盘调度算法的基本原理和重要性;2. 掌握常用的磁盘调度算法,如FCFS、SSTF、SCAN和C-SCAN;3. 学会分析不同调度算法的性能特点及其适用场景;4. 能够运用磁盘调度算法优化磁盘访问效率。

技能目标:1. 培养学生运用所学知识解决实际问题的能力;2. 提高学生的编程实践能力,使其能够编写简单的磁盘调度算法程序;3. 培养学生通过对比分析,选择合适算法解决问题的能力。

情感态度价值观目标:1. 培养学生对计算机操作系统中磁盘调度算法的兴趣,激发学习热情;2. 培养学生团队协作精神,学会在合作中共同解决问题;3. 培养学生严谨的科学态度,认识到磁盘调度算法在计算机系统中的重要性。

本课程针对高中年级学生,课程性质为理论与实践相结合。

在教学过程中,充分考虑学生的认知特点,从实际应用出发,引导学生掌握磁盘调度算法的基本概念和原理。

通过案例分析和编程实践,使学生能够将所学知识应用于解决实际问题。

在教学过程中,注重培养学生的动手能力和团队协作精神,提高学生的综合素质。

课程目标的设定旨在使学生在掌握磁盘调度算法相关知识的基础上,培养其运用所学知识解决问题的能力,同时注重培养学生正确的情感态度价值观。

后续教学设计和评估将围绕具体学习成果展开,确保课程目标的实现。

二、教学内容本章节教学内容主要包括以下几部分:1. 磁盘调度算法概述- 了解磁盘存储器的基本结构和工作原理;- 理解磁盘调度算法的定义及其在操作系统中的作用。

2. 常用磁盘调度算法- FCFS(先来先服务)算法;- SSTF(最短寻道时间优先)算法;- SCAN(扫描)算法;- C-SCAN(循环扫描)算法。

3. 磁盘调度算法性能分析- 对比分析各种磁盘调度算法的性能指标,如寻道时间、平均等待时间等;- 探讨不同算法适用的场景和优缺点。

4. 磁盘调度算法编程实践- 学习使用编程语言实现磁盘调度算法;- 通过案例分析和编程实践,加深对磁盘调度算法的理解。

操作系统磁盘调度算法课程设计

操作系统磁盘调度算法课程设计

目录目录 (1)1.课程设计目的 (2)1.1编写目的 (2)2.课程设计内容 (2)2.1设计内容 (2)3.课程设计方案 (3)3.1模块划分 (3)3.2模块调用关系图 (6)3.3子模块程序流程图 (6)4.测试数据和结果 (10)4.1测试数据 (10)4.2测试结果 (11)4.3测试抓图 (11)5.参考文献 (14)6.总结 (15)6.1设计体会 (15)6.2结束语 (15)7.程序使用说明书 (15)8.程序源代码 (15)1.课程设计目的1.1编写目的本课程设计的目的是通过设计一个磁盘调度模拟系统,从而使磁盘调度算法更加形象化,容易使人理解,使磁盘调度的特点更简单明了,能使使用者加深对先来先服务算法、最短寻道时间优先算法、扫描算法以及循环扫描算法等磁盘调度算法的理解。

2.课程设计内容2.1设计内容系统主界面可以灵活选择某种算法,算法包括:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。

1、先来先服务算法(FCFS)这是一种比较简单的磁盘调度算法。

它根据进程请求访问磁盘的先后次序进行调度。

此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。

此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

2、最短寻道时间优先算法(SSTF)该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。

其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变化幅度很大。

在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。

3、扫描算法(SCAN)扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。

操作系统课设进程调度算法银行家算法

操作系统课设进程调度算法银行家算法

北华航天工业学院《操作系统》课程设计报告课设报告题目:作者所在系部:计算机科学与工程作者所在专业:计算机科学与技术作者所在班级:作者姓名:指导教师姓名:完成时间:2011-12-13北华航天工业学院教务处制摘要通过一学期的对操作系统的学习,对操作系统有了一定的知识储备,为了巩固知识,加深印象,也为了更加深入的了解与钻研操作系统,为以后的学习研究提供帮助,做操作系统课设,分别为进程调度算法、银行家算法。

通过进程调度算法课设,解决了进程调度的几个基本算法:先来先服务算法、短进程优先算法、高响应比算法。

通过银行家算法课设,更加深刻的理解了银行家算法,安全算法避免死锁的原理。

两个课设为两个知识点,都为操作系统的难点与重点,在硬件不允许的情况下通过运用vc++6.0和c++语言描述了它们的功能与具体实现,对以后的学习有很大的帮助。

关键词:操作系统进程进程调度算法先来先服务短进程优先高响应比银行家算法安全算法死锁安全序列安全状态1.1课程设计的背景和意义 (1)1.1.1课程设计的理论研究基础 (1)1.1.2课程设计的意义 (1)1.2课程设计环境 (1)第二章需求分析 (2)2.1功能要求 (2)2.1.1进程调度算法 (2)2.1.2银行家算法 (2)2.2问题的解决方案 (2)2.2.1进程调度算法 (2)2.2.2银行家算法 (3)第三章系统设计 (4)3.1数据设计 (4)3.1.1结构体设计 (4)3.1.2结构体之间的关系 (4)3.1.3函数设计 (4)第四章系统实现 (2)4.1结构体实现 (2)4.2函数实现 (2)4.2.1进程调度算法的函数实现 (2)4.2.2.银行家算法的函数实现 (6)4.3主函数实现 (4)4.3.1.进程调度算法的主函数实现 (4)4.3.2.银行家算法的主函数实现 (1)4.4系统界面 (1)4.4.1进程调度算法的运行界面 (1)4.4.2银行家算法的运行界面 (1)第五章系统测试 (2)5.1模块测试 (2)5.1.1进程调度算法 (2)5.1.2银行家算法 (4)5.2课程设计过程中遇到的问题 (6)总结 (7)致谢 (8)第一章绪论随着计算机的不断的更新换代,操作系统也越来越多样化,复杂化,这就要求我们大学生掌握一些操作系统的基本知识,了解操作系统的基本原理,能够正确地使用操作系统,直到操作系统的作用,为此,我们列举了两个操作系统中常用的两个知识点,进程调度算法和银行家算法,帮助学生能够较快的了解并掌握这两个常用的知识点。

操作系统课设报告磁盘调度算法

操作系统课设报告磁盘调度算法

操作系统课设报告磁盘调度算法Document serial number【KK89K-LLS98YT-SS8CB-SSUT-SST108】课程设计报告课程名称: 操作系统课程设计课题名称: 磁盘调度算法学院: 软件学院班级:学生姓名:学号:指导教师:磁盘调度算法一、系统需求分析磁盘存储器不仅容量大,存取速度快,而且可以实现随机存取,是当前存放大量程序和数据的理想设备。

所以在现代计算机中都配备了磁盘存储器,以他为主存放文件,这样对文件的读、写操作都涉及到了对磁盘存储器的访问。

磁盘I/O速度的高低和磁盘系统的可靠性,都直接影响到系统的性能。

因此改善磁盘系统的性能成为现代操作系统的重要任务之一。

磁盘性能有数据的组织、磁盘的类型和访问时间等。

可以通过选择好的磁盘调度算法,以减少磁盘的寻道时间。

为了减少对文件的访问时间,应采用一种最佳的磁盘调度算法,以使各进程对磁盘的平均访问时间最少。

由于在访问磁盘的时间中主要是寻道时间,因此,磁盘调度的目标是使磁盘的寻道时间最少。

所以本课程设计对各个算法进行模拟,进而比较分析了解。

二、实验内容和目的.实验内容模拟电梯调度算法,实现对磁盘的驱动调度。

设计要求:编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度;要求设计主界面可以灵活选择某算法,且以下算法都要实现1、先来先服务算法(FCFS)2、最短寻道时间优先算法(SSTF)3、扫描算法(SCAN)4、循环扫描算法(CSCAN).实验原理模拟电梯调度算法,对磁盘调度。

磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。

当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。

当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。

当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。

三、总体设计及分类简介算法介绍磁盘调度中常用的有四种算法,功能分别如下:1.先来先服务(FCFS)算法。

操作系课程设计

操作系课程设计
根据银行家算法思想,编程实现该算法,并通过数据验证算法。
4
经典进程同步问题实现
基于Linux操作系统实现生产者和消费者、哲学家进餐以及一个简单的聊天程序。
6
伙伴系统模拟实现
结合数据结构课程中的伙伴系统的介绍,编写具有分配与回收功能的程序,显示所有用户申请成功后的用户名,进程号,内存大小及内存起始地址等。
《操作系统》课程设计大纲


项目名称
内容
1
处理机调度算法实现
根据处理机调度算法的思想,编程实现先来先服务、短作业优先、高响应比以及时间片轮转调度算法,并通过数据分析比较各种算法的执行效率。
2
进程调度算法修改
基于Linux操作系统内核修改其进程调度算法,并进行内核编译,运行修改后的处理机调度算法。
3
银行家算法实现
7
页面置换算法实现
根据请求分页存储管理中页面置换算法的思想,编程实现最佳置换算法、先来先服务置换算法、最近最久未使用算法,并通过数据分析比较各种算法的缺页率。
8
设备管理
编写程序,由必要的数据结构、主函数、设备分配函数及设备回收函数构成,实现对独占设备的分配与回收的模拟。
9
磁盘调度算法模拟
根据磁盘调度算法的思想,编程实现先来先服务、最短寻道时间优先、扫描算法、循环扫描算法等,并通过数据分析比较各种算反的平均寻道长度。
10
Linux内核编译和裁剪
实现将Linux内核进行裁剪和编译,并Linux2.4内核升级到2.6内核。
11
手机操作系统应用
基于智能手机操作系统设计并实现一个简单应用。(计算器等)

磁盘调度算法 操作系统课程设计

磁盘调度算法    操作系统课程设计

磁盘调度1.设计目的加深对操作系统的磁盘调度的进一步理解以及进一步的认识。

加强实践能力和动手动脑能力,同时加深对磁盘调度概念的理解,同时也再一次提高了自己编程的能力。

2. 任务及要求2.1 设计任务分析设计模拟磁盘管理系统的方法,加深对磁盘调度算法的了解以及个算法的特点。

2.2 设计要求分别设计出先来先服务算法,最短寻道时间优先算法,扫描算法。

并分别求出它们的平均寻道时间。

3. 算法及数据结构3.1算法的总体思想(流程)1.先来先服务的算法,即先来的请求先被响应。

FCFS算法看起来是比较合理的算法,但是当请求频率过高的时候FCFS算法的响应时间就会大大的延长,这也是最基本的算法,直接实现的是由输入的顺序来顺序的执行。

2.最短寻道时间优先算法,要求访问的磁道,与当前磁头所在的磁道的距离最近,从而以使每次的寻道时间最短。

3.扫描磁盘调度,该算法不考虑与访问磁道与当前磁道的距离,更优先考虑的磁头当前的移动方向,例如,当磁头正在有向外移动时,SCAN算法所考虑的下一个访问对象,应是其与访问的磁道,即在当前磁道之外,又是最近的。

这样磁头逐渐的从外向里移动,直至再无更里面的磁道要访问,从而避免了出饥饿的情况。

3.2先来先服务模块3.2.1 功能实现磁盘调度的先来先服务调度。

3.2.2 数据结构用链表来存储输入的数据,即各待访问的磁道。

然后遍历这个链表,依次对这个链表进行访问,从而实现先来先服务调度。

3.2.3 算法void fcfs(Node *head,int c,int f) //先来先服务算法{void print(Node *);Node *l; //,*m,*n;float num=0;l=head->next;for(int i=0;i<c;i++){num+=abs(l->data-f);f=l->data;l=l->next;}num=num/c;cout<<"先来先服务的寻道顺序是:"<<endl;print(head);cout<<"平均寻道长度:"<<num<<endl;}3.3最短寻道时间优先模块3.3.1功能实现磁盘调度的最短寻道时间调度。

(金融保险)进程调度算法磁盘调度算法银行家算法操作系统课程设

(金融保险)进程调度算法磁盘调度算法银行家算法操作系统课程设

(金融保险)进程调度算法磁盘调度算法银行家算法操作系统课程设操作系统课程设计说明书学院名称:专业班级:姓名:学号:2013年1月1日评分标准优秀:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,程序完全实现设计要求,独立完成;良好:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;程序完全实现设计要求,独立完成,但存在少量错误;中等:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确;及格:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本正确;不及格:没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确。

没有独立完成,抄袭或雷同。

成绩评定为:。

指导教师:年月日目录一.进程调度算法4-----23页二.银行家算法24-----34页三.磁盘调度算法35------46页进程调度算法1.设计目的在多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略决定哪个进程优先占有处理机,因而必须解决进程调度的问题,进程调度算法就是要解决进程调度的问题。

2.任务及要求2.1设计任务设计程序来模拟进程的四种调度算法,模拟实现调度的基本功能。

2.2设计要求产生的各种随机数要加以限制,如alltime限制在40以内的整数。

进程的数量n不能取值过大。

3.算法及数据结构3.1算法的总体思想(流程)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。

(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。

(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。

(4)进程总共需要运行时间Alltime,利用随机函数产生。

(5)进程状态,0:就绪态;1:运行态;2:阻塞态。

利用链表将数据连接起来,实现数据的存储。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统课程设计说明书学院名称:专业班级:姓名:学号:2013年1月1日评分标准优秀:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确,程序完全实现设计要求,独立完成;良好:有完整的符合标准的文档,文档有条理、文笔通顺,格式正确;程序完全实现设计要求,独立完成,但存在少量错误;中等:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案正确;及格:有完整的符合标准的文档,有基本实现设计方案的软件,设计方案基本正确;不及格:没有完整的符合标准的文档,软件没有基本实现设计方案,设计方案不正确。

没有独立完成,抄袭或雷同。

成绩评定为:。

指导教师:年月日目录一.进程调度算法4-----23 页二.银行家算法24-----34 页三.磁盘调度算法35------46页进程调度算法1.设计目的在多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略决定哪个进程优先占有处理机,因而必须解决进程调度的问题,进程调度算法就是要解决进程调度的问题。

2. 任务及要求2.1 设计任务设计程序来模拟进程的四种调度算法,模拟实现调度的基本功能。

2.2 设计要求产生的各种随机数要加以限制,如alltime限制在40以内的整数。

进程的数量n不能取值过大。

3. 算法及数据结构3.1算法的总体思想(流程)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程优先数ID,其中0为闲逛进程,用户进程的标识数为1,2,3…。

(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,优先数越大,优先级越高。

(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。

(4)进程总共需要运行时间Alltime,利用随机函数产生。

(5)进程状态,0:就绪态;1:运行态;2:阻塞态。

利用链表将数据连接起来,实现数据的存储。

3.2 链表模块3.2.1 功能实现链表的存储功能,以及实现存储的查找功能。

3.2.2 数据结构构造链表这个数据结构,以及链表的初始化,链表的插入,链表的长度。

3.2.3算法typedef struct{ElemType *elem;int length;int listsize;}SqList;Status InitList(SqList &l){l.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!l.elem) exit(OVERFLOW);l.length=0;l.listsize=LIST_INIT_SIZE;return OK;}int ListLength(SqList l){return(l.length);}Status ListInsert_Sq(SqList &L,int i, ElemType e){//在顺序表L的第i个位置前插入元素e,i的合法值为1..L.length+1if(i<1||i>L.length+1)return ERROR;if(L.length>=L.listsize){ElemType*newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));if(!newbase) exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}ElemType *q=&L.elem[i-1], *p=&L.elem[L.length-1];while(p>=q){*(p+1)=*p; --p;} //插入位置后的元素右移*q=e;++L.length;return OK;}Status GetElem(SqList L,int i,ElemType &e){if(i<=0||i>L.length)return ERROR;elsee=*(L.elem+i-1);return OK;}void Outputlist(SqList &L){if(0==L.length)printf("空集!");elsefor(int i=0;i<L.length;++i){printf("%c",*(L.elem+i));}}3.3 主函数模块3.3.1功能实现进程调度的四种算法,以及人机交互的菜单。

3.3.2 数据结构主要包括五个部分,分别是四种算法,和进程的输入和菜单部分,功能分别实现。

3.3.3算法void main(){for(1;;){int number;PCB pcb[100] ;srand(time(0));int max;int ppp[100];int time=0;int time1;int m;int a[100];a[0]=0;printf("\n*************************进程调度算法的模拟***************************\n");printf("* 1.先到先服务调度 2.最短作业优先调度*\n");printf("* 3.优先权调度 4.轮转发调度*\n");printf("******************************************************* ***************");printf("\n请选择调度的方法: ");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误! 重新输入: ");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误! 重新输入: ");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误! 重新输入: ");scanf("%d",&m);if(m!=1&&m!=2&&m!=3&&m!=4){printf("输入错误! 重新输入: ");scanf("%d",&m);}}}}printf("请输入进程的个数: ");scanf("%d",&number);printf("\n开始时用户进程均为就绪状态,运行时间随机产生\n\n"); SqList sq;InitList(sq);for(int r=0;r<number;r++){pcb[r].CPUtime=0;}for(int i=0;i<number;i++){pcb[i].Priority=rand()%50;while(1){if(pcb[i].Priority<20){pcb[i].Priority=rand()%50;}elsebreak;}pcb[i].Alltime=rand()%40;while(1){if(pcb[i].Alltime<10){pcb[i].Alltime=rand()%40;}elsebreak;}}for(int j=0;j<number;j++){ListLength(sq);ListInsert_Sq(sq,ListLength(sq),pcb[i] );}if(m==1){printf("\n****************程序演示开始*****************\n");int coun=0; //计数变量int wait[100]; //等待时间数组wait[0]=0;int Allwait=0;for(int i1=0;i1<number;i1++){printf("下面开始调用第%d个进程;\n",i1);printf("开始时间为%d 执行时间为%d\n",coun,pcb[i1].Alltime);coun+=pcb[i1].Alltime;if(i1!=0){wait[i1]=pcb[i1-1].Alltime+wait[i1-1];}}for(int i2=0;i2<number;i2++){Allwait=wait[i2]+Allwait;}printf("平均等待时间为:%d\n",Allwait/number);}if(m==2){int min=pcb[0].Alltime;int wait1[100];wait1[0]=0;int in=0;int coun1=0;printf("*****************最短作业优先调度!********************\n");cout<<"进程所需时间分别是:"<<endl;for(i=0;i<number;i++){cout<<pcb[i].Alltime<<endl;}printf("进程调度的顺序为: ");for(i=0;i<number;i++){min=50;for(j=0;j<number;j++){if(pcb[j].Alltime<min){min=pcb[j].Alltime;in=j;}}printf("%d ",in+1);pcb[in].Alltime+=50;}}if(m==3){printf("ID 优先级运行总时间进程状态\n");for(int k=0; k<number; k++){printf("%d %d %d 就绪\n",k+1, pcb[k].Priority, pcb[k].Alltime);}printf("\n***********************程序调度演示开始***********************\n");for(int f=1;f<1000;f++){int count=0,count1=0;for(int i=0;i<number;i++){ppp[i]=pcb[i].Priority;if(pcb[i].Alltime!=0){count1++;}}count1--;time=time+count1*4;max=Max(ppp,number);if(pcb[max].Alltime==0){ppp[max]=-1;pcb[max].Priority=-1;max=Max(ppp,number);}pcb[max].Priority-=4;pcb[max].Alltime-=4;pcb[max].CPUtime+=4;if(pcb[max].Alltime<=0){pcb[max].Alltime=0;}for(int w=0;w<number;w++){if(pcb[w].Alltime==0){ppp[w]=-1;pcb[w].Priority=-1;}}for(int e=0; e<number;e++){pcb[e].Priority++;}printf("\n##########第%d个进程正在执行!##########\n",max+1);printf("\n第%d次调度结束,运行结果为:\n\n",f);printf("ID 优先级需要总时间执行时间\n");for(int k=0; k<number; k++){printf("%d %d %d %d \n",k+1,pcb[k].Priority, pcb[k].Alltime,pcb[k].CPUtime);}for(int l=0;l<number;l++){if(pcb[l].Alltime==0)count++;}if(count==number){break;}}time1=time/number;printf("\n*****************************用户进程全部执行完毕!******************************");printf("\n\n平均等待时间是: ");printf("%d\n\n",time1);}if(m==4){printf("ID 运行总时间进程状态\n");for(int k=0; k<number; k++){printf("%d %d 就绪\n",k+1, pcb[k].Alltime);}printf("\n***********************程序调度演示开始***********************\n");for(int f=1;f<1000;f++){int count=0;for(i=0;i<number;i++){if(pcb[i].Alltime==0){continue;}if(pcb[i].Alltime>0){pcb[i].Alltime-=4;pcb[i].CPUtime+=4;}if(pcb[i].Alltime<0)pcb[i].Alltime=0;}/////////////////////////////////////////////////////printf("\n##########第%d个进程正在执行!##########\n",i+1);printf("\n第%d次调度结束,运行结果为:\n\n",f);printf("ID 需要时间执行时间\n");for(int k=0; k<number; k++){printf("%d %d %d \n",k+1, pcb[k].Alltime,pcb[k].CPUtime);}////////////////////////////////////////////////////}for(int l=0;l<number;l++){if(pcb[l].Alltime==0)count++;}if(count==number){break;}printf("\n*****************************用户进程全部执行完毕!******************************");}}}4. 实验结果及分析4.1 实验结果先到先服务算法的实验结果如下:最短作业优先调度的实验结果如下:优先权调度算法的实验结果如下:轮转法调度的实验结果如下:4.2 结果分析本次试验基本实现了进程调度的四种算法,每一种算法都能模拟出算法的具体过程。

相关文档
最新文档