c语言非指针方法模拟进程优先权,进程调度算法模拟实验报告.doc

1cbb08320638fa5f411de9423ba0a513.gif进程调度算法模拟实验报告.doc

文档编号:344514

文档页数:14

上传时间: 2018-08-03

文档级别:精品资源

文档类型:doc

文档大小:79.00KB

计算机综合实验报告 课程名称 操作系统 实验学期 至 学年 第 学期 学生所在系部 年级 专业班级 学生姓名 学号 任课教师 实验成绩 信息科学与技术系 制 实验报告须知 1 学生上交实验报告时,必须为打印稿( A4 纸 )。页面空间不够,可以顺延。 2 学生应该填写的内容包括封面相关栏目、实验地点、时间、目的、设备环境、内容、结果及分析等。 3 教师应该填写的内容包括实验成绩、教师评价等。 操作系统 课程实验报告 实验室 小型机实验室 二教 217 2010 年 5 月 4 日 实验题目 进程调度算法模拟 一、实验目的 1 掌握处理机调度及其实现; 2 掌握进程状态及其状态转换; 3 掌握进程控制块 PCB 及其作用 二 、设备与环境 1. 硬件设备 PC 机或终端一台 2. 软件环境 (说明安装的操作系统环境,如 Windows 操作系统或者 Linux操作系统, 介绍相应的开发工具,如 vs或 vi,gcc,gdb, C等相关的开发工具或平台) 。 三、实验内容 1用 C语言实现采用先来先服务进程调度算法对 10 个进程的调度。 2 用 C语言实现采用高优先权进程调度算法对 10个进程的调度。 3用 C语言实现采用短作业优先进程调度算法对 10 个进程的调度。 四、实验结果及分析 1.实验步骤 根据要求大致确定需要用到 的函数以及实现方法 写出三个文件的代码 编译,修改语法错误 链接执行,观察结果,查看有无逻辑错误 2.相关数据结构定义 typedef struct node char nameMAXSIZE;//进程名称 int state;//0表示进程处于就绪态, 1表示进程处于等待态 int prio;//优先级 int time;//需要在 cpu上处理的时间 struct node* next;//链指针 PCB; 3.实验代码(要求加注释) void insert1PCB *p,PCB *queue PCB *q; qqueue; whileq-next qq-next; q-nextp; p-nextNULL; //先来先服务把进程 p插入就绪或等待队列的尾部 void creat1int n PCB *p; int i; readynew PCB; ready-nextNULL; waitnew PCB; wait-nextNULL;//带头结点的队列 runNULL; fori1;ip-name; coutstaterand2; coutstate; coutstate0 insert1p,ready;//当 state为 0时,插入到就绪队列中 else insert1p,wait;//否则插入到等待队列中 void runing PCB *p; cout namenext coutnext;p;pp-next coutnamenext coutnext;p;pp-next coutnamenext||wait-next ifready-next runready-next; ready-nextrun-next; runing; state_changerand2; coutnext pwait-next; wait-nextp-next; insert1p,ready; runNULL; coutnext; whileq qq-next; ifq preq-nextp; p-nextNULL; else p-nextq; preq-nextp; //把 p插入优先级队列中,队列仍然按照优先级高低排列 void creat2int n srandinttime0; PCB *p; runNULL; forint i0;ip-name; coutstaterand2; coutstate; coutpriorand51; coutprio; couttimerand101; couttime; coutstate0 insert2p,ready;//当 state为 0时,插入到就绪队列中 else insert1p,wait;//否则插入到等待队列中 void FPFint n srandinttime0; int wait_state_change,run_state_change,cpu_timerand51; //cpu_time表示一次在 cpu 上的执行时间 PCB *p; coutnext||wait-next ifready-next runready-next; ready-nextrun-next; runing; wait_state_changerand2; coutnext pwait-next; wait-nextp-next; insert1p,ready; ifrun run_state_changerand2; couttime0 insert1run,ready; else insert1run,wait; else runNULL; coutnext; whileq qq-next; ifq preq-nextp; p-nextNULL; else p-nextq; preq-nextp; //把 p插入作业按时间排列的队列中,队列仍然按照时间长短排列 void creat3int n srandinttime0; PCB *p; runNULL; forint i0;ip-name; coutstaterand2; coutstate; couttimerand101; couttime; coutstate0 insert3p,ready;//当 state为 0时,插入到就绪队列中 else insert1p,wait;//否则插入到等待队列中 void SPFint n srandinttime0; int state_change; PCB *p; coutnext||wait-next ifready-next runready-next; ready-nextrun-next; runing; state_changerand2; coutnext pwait-next; wait-nextp-next; insert1p,ready; runNULL; coutn; coutendl; FCFSn; FPFn; SPFn; 4.实验结果分析 先来先服务 FCFS进程调度算法采用非抢占方式,实现方法比较简单,但 使短作业和实时性要求较高的作业等待的时间过长 ;高优先级,此处采用抢占方式,另外还加入了时间片轮转方法; 短作业优先方法是一种非抢占方式, 没有考虑长作业和实时任务的要求 。 五、 实验心得 通过这次实验,我在以前学过的知识的基础上有了提高,学到了很多新知识 比如 将用户作业和就绪进程按提交的顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度。 调度时从后备队列中选择若干优先权最高的个作业进入内存;或从就绪队列中选择优先权最高的进程,将处理机分配给它。调度时根据估计的运行时间首先调度运行占用CPU 时间 最短的作业或进程 教师 评定项目 A B C D 评定项目 A B C D 评价 算法正确 实验结果正确 程序结构合理 报告规范 综合评定等级

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值