java模拟存储器管理_操作系统存储器管理笔记

一操作系统装入程序到内存中几种方法:

1:绝对装入方式(Absolute Loading Mode):

即程序在编译时就产生物理地址的目标代码,编译完成后,不在需要对程序和数据进行修改,程序员也可以在程序中赋值物理地址。

缺点:不灵活,要求程序员对内存相当熟悉,只适用于单道程序环境。

2:静态重定位装入方式(Relocation Loading Mode):

即程序在编译时使用的是逻辑地址,在装入的时候,临时将逻辑地址转换成物理地址。到内存中后的地址为物理地址。这种方法叫做静态重定位装入。

缺点:不灵活,当进程有需要动态改变地址时则无法改变。

3:动态重定位装入方式(Dynamic Run-time Loading)

即程序在装入内存之后,在内存中仍然使用逻辑地址,只有在取该数据时,才转换成物理地址。这样做会影响到程序的执行速度。因此,一般将转换成物理地址的过程做成硬件来完成转换,需要添加一个地址转换寄存器来支持。

二 程序的链接过程

1:静态链接(Static Linking)

程序在编译之后形成目标模块,然后将目标模块和库函数组合成一个模块,不再分开的链接。

缺点:消耗内存的资源很大,往往有的库函数或模块在程序的运行过程中没有使用,极大的浪费了内存空间。

2:装入是动态链接(Load-time Dynamic Linking)

程序在编译时形成目标模块代码,在需要调入内存时,链接成一个模块装入内存。

缺点:和静态链接一样,对内存消耗大。

3:运行时动态链接(Runtime Dynamic Linking)

程序在编译时形成目标模块,在调入内存时调入需要执行的代码模块,当用到某个库函数或模块式时,由操作系统动态的调入内存执行。

三 内存连续分配方式

1:单一连续内存分配

把内存区域中划分OS分区和应用进程区域两大块,互不干涉。在应用进程区域的内存按照单一的连续分配原则分配给各个进程。

使用范围:单用户,单任务的操作系统中。如CP/M,MS-DOS操作系统。

2:固定分区分配

a.固定分区大小一致分配

将内存划分为大小一致的多个分区,这种分配方式缺乏灵活性,当进程太小造成空间浪费,太大则无法分配空间,导致装入失败。

b.固定分区大小不一致分配

将内存划分为大小不一致的多个分区。这样可根据进程大小适当分配区域。

分配具体操作:将各个分区按照大小排队,用一张分区表存储,该表中包含分区的大小,起始地址,和使用情况

使用范围:IBM360的MFT

3:动态分区分配

根据进程的大小动态的分配内存空间,需要为其配置数据结构,分配算法,分区的分配和回收操作。

数据结构:

空闲分区表,用于记录空闲分区的大小,起始地址,分区序号等信息

空闲分区链,在每个分区的起始地址部分设置一个分区信息数据结构,包含前后分区指针,分区尾部设置分区状态和分区大小表目

分区分配算法:

a.首次适应算法(first fit)

在为进程分配分区时,从头到尾查找空闲分区表,若查找到分区的大小大于或者等于要分配的进程大小则为其分配该分区。该算法的倾向于利用内存中的低地址空间,而保留了大部分高地址空间

优点:为大进程留下了足够的空间。

缺点:产生很多内存碎块,严重浪费了宝贵的内存资源。

b.循环首次适应算法(next fit)

和首次适应算法不同的是,在查找到适应的分区之后,以后再次分配内存空间时,从上次查找的位置开始进行分配。

优点:使内存使用空间分布的比较均匀,减少了查找空闲空间的时间。

缺点:这样查找会缺乏大的内存空间

c.最佳适应算法(best fit)

将空闲分区表按照分区的大小从小到大排好队,每次分配空闲分区时顺序查找,找到适应的分区则分配进程,必然每次都是最佳分配。然而在宏观上不一定是最佳的,每次分配后都会留下难以利用的内存碎块。

b.最坏适应算法(worst fit)

将空闲分区表按从大到小的顺序排好队,依次扫描空闲分区表,每次分配给进程时,都将最大的内存空间分配之。

优点:每次残留的内存碎块都不至太小。对中小进程有利,对大进程最不利。查找效率高。

缺点:是内存中缺乏大的内存空间。

以上四种都称为顺序搜索法。

e.最快适应算法(fast fit)

该算法也称为分类搜索法,将空闲分区表中大小大体相同的分区单独放到一个空闲分区表中,这样在操作系统中就有多个空闲分区表,再建立一个空闲分区索引表,每个索引指向一个空闲分区表,每类空闲分区的大小可以按照2kb,4kb,8kb来划分。当要查找空闲分区时就可以通过查找索引来快速查找合适的分区。

优点:查找效率高,能保留大的分区,满足对大空间的需要,也不会产生内存碎片。

缺点:在分区归还内存时算法复杂,系统开销大,在分配时一个分区只给一个进程,或多或少存在一定浪费。而且在分区划分越细的情况下,浪费越严重。这是典型的以时间换空间的做法。

伙伴系统

伙伴系统是固定分区和动态分区分配的折中方法,在伙伴系统中,不论已经划分的分区还是没有划分的分区大小都统一为2^k次幂,k可以为1,2,3......m 内存的区域最小为2^1

最大为2^m次幂,也就是整个内存区域。在每次分配内存时就分配2^i次幂大小的空间,这样在多次分配后就会产生多个不连续的内存空间。将这些大小相同的内存空间分成一类,建立一个空闲分区链表,当要分配内存大小为m时,就比较2^i

在进行内存回收时,如果有2^i空闲区域则查找是否存在相同大小的空间,存在则合并为2^i+1,再搜索是否存在和2^i+1相同的空间若存在则再次合并。.若不存在,则加入2^i中。

伙伴系统在时间性能方面比分类搜索差,比顺序搜索要优胜。在空间性能方面则相反。在多处理机的系统中得到大量的应用。

posted on 2013-11-29 10:53 顺其自然EVO 阅读(184) 评论(0)  编辑  收藏

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【实验目的】 1. 通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解; 2. 熟悉虚存管理的各种页面淘汰算法; 3. 通过编写和调试地址转换过程模拟程序以加强对地址转换过程的了解。 【实验准备】 1.虚拟存储器的管理方式  段式管理  页式管理  段页式管理 2.页面置换算法  先进先出置换算法  最近最久未使用置换算法  Clock置换算法  其他置换算法 【实验内容】 1. 实验题目 设计一个请求页式存储管理方案。并编写模拟程序实现之。产生一个需要访问的指令地址流。它是一系列需要访问的指令的地址。为不失一般性,你可以适当地(用人工指定地方法或用随机数产生器)生成这个序列,使得 50%的指令是顺序执行的。25%的指令均匀地散布在前地址部分,25%的地址是均匀地散布在后地址部分。为简单起见。页面淘汰算法采用 FIFO页面淘汰算法,并且在淘汰一页时,只将该页在页表中抹去。而不再判断它是否被改写过,也不将它写回到辅存。 2. 具体做法 产生一个需要访问的指令地址流;指令合适的页面尺寸(例如以 1K或2K为1页);指定内存页表的最大长度,并对页表进行初始化;每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存——如果该页已在主存,则打印页表情况;如果该页不在主存且页表未满,则调入一页并打印页表情况;如果该页不足主存且页表已满,则按 FIFO页面淘汰算法淘汰一页后调入所需的页,打印页表情况;逐个地址访问,直到所有地址访问完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值