模拟页式存储管理-操作系统课程设计报告 2
存储管理课程设计

存储管理课程设计一、教学目标本节课的教学目标是让学生掌握存储管理的基本概念、原理和操作方法。
具体包括:1.知识目标:–了解存储管理的定义、作用和重要性;–掌握存储管理的基本原理,如地址映射、内存分配、存储保护等;–熟悉常见的存储管理技术,如分页、分段、虚拟存储等。
2.技能目标:–能够运用存储管理原理分析和解决实际问题;–能够使用相关工具和软件进行存储管理的操作和优化。
3.情感态度价值观目标:–培养学生的创新意识和团队协作精神,提高问题解决能力;–使学生认识到存储管理在计算机系统中的重要性,增强学习的兴趣和动力。
二、教学内容本节课的教学内容主要包括以下几个部分:1.存储管理的基本概念:介绍存储管理的定义、作用和重要性,让学生了解存储管理在计算机系统中的地位。
2.存储管理的基本原理:讲解地址映射、内存分配、存储保护等基本原理,让学生掌握存储管理的核心知识。
3.存储管理技术:介绍常见的存储管理技术,如分页、分段、虚拟存储等,让学生了解各种技术的特点和应用。
4.存储管理工具和软件:讲解如何使用相关工具和软件进行存储管理的操作和优化,提高学生的实际操作能力。
三、教学方法为了激发学生的学习兴趣和主动性,本节课将采用以下教学方法:1.讲授法:教师讲解存储管理的基本概念、原理和操作方法,让学生掌握基本知识。
2.案例分析法:分析实际案例,让学生了解存储管理在计算机系统中的应用和重要性。
3.实验法:引导学生动手实践,使用相关工具和软件进行存储管理的操作和优化。
4.讨论法:学生进行小组讨论,分享学习心得和经验,提高团队协作能力。
四、教学资源为了支持教学内容和教学方法的实施,丰富学生的学习体验,我们将准备以下教学资源:1.教材:选用权威、实用的教材,如《计算机操作系统》、《计算机组成原理》等。
2.参考书:提供相关的参考书籍,如《存储管理技术手册》、《虚拟存储技术》等。
3.多媒体资料:制作精美的PPT、教学视频、动画等,帮助学生形象地理解存储管理的原理和操作。
操作系统的虚拟存储管理与页式存储技术

操作系统的虚拟存储管理与页式存储技术操作系统是计算机系统中非常重要的一个组件,它负责管理计算机硬件和软件资源,协调各个应用程序的执行,以及提供用户与计算机之间的接口。
虚拟存储管理是操作系统中的一个核心功能,它通过将主存(内存)和辅存(磁盘)结合起来,在有限的主存空间中管理多个应用程序的运行和数据存储。
页式存储技术是一种常用的虚拟存储管理技术,下面将详细介绍虚拟存储管理以及页式存储技术的原理和实现方式。
一、虚拟存储管理的概念和原理虚拟存储管理是一种用于管理计算机主存和辅存的技术,它将辅存中的数据自动地转移到主存中,并且能够在程序运行时动态地分配和回收主存空间。
通过虚拟存储管理,即使计算机的主存空间有限,也可以实现更多应用程序的并发执行和大规模数据的存储与处理。
虚拟存储管理的主要原理是将辅存中的数据划分为若干个固定大小的存储块,称为页面(Page)。
同样,主存也被划分为与辅存页面大小相同的存储块,称为页框(Page Frame)。
每个页面和页框都有唯一的标识符,用于管理和映射页面到页框的关系。
当一个应用程序需要访问或执行某个页面时,操作系统将其从辅存中读入一个空闲的页框,并将其映射到相应的页面标识符。
如果主存中没有空闲的页框,则需要使用一定的页面置换算法将某个页面替换出去,以腾出页框给新的页面使用。
虚拟存储管理能够有效地利用计算机的主存资源,并且能够在不同的应用程序之间进行数据保护和隔离。
通过页面和页框的映射关系,操作系统可以实现虚拟地址空间的划分和隔离,每个应用程序都认为自己独占了整个计算机的内存空间,而不需要关心其他应用程序的存在。
二、页式存储技术的实现方式页式存储技术是一种基于虚拟存储管理的实现方式,它将主存和辅存划分为固定大小的页面,并且使用页表来管理页面和页框的映射关系。
下面将详细介绍页式存储技术的实现方式。
1. 页面和页框的划分页式存储技术将辅存和主存划分为固定大小的页面和页框,通常大小为2的幂次方,例如2KB、4KB或者16KB等。
存储管理实训报告

一、实训目的1. 通过本次实训,加深对存储管理方案的理解,掌握虚拟存储器的管理方式,熟悉虚存管理的各种页面淘汰算法。
2. 通过编写和调试地址转换过程的模拟程序,加强对地址转换过程的理解。
3. 培养编程能力和问题解决能力,提高实际操作水平。
二、实训环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 20194. 硬件配置:CPU:Intel Core i5,内存:8GB,硬盘:256GB SSD三、实训原理1. 虚拟存储器:虚拟存储器是一种将内存与外存相结合的存储管理技术,可以扩大程序可访问的存储空间。
2. 页面置换算法:页面置换算法是虚拟存储器中的一种内存管理技术,用于确定在内存中保留哪些页面,淘汰哪些页面。
3. 地址转换过程:地址转换过程是将逻辑地址转换为物理地址的过程。
四、实训内容1. 设计一个请求页式存储管理方案,并编写模拟程序实现。
2. 产生一个需要访问的指令地址流,其中50%的指令是顺序执行的,25%的指令均匀地散布在前地址部分,25%的地址是均匀地散布在后地址部分。
3. 指定内存页表的最大长度,并对页表进行初始化。
4. 每访问一个地址时,计算该地址所在的页的页号,然后查页表,判断该页是否在主存。
5. 如果该页已在主存,则打印页表情况;如果该页不在主存,则采用FIFO页面淘汰算法淘汰一页,并将该页在页表中抹去。
6. 编写代码实现上述功能,并进行测试。
五、实训过程1. 确定虚拟存储器的大小、内存大小、页面大小和页面置换算法。
2. 设计数据结构存储页面信息,包括页号、是否在内存中、是否被修改等。
3. 编写函数实现地址转换过程,包括计算页号、判断页是否在内存中等。
4. 编写FIFO页面淘汰算法,淘汰不在内存中的页面。
5. 编写测试程序,生成指令地址流,并调用相关函数进行测试。
六、实训结果1. 成功实现了请求页式存储管理方案,并编写了相应的模拟程序。
虚拟存储器管理实验报告

淮海工学院计算机科学系实验报告书课程名:《操作系统》题目:虚拟存储器管理页面置换算法模拟实验班级:学号:姓名:一、实验目的与要求1.目的:请求页式虚存管理是常用的虚拟存储管理方案之一。
通过请求页式虚存管理中对页面置换算法的模拟,有助于理解虚拟存储技术的特点,并加深对请求页式虚存管理的页面调度算法的理解。
2.要求:本实验要求使用C语言编程模拟一个拥有若干个虚页的进程在给定的若干个实页中运行、并在缺页中断发生时分别使用FIFO和LRU算法进行页面置换的情形。
其中虚页的个数可以事先给定(例如10个),对这些虚页访问的页地址流(其长度可以事先给定,例如20次虚页访问)可以由程序随机产生,也可以事先保存在文件中。
要求程序运行时屏幕能显示出置换过程中的状态信息并输出访问结束时的页面命中率。
程序应允许通过为该进程分配不同的实页数,来比较两种置换算法的稳定性。
二、实验说明1.设计中虚页和实页的表示本设计利用C语言的结构体来描述虚页和实页的结构。
在虚页结构中,pn代表虚页号,因为共10个虚页,所以pn的取值范围是0—9。
pfn代表实页号,当一虚页未装入实页时,此项值为-1;当该虚页已装入某一实页时,此项值为所装入的实页的实页号pfn。
time项在FIFO算法中不使用,在LRU中用来存放对该虚页的最近访问时间。
在实页结构中中,pn代表虚页号,表示pn所代表的虚页目前正放在此实页中。
pfn代表实页号,取值范围(0—n-1)由动态指派的实页数n所决定。
next是一个指向实页结构体的指针,用于多个实页以链表形式组织起来,关于实页链表的组织详见下面第4点。
2.关于缺页次数的统计为计算命中率,需要统计在20次的虚页访问中命中的次数。
为此,程序应设置一个计数器count,来统计虚页命中发生的次数。
每当所访问的虚页的pfn项值不为-1,表示此虚页已被装入某实页内,此虚页被命中,count加1。
最终命中率=count/20*100%。
操作系统-课程设计

操作系统-课程设计一、课程目标知识目标:1. 理解操作系统的基本概念、功能、类型及发展历程;2. 掌握操作系统的五大功能模块(处理器管理、存储器管理、设备管理、文件管理、用户接口)的工作原理;3. 了解操作系统的安全性、稳定性和性能评价标准;4. 熟悉至少一种主流操作系统(如Windows、Linux)的安装、配置及使用。
技能目标:1. 能够使用操作系统基本命令进行文件管理、系统监控等操作;2. 学会编写简单的批处理脚本,实现自动化操作;3. 掌握操作系统设置、优化及故障排除的基本方法;4. 能够分析操作系统的性能问题,并提出合理的解决方案。
情感态度价值观目标:1. 培养学生对操作系统的兴趣,激发学习热情;2. 培养学生的团队协作精神,学会在团队中共同解决问题;3. 增强学生的信息安全意识,遵守网络道德规范,尊重知识产权;4. 培养学生的创新意识,敢于尝试新事物,勇于克服困难。
课程性质:本课程为信息技术学科,结合学生年级特点,注重理论与实践相结合,培养学生的实际操作能力。
学生特点:学生具备一定的计算机操作基础,对操作系统有一定了解,但深入理解不足,需要通过课程学习提高认识。
教学要求:以学生为主体,教师为主导,注重启发式教学,引导学生主动探究,提高学生的实践操作能力。
通过课程学习,使学生在知识、技能和情感态度价值观方面取得具体的学习成果,为后续相关课程的学习打下坚实基础。
二、教学内容1. 操作系统的基本概念:介绍操作系统的定义、功能、类型及发展历程,对应教材第一章内容。
2. 操作系统五大功能模块:- 处理器管理:讲解处理器分配、调度算法等,对应教材第二章;- 存储器管理:介绍内存分配、回收、地址映射等,对应教材第三章;- 设备管理:阐述设备分配、I/O调度、缓冲管理等,对应教材第四章;- 文件管理:讲解文件系统结构、文件存储、目录管理等,对应教材第五章;- 用户接口:介绍命令行接口、图形用户接口等,对应教材第六章。
段页式存储模拟课程设计

段页式存储模拟课程设计一、教学目标本课程旨在让学生了解和掌握段页式存储的基本原理和实现方法。
知识目标要求学生理解内存管理的重要性,掌握分页和分段的基本概念,了解虚拟内存的实现机制。
技能目标要求学生能够使用编程语言实现简单的段页式存储管理系统,能够分析程序的内存使用情况。
情感态度价值观目标则是培养学生对计算机科学的兴趣,提高他们解决实际问题的能力。
二、教学内容本课程的教学内容主要包括四个部分:内存管理概述、分页存储管理、分段存储管理、段页式存储管理。
首先,通过介绍内存管理的基本概念,使学生了解内存管理的重要性。
然后,讲解分页和分段的原理及其优缺点,让学生掌握不同的内存管理技术。
接着,详细介绍虚拟内存的实现机制,使学生了解如何利用硬盘来扩展内存。
最后,通过实例分析,让学生了解段页式存储管理的具体实现。
三、教学方法为了提高学生的学习兴趣和主动性,本课程将采用多种教学方法。
首先是讲授法,通过讲解内存管理的基本概念、原理和实现方法,使学生掌握理论知识。
然后是讨论法,引导学生针对实际问题进行思考和讨论,提高他们的解决问题的能力。
此外,还将采用案例分析法和实验法,让学生通过分析实际案例和动手实验,加深对内存管理技术的理解和掌握。
四、教学资源为了支持教学内容和教学方法的实施,我们将选择和准备多种教学资源。
教材方面,我们将使用《计算机组成与设计》等经典教材,为学生提供系统的理论知识。
参考书方面,我们将推荐《现代操作系统》等书籍,供学生深入研究。
多媒体资料方面,我们将制作PPT和视频教程,以直观的方式呈现复杂的原理和实现过程。
实验设备方面,我们将准备计算机实验室,让学生能够动手实践,提高实际操作能力。
五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分。
平时表现主要评估学生在课堂上的参与程度和讨论表现,通过观察和记录来评价学生的学习态度和积极性。
作业则是对学生理解力和应用能力的考察,通过布置相关的编程练习和理论题目,评估学生对知识的掌握程度。
操作系统实验六-虚拟存储器实验报告

实验六虚拟存储器一、实验内容模拟分页式虚拟存储管理中硬件的地址转换和缺页中断,以及选择页面调度算法处理缺页中断。
二、实验目的在计算机系统中,为了提高主存利用率,往往把辅助存储器(如磁盘)作为主存储器的扩充,使多道运行的作业的全部逻辑地址空间总和可以超出主存的绝对地址空间。
用这种办法扩充的主存储器称为虚拟存储器。
通过本实验帮助同学理解在分页式存储管理中怎样实现虚拟存储器。
三、实验题目本实验有三道题目,其中第一题必做,第二,三题中可任选一个。
第一题:模拟分页式存储管理中硬件的地址转换和产生缺页中断。
[提示](1)分页式虚拟存储系统是把作业信息的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。
为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:其中,标志----用来表示对应页是否已经装入主存,标志位=1,则表示该页已经在主存,标志位=0,则表示该页尚未装入主存。
主存块号----用来表示已经装入主存的页所占的块号。
在磁盘上的位置----用来指出作业副本的每一页被存放在磁盘上的位置。
(2)作业执行时,指令中的逻辑地址指出了参加运算的操作存放的页号和单元号,硬件的地址转换机构按页号查页表,若该页对应标志为“1”,则表示该页已在主存,这时根据关系式:绝对地址=块号×块长+单元号计算出欲访问的主存单元地址。
如果块长为2的幂次,则可把块号作为高地址部分,把单元号作为低地址部分,两者拼接而成绝对地址。
若访问的页对应标志为“0”,则表示该页不在主存,这时硬件发“缺页中断”信号,有操作系统按该页在磁盘上的位置,把该页信息从磁盘读出装入主存后再重新执行这条指令。
(3)设计一个“地址转换”程序来模拟硬件的地址转换工作。
当访问的页在主存时,则形成绝对地址,但不去模拟指令的执行,而用输出转换后的地址来代替一条指令的执行。
当访问的页不在主存时,则输出“* 该页页号”,表示产生了一次缺页中断。
操作系统课程设计报告

实践课设计报告课程名称操作系统课程设计模拟设计内存管理中的地址题目转换(动态分区、页式十进制)学院班级学号姓名指导教师年月日课程设计任务书学生姓名:专业班级:指导教师:工作单位:题目: 模拟设计内存管理中的地址转换(动态分区、页式十进制)初始条件:1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区、页式、段式和段页式存储管理的思想及相应的分配主存的过程。
2.实践准备:掌握一种计算机高级语言的使用。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.下列内部存储器管理中地址转换,在完成指定存储管理技术中的地址转换基础上还可以选择其它内部存储器管理中的地址转换进行模拟设计并实现:⑴动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。
能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。
如果不能计算出相应的物理地址,说明原因。
⑵页式存储管理中逻辑地址到物理地址的转换(十进制)。
能够处理以下的情形:输入某一十进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十进制表示。
⑶页式存储管理中逻辑地址到物理地址的转换(八进制)。
能够处理以下的情形:输入某一八进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用八进制表示。
⑷页式存储管理中逻辑地址到物理地址的转换(十六进制)。
能够处理以下的情形:输入某一十六进制逻辑地址,能检查地址的合法性,如果合法进行转换,否则显示“地址非法”;物理地址用十六进制表示。
⑸段式存储管理中逻辑地址到物理地址的转换。
能够处理以下的情形:指定内存的大小,进程的个数,每个进程的段数及段大小;能检查地址的合法性,如果合法进行转换,否则显示地址非法的原因。
⑹段页式存储管理中逻辑地址到物理地址的转换。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、目的和要求1、设计目的通过请求页式存储管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
2、设计要求根据模拟的页式管理设计,掌握在页式存储管理中最基本的三种页面调度算法FIFO、LRU以及OPT。
但在三种算法中均要求在调度程序中产生的页面序列是随机产生的,而不是人为的输入,在执行时只需改变页面的大小及内存容量就可以得到不同的页面序列,另外还需要说明随机的性能和其性能可能对算法的影响,并对随机性要有一定的参数控制能力。
此外,计算并输出FIFO、LRU以及OPT算法在不同内存容量下的命中率。
根据方法的执行过程,编写一个解决上述问题的程序,显示访问每个值页面中的值。
具体参数:访问串的长度,访问串,页面个数。
分别用3种不同的方法实现页面的置换,并输出相关信息。
二、设计思路及过程1、概要设计1.1 问题概述根据三种不同的置换算法,依据其不同的算法方式,分别计算该算法在不同情况下的命中率,并显示各页面的变化情况。
1.2 内容分析对于该课程设计中模拟的页式存储管理的页面置换过程,只要掌握其中最基本的三种算法,包括FIFO、LRU及OPT。
但最重要的一点就是要求产生随机序列,所以在编写程序时要采用控制产生随机值的种子数函数,如此能产生随机的访问序列。
另外,不能在执行完一次操作后就只能进行另外一种算法的操作,必须还要有更加详细的操作,比如:是否要重新得到新序列?还是要不改变访问序列而只改变访问串的内存容量?抑或是不操作就退出该算法以进行下一种调度算法?因此,在执行完每次操作后都必须要有提示语,看是否进入更细节的操作,还是退出本次算法的操作以进入下一种算法的调度。
2、过程设计2.1模块设计在下图的主模块设计图中,只注重描绘了页式存储管理的三种主要算法,未描绘出细节部分。
其中,在执行每种算法时都会要求输入你所需要的访问串长度、随机值以及同一种算法的不同内存容量,如此就可以得出不同的命中率。
另外,在执行完该操作后又会出现三条提示语,是重新得到新序列?还是不改变访问序列只改变访问串的内存容量?抑或是不操作退出以进行下一种调度算法?这些在下图中都未一一实现。
=2.2 算法原理分析要学成功实现算法,首先要知道各个方法是怎么做的,即原理是怎样的,下面是三种算法的原理。
FIFO算法是先进先出,当当前内存中没有正要访问的页面时,置换出最先进来的页面。
LRU算法是最近最久未使用,当当前内存中没有正要访问的页面时,置换出在当前页面中最近最久没有使用的页面。
OPT算法是未来最远出现,当当前内存中没有正要访问的页面时,置换出当前页面中在未来的访问页中最远出现的页面或再也不出现的页面。
2.3 程序流程图本次课程设计的主要流程是3种置换算法的流程图,本人负责OPT,流程图如下所示:图2.2 OPT 算法流程图三、数据定义int length,num_page,count,seed; //length 记录访问串的长度,num_page 页面数,count 记录缺页次数int result[20][30],order[30],a[10]; //result 记录结果,order 存储访问串,a 存储当前页面中的值 int pos1,flag1,flag2,flag3; //pos1位置变量,flag1等为标志变量 char result1[30]; //记录缺页数组NNYY开始输入内存中分配页数NY 还有请求访问页?内存中是否已存在?直接复制前一列内容内存有空页?直接插入替换内存中将来不出现或离当前最远的页输出全部页面变化情况结束据第一个访问页初始化第一列值四、核心代码三种置换算法中只列出本人负责部分(OPT算法),具体代码及注释如下:void opt() //理想型{int i,pos[10],flag[10];//i为for循环控制语句,pos为位置变量,flag标志变量while(1){flag1=flag2=0;for(i=0;i<length;i++)//访问串遍历{if(!search(order[i]))//查询要访问的页是否在内存中{count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{memset(pos,-1,sizeof(pos));//初始pos数组memset(flag,0,sizeof(flag));//初始flag数组int j,k;for( j=i;j<length;j++)//找当前页中的值在将来访问串中对应最近位置{for( k=0;k<num_page;k++){if(order[j]==a[k]&&flag[k]==0){pos[k]=j;flag[k]=1;}}}cout<<endl;int max=-10,max_pos;for( k=0;k<num_page;k++)//找出位置最远的那个值{if(pos[k]==-1)//未出现则跳出,替换该值{max_pos=k;break;}else if(max<pos[k]){max=pos[k];max_pos=k;}}a[max_pos]=order[i];}else //还有空页,直接调入内存{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}其中的查询函数search()具体代码如下: bool search(int n) //查找当前内存中是否已存在该页{int i;for(i=0;i<num_page;i++){if(a[i]==n)return true;}return false;}其中的再操作函数again(),具体代码如下:void again() //用于再输入{print();int numpage,m;printf("************************************** \n");printf(" 1.重新输入新序列.\n");printf(" 2.不改变访问序列只改变页面数.\n");printf(" 0.不操作退出.\n");printf("************************************** \n");printf(" 选择所要操作:");scanf("%d",&m);if(m==1){flag1=1; //重新输入init();}else if(m==2){flag2=1;cout<<"输入新页面数:";cin>>numpage;num_page=numpage;memset(a,-1,sizeof(a));}else return ;}五、运行截图根据不同的分工,限于纸张只列出部分截图,以下是对OPT调度算法的实验截图:图5.1 相同的内存容量下不同的访问串序列1图5.2 相同的内存容量下不同的访问串序列2依上图5.1和5.2来看,OPT调度算法在访问串长度一致,随机值不同以致产生不同的访问串序列时,但页面数相同的情况下,所得到的命中率也不同。
图5.3 不同的内存容量下相同的访问串序列在上图5.3中就是对同一访问串序列进行OPT调度,只是改变其页面的大小,得到了不同的命中率。
六、小结生程序,并说明随机的性能和其性能可能对算法的影响,对随机性要有一定的参数控制能力;计算并输出FIFO及LRU算法在不同内存容量下的命中率。
做了这么多次课程设计了,大致的过程都熟悉了,每次的动手实践,调动了我们主动学习的积极性, 并引导我们根据实际编程要求, 训练自己实际分析问题的能力及编程能力, 并养成良好的编程习惯。
通过详细的实例, 循序渐进地启发我们完成设计课程设计将要求。
从拿到题目到完成整个编程,从理论到实践可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
知识的获得是无止境的,只要你想学,只要你行动,就一定会有所收获的。
回首这两个星期的课程设计,尽管很是头痛,很多都不会,但经过努力,我们还是学了不少知识的。
这期间,老师给了我们许多帮助,非常感谢!附录所有源程序代码如下:#include<iostream>#include<stdlib.h>using namespace std;int length,num_page,count,seed;int result[20][30],order[30],a[10];int pos1,flag1,flag2,flag3;char result1[30];void init(){memset(a,-1,sizeof(a));int i;cout<<"输入访问串的长度:";cin>>length;cout<<"输入种子数控制产生的随机值:";cin>>seed;srand(seed);cout<<"产生的随机访问串:";for(i=0;i<length;i++){// cin>>order[i];order[i]=rand()%10;cout<<order[i]<<" ";}cout<<endl;cout<<"输入页面的个数:";cin>>num_page;}void print(){int i,j;cout<<"(*表示缺页)"<<endl;cout<<endl;for( j=0;j<length;j++)printf("%2d ",order[j]);cout<<endl;for( i=0;i<num_page;i++){for( j=0;j<length;j++){if(result[i][j]==-1){printf(" ");}elseprintf("%2d ",result[i][j]);}cout<<endl;}for( j=0;j<length;j++){printf("%2c ",result1[j]);}cout<<endl;cout<<"缺页率:"<<count<<"/"<<length;printf("=%.1lf",(count*1.0)/(length*1.0)*100);cout<<"%"<<endl;}bool search(int n) //查找当期内存是否已存在{int i;for(i=0;i<num_page;i++){if(a[i]==n)return true;}return false;}void again() //用于再输入{print();int numpage,m;printf("************************************** \n");printf(" 1.重新输入新序列.\n");printf(" 2.不改变访问序列只改变页面数.\n");printf(" 0.不操作退出.\n");printf("************************************** \n");printf(" 选择所要操作:");scanf("%d",&m);if(m==1){flag1=1; //重新输入init();}else if(m==2){flag2=1;cout<<"输入新页面数:";cin>>numpage;num_page=numpage;memset(a,-1,sizeof(a));}else return ;}void fifo() //先进先出{int i,thisn=0;while(1){count=0;flag1=flag2=0;for(i=pos1;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{a[thisn]= order[i];thisn++;if(thisn>=num_page)thisn=0;}else{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}void lru() //最久最近没使用{int i,pos[10];while(1){count=0;flag1=flag2=0;memset(pos,-1,sizeof(pos));for(i=pos1;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{int j,k;for( j=0;j<i;j++) //查找当前页中的值对应的最近位置{for( k=0;k<num_page;k++){if(order[j]==a[k]){pos[k]=j;}}}int min=pos[0],min_pos=0;for( k=1;k<num_page;k++)//找出位置最远的那个{if(min>pos[k]){min=pos[k];min_pos=k;}}a[min_pos]=order[i];}else //还有空页{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}void opt() //理想型{int i,pos[10],flag[10];while(1){flag1=flag2=0;for(i=0;i<length;i++){if(!search(order[i])){count++;result1[i]='*';if(a[num_page-1]!=-1) //表示当前页面已满要淘汰一个{memset(pos,-1,sizeof(pos));memset(flag,0,sizeof(flag));int j,k;for( j=i;j<length;j++)//找出当前页中的值在将来访问串中对应的最近位置{for( k=0;k<num_page;k++){if(order[j]==a[k]&&flag[k]==0){pos[k]=j;flag[k]=1;}}}cout<<endl;int max=-10,max_pos;for( k=0;k<num_page;k++)//找出位置最远的那个值{if(pos[k]==-1)//未出现则跳出,替换该值{max_pos=k;break;}else if(max<pos[k]){max=pos[k];max_pos=k;}}a[max_pos]=order[i];}else //还有空页{for(int j=0;j<num_page;j++){if(a[j]==-1){a[j]=order[i];break;}}}}else result1[i]=' ';for(int j=0;j<num_page;j++){result[j][i]=a[j];}}again(); //再操作if(flag1==0&&flag2==0)break;}}void mune(){int m;printf("\n**************************************\n\n");printf(" 动态分配分区方法演示\n");printf("\n************************************** \n\n");printf(" 1.先进先出算法.\n\n");printf(" 2.最久最近未使用页面置换算法.\n\n");printf(" 3.理想型淘汰算法.\n\n");printf(" 0.退出程序.\n");printf("\n************************************** \n");printf("\n 选择所要操作:");scanf("%d",&m);switch(m){case 1:init();fifo( );mune();break;case 2:init();lru( );mune();break;case 3:init();opt( );mune();break;case 0:break;default:printf("选择错误,重新选择.");mune();}}void main() //主函数{mune();}。