操作系统课程设计小型的操作系统_第1页
操作系统课程设计小型的操作系统_第2页
操作系统课程设计小型的操作系统_第3页
操作系统课程设计小型的操作系统_第4页
操作系统课程设计小型的操作系统_第5页
免费预览已结束,剩余20页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程设计报告题目:一个小型的操作系统班级:计122(杏)学号:1213023075姓名:贾苏日期:2014/06/231 .实验平台(1)软件平台:开发系统平台:Windows7(64)Microsoftvisualc+6.0测试系统平台:Windows7(64)(2)硬件平台:cpu:AMDA6-3420APU内存:4GB硬盘:500G2 .所需实现的功能及相应的阐述:(1)进程调度管理为了贴切现实中的os,采用RR(轮转调度算法),且不提供用户显式的选择调度算法,即对用户是透明的。现实中的处理器主频为1Ghz3Ghz,选取中间点为1.5Ghz,得时间片大小为0.7ns,为方便计算*

2、10,则时间片大小定为7ns。假设进程之间的调度和切换不耗费cpu时间。(2)死锁的检测与处理检测当然采用的是银行家算法处理:让用户选择kill一个进程,释放他所占有的所有资源。(3)虚拟分页调度管理虚拟分页:给出的是逻辑值访问磁盘将那个数据块放入到内存中内存中的地址采用一定的算法相对应于磁盘的地址。特规定访存采用的是按字节寻址内存的大小128KB外存的大小1MB即整个系统可以提供1MB的逻辑地址空间供进程进行访问(在地址总线足够扫描内存的情况下)。虚拟地址映射采用:直接映射法规定的8kB为一个页面,故内存有16个页面,外存有128个页面。如果产生了内存已满,便会产生缺页中断,淘汰采用FIFO

3、算法,利用一个队列来做部分内外存的对应表00,128,2*128+0.11,129,2*128+1.22,130,2*128+2.*33333333333333316127,128+16,2*128+16(4) I/O中断处理设中断来自两个方面:1 .DMA输送开始和结束时的中断设定一个宏定义为DMA一次传输的数据量的大小->DmaNum假定为10kb每次DMA开始:耗费1nscpu时间进行中断处理DMA结束:耗费2nscpu时间进行中断处理由操作系统课程知,DMA传输数据时不需要CPU的干预2 .随机的中断发生外部随机中断,cpu无条件的立即响应,并执行中断处理程序,同样的假设中断处理

4、程序的调度和切换不耗费cpu时间。(5)内存地址越界或内存不足进程访问内存时超过了进程所要的最大值,此时发生中断,已达到内存保护的功能。内存不足时即为当前的动态地址重定位寄存器中的值+进程所需的内存大小超过了内存的上限,此时进行内存紧凑,同时修改被移动的进程中的各个有关参数。3 .总体设计开始4 .程序所需的数据结构及其抽象过程先定义本次操作系统外设的资源,假设有A类资源10个,B类资源5个,C类资源6个->NeedRescourse;作业中的各个进程都需要一个代号->ProcessName各个进程到来的时间不同,故需要记录一下->ArriveTime,每个进程所需要的cpu

5、时间是不够的->NeedCpuTime,每个进程所需的内存空间大小是不一样的->NeedMem。各个进程中的任务是不同的故需要预先设定本进程中所要执行的操作类型->OpKind,如果是计算型的直接给出所需要的cpu时间即可,如果是I/O型的还需要给出所传输的数据量的大小->NeedTranDataNum,在止匕可以给OpKind做一个union型的结构。多道程序程序在运行的过程中需要对进程所需内存的地址进行动态地址重定位,故在系统之中需要设置一个动态地址重定位寄存器,其中的内容是下次进程可以使用的内存始址->DynReg。抽象结果:structProcesscha

6、rProcessName10;/进程的名字intArriveTime;/ns级另UintNeedCpuTime;此进程所需要的时间intNeedMem;/所需要的cpu时间FlagForOpOpKind;用于指示是何种操作intNeedTranDataNum;给IO用的数据块intOpCpus;计算类型的操作所需的cpu时间intNeedRescourse3,需要资源的数目NULL代表不需要使用Process*next;5 .详细设计1 .进程信息查看依次遍历全部的链表,并将它们的信息依次打印出来。实现函数名:voidShowProcessInfo()2 .死锁的检测和解除假定本系统中的各个所

7、需资源均是独占型资源,在进程运行的过程中不再释放,故只需要遍历链表将各个进程中所需的资源统计出来,只要不大于系统中预设的即可,一旦进程所需的资源大于系统中的最大量,给予用户选择kill一进程,已达到释放资源的目的。死锁检测函数:voidDeedLock()voidDeedLock_LookNeedRescourse()死锁解除函数:voidDeedLock_KillProcess()3 .内存空间查看查看各个进程所占用的内存的空间,借助于DynReg这个全局变量实行内存空间的动态重定位。实现函数:voidLookMem()4 .查看CPU运行以CPU的角度,查看作业的运行情况,实现函数:voi

8、dLookCpu()voidLookCpu_ShowRunningProcess()5 .外存空间查看外存空间是用户的工作区间,故只要遍历整个进程链表,统计出所有进程占有的全部空间即可。实现函数:voidLookDiskMem()6 .查看运行查看系统运行中各个资源的使用情况:实现函数:voidShowRunningProcess()voidShowRunningProcess_CalculateCpuNeed(int*,int)7 .内存管理缺页调度算法:FIFO(借助于循环队列实现)实现函数:voidMemToDiskMem()8 .程序运行和调试1.打开程序的初始界面:按系统提示输入进程

9、数,及其相关的各个参数2.输入完成后的主界面:用户可以按下相关的选择键实施有关的各个操作。3.按下1查看各个进程的信息可以看到刚刚输入的各个进程的有关信息4.按下2MauvJDhIe口kFMaqIkKkF*1谓性任堇联世特.5.按下3查看运行时CPU的使用情况可见此时系统是安全的。系统出差提示按下1显示当前各个进程所需的资源然后kill进程1后在查看一下作业中的进程,发现被kill的进程没有的,实现了此功能。6.按下4查看内存的使用情况7.按下5查看外存空间JO(E1AIale-二4。nt卡片.8.按下6查看运行情况9 .按下7产看内存使用情况(1)没有产生缺页若.1TTrUM-1西便占用!F

10、fDE«13QJIdEUlHMT?UK-11ItUMtLDHIa贝版占用!t*岐页睥或过疆te-vtrri-JncFrjHuansILrm-Ldun-更费占闰fnsKi=JdniilhmmayiichtltHditInns更值占用Enic*-s«e麟质调度立粗;¥H.FDEHi.13jIaxijZiM«dWM1e1«-Mljdng.rncBri4jxulm-iJjmhic1-i-id.ing_to*v>rvi二JifluuixdlmnJtIwvdLlriy:.(2)产生缺页10 .按下9退出此系统日"一日收,rhis$口b

11、71;slarMIF岭fGndjFle-Mec&llyJlwnViSiri*t=3时PW-55-RJIy融E«0"1刖育7 .遇到的问题(1)自己编写映射表相当的困难,一度想改用Java语言,在于对C+语言的了解不够。(2)出错处理没有完全做完,做的不够精细,很多地方直接结束(3)对用户输入的数据做的类型检查不够充分(4)deletejob时总是出现系统错误,后debug发现,由于对象之中存在不为空的指针,导致出错,故再释放指针所占空间后系统正常运行。8 .源代码#include<iostream>#include<cstring>#incl

12、ude<windows.h>#include<cstdlib>循环队列的头文件#include"CirQueue.h"/usingnamespacestd;#defineMAXMEM128/定义本次操作系统的最大内存容量#defineMAXDISKMEM1024/定义本次操作系统的最大外存容量#defineYE10/定义本次操作系统的分页大小并以此实现虚拟存储intUsedMAXMEM=0;intUsedMAXDISKMEM=0;/定义进程可能用到的外部资源#defineA10#defineB5#defineC6/cpu# defineRR7/定义时

13、间片大小为7ns# defineBEFOREDMA1/DMA之前所需的cpu时间# defineAFTERDMA2/DMA之后所需的cpu时间# defineONEDMANUM10/DMA一次最多传送10kb的数据enumFlagForOpIO,Calculate,others);intDynReg=0;/定义用于描述动态地址重定位寄存器的全局变量structProcesscharProcessName10;/进程的名字intArriveTime;/ns级别intNeedCpuTime;/此进程所需要的时间intNeedMem;/所需要的cpu时间FlagForOpOpKind;/用于指示是何

14、种操作intNeedTranDataNum;/给IO用的数据块intOpCpus;/计算类型的操作所需的cpu时间/假设others不需要其他的各个操作。intNeedRescourse3;/需要资源的数目NULL代表不需要使用0a.Process*next;);classJOBProcess*p;Process*head;Process*head1;/建立一个备用的链表/Process*wait,*runing;/wait为等待链表running是正在运行的进程public:JOB()head1二p二head=NULL;/初始化为空cout<<"Pleasewaitin

15、g.TheSystemisinitial.”<<endl;Sleep(2000);/暂停一秒maybeSleep()cout<<"Systemisalready.Nowyoushouldenterinformationofyoujob.”<<endl;intn;cout<<"enteryourjob'sprocessnum.”<<endl;cin>>n;while(n)p=newProcess();cout<<"pleaseenterthenameofprocess.”&l

16、t;<endl;cin>>p->ProcessName;cout<<"pleaseenterthearrivetimeofprocess.”<<endl;cin>>p->ArriveTime;cout<<"pleaseentertheNeedCpuTimeofprocess.”<<endl;cin>>p->NeedCpuTime;cout<<"pleaseentertheNeedMemofprocess.”<<endl;cin>

17、>p->NeedMem;while(p->NeedMem>128)cout<<"ThisSystemcan'tnotacceptyourjob!Maybeyourjobistoolarge!Pleaseenteranum<128”<<endl;cin>>p->NeedMem;cout<<"pleaseentertheoperationofprocess.0toTranDiskNum,1tocpu”<<endl;intnn;cin>>nn;if(nn=0)cou

18、t<<"pleaseentertheNeedTranDataNum.”<<endl;cin>>p->NeedTranDataNum;p->OpKind=IO;elsecout<<"pleaseentertheOpCpus.”<<endl;cin>>p->OpCpus;p->OpKind=Calculate;cout<<"PLeaseentertheA,BorCyouneed”<<endl;for(inti=0;i<3;i+)cin>&

19、gt;p->NeedRescoursei;p->next=NULL;/尾结点为空表示一个节点的完成下面进行插入链表的工作head=SortLinkTable(head,p);n-;/whileLinkCopy();/将本次整理好的链表依次赋值赋给备用链表Provide_Same_Process_Name();/检查重名现象voidProvide_Same_Process_Name();voidVisitLinkTable();Process*SortLinkTable(Process*,Process*);voidBeginRunning();voidShowProcessInfo

20、();voidDeedLock();voidDeedLock_KillProcess();voidDeedLock_LookNeedRescourse();voidLookCpu();voidLookCpu_ShowRunningProcess();voidLookMem();voidShowRunningProcess();voidShowRunningProcess_CalculateCpuNeed(int*,int);voidLookDiskMem();voidLookMem_ChangeMem();boolCheckMem();voidLookDiskMem_Change();void

21、LinkCopy();voidMemToDiskMem();JOB()deletehead;deletehead1;deletep;JOB*job;/设置全局变量voidJOB:Provide_Same_Process_Name()system("cls");charbuffer10;Process*temp=head1;Process*temp1=head1;while(temp)temp1=temp->next;while(temp1)if(strcmp(temp->ProcessName,temp1->ProcessName)=0)yourcout&

22、lt;<"Mini_OperationSystemhaddetectthesamenameprocessinyourjob!"<<endl;cout<<"ThisSystemcan'tacceptthissitution.PleaseRenameyourProcess!nThanksforcorporation!"<<endl;cout<<"ThisisALLyourprocessname:"<<endl;VisitLinkTable();cout<<

23、;"Enter1torenametheformer,。torenamethelater!"<<endl;intn=0;cin>>n;"<<endl;cout<<"NowEnternewNameif(n=0)cin>>buffer;strcpy(temp1->ProcessName,buffer);elsecin>>buffer;strcpy(temp->ProcessName,buffer);/endiftemp1=temp1->next;/endwhiletemp

24、1temp=temp->next;/whilevoidAgainEnterJOB()system("cls");deletejob;job=newJOB();voidJOB:VisitLinkTable()/不加JOB前缀的时候编译不过加上代表此函数是JOBclass之中的while(head1)cout<<head1->ProcessName<<endl;head1=head1->next;cout<<"nNow,YoucanseeTheListtocheckout."<<endl;vo

25、idJOB:LinkCopy()Process*temp=NULL,*temp2=head;if(head1二二NULL)cout<<"LinkCopy()isHere!"<<endl;if(head1)/不为空时将其下一个置为空head1->next=NULL;head1=NULL;while(temp2)/applyanewnodetemp=newProcess();strcpy(temp->ProcessName,temp2->ProcessName);temp->ArriveTime=temp2->ArriveT

26、ime;temp->NeedCpuTime=temp2->NeedCpuTime;temp->NeedMem=temp2->NeedMem;if(temp2->OpKind=IO)temp->OpKind=IO;temp->NeedTranDataNum=temp2->NeedTranDataNum;elsetemp->OpKind=Calculate;temp->OpCpus=temp2->OpCpus;for(inti=0;i<3;i+)temp->NeedRescoursei=temp2->NeedRes

27、coursei;/applyendtemp->next=NULL;cout<<"copyisright!"<<endl;if(head1二二NULL)head1=temp;elseProcess*k=head1;while(k->next)/寻找到最后一个节点不断的循环退不出去k=k->next;k->next=temp;/cout<<"copyisright!"<<endl;temp2=temp2->next;/whileif(head1二二NULL)cout<<

28、"LinkCopy()isout!"<<endl;system("pause");voidJOB:MemToDiskMem()system("cls");CirQueue<int>q(16);/一共定义的16个页面q.EnQueue(e);int*Mem;intcount=0;/记录下进程的数目Process*temp_head1=head1;while(temp_head1)count+;temp_head1=temp_head1->next;temp_head1=head1;Mem=newintcou

29、nt;inttemp_count=0;while(temp_head1)intBegin=0;cout<<"Process:"<<temp_head1->ProcessName<<"memeryusesituation:"<<endl;Begin+=temp_head1->NeedMem;intk=0;/所需的页面数目if(Begin%YE=0)k二Begin/YE;elsek二Begin/YE+1;Memtemp_count+=k;cout<<k<<"页被占用

30、!"<<endl;temp_head1=temp_head1->next;/endwhilecout<<endl;temp_head1=head1;cout<<"Wanttosee缺页调度过程Y/N."<<endl;charoption;inttotal=0,AllTotal=0;cin>>option;if(option='y'|option='Y')for(inti=0;i<count;i+)AllTotal+=Memi;for(intj=0;j<Me

31、mi;j+)if(q.EnQueue(true)temp_count=0;while(temp_count<i)temp_head1=temp_head1->next;temp_count+;cout<<"Process:"<<temp_head1->ProcessName<<"needmemisloading.ok"<<endl;temp_head1=head1;elsetemp_count=0;while(temp_count<i)temp_head1=temp_head1-&g

32、t;next;temp_count+;cout<<"Process:"<<temp_head1->ProcessName<<"needmemisloadingerror缺页调度"<<endl;temp_head1=head1;total+;boolflag=q.DeQueue();if(q.EnQueue(true)缺页调度"<<endl;cout<<"Process:"<<temp_head1->ProcessName<&

33、lt;"needmemisloadingok/for2cout<<endl;/for1cout<<"一共产生了:"<<total<<"次缺页中断.n"<<"缺页中断率为:"<<(float)total/AllTotal<<"%"<<endl;system("pause");voidJOB:LookCpu_ShowRunningProcess()system("cls");

34、intNowTime=0;Process*run=headl;/临时试用一下最终需要3还为NULLProcess*wait=headl;/dsvrfgvregrefswgvregegsdgreintcount=0;while(run)计算等待运行的进程的个数count+;run=run->next;run=headl;/还原运行链表/建立一个映射表char*Run_Process_Name=newchar*count;/申请一个动态的二维表for(inti=0;i<count;i+)/响应的二维空间申请完毕Run_Process_Namei=newchar10;strcpy(Run

35、_Process_Namei,run->ProcessName);run=run->next;run=NULL;int*Run_Process_CpuNeed=newintcount;/映射表建立完毕/计算各个进程中所需的cpu时间ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process*priorNode=NULL;/Process*tail=head;while(true)/inttimell=wait->ArriveTime;if(wait&&NowTime>=wa

36、it->ArriveTime)if(run二二NULL)run=wait;priorNode=run;else/连接到尾部Process*temp=run;while(temp->next!=priorNode)/寻找到前驱节点temp=temp->next;temp->next=wait;/将结点连接上链表priorNode=wait;wait->next=run;wait=wait->next;释放一个结点priorNode->next=run;/连接上头部形成循环链表if(run)run=run->next;/重新调度cout<<

37、;NowTime<<"->"<<NowTime+RR<<"Process:"<<run->ProcessName<<"isRunning"<<endl;cout<<"cpu调度下一个运行的进程。"<<endl;NowTime+=RR;/依据上面建设的映射按名取出所需运行的时间intALLNeedCpu;for(inti=0;i<count;i+)if(strcmp(Run_Process_Namei,r

38、un->ProcessName)=0)break;ALLNeedCpu=Run_Process_CpuNeedi;ALLNeedCpu-=RR;/减去本次运行的时间if(ALLNeedCpu>0)Run_Process_CpuNeedi=ALLNeedCpu;/重新写回到数组中保持一致性else/此节点已经做完了请直接释放if(run->next=run)run=NULL;elseProcess*k=run;while(k->next!=run)/寻找当前运行节点的前一个结点k=k->next;k->next=k->next->next;run=

39、k;/endif(run)if(wait二二NULL&&run=二NULL)/没有等待CPU的进程了和没有正在运行的进程满足退出的要求->退出break;NowTime+;/whilesystem("pause");LinkCopy();/将受损的链表修复voidJOB:ShowRunningProcess()system("cls");intNowTime=0;Process*run=head1;/临时试用一下最终需要3还为NULLProcess*wait=head1;/dsvrfgvregrefswgvregegsdgreint

40、count=0;while(run)/计算等待运行的进程的个数count+;run=run->next;run=head1;/还原运行链表/建立一个映射表char*Run_Process_Name=newchar*count;/申请一个动态的二维表for(inti=0;i<count;i+)/响应的二维空间申请完毕Run_Process_Namei=newchar10;strcpy(Run_Process_Namei,run->ProcessName);run=run->next;run=NULL;int*Run_Process_CpuNeed=newintcount;

41、/映射表建立完毕ShowRunningProcess_CalculateCpuNeed(Run_Process_CpuNeed,count);Process*priorNode=NULL;while(true)/inttime11=wait->ArriveTime;if(wait&&NowTime>=wait->ArriveTime)if(run=NULL)run=wait;priorNode=run;else/连接到尾部Process*temp=run;while(temp->next!=priorNode)/寻找到前驱节点temp=temp->

42、next;temp->next=wait;/将结点连接上链表priorNode=wait;/wait->next=run;wait=wait->next;/释放一个结点priorNode->next=run;/连接上头部形成循环链表)if(run)run=run->next;/重新调度cout<<NowTime<<"->"<<NowTime+RR<<"Process:"<<run->ProcessName<<"isRunning”&

43、lt;<endl;cout<<"NeedRescourse:A"<<run->NeedRescourse0<<"B"<<run->NeedRescourse1<<"c"<<run->NeedRescourse2<<"isusing.”<<endl;cout<<"cpu调度下一个运行的进程。"<<endl;NowTime+=RR;/依据上面建设的映射按名取出所需运行

44、的时间intALLNeedCpu;for(inti=0;i<count;i+)if(strcmp(Run_Process_Namei,run->ProcessName)=0)break;)ALLNeedCpu=Run_Process_CpuNeedi;ALLNeedCpu-=RR;/减去本次运行的时间if(ALLNeedCpu>0)Run_Process_CpuNeedi=ALLNeedCpu;/重新写回到数组中保持一致性else/此节点已经做完了请直接释放if(run->next=run)run=NULL;elseProcess*k=run;while(k->n

45、ext!=run)/寻找当前运行节点的前一个结点k=k->next;k->next=k->next->next;run=k;/endif(run)if(wait二二NULL&&run=二NULL)/没有等待CPU的进程了和没有正在运行的进程满足退出的要求->退出break;NowTime+;/whilesystem("pause");LinkCopy();/将受损的链表修复voidJOB:ShowRunningProcess_CalculateCpuNeed(int*Run_Process_CpuNeed,intcount)Pr

46、ocess*temp=head1;for(inti=0;i<count;i+)intALLNeedCpu=temp->NeedCpuTime;if(temp->OpKind=IO)if(temp->NeedTranDataNum%ONEDMANUM=0)ALLNeedCpu+=(temp->NeedTranDataNum/ONEDMANUM)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+=(temp->NeedTranDataNum/ONEDMANUM+1)*(BEFOREDMA+AFTERDMA);elseALLNeedCpu+

47、=temp->OpCpus;Run_Process_CpuNeedi=ALLNeedCpu;temp=temp->next;voidJOB:ShowProcessInfo()system("cls");Process*temp=head1;intcount=0;while(temp)cout<<"The"<<count+1<<"processinfo"<<endl;cout<<"Name:"<<temp->ProcessNam

48、e<<'.'<<endl;cout<<"ArriveTime:"<<temp->ArriveTime<<'.'<<endl;cout<<"NeedCpuTime:"<<temp->NeedCpuTime<<'.'<<endl;cout<<"NeedMem:"<<temp->NeedMem<<'.'&l

49、t;<endl;cout<<"OpKind:"<<temp->OpKind<<'.'<<endl;cout<<"NeedRescourse:"<<"A:"<<temp->NeedRescourse0<<",B:"<<p->NeedRescourse1<<",C:"<<p->NeedRescourse2<<en

50、dl;temp=temp->next;cout<<'n'count+;cout<<"enteranykeyreturnmain()."<<endl;getchar();getchar();voidJOB:DeedLock()system("cls");Process*temp=head1;intLocalA=0,LocalB=0,LocalC=0;while(temp)LocalA+=temp->NeedRescourse0;LocalB+=temp->NeedRescourse1;L

51、ocalB+=temp->NeedRescourse2;temp=temp->next;if(LocalA>A|LocalB>B|LocalC>C)cout<<"NeedRescourseisover!”<<endl;cout<<"Enter1toSeeNeedRescourse,elsetomain()!”<<endl;intn;cin>>n;if(n=1)DeedLock_LookNeedRescourse();elsecout<<"YourJObisok!S

52、ystemNowissafe!"<<endl;system("pause");voidJOB:DeedLock_LookNeedRescourse()Process*temp=head1;cout<<"nNeedRescourse:ABC'n"'<<temp->NeedRescourse1<<"while(temp)cout<<temp->ProcessName<<""<<temp->NeedRes

53、course0<<"“<<temp->NeedRescourse2<<endl;temp=temp->next;system("pause");cout<<"AreyouwanttoKilloneProcesstoReleaseNeedRescourse.Y/N"<<endl;charoption;cin>>option;if(option='Y'|option='y')DeedLock_KillProcess();voidJOB

54、:DeedLock_KillProcess()Process*temp=head;cout<<"Enter1,2,.toKill1th,2th,.Process."<<endl;intn;cin>>n;intcount=1;while(count<n)count+;temp=temp->next;if(count=1)head=head->next;elseProcess*temp2=head;n=1;while(n+1)<count)n+;temp2=temp2->next;)temp2->next=

55、temp->next;/删除temp结点)LinkCopy();)voidJOB:LookCpu()system("cls");LookCpu_ShowRunningProcess();)voidJOB:LookMem()intMem128;intDiskMem1024;memset(Mem,0,128);memset(DiskMem,0,1024);DynReg=0;Process*temp=head1;while(temp&&DynReg<=128)cout<<"MemeryFrom"<<DynRe

56、g<<"to"<<DynReg+temp->NeedMem-1<<"giveto"<<temp->ProcessName<<endl;DynReg+=temp->NeedMem;temp=temp->next;)cout<<"EnterAnyKeytoReturnMain()."<<endl;getchar();getchar();)boolJOB:CheckMem()/检查虚拟存储器是否可以接纳intsum=0;Process

57、*temp=head;while(temp)sum+=temp->NeedMem;)if(sum>=1024)returnfalse;elsereturntrue;)voidJOB:LookDiskMem()intsum=0;Process*temp=head;while(temp)sum+=temp->NeedMem;temp=temp->next;)if(sum>1024)cout<<"ThissystemDiskMemeryisout!npleaseenter1tochangeyouprocessNeedMemnelsesystemma

58、yhavesomethingwrong”<<endl;intn;cout<<"Enter1toChangeMemerysizeelseSystemwillexit.”<<endl;cin>>n;if(n=1)LookDiskMem_Change();elseexit(0);elsecout<<"nJOBtotaluse:"<<sum<<"Memery!"<<endl;cout<<"enteranykeyreturnmain().

59、”<<endl;getchar();getchar();voidJOB:LookDiskMem_Change()Process*temp=head;while(temp)cout<<"Process:"<<temp->ProcessName<<"need"<<temp->NeedMem<<endl;temp=temp->next;temp=head;while(temp)charn;cout<<"Change"<<temp

60、->ProcessName<<"NeedMem?Y/N(y/n)"<<endl;cin>>n;if(n='Y'|n='y')cout<<"EnteryouNewNeedMem:"<<endl;cin>>temp->NeedMem;elseif(n='N'|n='n')elsecout<<"Error!Enteraundefinedcharacter.”<<endl;temp=temp->next;deletehead1;LinkCopy();/保持链表的一致性Process*JOB:SortLinkTable(Process*head,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论