基本分页存储管理系统的设计 操作系统课程设计

合集下载

基本分页存储管理方式教案

基本分页存储管理方式教案

教案
设问2:那么,分页系统的逻辑地址能够用线性地址表示吗?(ppt7)
任务2:逻辑地址结构(板书:逻辑地址结构)
(1)逻辑地址是线性的(ppt8~10 板书:线性的?)例如,(解释ppt图示)
一个用户进程需要17个逻辑地址表示,当页面大小为8B时(即每页内包含8个地址),每个地址的最低3位数组成“0~7”8个数字,而其最高两位数相同,即每个地址都可以表示它所在页号以及页内位移量;
当页面大小为4B时(即每页内包含4个地址),每个地址的最低2位数组成“0~3”4个数字,而其最高3位数相同,恰好等于其所在的页面号。

答设问2:线性地址可以表示其所在的页号和页内位移量,逻辑地址可以用线性地址表示。

(板书:√)
设问3:如何根据已知信息确定逻辑地址两部分的位数呢?
(2)逻辑地址结构(ppt11)学法分析:表象与最终
答案形成强烈反差,思
维必然会受到刺激达
到理解和记忆的兴奋
点。

设疑:继续设疑,利用
兴奋延迟期解决关键
问题。

实例启发用生活实例
启发思考,能使学生更
快地找到答案。

4分

2分

3分
钟。

课程设计分页存储

课程设计分页存储

课程设计分页存储一、教学目标本课程的教学目标是使学生掌握分页存储的概念、原理和应用,提高他们分析和解决实际问题的能力。

具体目标如下:1.知识目标:理解分页存储的基本原理;掌握分页存储的关键技术;了解分页存储在数据库系统中的应用。

2.技能目标:能够使用分页存储技术解决实际问题;能够对分页存储性能进行评估和优化。

3.情感态度价值观目标:培养学生对分页存储技术的兴趣,激发他们继续探究的热情;培养学生团队协作、自主学习的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1.分页存储基本原理:介绍分页存储的定义、作用和优势;2.分页存储关键技术:讲解分页存储的关键技术,如分页算法、页替换算法等;3.分页存储在数据库系统中的应用:介绍分页存储在数据库系统中的具体应用,如数据索引、查询优化等;4.案例分析:分析实际应用场景中的分页存储问题,培养学生解决实际问题的能力。

三、教学方法为了实现本课程的教学目标,我们将采用以下教学方法:1.讲授法:用于讲解分页存储的基本原理和关键技术;2.讨论法:学生针对案例进行分析讨论,提高他们解决问题的能力;3.实验法:让学生动手实践,加深对分页存储技术的理解和掌握;4.小组合作:鼓励学生团队合作,培养团队协作精神。

四、教学资源为了支持本课程的教学内容和教学方法,我们将准备以下教学资源:1.教材:选用权威、实用的教材,为学生提供系统的理论知识;2.参考书:提供相关领域的参考书籍,丰富学生的知识体系;3.多媒体资料:制作精美的PPT、教学视频等,提高学生的学习兴趣;4.实验设备:准备相关的实验设备,为学生提供实践操作的机会。

五、教学评估为了全面、客观地评估学生的学习成果,我们将采用以下评估方式:1.平时表现:通过观察学生在课堂上的参与度、提问回答等情况,评估他们的学习态度和理解程度;2.作业:布置与课程内容相关的作业,评估学生对知识点的掌握情况;3.考试:定期进行考试,全面考察学生的知识掌握和应用能力。

(完整word版)操作系统课程设计-模拟设计页式存储管理的分配与回收范文

(完整word版)操作系统课程设计-模拟设计页式存储管理的分配与回收范文

学号:28课程设计模拟设计页式储存管理的分题目配与回收学院计算机科学与技术专业计算机科学与技术班级XX姓名XX指导教师XXX2011年01月09日课程设计任务书学生姓名:XX专业班级:计算机0902班指导教师:XXX工作单位:计算机科学与技术学院题目:模拟设计页式储存管理的分派与回收初始条件:1.预备内容:阅读操作系统的内存管理章节内容,认识有关虚构储存器、页式存储管理等观点,并领会页式管理内存的分派和回收过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求达成的主要任务 : (包含课程设计工作量及其技术要求,以及说明书撰写等详细要求)1.采纳页式管理方案实行内存分派和回收。

能够办理以下的情况⑴ 能够输入给定的内存页面数,页面大小,进度的个数及每个进度的页数。

⑵ 要求当某进度提出申请空间的大小后,显示可否知足申请,以及为该进度分配资源后内存空间的使用状况(被进度占用的页面,安闲的页面)。

2.设计报告内容应说明:⑴ 课程设计目的与功能;⑵需求剖析,数据构造或模块说明( 功能与框图 );⑶ 源程序的主要部分;⑷ 测试用例,运转结果与运转状况剖析;⑸ 自我评论与总结:i)你以为你达成的设计哪些地方做得比较好或比较优秀;ii)什么地方做得不太好,此后怎样更正;iii )从本设计获得的收获(在编写,调试,履行过程中的经验和教训);iv)达成此题能否有其余的其余方法(假如有,简要说明该方法);v)对实验题的评论和改良建议,请你介绍设计题目。

时间安排:设计安排一周:周1、周 2:达成程序剖析及设计。

周 2、周 3:达成程序调试及测试。

周 4、周 5:查收,撰写课程设计报告。

(注意事项:禁止剽窃,一旦发现,抄与被抄的一律按0 分记)指导教师署名:年月日系主任(或责任教师)署名:年月日武汉理工大学《操作系统》课程设计说明书模拟设计页式储存管理的分派与回收1需求剖析页式管理是一种内存空间储存管理的技术,页式管理分为静态页式管理和动向页式管理。

操作系统课程设计-模拟设计页式存储管理的分配与回收范文

操作系统课程设计-模拟设计页式存储管理的分配与回收范文

学号:28课程设计模拟设计页式存储管理的分题目配与回收学院计算机科学与技术专业计算机科学与技术班级XX姓名XX指导教师XXX2011年01月09日课程设计任务书学生姓名: XX 专业班级:计算机0902班指导教师: XXX 工作单位:计算机科学与技术学院题目: 模拟设计页式存储管理的分配与回收初始条件:1.预备内容:阅读操作系统的内存管理章节内容,了解有关虚拟存储器、页式存储管理等概念,并体会页式管理内存的分配和回收过程。

2.实践准备:掌握一种计算机高级语言的使用。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.采用页式管理方案实施内存分配和回收。

能够处理以下的情形⑴能够输入给定的内存页面数,页面大小,进程的个数及每个进程的页数。

⑵要求当某进程提出申请空间的大小后,显示能否满足申请,以及为该进程分配资源后内存空间的使用情况(被进程占用的页面,空闲的页面)。

2.设计报告内容应说明:⑴课程设计目的与功能;⑵需求分析,数据结构或模块说明(功能与框图);⑶源程序的主要部分;⑷测试用例,运行结果与运行情况分析;⑸自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他的其他方法(如果有,简要说明该方法);v)对实验题的评价和改进意见,请你推荐设计题目。

时间安排:设计安排一周:周1、周2:完成程序分析及设计。

周2、周3:完成程序调试及测试。

周4、周5:验收,撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,抄与被抄的一律按0分记)指导教师签名:年月日系主任(或责任教师)签名:年月日武汉理工大学《操作系统》课程设计说明书模拟设计页式存储管理的分配与回收1需求分析页式管理是一种内存空间存储管理的技术,页式管理分为静态页式管理和动态页式管理。

请求分页式存储管理课程设计java

请求分页式存储管理课程设计java

请求分页式存储管理课程设计java在Java中实现分页式存储管理,可以设计一个简单的模拟系统,如下面的概念框架。

假设我们有一组固定大小的页和一组固定大小的内存帧。

分页算法的任务是当请求来时,找到一个空闲的内存帧并分配给请求的页。

下面是一个简单的课程设计方案:定义页面和帧的概念:使用类来表示页和帧。

class Page {// ...}class Frame {// ...}创建页表和帧池:使用集合来表示页表和帧池Map<Page, Frame> pageTable = new HashMap<>();List<Frame> framePool = new ArrayList<>();实现分页算法:当请求到来时,找到一个空闲的帧并分配给请求的页。

如果没有空闲的帧,那么就需要使用某种页面替换算法(如最少使用算法或最近最久未使用算法)来选择一个帧进行替换。

public Frame allocateFrame(Page page) {// ...}处理页错误:如果请求的页不在内存中,那么就会产生页错误。

在这种情况下,需要将页面从磁盘加载到内存中。

public void handlePageFault(Page page) {// ...}这只是一个非常基础的框架,你可能需要添加更多的功能,比如模拟从磁盘读取页面的延迟,或者记录并显示内存的使用情况等。

记住,这个项目是一个模拟的分页存储管理系统,所以实际的实现细节可能会有所不同。

在实际的操作系统中,分页存储管理涉及到很多复杂的问题,比如虚拟内存管理、页面替换算法、页表管理等。

计算机操作系统课程设计内容

计算机操作系统课程设计内容

计算机操作系统课程设计内容设计内容二虚拟存储管理(请求分页存储管理)1.目的和要求存储管理的主要功能之一是合理的分配空间。

请求页式管理是一种常用的虚拟存储管理技术。

本实验的目的是:通过编写和调试请求页式存储管理中页面置换算法的模拟程序以加深对存储管理方案的理解,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换方法;通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。

2.实验内容阅读教材《计算机操作系统》,掌握存储器管理相关概念和原理。

(1)在分页存储管理中,用C语言实现硬件的地址转换和缺页中断。

(2)设计页面表格。

分页式虚拟存储系统是把作业的副本存放在磁盘上,当作业被选中时,可把作业的开始几页先装入主存且启动执行。

为此,在为作业建立页表时,应说明哪些页已在主存,哪些页尚未装入主存,页表的格式为:页码表示主内存块号在磁盘上的位置可根据页面置换算法的不同,页表构的内容可以作适当的增删。

(3)地址计算。

执行作业时,指令中的逻辑地址指示参与操作的操作数的页码和单元号。

硬件的地址转换机制根据页码查找页表。

如果页面的相应标志为“1”,则表示该页面已在主存中。

此时,根据关系:绝对地址=块号*块长+单元号计算要访问的主存单元的地址。

根据计算出的绝对地址,可以获得操作数来完成指令的执行。

如果访问的页面标志为“0”,则表示该页面不在主存中。

此时,硬件发送“缺页中断”信号。

操作系统根据页面在磁盘上的位置从磁盘读取页面信息,将其加载到主内存中,然后重新执行该指令。

(4)设计“地址转换”程序模拟硬件的地址转换工作。

当被访问的页面位于主存中时,它会形成一个绝对地址,但不会模拟指令的执行,而是使用输出转换后的地址来代替指令的执行。

当被访问的页面不在主存中时,将输出“*该页面的页码”,表明已生成缺页中断,并将执行缺页中断程序。

模拟程序的算法如图1.2所示。

开始取一条指令取指令中访问的页号查页表是否该页标志=1?输出绝对地址转缺页中断子程序形成绝对地址有后继指令?否结束是取一条指令图1.2地址转换模拟流程图(5)缺页中断模拟。

操作系统课程设计内存管理

操作系统课程设计内存管理

操作系统课程设计内存管理一、课程目标知识目标:1. 理解内存管理的基本概念,掌握内存分配、回收的原理及方法;2. 掌握虚拟内存的原理,了解分页、分段等内存管理技术;3. 了解操作系统中内存保护、共享、碎片处理等相关问题。

技能目标:1. 能够运用所学知识,分析并设计简单的内存管理算法;2. 能够通过编程实践,实现基本的内存分配与回收功能;3. 能够运用虚拟内存技术,解决实际问题。

情感态度价值观目标:1. 培养学生对操作系统中内存管理知识的学习兴趣,激发学生主动探索精神;2. 培养学生的团队协作意识,学会与他人共同解决问题;3. 增强学生的信息安全意识,了解内存管理在操作系统安全中的重要性。

课程性质分析:本课程为操作系统课程设计的一部分,侧重于内存管理方面的知识。

内存管理是操作系统核心功能之一,对于提高系统性能、保障系统安全具有重要意义。

学生特点分析:学生为计算机科学与技术等相关专业的高年级本科生,具备一定的操作系统基础知识,具备一定的编程能力,但可能对内存管理的深入了解和应用尚有不足。

教学要求:1. 结合实际案例,深入浅出地讲解内存管理的基本原理和方法;2. 采用任务驱动法,引导学生通过实践,掌握内存管理技术;3. 注重培养学生的动手能力和创新能力,提高学生解决实际问题的能力。

二、教学内容1. 内存管理概述:介绍内存管理的基本概念、任务和目标;- 教材章节:第2章 内存管理概述- 内容:内存分配、回收原理,内存保护、共享机制。

2. 内存管理技术:讲解物理内存管理和虚拟内存管理技术;- 教材章节:第3章 内存管理技术- 内容:分页管理、分段管理、段页式管理,内存碎片处理。

3. 内存管理算法:分析常见的内存分配和回收算法;- 教材章节:第4章 内存管理算法- 内容:首次适应算法、最佳适应算法、最坏适应算法等。

4. 操作系统内存管理实例分析:结合具体操作系统,分析其内存管理实现;- 教材章节:第5章 操作系统内存管理实例- 内容:Linux内存管理、Windows内存管理。

操作系统课程设计(页式存储管理)任务书

操作系统课程设计(页式存储管理)任务书

一、课程设计的原始资料及依据查阅有关计算机操作系统的教材、实验指导书等资料,进一步熟悉操作系统的基本原理,算法的设计思想。

页式和段式存储管理是操作系统中存储管理中实现离散式存储管理的重要内容。

本设计要求用高级语言编写和调试一个简单的页式和段式存储管理程序。

通过本设计可以加深理解有关页表、段表、进程队列的概念,并体会和了解地址转换。

二、课程设计主要内容及要求1 •认真阅读资料,掌握离散式存储管理的原理和思想。

2 •要求在设计的过程中,建立清晰的层次结构。

3•画出主要的功能结构图和主要算法的流程图。

4. 设计页表和段表结构,实现离散式存储管理功能。

页表通常包括以下信息:页号,块号。

根据调度算法的不同,页表结构的内容可以作适当的增删。

5•实现逻辑地址到物理地址的转换。

6. 建立进程序列。

7. 实现进程的离散式分配。

&运行程序,检查结果是否和理论值一致。

9.环境可以使用Windows. Turbo C环境或Linux。

三、对课程设计说明书撰写内容、格式、字数的要求1. 课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2. 在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,内容正确完整,书写工整,装订整齐。

3. 设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

4. 课程设计说明书手写或打印均可。

手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18 磅。

文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。

5. 课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计任务书及成绩评定课题名称基本分页存储管理系统的设计Ⅰ、题目的目的和要求:巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。

Ⅱ、设计进度及完成情况Ⅲ、主要参考文献及资料[1] 汤子赢等. 计算机操作系统(第二版).西安电子科技大学出版社,2006.8[2] 冯耀霖等. 操作系统,西安电子科技大学出版社.1992[3] 谭耀铭. 操作系统.中国人民大学出版社,2003.4[4] 任爱华操作系统实用教程清华大学出版社,2001[5] 张尧学史美林计算机操作系统教程(第2版)清华大学出版社2000Ⅳ、成绩评定:设计成绩:(教师填写)指导老师:(签字)二○○八年六月二十七日目录第一章概述 (1)第二章系统分析 (2)第三章系统设计 (3)第四章程序设计流程图或N-S图 (5)第五章源程序清单 (8)第六章调试过程中的问题及系统测试情况 (14)第七章结束语 (16)第一章概述课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。

课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。

《计算机操作系统》一门重要的专业课,是开发操作系统和软件系统的理论和应用基础。

存储器是计算机系统的重要组成部分。

近几年,虽然存储器的容量一直在不断的扩大,价格也越来越便宜,但是仍然不能满足现代软件发展的需要。

因此存储器仍是一种宝贵的资源。

因此尽可能的方便用户和提高主存储器的使用效率,使主存储器在成本、速度和规模之间获得较好的权衡是存储器管理的主要任务。

存储器管理应具有内存分配、内存保护、地址映射和内存扩充等功能。

本设计的目的是熟悉存贮器管理系统的设计方法;加深对所学基本分页存储管理方案的了解;设计地址变换机构,并将变换后的结果显示出来。

模拟环境应尽量接近真实。

此次设计利用了大量数据结构中关于链表的相关知识,对以前所学的数据结构相关内容进行了回顾,从而掌握的更加深刻。

另外,对存储器的结构和工作过程也有了直观而深刻的理解。

语言方面,本次课程设计运用了C++语言。

原因是通过分析认为只有C++和C语言比较合适,而C++在结构上更加清晰,也比较容易表达,并且代码较少。

通过代码编写和结构表达,对C++的内容有了更进一步的掌握。

总之,对所学的数据结构和C++知识进行了很好的回顾和掌握,收获很大。

第二章系统分析本设计的目的是熟悉存贮器管理系统的设计方法;加深对所学各种存贮器管理方案的了解;要求采用一些常用的存贮器分配算法,设计一个存贮器管理系统模拟系统并调试运行。

模拟环境应尽量接近真实。

因此根据设计要求,本存储器管理系统利用最佳适应算法和首次适应算法实现了一定大小的分区分配和分区回收,并以次来模拟存储器管理。

本系统模拟实现可变分区管理,存储管理主要是对存储空间的分配和回收,当有用户申请空间时,进行分配,空间不用了,及时回收,以免造成游离空间,使得该空间再也无法使用,可变分区管理的分配和回收功能类似于visual c++的reclaim()和free()的功能,分区收回算法,才用首次使用算法和最佳适应算法。

在多道程序环境下,要使程序运行,必须先为之创建进程。

而创建进程的第一步是将程序和数据装入内存。

存储器实现的功能主要是内存分配等功能,本模拟系统所要实现的就是将进程的程序和数据装入内存(物理块)。

具体需要实现的功能如下:1、退出,输入0然后按任意键退出;2、分配主存,输入作业名和作业所需长度,回到主菜单;3、回收主存,选择后输入要回收的作业名,有则显示回收,无则显示无该作业;4、显示主存,能够显示分配的页面的状态信息,包括地址范围和读入的内存物理块号(未读入与读入的区别显示),页面是否在主存中。

第三章系统设计3.1 数据结构的设计#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/3.1.1已分配区表的设计struct{float address; /*已分配分区起始地址*/float length; /*已分配分区长度,单位为字节*/int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/}used_table[n]; /*已分配区表*/3.1.2 空闲区表的设计struct{float address; /*空闲区起始地址*/float length; /*空闲区长度,单位为字节*/int flag; /*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/}free_table[m]; /*空闲区表*/3.2 存储器分配算法设计本次设计采用最佳适应分配算法:allocate(char J,float xk)分配分区给用户,在这个过程中,每当分配一个分区给用户时,可能造成空闲区表和已分配区表。

分配时从空闲区表中找到一块可以容纳要分配的空间的最小空闲区。

然后分配,空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配。

分配时修改相应的空闲区表和已分配区表。

如果没有找到可以容纳要分配的空间的空闲区就返回“无可用空闲区”信息。

3.4存储器回收算法设计最佳适应策略的结点是按照空闲区大小从小到大排列的,可分4种情况:(1)上邻空闲区,下邻空闲区,三项合并;(2)上邻空闲区,下邻非空闲区,与上邻合并;(3)上邻非空闲区,下邻为空闲区,与下邻合并;(4)上下邻均为非空闲区,回收区域直接填入。

3.4 主函数模块的设计首先提供一个功能菜单,接受用户的输入;然后根据用户的输入,分别提供相应的功能,功能有以下几个:0-退出1-分配主存2-回收主存3-显示主存。

用户输入数字后执行相应模块。

第四章程序设计流程图或N-S图4.1主程序流程图:4.2分配函数流程图:4.3回收函数流程图:第五章源程序清单#include<stdio.h>#include <dos.h>#include<stdlib.h>#include<conio.h>#include<iostream.h>#define n 10 /*假定系统允许的最大作业数为n,假定模拟实验中n值为10*/#define m 10 /*假定系统允许的空闲区表最大为m,假定模拟实验中m值为10*/#define minisize 100 /*空闲分区被分配时,如果分配后剩余的空间小于minisize,则将该空闲分区全部分配,若大于minisize,则切割分配*/struct{float address; /*已分配分区起始地址*/float length; /*已分配分区长度,单位为字节*/int flag; /*已分配区表登记栏标志,用"0"表示空栏目*/}used_table[n]; /*已分配区表*/struct{float address; /*空闲区起始地址*/float length; /*空闲区长度,单位为字节*/int flag; /*空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配*/}free_table[m]; /*空闲区表*/void allocate(char J,float xk) /*给J作业,采用最佳分配算法分配xk大小的空间*/{int i,k;float ad;k=-1;for(i=0;i<m;i++) /*寻找空间大于xk的最小空闲区登记项k*/if(free_table[i].length>=xk&&free_table[i].flag==1)if(k==-1||free_table[i].length<free_table[k].length)k=i;if(k==-1)/*未找到可用空闲区,返回*/{printf("无可用空闲区\n");return;}/*找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于minisize大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配*/if(free_table[k].length-xk<=minisize){free_table[k].flag=0;ad=free_table[k].address;xk=free_table[k].length;}else{free_table[k].length=free_table[k].length-xk;ad=free_table[k].address+free_table[k].length;}/*修改已分配区表*/i=0;while(used_table[i].flag!=0&&i<n) /*寻找空表目*/i++;if(i>=n) /*无表目可填写已分配分区*/{printf("无表目填写已分分区,错误\n");/*修正空闲区表*/if(free_table[k].flag==0)/*前面找到的是整个空闲分区*/free_table[k].flag=1;else{/*前面找到的是某个空闲分区的一部分*/free_table[k].length=free_table[k].length+xk;return;}}else{/*修改已分配表*/used_table[i].address=ad;used_table[i].length=xk;used_table[i].flag=J;}return;}/*主存分配函数结束*/void reclaim(char J)/*回收作业名为J的作业所占主存空间*/{int i,k,j,s,t;float S,L;/*寻找已分配表中对应登记项*/s=0;while((used_table[s].flag!=J||used_table[s].flag==0)&&s<n)s++;if(s>=n)/*在已分配表中找不到名字为J的作业*/{printf("找不到该作业\n");return;}/*修改已分配表*/used_table[s].flag=0;/*取得归还分区的起始地址S和长度L*/S=used_table[s].address;L=used_table[s].length;j=-1;k=-1;i=0;/*寻找回收分区的空闲上下邻,上邻表目k,下邻表目j*/ while(i<m&&(j==-1||k==-1)){if(free_table[i].flag==1){if(free_table[i].address+free_table[i].length==S)k=i;/*找到上邻*/ if(free_table[i].address==S+L)j=i;/*找到下邻*/}i++;}if(k!=-1)if(j!=-1)/* 上邻空闲区,下邻空闲区,三项合并*/{free_table[k].length=free_table[j].length+free_table[k].length+L; free_table[j].flag=0;}else/*上邻空闲区,下邻非空闲区,与上邻合并*/free_table[k].length=free_table[k].length+L;elseif(j!=-1)/*上邻非空闲区,下邻为空闲区,与下邻合并*/{free_table[j].address=S;free_table[j].length=free_table[j].length+L;}else/*上下邻均为非空闲区,回收区域直接填入*/{/*在空闲区表中寻找空栏目*/t=0;while(free_table[t].flag==1&&t<m)t++;if(t>=m)/*空闲区表满,回收空间失败,将已分配表复原*/{printf("主存空闲表没有空间,回收空间失败\n");used_table[s].flag=J;return;}free_table[t].address=S;free_table[t].length=L;free_table[t].flag=1;}return;}/*主存回收函数结束*/int main( ){int i,a;float xk;char J;/*空闲分区表初始化:*/free_table[0].address=10240; /*起始地址假定为10240*/free_table[0].length=10240; /*长度假定为10240,即10k*/free_table[0].flag=1; /*初始空闲区为一个整体空闲区*/for(i=1;i<m;i++)free_table[i].flag=0; /*其余空闲分区表项未被使用*//*已分配表初始化:*/for(i=0;i<n;i++)used_table[i].flag=0; /*初始时均未分配*/while(1){printf("选择功能项:\n0-退出\n1-分配主存\n2-回收主存\n3-显示主存)\n"); printf("选择功项(0-3):\n");scanf("%d",&a);switch(a){case 0: exit(0); /*a=0程序结束*/case 1: /*a=1分配主存空间*/printf("输入作业名J和作业所需长度xk: ");scanf("%*c%c%f",&J,&xk);allocate(J,xk); /*分配主存空间*/break;case 2: /*a=2回收主存空间*/printf("输入要回收分区的作业名");scanf("%*c%c",&J);reclaim(J); /*回收主存空间*/break;case 3: /*a=3显示主存情况*//*输出空闲区表和已分配表的内容*/printf("输出空闲区表:\n起始地址分区长度标志\n");for(i=0;i<m;i++)printf("%6.0f%9.0f%6d\n",free_table[i].address,free_table[i].length, free_table[i].flag);printf(" 按任意键,输出已分配区表\n");getch();printf(" 输出已分配区表:\n起始地址分区长度标志\n");for(i=0;i<n;i++)if(used_table[i].flag!=0)printf("%6.0f%9.0f%6c\n",used_table[i].address,used_table[i].length,used_table[i].flag);elseprintf("%6.0f%9.0f%6d\n",used_table[i].address,used_table[i].length,used_table[i].flag);break;default:printf("没有该选项\n");}/*case*/}/*while*/return 1;}/*主函数结束*/第六章调试过程中的问题及系统测试情况系统测试情况:6.1功能主菜单:6.2选择功能1,输入作业名和长度:6.3选择功能3,显示系统主存空间表,按任意键显示已分配区表:6.4选择功能2,回收以输入的作业:。

相关文档
最新文档