




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件设计文档2014操作系统小学期实训XX公司版权所有 不得复制文档变更记录学号:2011*姓名:李*班级:2011级软件工程*班 一前言41.编写目的42.背景43.定义54.任务提取55.实训过程66.参考资料6二总体设计61.需求规定62. 运行规定73.基本设计74.处理流程85.功能需求与程序的关系86.人工处理过程97.尚未解决的问题9三运行设计91.运行模块组合92.运行控制93.运行时间9四系统数据结构设计101.逻辑结构设计要点102.数据结构与程序的关系11五程序设计说明111.程序描述112.功能123.性能124.算法135.流程逻辑156.接口177.存储分配188.
2、结果示例189.测试计划2610.尚未解决的问题2611.源码附录26一前言1.编写目的此设计文档为配合软件工程系夏季小学期操作系统实训,对于实训项目进行分析设计,从而开展编码模拟。2.背景2014年夏季小学期开展的操作系统实训,旨在提高学生查阅资料的能力、分析设计能力及编码能力。要求完成对于操作系统原理上的简单模拟。实训具体要求:本设计的目的是使学生熟悉内存管理系统的设计方法;加深对所学各种内存管理方案的了解;要求采用一些常用的内存分配算法,设计一个内存管理模拟系统并调试运行,模拟环境应当尽量接近真实。3.定义本实训对于操作系统的定义为操作系统功能模拟分项设计以及操作系统整体设计。操作系统的
3、分项功能包括进程管理系统设计,内存管理系统设计,文件管理系统设计,同步算法跟踪与验证系统设计,死锁避免的模拟,磁盘调度系统设计等。操作系统整体设计要求将分项设计的部分或者整体结合起来构成一个小型的操作系统功能演示系统。4.任务提取1) 了解内存管理方案2) 了解死锁避免原理及成因3) 了解进程管理方案4) 掌握常用内存分配算法5) 掌握银行家算法6) 掌握几种常见的进程管理算法7) 设计并实现内存管理系统8) 设计银行家算法的逻辑及代码实现5.实训过程1) 查阅资料:核心问题是内存管理方案以及内存分配算法2) 设计系统:根据所学课程结合查询结果设计内存管理系统3) 编码模拟:采用一种编程语言实
4、现上述模拟4) 总结反思:总结实训过程,查找自己的不足并改进6.参考资料l 操作系统概念 (操作系统恐龙书)(Operating System Concepts)英文第七版原版(作者: Abraham Silberschatz / Greg Gagne / Peter B. Galvin );l 计算机操作系统(修订版)(汤子瀛),西安交大出版社;二总体设计1.需求规定本实训规定每人至少实现3个分项模块设计,故选定内存管理系统设计,死锁避免的模拟,进程管理的模拟。主要关注内存的分配方式,银行家算法以及进程管理的资源分配方式。2. 运行规定能够基本初步的模拟算法的运行原理,采用VS2010作为开
5、发工具,采用C+作为开发语言,项目能够正常运行并实现分项模块间集成与运行。3.基本设计死锁避免部分:死锁避免算法。操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。内存管理部分:操作系统的内存管理,是指软件运行时对计算
6、机内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。 本设计采用活动分区方案,能处理内存回收的时候上下邻合并的问题;对随机出现的进程申请内存,程序能判断是否能分配;允许用户手动分配内存并自动判断是否有误;手动释放任意地址的内存块;同时输出内存使用情况和空闲情况。进程管理部分:在多道处理程序运行环境下,进程数目一般多于处理机数目,使得进程要通过竞争来使用处理机。这就要求系统能按照某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机的任务是由金城调度程序完成的。一个进程被创建后,系统为了便于对进程进行管理,将系统中的所有进程按
7、照其状态,将其组成不同的进程队列。于是系统中有运行进程队列、就绪队列和各种事件的进程等待队列。进程调度的功能就是从就绪队列中挑选一个进程到处理机上运行。进程调度的算法有多种,常用的有优先级调度算法、先来先服务算法、时间片轮转算法。4.处理流程以内存分配方式为例,从用户界面输入相应的要求和分配方式,通过不同分配方式的算法计算出分配结果并返回相应的内存状态。5.功能需求与程序的关系参见功能需求的三个分项设计要求,则主要的实现方式是模拟。限制于软件和硬件平台,本实训采用VS2010和C+来实现操作系统基本原理的模拟。6.人工处理过程进行系统的分析设计,提取功能模块,设计核心功能模块,编码实现核心模块
8、的模拟。7.尚未解决的问题界面较为粗糙,未实现更为人性化的功能;内存分配算法较少。编码过程化,系统层次不突出。三运行设计1.运行模块组合将系统分成三个主要的功能模块:内存管理与分配模块、死锁避免模块、进程管理系统的模拟。将所有的模块以及类设计部署在一个项目中,这样不同的模块之间可以配合演示,从而实现多模块功能的集成。2.运行控制运行控制在项目运行中由人为的添加代码与注释代码进行模拟。在项目的执行过程中可以由用户进行自由选择以及终止程序3.运行时间采用优良的设计算法,可以通过反复的比较,从而确定用时最短最高效的设计算法,尽量减少运行时间和空间的开支。四系统数据结构设计1.逻辑结构设计要点结构体b
9、lockArea记为内存的分配单位,内部属性包括分区号ID、分区大小size、分区地址address、分配状态state。双线链表LinkList用来记录各内存块之间的联系以及提供遍历线索。链表元素data属性为blockArea类型,各元素均含有前驱指针和后继指针。#define MAX_length 32767 /最大内存空间为32767KB#define M 4#define N 4/数据结构声明部分typedef struct blockAreaint ID; /分区号long size; /分区大小long address; /分区地址int state; /状态ElemType;t
10、ypedef struct LinkNode ElemType data; struct LinkNode *prior; /前趋指针struct LinkNode *next; /后继指针LinkNode,*LinkList;/函数声明部分int distribute(int);/内存分配int free(int); /内存回收int FirFit(int,int);/首次适应算法int BestFit(int,int); /最佳适应算法int ManFit(int,int); /手动分配void display();/查看分配int mem();int InitMem();/初始化模拟内存
11、int TestSecu();#define FOS#endif2.数据结构与程序的关系在程序中使用C或者C+对内存数据进行访问。五程序设计说明1.程序描述1)该程序是操作系统核心模块管理功能的简单模拟。通过该程序的演示,用户可以模拟计算机系统的内存管理以及不同种类的分配方式,体会虚拟内存的实际作用。2) 深入分析死锁产生的必要条件并实现银行家算法。3) 通过各种算法动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机2.功能1)能够加深自己对于各种内存管理方案的理解,提高自己对操作系统内存方案的设计能力。2)掌握死锁发生原理和解决死锁问题的方案,利用一种程序设计语言模拟实现利用银行
12、家算法实现死锁避免。3)要求系统能按照某种算法,动态地把处理机分配给就绪队列中的一个进程,使之运行,分配处理机。通过编程一方面加深对原理的理解,另一方面提高学生根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。3. 性能由于规模和时间限制,本程序在性能方面未做优化4.算法1) 首次适应算法:基本思想是从空闲分区表的第一个表目起查找该表,把最先能够满足要求的空闲区分配给作业,这种方法目的在于减少查找时间。为适应这种算法,空闲分区表(空闲区链)中的空闲分区要按地址由低到高进行排序。但本实验中未实现空闲分区排序功能,故按内存地址顺序由低到高依次查
13、找,找到满足要求的内存区域即进行分配。2) 最佳适应算法:它从全部空闲区中找出能满足作业要求的、且大小最小的空闲分区,这种方法能使碎片尽量小。为适应此算法,空闲分区表(空闲区链)中的空闲分区要按从小到大进行排序,自表头开始查找到第一个满足要求的自由分区分配。该算法保留大的空闲区,但造成许多小的空闲区。3) 银行家算法:(1)设置两个工作向量:Work=AVAILABLE;FINISH(2)从进程集合中找到一个满足下述条件的进程,FINISH=false;NEED<=Work;如找到,执行(3);否则,执行(4)(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+
14、ALLOCATION;Finish=true;GOTO 2(4) 如所有的进程Finish= true,则表示安全;否则系统不安全最高优先级优先调度算法:动态优先数是指在进程创建时先确定一个初始优先数, 以后在进程运行中随着进程特性的改变不断修改优先数,这样,由于开始优先数很低而得不到CPU的进程,就能因为等待时间的增长而优先数变为最高而得到CPU运行。例如:在进程获得一次CPU后就将其优先数减少3。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。4) 简单轮转法调度算法:所有就绪进程按 FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。即将CPU的处
15、理时间划分成一个个相同的时间片,就绪队列的诸进程轮流运行一个时间片。当一个时间片结束时,如果运行进程用完它的时间片后还未完成,就强迫运行机制进程让出CPU,就把它送回到就绪队列的末尾,等待下一次调度。同时,进程调度又去选择就绪队列中的队首进程,分配给它一时间片,以投入运行。直至所有的进程运行完毕。5) 短作业优先调度算法:所有就绪进程按所需时间由少到多排成一个队列,依次运行队列中的进程,并列表显示出来,每个进程的开始运行时间减去进入内存时间就是该进程的等待时间,每个进程的结束运行时间减去进入内存时间就是该进程的周转时间,每个进程的周转时间除于服务时间就是带权周转时间。5.流程逻辑图.银行家算法
16、流程图开始初始化PCB,输入各进程信息按优先级加入就绪队列就绪队列空结束就绪队列中首进程运行标为Cpu时间+1,进入下一个进程进程运行时间满足所需时间进程运行完成。进程优先数减3,插入就绪队列中。NYN图.最高优先级优先调度算法流程图初始化PCB、输入进程信息和时间片大小开始进程按输入顺序插入到队列中就绪队列空结束就绪队列首进程运行运行进程占用cup时间到达 所需时间进程完成把运行进程插入到队尾NYN图. 简单轮转法调度算法流程图6.接口在本项目中主要是指函数接口,本项目是对操作系统的原理模拟。因此各功能模拟主要通过接口实现。7.存储分配主要采用静态分配方式。程序运行前,由编译器编译的时候进行
17、的内存分配,且到整个程序运行完才释放内存空间(对应全局变量和静态变量区)。8.结果示例主界面运行如下所示:1)内存管理模拟输入1进入内存管理界面。可选择分配算法,共有三种可供选择,首次适应算法最佳适应算法和手动分配算法,之后进入内存分配界面,如图所示分配大小为1024KB.之后通过查看操作可进行分配情况的查看。按照上次输入方式依次输入一组数据显示如下,动态内存分配过程实际上是按照一定的算法一步步地将大的内存区域变成小的内存块,再由动态回收机制将不断释放的内存区域回收合并,达到内存的动态利用,动态平衡。然后是对内存的动态回收,释放的内存区域必须及时回收才能保证操作系统的正常运行。在动态回收过程中
18、,若内存区域与上一块内存均为未利用的区域,则应该达到合并的效果,同理,当下一块内存区域为未利用的则应该自动合为一体,减少内存碎片。如图所示:若将分区号为2和4的两个内存区域分别释放,分区号为2的区域应该变为可用状态,而分区号为4的内存区域应该与后一块内存区域合并。2)死锁避免模拟主界面输入2进入死锁避免模拟界面。输入文件路径程序从文件中自动读取信息并写入内存结果显示如下:此时可判断是否安全并允许任意进程提出请求任意资源数,程序自动就合法性做出判断并按照银行家算法先进行预分配判断分配后是否处于安全状态并决定是否满足进程请求,如不能满足则必须撤回预分配。示意如下:或者:不满足要求,如下所示3)进程
19、管理模拟在主界面输入3进入进程管理页面输入1则按照优先数进行进程调度,依图输入进程信息则得到如下所示模拟结果。继续选择2即可进行时间片轮转调度方式选择3则进行短作业优先调度9.测试计划详细测试各个部分的核心功能。附加功能略测。具体测试计划见测试文档。10.尚未解决的问题项目整体的整合难以做好,界面缺乏人性化,部分功能尚有瑕疵,存在错误的输入如数组越界非法字符等引起程序的异常退出的问题。11. 源码附录头文件部分:FOS.h#ifndef FOS#include<iostream>#include<stdlib.h>#include<fstream>#incl
20、ude<iomanip>#include<string>#include<stdio.h>#include<queue>using namespace std;/-/宏定义部分#define MAX_length 32767 /最大内存空间为32767KB#define M 4 /资源数的宏#define N 4 /进程数的宏/-/数据结构声明部分/进程控制块链表typedef struct PCBchar name10;int prio;int round;int needtime;int cputime;int count;int state
21、;struct PCB *next;bool operator <(const PCB& o)const if(state = o.state) return prio < o.prio; return state > o.state;PCB;/进程控制块链表typedef struct PCchar name10;int needtime;int cputime;int waittime;int state;struct PC *next;PC;/内存分区块typedef struct blockAreaint ID; /分区号long size; /分区大小lon
22、g address; /分区地址int state; /状态ElemType;/空闲分区链表typedef struct LinkNode ElemType data; struct LinkNode *prior; /前趋指针struct LinkNode *next; /后继指针LinkNode,*LinkList;/-/函数声明部分int distribute(int);/内存分配int free(int); /内存回收int FirFit(int,int);/首次适应算法int BestFit(int,int); /最佳适应算法int ManFit(int,int); /手动分配voi
23、d display();/查看分配int mem();/内存管理主函数int InitMem();/初始化模拟内存int TestSecu();/银行家算法主函数int pro();/进程管理主函数#define FOS#endif主函数:MainToRun.cpp#include"FOS.h"int main()while(1)char cho;int ch=0;cout<<endl;cout<<"=n"cout<<"= 简单OS模拟算法 =n"cout<<"= 1.内存管理
24、模拟 2.死锁避免模拟 =n"cout<<"= 3.进程管理模拟 0.退 出 =n"cout<<"=n"docout<<"请选择模块:"cin>>cho;if(cho='0')ch=0;else if(cho='1')ch=1;else if(cho='2')ch=2;else if(cho='3')ch=3;elsech=-1;cout<<"进程号输入错误!n"while(ch=-
25、1);while(!(ch=0|ch=1|ch=2|ch=3)char cho;cin>>cho;cout<<"请输入正确的数字"<<endl;cin>>ch;if(ch=0) return 1;else if(ch=1)mem();else if(ch=2)TestSecu();else pro();return 0;内存管理部分:MemAlloc.cpp#include"FOS.h"/变量声明部分LinkList BFirst; /头结点LinkList BLast; /尾结点int mark,n=0;
26、 /首次分配内存标记int sID=1;/静态自增分区号/主函数int mem()doif(n=0) InitMem(); /申请整块模拟内存cout<<"+n"cout<<"+ 内存分配算法 +n"cout<<"+ 1.首次适应算法 2.最佳适应算法 +n"cout<<"+ 3.手动分配地址 0.退 出 +n"cout<<"+n"cout<<"请选择分配算法:"int ch=0;cin>>c
27、h;while(!(ch=0|ch=1|ch=2|ch=3)cout<<"请输入正确的数字"<<endl;cin>>ch;if(ch=0) return 1;int choice; /操作选择标记while(1)cout<<"-n"cout<<"- 可选操作 -n"cout<<"- 1: 分配内存 2: 回收内存 -n"cout<<"- 3: 查看分配 0: 返 回 -n"cout<<"-n
28、"cout<<"请输入你的操作 :"cin>>choice;if(choice=1) distribute(ch); / 分配内存n=1;else if(choice=2) / 内存回收int ID;cout<<"请输入您要释放的分区号:"cin>>ID;if(free(ID)cout<<"释放指定区域内存成功n"n=1;else if(choice=3) display();/显示主存分配情况n=1;else if(choice=0)n=1;mark=1;brea
29、k;else /输入操作有误cout<<"输入有误,请重试!"<<endl;continue;while(mark);return 0;/初始化模拟内存int InitMem()/初始化内存空间(双向链表形式)BFirst=(LinkList)malloc(sizeof(LinkNode);/头结点BLast=(LinkList)malloc(sizeof(LinkNode);/尾结点BFirst->prior=NULL;BFirst->next=BLast;BLast->prior=BFirst;BLast->next=NU
30、LL;BLast->data.address=0;/起始地址为0(重在模拟不要纠结)BLast->data.size=MAX_length;/将全部内存空间划作一个整体BLast->data.ID=0;BLast->data.state=0;return 1;/处理交互int distribute(int ch)int ID,askSize;ID=sID+;cout<<"请输入分配大小(单位:KB):" cin>>askSize;if(askSize<0 |askSize=0) cout<<"输入有
31、误请重试!"<<endl; return 0;if(ch=2) /选择最佳适应算法 if(BestFit(ID,askSize)=1) cout<<"分配成功!"<<endl; else cout<<"分配失败!"<<endl; return 1;else if(ch=1) if(FirFit(ID,askSize)=1) cout<<"分配成功!"<<endl; else cout<<"分配失败!"<&
32、lt;endl; return 1;else /手动分配算法if(ManFit(ID,askSize)=1) cout<<"分配成功!"<<endl;else cout<<"分配失败!"<<endl;return 1;/首次适应算法int FirFit(int ID,int askSize)/传入作业名及申请量/为申请作业开辟新空间且初始化LinkList temp=(LinkList)malloc(sizeof(LinkNode); temp->data.ID=ID; temp->data.s
33、ize=askSize;temp->data.state=1;LinkNode *p=BFirst->next;while(p) if(p->data.state=0 && p->data.size=askSize) /有大小恰好合适的空闲块p->data.state=1;p->data.ID=ID;return 1;break; if(p->data.state=0 && p->data.size>askSize) /有空闲块能满足需求且有剩余"temp->prior=p->prior
34、;temp->next=p; temp->data.address=p->data.address;p->prior->next=temp; p->prior=temp;p->data.address=temp->data.address+temp->data.size;p->data.size-=askSize;return 1;break; p=p->next;return 0;/最佳适应算法int BestFit(int ID,int askSize)int ch; /记录最小剩余空间LinkList temp=(Link
35、List)malloc(sizeof(LinkNode); temp->data.ID=ID; temp->data.size=askSize;temp->data.state=1;LinkNode *p=BFirst->next;LinkNode *q=NULL; /记录最佳插入位置while(p) /初始化最小空间和最佳位置 if(p->data.state=0 &&(p->data.size>askSize | p->data.size=askSize) ) q=p;ch=p->data.size-askSize;br
36、eak; p=p->next;while(p) if(p->data.state=0 && p->data.size=askSize) /空闲块大小恰好合适p->data.ID=ID;p->data.state=1;return 1;break; if(p->data.state=0 && p->data.size>askSize) /空闲块大于分配需求if(p->data.size-askSize<ch)/找到新的最小剩余空间 ch=p->data.size-askSize;/更新剩余最小值 q
37、=p;/更新最佳位置指向 p=p->next;if(q=NULL) return 0;/没有找到空闲块else/找到了最佳位置并实现分配temp->prior=q->prior;temp->next=q;temp->data.address=q->data.address;q->prior->next=temp;q->prior=temp;q->data.address+=askSize;q->data.size=ch;return 1;/以分区号为线索释放分区int free(int ID)LinkNode *p=BFirst
38、;int mark=0;while(p) if(p->data.ID=ID) if(p->data.state=0) cout<<"该区域内存未分配n" return 0; else p->data.state=0;if(p->prior->data.state=0)/连接前空闲区域 p->prior->data.size+=p->data.size; p->prior->next=p->next; p->next->prior=p->prior;if(p->next-&g
39、t;data.state=0)/连接后空闲区域 p->data.size+=p->next->data.size; if(p->next->next) p->next->next->prior=p;p->next=p->next->next; else p->next=NULL;mark=1; break; else p=p->next;if(mark=0)cout<<"没有该区域!n"<<endl;return mark;/显示内存分配情况void display()co
40、ut<<"*n"cout<<"* 分 配 情 况 *n"cout<<"*n"LinkNode *p=BFirst->next;while(p) cout<<"分 区 号:"cout<<p->data.ID<<endl; cout<<"起始地址:"<<p->data.address<<endl; cout<<"分区大小:"<<p-
41、>data.size<<" KB"<<endl; cout<<"状 态:" if(p->data.state=0) cout<<"可用"<<endl; else cout<<"已分配!"<<endl; cout<<endl; p=p->next;/手动分配算法int ManFit(int ID,int askSize)/显示已分配情况供用户参考cout<<"主存已分配情况如下:&q
42、uot;<<endl;display();cout<<"请输入分区起始地址:"int addr;cin>>addr;LinkList temp=(LinkList)malloc(sizeof(LinkNode); LinkList temp1=(LinkList)malloc(sizeof(LinkNode); temp->data.size=askSize;temp->data.state=1;temp->data.ID=sID+;temp->data.address=addr;LinkNode *p=BFirs
43、t->next;while(p) /遍历寻找插入位置if( (p->data.state=0) &&(p->data.address<=addr)&&(p->data.size>=askSize) )/找到目标区域且区域未经分配int m=p->data.size;if(p->data.address)<addr)/指定地址小于目标区域所在区域(p)地址if(m-(addr-p->data.address)>askSize)/有剩余部分temp1->next=p->next;p->
44、;data.size=addr-(p->data.address);p->next=temp;temp->prior=p;temp->next=temp1;temp1->data.ID=sID+;temp1->data.size=m-p->data.size-askSize;temp1->data.address=temp->data.address+askSize;temp1->data.state=0;temp1->prior=temp;if(temp1->next!=NULL)if(temp1->next-&g
45、t;data.state=0)temp1->data.size+=temp1->next->data.size;temp1->next=temp1->next->next;return 1;else if(m-(addr-p->data.address)=askSize)/正好分完,无剩余部分p->data.size=addr-(p->data.address);p->data.state=0;p->next=temp;temp->prior=p;temp->next=NULL;return 1;else retur
46、n 0;/不够分else /起始位置与q相同if(p->data.size)>askSize)/有剩余部分temp->data.ID=sID+;temp->prior=p->prior;temp->next=p; temp->data.address=p->data.address;p->prior->next=temp; p->prior=temp;p->data.address=temp->data.address+temp->data.size;p->data.size-=askSize;retur
47、n 1;break;else if(p->data.size)=askSize)/正好够分p->data.ID=ID;p->data.state=1;return 1;break;else return 0;/不够分/if结束else if(p->data.address)>addr)return 0;/没有满足条件的区域p=p->next;/while 结束return 0;/消除警告而写的可以去掉银行家算法部分:Banker.cpp#include "FOS.h"int TotalN;/资源总数int MaxMN;/各进程最大需求量i
48、nt AllocationMN;/已经分配量int AvaliableN;/可用资源数int NeedMN;/各进程还需分配数int WorkN;/工作数组int RequestN;/某进程请求资源数bool FinishM=false;/标记数组/打印函数void show(int aMN)cout<<"ntR1tR2tR3tR4n"for(int i=0;i<M;i+)cout<<"进程"<<i; for(int j=0;j<N;j+) cout<<"t"<<
49、aij;if(j=3)cout<<endl; /打印函数重载void show(int aN)for(int j=0;j<N;j+) cout<<"t"<<aj;if(j=3)cout<<endl; /打印函数重载void show(bool aM) for(int j=0;j<M;j+) cout<<aj<<"n"/文件读取函数int read (string s) ifstream in(s); if (!in.is_open() cout << &quo
50、t;文件无法打开" exit (1); for(int j=0;j<N;j+) in>>Totalj; for(int i=0;i<M;i+) for(int j=0;j<N;j+) in>>Maxij; for(int i=0;i<M;i+) for(int j=0;j<N;j+) in>>Allocationij; in.close(); return 1; /计算Need函数int calNeed()int mark=1;for(int i=0;i<M;i+) for(int j=0;j<N;j+)
51、Needij=Maxij-Allocationij;if (Needij<0)mark=0; cout<<"Need矩阵:" show(Need);return mark;/计算可用资源数函数int calAval()int mark=1;for(int j=0;j<N;j+) int temp=0;for(int i=0;i<M;i+) temp+=Allocationij; Avaliablej=Totalj-temp;if (Avaliablej<0)mark=0;cout<<"n可用:"show(A
52、valiable);return mark;/检测是否安全函数int assure()int queM=0;for(int j=0;j<N;j+)int t=0;Workj=Avaliablej;for(int k=0;k<M;k+) for(int i=0;i<M;i+)/对每一个进程进行判别int ne=1;for(int j=0;j<N;j+)if(Workj<Needij)ne=0;if(Finishi=false&&ne)for(int j=0;j<N;j+)Workj+=Allocationij;Finishi=true;quek=i;break;for(int i=0;i&l
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 校园教育资源共享合作合同(2篇)
- 《机器学习技术应用》课件-任务1-2 校园消费数据统计分析
- 2025商业地产租赁合同怎样写
- 数字经济模式对企业资源优化及效率影响之研究
- 浙江省台州市十校2024-2025学年高一下学期4月期中考试语文试题(含答案)
- 胶质母细胞瘤的临床护理
- 幼小衔接班英语教学设计
- 青岛版五年级数学下册第二单元“分数的基本性质”教学设计教学设计
- 2025液压旋挖钻机钻孔施工合同范本
- 2025年心理咨询师之心理咨询师基础知识考试题库
- 现代风险导向审计在天衡会计师事务所的应用研究
- JGJ107-2016钢筋机械连接技术规程
- 妇科医生进修汇报课件
- 动态分析与设计实验报告总结
- 2024年江苏省泰州市海陵区中考一模数学试卷
- 从汽车检测看低空飞行器检测发展趋势
- DB32T 4740-2024 耕地和林地损害程度鉴定规范
- 五一节假日安全生产培训
- 中考英语二轮复习课件:中考解题技巧-读写综合
- 《铁路基本安全知识》课程标准
- 三年级下册口算练习1000道附答案
评论
0/150
提交评论