ImageVerifierCode 换一换
格式:DOC , 页数:67 ,大小:516KB ,
资源ID:9869168      下载积分:14 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/9869168.html】到电脑端继续下载(重复下载【60天内】不扣币)。

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

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(操作系统一个小型操作系统的设计与实现课程设计.doc)为本站上传会员【人****来】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

操作系统一个小型操作系统的设计与实现课程设计.doc

1、 操作系统一个小型操作系统的设计与实现课程设计 65 2020年4月19日 文档仅供参考,不当之处,请联系改正。 南通大学计算机科学与技术学院 专业: 学生姓名: 学号: 时间: 操作系统课程设计报告 操作系统模拟算法课程设计报告 设计要求 将本学期三次的实验集成实现: A. 处理机管理; B. 存储器管理; C. 虚拟存储器的缺页调度。 设计流程图 主流程图 开始的图形界面 存储器管理 缺页调度 处理机管理 LRU算法

2、 先进先出 最佳适应法 首次适应法 先来先服务 时间片轮转 A.处理机调度 1)先来先服务FCFS 开始 初始化进程控制块,让进程控制块按进程到达先后顺序让进程排队 调度数组中首个进程,并让数组中的下一位移到首位 计算并打印进程的完成时刻、周转时间、带权周转时间 其中:周转时间 = 完成时间 - 到达时间 带权周转时间=周转时间/服务时间 更改计时器的当前时间,即下一刻进程的开始时间 当前时间=前一进程的完成时间+其服务时间

3、 数组为空 N Y 结束 先来先服务算法流程 2)时间片轮转法 时间片轮转算法流程图 B.存储器管理(可变式分区管理) 1)首次适应法 分配流程图 开始 申请xkb内存 由链头找到第一个空闲区 分区大小≥xkb? 大于 分区大小=分区大小-xkb,修改下一个空闲区的后向指针内容为(后向指针)+xkb;修改上一个空闲区的前向指针为(前向指针)+xk

4、b 将该空闲区从链中摘除:修改下一个空闲区的后向地址=该空闲区后向地址,修改上一个空闲区的前向指针为该空闲区的前向指针 等于 小于 延链查找下一个空闲区 到链尾了? 作业等待 返回 是 否 登记已分配表 返回分配给进程的内存首地址 首次适应算法回收流程图 开始 输入完成进程的标号 在分配区表中查找 释放区p下邻分区空闲区 前一个空闲区的后向指针指向p的后一个分区,p的后一个分区的前向指针指向p的前一个分区,且p的前一个分区大小更改为加上p的大小,释放p 释放区p上邻分区

5、空 前一个分区的后向指针指向p的后一个空闲分区,p的后一个空闲分区的前向指针指向p的前一个分区,且p的后一个分区大小更改为加上p的大小 释放区p上下均邻空闲区 前一个空闲区的后向指针指向p的后一个空闲分区,p的后一个空闲分区的前向指针指向p的前一个空闲分区,且p的前一个空闲分区大小更改为加上p的大小再加上p的后一个空闲分区的大小,合并后的这个空闲区的后向指针指向p的下下个分区,如果p的下下个分区不为空,则其前向指针指向合并后的这个空闲区,释放p和p的下一个分区 释放区p上下均不邻空闲区 将p放在链首, 并修改其状态位为空闲 2) 最佳适应法 开始 释放分区与上空闲分区

6、相邻 释放分区与下空闲分区相邻 结束 释放分区与下空闲分区相邻 T F T F T F 摘除链表中上分区。合并释放分区与上分区,将上空闲区长度修改为这二分区的长度。 摘除链表中上下分区。合并这三个分区,将上空闲区长度修改为三个分区的长度。 摘除链表中下分区。合并释放分区与下分区,将释放分区中长度修改为这二分区的长度。 将合并的或释放的分区按长度升序重新插入到自由链表中。 回收内存流程 C.虚拟存储器的缺页调度 1)

7、先进先出FIFO 开始FIFO的缺页中断处理 查主存分块表 有空闲块可用? Y 分配一块 N J=p[HEAD] J的修改标志=1? N Y 输出“将J页复写入交换区” 输出“装入L页” 调整FIFO队列,将L插入队尾(HEAD=(HEAD+1)modM) 修改主存分块表和页表 终止 FIFO淘汰算法流程 2)LRU 开始LRU的缺页中断处理 查主存分块表 有空闲块可用? Y 分配一块 N 找到栈底元素:J=p[M-

8、1] J的修改标志=1? N Y 输出“将J页送到入交换区” 输出“装入L页” 调整堆栈,使HEAD所指元素及以下的元素下移P[HEAD]=L 修改主存分块表和页表 终止 LRU淘汰算法流程 实现原理 主界面 设计一个框架分别去链接处理机管理、存储器管理和缺页调度相关的程序。 A.处理机调度 1)先来先服务FCFS (一) 任务 先来先服务的调度算法实现处理机调度。 (二) 要求 1. 实现对FCFS算法的模拟实现 2. 计算出该算法的平均作业周转时间、平均带权作业周转时间。 (三) 原理

9、 按作业到达CPU时间先后顺序进行非剥夺式调度,先到达CPU的作业先被执行。 (四) 数据结构 struct task_struct { char name; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float run_end_ti

10、me; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; /*调度标志*/ }tasks[MAX]; int fcfs()/*先来先服务算法*/ 进程名 链接指针 到达时间 估计运行时间 进程状态 进程控制块结构 (五) 实现方法 建立一个链表按照到达CPU的时间从小到大排列,只需从第一个作业(头结点)依次调度到最后一个作业(尾结点)。 (六) 运行界面 测试数据: 作业

11、名 到达时间 运行时间 A 0 28 B 0 9 C 0 3 执行FCFS算法如下: 2)时间片轮转法 (一) 任务 只对进程的运行模拟,将其运行时间加一,判断要求运行时间与已运行时间是否相等,若相等则表示进程结束,进程退出调度,释放资源。 (二) 要求 1. 实现对RR算法的模拟实现 2. 显示执行完一个时间片的结果。 (三) 原理 时间片轮转算法中,系统将所有的就程序按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,调度程序停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理

12、机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。 (四) 数据结构 temp->state='R'; //初始状态每个进程均为运行态 temp->allocation=0; //初始时进程均不占用cpu num+=temp->need_time; //用num来限制循环的次数 (五) 实现方法 处理器调度总是选择标志单元指示的进程运行。执行: 已运行时间+1 来模拟进程的一次运行,表示进程已经运行过一个单位的时间。当一个进程被选中运行时,必须设置该进程能够运行的时间片值,以及恢复进程的现场,让它占有处理器运行,直到出现

13、等待事件或运行满一个时间片 进程运行一次后,应把该进程的进程控制块中的指针值送到标志单元,以指示下一个轮到运行的进程。同时,应判断该进程的要求运行时间与已运行时间,若该进程的要求运行时间¹已运行时间,则表示它尚未执行结束,应待到下一轮时再运行。若该进程的要求运行时间=已运行时间,则表示它已经执行结束,应指导它的状态修改成“结束”且退出队列。此时,应把该进程的进程控制块中的指针值送到前面一个进程的指针位置。 进程名 链接指针 到达时间 估计运行时间 进程状态 进程控制块结构 (六) 运行界面 测试数据: 作业号 执行时间/s A 1 B 2 C 1 执行时

14、间片轮转算法RR如下: B.存储器管理(可变式分区管理) 1)首次适应法 (一) 任务 经过采用首次适应算法实现内存的分配与回收,并能够查看和显示当前内存现状。 (二) 要求 1.实现对FF算法的模拟实现 2.输入要进行分配内存的进程ID和相应所需内存大小,回收内存时输入已运行的进程ID。 (三) 原理 FF算法要求空闲链已地址递增的次序连接。分配内存时,从链首开始顺序查找,直到找到第一个满足要求的空间并分配给进程,把分配后余下的空间依然留在链表中。若从链首至链尾都不满足要求,则分配失败。该算法倾向于优先使用低地址的空间。 (四) 数据结构 int const M

15、EMO=256;//初始化常类型MEMO,用MEMO表示内存大小(常类型的变量或对象的值是不能被更新的) struct FreeMemory { int ID;int StartAdd;int Size; bool State;//定义state 为布尔型变量,其值只有 真 (TRUE) 和假 (FALSE) FreeMemory* Next; }; FreeMemory* AllocTable=new FreeMemory;//建立全局管理表用于内与回收 FreeMemory* PtrforCycleFit=AllocTable;//为循环首次适应定义的指针,此指针

16、用于指向当前查找的起始地址; //初始化内存函数 void MemoryInit(FreeMemory* &tempAdd) { tempAdd->ID=0;//初始化当前进程为空 tempAdd->Size=MEMO;//初始化可分配空间为内存大小 tempAdd->StartAdd=0;//初始化起始地址为0 tempAdd->State=false;// 初始化状态为未分配 tempAdd->Next=NULL;//初始化下一个进程也为空 } //反馈内存现态 void DispMemory() { FreeMemory* temp=Allo

17、cTable;//全局管理表反映内存状态 cout<<"系统总内存: "<Next) cout<<"进程ID:"<ID<<" "<<"大小:"<Size<<" "<<"起始地址:"<StartAdd<<" "<<"是否已分配:"<State<

18、是否有足够的空闲空间,若有,则按需求量分割一部分给作业;若无,则作业等待。随着作业的装入、完成,主存空间被分割成许多大大小小的分区。有的分区被分配作业占用,有的分区空闲。在空闲区表中,按空闲区首地址从低到高进行登记。 当一个作业执行完成时,作业所占用的分区应归还给系统。在归还时,要考虑相邻空间区合并问题。作业的释放区与空闲区的邻接分以下4种情况考虑: A、释放区下邻空闲区; B、释放区上邻空闲区; C、释放区上下都与空闲区邻接; D、释放区上邻空闲区不邻接。 (六) 运行界面 系统总内存为256时,分别为进程1、2、3分配大小为64、128、64的内存。 执行首次适应算法分配内

19、存如下: 若回收进程2的内存,执行结果如下: 2)最佳适应法 (一) 任务 经过采用最佳适应算法实现内存的分配与回收,并能够查看和显示当前内存现状。 (二) 要求 1.实现对BF算法的模拟实现 2.输入要进行分配内存的进程ID和相应所需内存大小,回收内存时输入需要回收的内存块。 (三) 原理 最佳适应算法扫描整个未分配表或链表,从空闲区中挑选一个能满足用户进程要求的最小分区进行分配。此算法保证不会分割一个更大的区域,使得装入大作业的要求容易得到满足,同时,一般把空闲区按长度递增顺序排列,查找时总是从最小的一个空闲区开始,直至找到满足要求的分区为止,这时,最佳适应分

20、配算法等同于首次适应算法。此算法的主存利用率好,所找出的分区如果最好满足要求则是最合适的。 (四) 数据结构 int const MEMO=256;//初始化常类型MEMO,用MEMO表示内存大小(常类型的变量或对象的值是不能被更新的) struct FreeMemory { int ID;int StartAdd;int Size; bool State;//定义state 为布尔型变量,其值只有 真 (TRUE) 和假 (FALSE) FreeMemory* Next; }; bool Alloc_BestFit(int id,int TrySize) {//

21、查找满足此条件的 x1<=TrySize<=x2 的分区,然后将其放置在x2中,并将x2拆分成两个分区 SortPartition(true);//使用快速排序算法,升序排序 for(;temp;temp=temp->Next) { /*回收操作,回收过程中,要用到三个指针,上一个Last,当前temp,下一个temp->next 当temp指向表头或表尾时需要特殊考虑*/ //当要退出工作时,就要回收//此退出的工作由执行函数调用 void EndJob(int id) { Free_Memory(id); } (五) 实现方法 空闲区设置为双向链表,其双

22、向链的分区格式为: 0(状态位) 分区大小(N+2) 向前指针 大小为N的已分配区或空闲区 0(状态位) 分区大小(N+2) 向后指针 (六) 运行界面 测试数据如下: 进程 1 2 3 4 5 6 所需内存 25 34 45 12 13 10 执行最佳适应算法为其分配内存如下: 若回收进程4,执行结果如下: C.虚拟存储器的缺页调度 1)先进先出FIFO (一) 任务 采用先进先出FIFO算法实现分页管理的缺页调度,并输出每次调入调出的页号和运行结果。 (二) 要求 1.实现对FIFO算法的模拟实现 2.输出

23、每次执行的结果。 (三) 原理 基于程序总是按线性顺序来访问物理空间这一假设,总是淘汰最先调入主存的页面,即淘汰在主存中驻留时间最长的页面,认为驻留时间最长的页不再使用的可能性较大。 (四) 数据结构 void FIFO(){ int length; int fifo[100]={0}; int pageLength; int fifoPage[100]={0}; int i,j; cout<<" ***********************先进先出算法**************************"<

24、 length=9; for(i=1;i<=length;i++){ int flag=0; for(j=1;j<=pageLength;j++){ if(fifo[i]==fifoPage[j]){ flag=1; j=pageLength+1; }else if(fifoPage[j]==0){ fifoPage[j]=fifo[i]; j=pageLength+1; flag=1; } } if(flag==1) { } else { c

25、out<<" →淘汰"<

26、并修改页表和存储分块表的对应标志。 (六) 运行界面 测试数据: 页表长度:9; 页框长度:3; 页面请求数列:4,4,3,5,1,1,2,3,2 执行先进先出FIFO算法结果如下: 2)LRU (一) 任务 采用先进先出LRU算法实现分页管理的缺页调度,并输出每次调入调出的页号和运行结果。 (二) 要求 1.实现对LRU算法的模拟实现 2.输出每次执行的结果。 (三) 原理 最近最少使用页面替换算法淘汰的页面是在最近一段时间内最久未被访问的那一页,它是基于程序局部性原理来考虑的,认为那些刚被使用过的页面可能还有立即被使用,而那些在较长时间内未被使用的页面可

27、能不会立即使用。在分页虚拟存储系统中,当硬件发出缺页中断后转操作系统处理缺页中断。如果主存中已无空闲块,可采用LRU算法进行缺页处理。 (四) 数据结构 void LRU() { int length; int lru[100]={0}; int pageLength; int lruPage[100]={0}; int i,j; cout<<" ***********************最近最少使用LRU算法***********************"<

28、1;i<=length;i++){ int flag=0; for(j=1;j<=pageLength;j++){ if(lru[i]==lruPage[j]){ for(int cc=j;cc>0;cc--){ lruPage[cc]=lruPage[cc-1]; } lruPage[1]=lru[i]; flag=1; j=pageLength+1; }else if(lruPage[j]==0){ for(int vv=j;vv>0;vv--){ lruPage[vv]=lru

29、Page[vv-1]; } lruPage[1]=lru[i]; j=pageLength+1; flag=1; } } if(flag==1) { } else { cout<<" →淘汰"<0;j--){ lruPage[j]=lruPage[j-1]; } lruPage[1]=lru[i]; } (五) 实

30、现方法 当采用LRU算法时,用一个数组构成堆栈,堆栈中各个元素为进程已在主存的页号,为了进行页面置换,可设置一个栈指针,初始化为0.假定分配给每个进程的内存块数固定不变。当队列满需淘汰时,操作系统选择栈底元素淘汰,其它元素向下移一个位置,将新调入页放栈指针指示的栈顶。当访问的页在栈中时,还应调整页从当前位置到栈顶。 (六) 运行界面 测试数据: 页表长度:9; 页框长度:3; 页面请求数列:2,3,5,1,5,5,4,4,3 执行最近最少使用LRU算法结果如下: 总结与体会 经过本次课程设计让我对于图形界面设计有了一定的思路和看法,同时我对先来先服务、时间片轮转、首次

31、适应算法、最佳适应算法、先进先出和最近最少使用算法有了更详尽的认识。在编程的过程中发现会用到大量的指针,用指针来操作大量的数据比较方便,但最后应该记得释放资源。从这次实验中我发现我对于c++掌握也有所不足,程序经过了多次修改才得以完善,在以后应该注重编程方面的训练。 另外我还更深入的理解了各个进程调度算法,及实现过程。在编写程序时查询了很多资料,间接提高了我的搜索能力。在此次课程设计过程中,对进程的相关知识有了一定的加深。特别是对进程的进程控制块的存在和价值有了更进一步的认识。在编写程序的过程之中,对进程自身信息的设计和管理以及调度的算法都有助于对书本知识的理解和掌握。特别是设计先来先服务调

32、度算法和时间片轮转调度算法的时候,对进程的调度算法有了更好的深入理解。对进程管理中的等待队列,就绪队列,时间片等概念有了更深刻的印象。 在设计此模拟操作系统的课设中,也加深了对c++知识的把握。解决了一些以往在编程中遇到了困难。经过此次的课程设计,不但提高了对操作系统的认知,也在同时提高了编程的能力,加强了实践。另外,我觉得此次课程设计虽然主要问题是在编程上,可是经过不断的去调试,还是成功的调试了出来。可是这几个程序用了多天的时间进行分析和修改,虽然出现了不少问题,但收获颇多! 源代码: #i

33、nclude #include #include using namespace std; int fcfsoutput(); /*调度结果输出*/ int fcfsinput(); //进程参数的初始化 void kaishi(); #define MAX 10 struct node //建立链表来存放进程数据 { char name[5]; //进程名称 int need_time; //所需要的时间 int allocation; //占用cpu的情况 char state

34、 //当前的状态 R为运行,E为运行完毕 node *next; //链表的尾结点 }; struct task_struct { char name; /*进程名称*/ int number; /*进程编号*/ float come_time; /*到达时间*/ float run_begin_time; /*开始运行时间*/ float run_time; /*运行时间*/ float r

35、un_end_time; /*运行结束时间*/ int priority; /*优先级*/ int order; /*运行次序*/ int run_flag; /*调度标志*/ }tasks[MAX]; int counter; /*实际进程个数*/ int fcfs()/*先来先服务算法*/ { fcfsinput(); float time_temp=0; int i; int number_schedul; time_temp=tasks[0].co

36、me_time; for(i=0;i

37、t fcfsinput() { task_struct tt; int i,j; //初始化进程数 counter=3; //初始化每个到达系统的时间为5、7、8 tasks[0].come_time=rand()%9; tasks[1].come_time=rand()%9; tasks[2].come_time=rand()%9; for(i=1;i<3;i++) { for(j=0;j<3-i;j++) { if(tasks[j].come_time>tasks[j+1].come_

38、time) { tt=tasks[j]; tasks[j]=tasks[j+1]; tasks[j+1]=tt; } } } //初始化每个进程估计运行的时间 tasks[0].run_time=28; tasks[1].run_time=9; tasks[2].run_time=3; //初始化每个进程的名字 tasks[0].name='A'; tasks[1].name='B'; tasks[2].name='C'; cout<

39、<"************************先来先服务算法************************"<

40、ut<<"作业名 到达时间 运行时间 开始时间 停止时间 运行次序 周转时间"<

41、tasks[i].run_begin_time<<'\t'<<" " <

42、/ int rr() { int n=3,num=0; node *head=NULL; node *tail=NULL; cout<<"*********************时间片轮转调度算法*********************"<name,"A");

43、 if(i==1)strcpy(temp->name,"B"); if(i==2)strcpy(temp->name,"C"); temp->need_time=rand()%4+1; temp->state='R'; //初始状态每个进程均为运行态 temp->allocation=0; //初始时进程均不占用cpu num+=temp->need_time; //用num来限制循环的次数 if(!head) { tail=head=temp; } else {

44、 tail->next=temp; tail=temp; tail->next=head; } } node *p; p=head; cout<name<<'\t'<<" "<need_time<<'\t'<<'\t'<allocation<<'s'<next; } cout<<"

45、"<name<<'\t'<<" "<need_time<<'\t'<<'\t'<allocation<<'s'<need_time) { p=p->next; } if(p->need_time) { p->need_time--; p->allocation++; if(

46、p->need_time==0) { p->state='E'; } label=1; p=p->next; } cout<<"执行"<name<<'\t'<<" "<need_time<<'\t'<<'\t'<allocation<<'s'<

47、dl; q=q->next; } cout<<" "<name<<'\t'<<" "<need_time<<'\t'<<'\t'<allocation<<'s'<

48、/ int const MEMO=256;//初始化常类型MEMO,用MEMO表示内存大小(常类型的变量或对象的值是不能被更新的) struct FreeMemory { int ID;int StartAdd;int Size; bool State;//定义state 为布尔型变量,其值只有 真 (TRUE) 和假 (FALSE) FreeMemory* Next; }; FreeMemory* AllocTable=new FreeMemory;//建立全局管理表用于内存分配与回收 FreeMemory* PtrforCycleFit=AllocTa

49、ble;//为循环首次适应定义的指针,此指针用于指向当前查找的起始地址; //初始化内存函数 void MemoryInit(FreeMemory* &tempAdd) { tempAdd->ID=0;//初始化当前进程为空 tempAdd->Size=MEMO;//初始化可分配空间为内存大小 tempAdd->StartAdd=0;//初始化起始地址为0 tempAdd->State=false;// 初始化状态为未分配 tempAdd->Next=NULL;//初始化下一个进程也为空 } //反馈内存现态 void DispMemory() {

50、 FreeMemory* temp=AllocTable;//全局管理表反映内存状态 cout<<"系统总内存: "<Next) cout<<"进程ID:"<ID<<" "<<"大小:"<Size<<" "<<"起始地址:"<StartAdd<<" "<<"是否已分配:"<State<

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服