进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)

上传人:人*** 文档编号:475693059 上传时间:2023-05-06 格式:DOC 页数:26 大小:167.50KB
返回 下载 相关 举报
进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)_第1页
第1页 / 共26页
进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)_第2页
第2页 / 共26页
进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)_第3页
第3页 / 共26页
进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)_第4页
第4页 / 共26页
进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)_第5页
第5页 / 共26页
点击查看更多>>
资源描述

《进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)》由会员分享,可在线阅读,更多相关《进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料(DOC 26页)(26页珍藏版)》请在金锄头文库上搜索。

1、江苏科技大学操作系统实验报告(2015/2016学年第2学期) 课程名称: 操作系统 指导教师: 实验地点: 西校区图书馆计算机机房 学生姓名: 学生学号: 院 系: 计算机科学与工程学院 专 业: 计算机科学与技术 2016年 5 月 15 日实验一 进程调度一、实验目的多道程序设计中,经常是若干个进程同时处于就绪状态,必须依照某种策略来决定那个进程优先占有处理机。因而引起进程调度。本实验模拟在单处理机情况下的处理机调度问题,加深对进程调度的理解。二、实验内容1优先权法、轮转法简化假设1)进程为计算型的(无I/O)2)进程状态:ready、running、finish3)进程需要的CPU时间

2、以时间片为单位确定2算法描述1)优先权法动态优先权当前运行进程用完时间片后,其优先权减去一个常数。2)轮转法三、实验要求1产生的各种随机数的取值范围加以限制,如所需的CPU时间限制在120之间。2进程数n不要太大通常取48个3使用动态数据结构4独立编程5二种调度算法四、实验过程/秦魏编写 要拷贝使用 无(fa)偿(ge)使(hong)用(bao)#ifndef Maxpriority_H#define Maxpriority_H#define arrayLenth 100;templateclass MaxheapT *heap;int heapsize, lenth;public:Maxhe

3、ap(int n) lenth = 0;heapsize = n;heap = new Theapsize;Maxheap(T *maxheap, int n)if (n 0)return;lenth = n;heapsize = n;heap = new Theapsize;int i;for (i = 0; i heapsize; i+)heapi = maxheapi;create();Maxheap() deleteheap; int Parent(int i)return (i+1)/ 2-1;/注意地址的转换,最后还要减去1int Lchild(int i) return 2 *

4、(i+1)-1; int Rchild(int i) return 2 * i + 2; void Maxheapify(int i)int l, r;l = Lchild(i);r = Rchild(i);int largest;if (l heapi.priority)/第一个条件,起到一个判断是否为叶子节点的作用largest = l;else largest = i;if (r heaplargest.priority)largest = r;if (largest != i) swap(heaplargest, heapi),Maxheapify(largest);void swap

5、(T &a, T &b)T store;store = a;a = b;b = store;void create()int i;for (i = lenth / 2-1; i = 0; i-)Maxheapify(i);void insert(T &element) lenth+; heaplenth-1 = element;create();void print()int i;for (i = 0; i lenth; i+)cout heapi.priority;int heapextractmax()if (lenth=0) return -1;T max;max = heap0;hea

6、p0 = heaplenth - 1;lenth-;Maxheapify(0);return max.task;int empty() if (lenth = 0) return 1;return 0;#endif#ifndef Quene_H#define Quene_H#define size 1000/队列先进先出,从队尾进,从对头出templateclass CirqueneT asize;int front,rear;public:Cirquene()front=rear=size-1;Cirquene() void Enquene(T &e)if(rear+1)%size=fron

7、t) throw上溢;rear=(rear+1)%size;arear=e;int Dequene()if(rear=size) throw下溢;if (Empty() return -1;elsefront = (front + 1) % size;return afront.task;int Getfront()return front;int Empty()if (front = rear) return 1;return 0;void print()datatype e = arear;int i;doi = e.pre;cout e.x t e.y endl;e = ai; whil

8、e (i!=-1);/注意这边i的取值;#endif#include#include Maxheap.h#includeQuene.husing namespace std;enum State/enum变量后用逗号隔开!ready,exe,blo,fin,;/任务状态struct PCB/优先级队列通过堆排序实现int task;/任务int priority;/优先级int AexeTime;/已经运行时间int SexeTime;/剩余运行时间int blocktime;/阻塞时间State state;/任务状态;int checkstate(PCB *program) int i;/

9、检查是否所有程序都已运行结束for (i = 0; i 5; i+)if (programi.state != fin) return 0;return 1;void PSA(Maxheap Test,PCB *program,int Arrtime,int quantum )/1个单位时间检查一次 用堆排序实现优先级队列int m = 0, alltime = 0,num=0,k,time=0;while (!checkstate(program)if (num 5)for (m = 0; m 5; m+)if (alltime = Arrtimem) Test.insert(program

10、m),cout 进程 m + 1 到达 endl,num+, programm.state = ready;/到达到达时间 进入就绪队列if(alltime=0|k=-1)k= Test.heapextractmax();/在无进程运行 后序有进程进入时应该抛出!alltime+, time+;if (k = -1) cout 从 alltime -1 到 alltime 单位时间无进程运行 endl;if (k != -1)programk.state = exe,programk.AexeTime+,programk.SexeTime-,programk.priority-=3,/优先级减

11、3cout 从 alltime-1 到 alltime 单位时间 k + 1 进程运行 endl;if (programk.SexeTime = 0) programk.state = fin, time = 0,cout 进程 k + 1 在 alltime 单位时间运行结束 endl,k = Test.heapextractmax();if (programk.SexeTime != 0&time=quantum) programk.state = ready,Test.insert(programk), time = 0, k = Test.heapextractmax();void R

12、R(PCB *program, int i, int Arrtime, int quantum)/优先级列表用队列实现int m, k, num=0, alltime=0,time=0;Cirquene priority;while (!checkstate(program)if(alltime=0)for (m = 0; m i; m+)if (alltime = Arrtimem) priority.Enquene(programm),cout 进程 m + 1 到达 endl,num+, programm.state = ready;/找到第一个到达的进程if(alltime=0|k=-1) k = priority.Dequene();/开始调度alltime+, time+;if (alltime != 0 & n

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号