ImageVerifierCode 换一换
格式:DOCX , 页数:45 ,大小:104.82KB ,
资源ID:12547922      下载积分:5 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-12547922.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料.docx)为本站会员(b****8)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

进程调度存储器管理银行家算法磁盘调度操作系统实验报告资料.docx

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

2、eady、running、finish3) 进程需要的CPU时间以时间片为单位确定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 Maxheap

3、 T *heap; int heapsize, lenth;public: Maxheap(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 (

4、i+1)/ 2-1;/注意地址的转换,最后还要减去1 int Lchild(int i) return 2 * (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 (la

5、rgest != i) swap(heaplargest, heapi), Maxheapify(largest); void swap(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+) co

6、ut heapi.priority; int heapextractmax() if (lenth=0) return -1; T max; max = heap0; heap0 = 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 Cirquene T asize; int

7、 front,rear;public: Cirquene()front=rear=size-1; Cirquene() void Enquene(T &e)if(rear+1)%size=front) throw上溢; rear=(rear+1)%size; arear=e; int Dequene()if(rear=size) throw下溢; if (Empty() return -1; else front = (front + 1) % size; return afront.task; int Getfront() return front;int Empty() if (front

8、 = rear) return 1;return 0;void print() datatype e = arear; int i; do i = e.pre; cout e.x t e.y endl; e = ai; while (i!=-1);/注意这边i的取值 ;#endif#include#include Maxheap.h#includeQuene.husing namespace std;enum State/enum变量后用逗号隔开! ready, exe, blo, fin,;/任务状态struct PCB/优先级队列通过堆排序实现 int task;/任务 int prior

9、ity;/优先级 int AexeTime;/已经运行时间 int SexeTime;/剩余运行时间 int blocktime;/阻塞时间 State state;/任务状态;int checkstate(PCB *program) int i;/检查是否所有程序都已运行结束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,

10、alltime = 0,num=0,k,time=0; while (!checkstate(program) if (num 5) for (m = 0; m 5; m+) if (alltime = Arrtimem) Test.insert(programm), cout 进程 m + 1 到达 endl, num+, programm.state = ready;/到达到达时间 进入就绪队列 if(alltime=0|k=-1) k= Test.heapextractmax();/在无进程运行 后序有进程进入时应该抛出! alltime+, time+; if (k = -1) cou

11、t 从 alltime -1 到 alltime 单位时间无进程运行 endl; if (k != -1) programk.state = exe, programk.AexeTime+, programk.SexeTime-, programk.priority-=3,/优先级减3 cout 从 alltime-1 到 alltime 单位时间 k + 1 进程运行 endl; if (programk.SexeTime = 0) programk.state = fin, time = 0, cout 进程 k + 1 在 alltime 单位时间运行结束 endl, k = Test.

12、heapextractmax(); if (programk.SexeTime != 0&time=quantum) programk.state = ready, Test.insert(programk), time = 0, k = Test.heapextractmax(); void RR(PCB *program, int i, int Arrtime, int quantum)/优先级列表用队列实现 int m, k, num=0, alltime=0,time=0; Cirquene priority; while (!checkstate(program) if(alltim

13、e=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 & numi) for (m = 0; m i; m+)/先判断下一个时刻是否有进程到达 原因是在一个进程运行结束 同时另外一个进程到达 到达的那个进程

14、应该首先进入就绪队列 if (alltime = Arrtimem) priority.Enquene(programm), cout 进程 m + 1 到达 endl, num+, programm.state = ready; if (k = -1) cout 从 alltime-1 到 alltime 单位时间无进程运行 endl; else programk.state = exe, programk.AexeTime+, programk.SexeTime-; cout 从 alltime -1 到 alltime 单位时间 k + 1 进程运行 endl; if (programk

15、.SexeTime = 0) programk.state = fin, time = 0, cout 进程 k + 1 在 alltime 单位时间运行结束 endl, k = priority.Dequene(); if (time = quantum) if (programk.SexeTime != 0) programk.state = ready, priority.Enquene(programk), k = priority.Dequene(),time=0; int main() int task5 = 0,1,2,3,4 ;/任务 int ExeTime5 = 5, 5,

16、3, 1, 3;/运行时间 int priority5 = 2,5,2,4,3 ;/优先级 int ArrTime5 = 4, 3, 2,0,4 ;/到达时间 PCB program5,program25; int i; for (i = 0; i5; i+) programi.task = taski,program2i.task = taski ; programi.priority = priorityi,program2i.priority = priorityi; programi.AexeTime = 0, program2i.AexeTime = 0; programi.Sexe

17、Time = ExeTimei, program2i.SexeTime = ExeTimei; programi.blocktime = 0, program2i.blocktime = 0; programi.state = blo,program2i.state = blo ; /初始化pcb*/ Maxheap Test(5); int quantum=2;/时间片为2 cout 优先权法: endl; PSA(Test, program, ArrTime,quantum); cout 轮转调度法: endl;RR(program2, 5, ArrTime, quantum); syst

18、em(pause); return 0;五、实验分析与实现1.轮转法调度,具有先进先出的特点,所以利用队列实现2.优先级调度算法具有优先级动态变化的特点,每一次进行优先级要排序。所以优先级队列通过堆来实现六、实验过程中的问题及对应思考动态优先级调度算法:这种调度算法根据进程的资源需求来动态地分配进程的优先级,其目的就是在资源分配和调度时有更大的灵活性.在实时系统中,最早期限优先算法(EDF)算法是使用最多的一种动态优先级调度算法,该算法给就绪队列中的各个进程根据它们的截止期限(Deadline)来分配优先级,具有最近的截止期限的进程具有最高的优先级.轮转法:系统将所有就绪进程按FIFO规则排队

19、,按一定的时间间隔把处理机分配给队列中的进程。这样,就绪队列中所有进程均可获得一个时间片的处理机而运行。 虽然实验原理比较简单,但是在编写代码的过程中遇到了不少的问题,在两个小时之内已经完成 的大体代码的编写,但是之中存在不少的问题,导致了用了差不多四个小时的时间去调试才把它弄好,这主要归咎于在开始设计代码的不太合理,在后期使得代码结构有些混乱,使得调试更加的麻烦,以及对编程的不熟悉。通过这个实验不仅使我对进程的调度算法有了更深的认识,使得理论知识得到的实践,也使我的编程能力得到了进一步提高。实验二 银行家算法一、实验目的死锁会引起计算机工作僵死,因此操作系统中必须防止。本实验的目的在于让学生

20、独立的使用高级语言编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生,以加深对课堂上所讲授的知识的理解。二、实验内容银行家算法三、实验要求设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源。系统能显示各个进程申请和释放资源,以及系统动态分配资源的过程,便于用户观察和分析;四、实验过程#includeusing namespace std;void Matrixminus(int a10,int b10,int c10,int m,int n) int i, k; for (i = 0; i

21、 m; i+) for (k = 0; k n; k+) cik = aik - bik;void Initialize(int a10, int m, int n) int c, b; for (c = 0; c m; c+) for (b = 0; b acb;void Add(int a, int b10, int m, int n) int i; for (i = 0; i n; i+) ai = ai + bmi;void Matrixprint(int a10, int m, int n) int i, k; for (k = 0; k m; k+) for (i = 0; i n

22、; i+) cout aki;int Compare(int work,int need10,int m,int n) int i; for (i = 0; i worki) return 0; return 1;int Compare2(int request10, int available, int m, int n) int i; for (i = 0; i n; i+) if (availableirequestmi) return 0; return 1; int Check(int m, int n, int Available10,int Max1010,int Allocat

23、ion1010, int Need1010) int *Work; int *Finish; Finish = new intm; Work = new intn; int i,k; for (i = 0; i m; i+) Finishi = 0; for (i = 0; i n; i+) Worki = Availablei; for (k = 0; k m;k+) for (i = 0; i m; i+) if (Compare(Work, Need, i, n) & Finishi = 0) Add(Work, Allocation, i, n), Finishi = 1; for (

24、k = 0; k m; k+) if (Finishk = 0) return 0; return 1;void Bankeralgorithm(int n,int m, int Available, int Max10, int Allocation10, int Need10,int request1010,int k) int a; for (a = 0; a Needka) return; while (!Compare2(request,Available , k, n) for (a = 0; a n;a+) Availablea = Availablea - requestka;

25、 Allocationka = Allocationka + requestka; Needka = Needka - requestka; if (!Check(m, n, Available, Max, Allocation, Need) cout 分配失败 endl; for (a = 0; a n; a+) Availablea = Availablea +requestka; Allocationka = Allocationka - requestka; Needka = Needka + requestka; else cout 分配成功 endl; int main() int Available10,Max1010,Allocation1010,Need1010,request1010; int m, n; cout 请输入进程个数和资源种类的个数 m n; cout 请输入可分配资源 endl; int i; for (i = 0; i Availablei; cout 请输入进程最大所需资源 endl; Initialize(Max, m, n); cout 请输入已分配资源 endl; Initialize(Allocation, m, n); int k; cout 请输入要申请资源的进程 k; cout 请输入要分配的资源的数量endl; for

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2