教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 资料大全 >

动态分区存储管理中地址转换

来源:网络收集 时间:2026-09-14
导读: 动态分区存储管理中地址转换 课 程 设 计 题 目 学 院 专 业 班 级 姓 名 指导教师 动态分区存储管理中地址转换 计算机科学与技术学院 吴利军 2013 年 1 月 16 日 动态分区存储管理中地址转换 课程设计任务书 学生姓名: 指导教师: 吴利军 工作单位: 计算

动态分区存储管理中地址转换

课 程 设 计

题 目 学 院 专 业 班 级 姓 名

指导教师

动态分区存储管理中地址转换

计算机科学与技术学院

吴利军

2013 年 1 月 16 日

动态分区存储管理中地址转换

课程设计任务书

学生姓名:

指导教师: 吴利军 工作单位: 计算机科学与技术学院

题 目: 模拟设计动态分区存储管理中地址转换 初始条件:

1.预备内容:阅读操作系统的内存管理章节内容,理解动态分区的思想,并体会动态分区分配主存的过程。

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

要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写

等具体要求)

1.要求首先采用动态分区方案,用最先适用算法对作业实施内存分配,然后把作业地址空间的某一逻辑地址转换成相应的物理地址。能够处理以下的情形:输入某一逻辑地址,程序能判断地址的合法性,如果合法,计算并输出相应的物理地址。如果不能计算出相应的物理地址,说明原因。

2.设计报告内容应说明: ⑴ 需求分析;

⑵ 功能设计(数据结构及模块说明); ⑶ 开发平台及源程序的主要部分;

⑷ 测试用例,运行结果与运行情况分析; ⑸ 自我评价与总结:

i)你认为你完成的设计哪些地方做得比较好或比较出色; ii)什么地方做得不太好,以后如何改正;

iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训); iv)完成本题是否有其他方法(如果有,简要说明该方法);

时间安排:

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

周2、周3:完成程序调试及测试。 周4、周5:验收、撰写课程设计报告。

(注意事项:严禁抄袭,一旦发现,一律按0分记)

指导教师签名: 年 月 日

动态分区存储管理中地址转换

系主任(或责任教师)签名: 年 月 日

1.需求分析

1.1判断内存地址合法性

每个进程都有自己独立的进程空间,如果一个进程在运行时所产生的地址在其地址空间之外,则会发生地址越界。当程序要访问某个内存单元时,先由硬件检查是否允许,如果允许则执行,否则产生地址越界中断,再由操作系统进行相应处理。在本次课程设计中,需要通过程序模拟硬件的判断过程,对用户输入的内存地址判断合法性,不合法时需要给出原因。

1.2模拟动态分区存储管理

动态分区和静态分区存储管理的不同之处在于,不事先将内存划分成一块块的分区,而是在作业进入内存时,根据作业的大小动态的建立分区,并使分区的大小正好适应作业的需要。因此系统中分区的大小是可变的,分区数目也是可变的。在系统初启时刻,除了操作系统常驻内存外只有一个大的分区,随着进程的执行,会出现一系列的分配和释放。比如在某一时刻,一进程执行结束并释放内存之后,管理程序又要为另一个进程分配内存。如果分配的空闲区比所要求的大,则管理程序将该空闲区分为两个部分,其中一部分成为已分配区而另一部分成为一个新的小空闲区。在本次课程设计中需要通过程序模拟该过程的执行。

1.3实现将逻辑地址映射成为物理地址

进程执行时,cpu要将需要访问的逻辑地址映射成物理地址,即动态重定位。重定位机构需要用到基址寄存器(BR)和虚拟地址寄存器(VR),物理地址(MA)=装入内存首地址(BR)+逻辑地址(VR)。

1.4实现内存管理中的最先适应算法

最先适应算法的算法过程是:空闲分区(链)按地址递增的次序排列。在进行内存分配时,从空闲分区表/链首开始顺序查找,直到找到第一个满足其大小要求的空闲分区为止。然后按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空闲分区仍留在空闲分区表/链中。

动态分区存储管理中地址转换

2.功能设计

2.1数据结构

系统用来管理空闲分区的数据结构有两种,空闲分区表和空闲分区链,在本次的课程设计中,我采用的是空闲分区链。此外,对于每一个模拟进程,采用表结构来标志和操作。

2.1.1空闲分区链

每一个空闲分区链节点都包括分区号,分区的起始地址,分区大小和指向下一个节点的指针,数据结构用C++描述如下所示:

//定义空闲分区链表节点的数据结构 struct Node { int SA;//空闲分区在内存的首地址 int ID;//空闲分区号 int size;//空闲分区占用内存的大小 Node *next;//指向下个节点的指针 };

对此空闲分区链表初始化如下所示: Node *head,*p1; void Init() { p1 = new Node; p1->ID = 1; p1->SA = 0;

//初始化内存的大小为1000 p1->size = 1000; p1->next = NULL; head = p1; }

其他的空闲分区节点尾接上链表时就将构成空闲分区链。

2.1.2进程的结构

在这里用户负责每一个进程的添加和删除,因此需要用户为每个进程指派一个唯一的进程号。为了方便地对进程进行操作,这里使用到表的结构。进程包含进程号,起始地址和大小,其数据结构用C++描述如下所示:

//定义模拟进程的数据结构 struct Process {

动态分区存储管理中地址转换

int SA;//模拟进程在内存的首地址 int PID;//模拟进程的进程号 int size;//模拟进程占用内存的大小 };

同时建立一个进程数组,初始化大小为20: Process Pro[20];

这里便可以通过用户指派的进程号作为数组下标来找到进程,结构体和数组一起构成了一张进程表。

2.2模块说明

2.2.1重定位和越界判断

当程序装入内存时,其逻辑地址会在这个物理空间展开,转换成相应的物理地址。这个过程被称为地址映射或地址重定位。在动态分区管理中,物理地址=程序首址+逻辑地址。

操作系统通过上界/下界寄存器或者基址/限长寄存器来进行界限保护。在本课程设计中,以Process结构体中的SA模拟基址寄存器,size模拟限长寄存器,而且从地址0开始编址,因此对Process[i],其合理的逻辑地址范围为[0,Process[i].size]。相应的函数实现如下所示:

//重定位

void relocate() { int pid,location; cout<<"----请输入要重定位的进程的进程号:"; cin>>pid; if(Pro[pid-1].PID == 0) cout<<"----此进程不存在,请重试!"<<endl; else { cout<<"----请输入该进程的逻辑地址:"; cin>>location; if(location > Pro[pid-1].size-1) cout<<"----地址越界,请重试!"<<endl; else { cout<<"----映射物理地址为:"<<Pro[pid-1].SA+location<<endl; } } }

动态分区存储管理中地址转换

2.2.2最先适应算法的实现

系统初启时,内存中除了操作系统常驻的部分外只有一个大的空闲分区,在这里我将其初始化为1000。随着进程的添加和删除过程的交替进行,原来完整的大分区必定将被分割成许多物理空间上并不连续的小分区,为了管理内存,每一个进行进程添加删除操作后需要重构空闲分区链。这样的话,每当有新的进程需要使用内存,程序首先按地址顺序遍历分区链,直到找到第一个满足其 …… 此处隐藏:6156字,全部文档内容请下载后查看。喜欢就下载吧 ……

动态分区存储管理中地址转换.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/2191550.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)