动态分区存储管理中地址转换
动态分区存储管理中地址转换
课 程 设 计
题 目 学 院 专 业 班 级 姓 名
指导教师
动态分区存储管理中地址转换
计算机科学与技术学院
吴利军
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字,全部文档内容请下载后查看。喜欢就下载吧 ……
- 基于PLC控制的航空电镀生产线自动输送
- 中考预测课内外文言文对比阅读2
- 2018-2023年中国商业智能(BI)产业市场
- 中国金融体制改革研究2011new
- 外窗淋水试验方案
- 精益生产(Lean Production)
- 学校安全事故处置和信息报送制度
- Chapter 5 Human Resources Management
- 【小学数学】人教版小学六年级上册数学
- 初中数学解题方法与技巧
- 山东省创伤中心建设与管理指导原则(试
- 函数与数列的极限的强化练习题答案
- 10分钟淋巴按摩消脂
- 网络应急演练预案
- 服装设计入门基础知识
- 初二数学分式计算题练习
- (人教新课标)高二数学必修5第二章 数列
- 最新自主创业项目
- 北京大学 无机化学课件 4第4章 配合物
- 贸易公司业务管理制度




