12 内存连续分配管理方式

连续分配方式,是指为一个用户程序分配一个连续的内存空间。它主要包括单一连续分配、固定分区分配和动态分区分配。

单一连续分配

内存在此方式下分为系统区和用户区,系统区仅提供给操作系统使用,通常在低地址部分;用户区是为用户提供的、除系统区之外的内存空间。这种方式无需进行内存保护。

这种方式的优点是简单、无外部碎片,可以釆用覆盖技术,不需要额外的技术支持。缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低

固定分区分配

固定分区分配是最简单的一种多道程序存储管理方式,它将用户内存空间划分为若干个固定大小的区域,每个分区只装入一道作业。当有空闲分区时,便可以再从外存的后备作业队列中,选择适当大小的作业装入该分区,如此循环。

固定分区分配在划分分区时,有两种不同的方法:

  • 分区大小相等:用于利用一台计算机去控制多个相同对象的场合,缺乏灵活性。
  • 分区大小不等:划分为含有多个较小的分区、适量的中等分区及少量的大分区。

为便于内存分配,通常将分区按大小排队,并为之建立一张分区说明表,其中各表项包括每个分区的起始地址、大小及状态(是否已分配),如图(a)所示。当有用户程序要装入时,便检索该表,以找到合适的分区给予分配并将其状态置为”已分配”;未找到合适分区则拒绝为该用户程序分配内存。存储空间的分配情况如图(b)所示。

这种分区方式存在两个问题
一是程序可能太大而放不进任何一个分区中,这时用户不得不使用覆盖技术来使用内存空间;
二是主存利用率低,当程序小于固定分区大小时,也占用了一个完整的内存分区空间,这样分区内部有空间浪费,这种现象称为内部碎片(已经被分配出去的的内存空间大于请求所需的内存空间)。

固定分区是可用于多道程序设计最简单的存储分配,无外部碎片,但不能实现多进程共享一个主存区,所以存储空间利用率低。固定分区分配很少用于现在通用的操作系统中,但在某些用于控制多个相同对象的控制系统中仍发挥着一定的作用。

动态分区分配

动态分区分配又称为可变分区分配,是一种动态划分内存的分区方法。这种分区方法不预先将内存划分,而是在进程装入内存时,根据进程的大小动态地建立分区,并使分区的大小正好适合进程的需要。因此系统中分区的大小和数目是可变的。

动态分区在开始分配时是很好的,但是之后会导致内存中出现许多小的内存块。随着时间的推移,内存中会产生越来越多的外部碎片(还没有分配出去,但是由于太小而无法分配给申请空间的新进程的内存空间空闲块)。

克服外部碎片可以通过紧凑(Compaction)技术来解决,就是操作系统不时地对进程进行移动和整理。但是这需要动态重定位寄存器的支持,且相对费时。紧凑的过程实际上类似于Windows系统中的磁盘整理程序,只不过后者是对外存空间的紧凑。

常见的动态分区的分配策略如下:

  • 首次适应(First Fit)算法
    空闲分区以地址递增的次序链接。分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。该算法倾向于优先利用内存中低地址的空闲部分,保留高地址部分的大空闲区,为以后到达的大作业分配大空间创造条件。其缺点在于:低地址部分由于不断被划分,会留下许多难以利用的小空闲分区,并且,每次都从低地址开始检索,将增大可用空闲区间查找的开销。

  • 最佳适应(Best Fit)算法
    空闲分区按容量递增形成分区链,找到第一个能满足要求的空闲分区,即找到一个满足要求且最小的空闲分区分配给作业。孤立地看,最佳适应算法看似是最佳的,但是宏观看并非如此,存储器将留下许多难以利用的小空闲区。

  • 最坏适应(Worst Fit)算法
    又称最大适应(Largest Fit)算法,空闲分区以容量递减的次序链接。找到第一个能满足要求的空闲分区,也就是挑选出最大的分区。
    该算法优点是使剩下的空闲区不至于太小,产生碎片的几率最小,对中小作业有利,但对大作业不利。

  • 循环首次适应(Next Fit)算法
    又称邻近适应算法,由首次适应算法演变而成。不同之处是分配内存时从上次查找结束的位置开始继续查找。该算法能使内存中的空闲分区分布得更均匀,从而减少了查找空闲分区的开销,但这样会缺乏大的空闲分区。

以上四种算法称为顺序搜索法,快速适应算法又称为分类搜索算法:

  • 快速适应(Quick Fit)算法
    该算法将空闲分区按照大小进行分类,对每一类具有相同容量的所有空闲分区,单独设置一个空闲分区链表。分类通常常用空间大小进行划分,比如2KB,4KB,8KB等。仅需要根据进程的长度检索,找到能容纳它的最小空闲区链表,进行分配。
    该算法优点是查找效率高,能够保留大的分区,满足用户对大空间的需求。缺点在于分区归还主存时算法复杂,系统开销较大,而且存在一定的空间浪费,是典型空间换时间的做法。

伙伴系统

Linux内核内存管理中采用伙伴系统解决外部碎片问题。伙伴系统的宗旨就是用最小的内存块来满足内核的对于内存的请求。

伙伴系统在回收空闲分区时,需要对空闲分区进行合并,其时间性能比前述分类搜索差,但比顺序搜索算法好,而其空间性能则远优于分类搜索算法,比顺序搜索算法略差。伙伴系统在多处理机系统中,仍不失为一种有效的内存分配和释放的方法,得到了大量的应用。

分配过程举例

在最初,只有一个块,也就是整个内存,假如为1M大小,而允许的最小块为64K,那么当我们申请一块200K大小的内存时,就要先将1M的块分裂成两等分,各为512K,这两分之间的关系就称为伙伴,然后再将第一个512K的内存块分裂成两等分,各位256K,将第一个256K的内存块分配给内存,这样就是一个分配的过程。下面我们结合示意图来了解伙伴系统分配和回收内存块的过程。

  • 1 初始化时,系统拥有1M的连续内存,允许的最小的内存块为64K,图中白色的部分为空闲的内存块,着色的代表分配出去了得内存块。

  • 2 程序A申请一块大小为34K的内存,对应的order为0,即2^0=1个最小内存块
      2.1 系统中不存在order 0(64K)的内存块,因此order 4(1M)的内存块分裂成两个order 3的内存块(512K)
      2.2 仍然没有order 0的内存块,因此order 3的内存块分裂成两个order 2的内存块(256K)
      2.3 仍然没有order 0的内存块,因此order 2的内存块分裂成两个order 1的内存块(128K)
      2.4 仍然没有order 0的内存块,因此order 1的内存块分裂成两个order 0的内存块(64K)
      2.5 找到了order 0的内存块,将其中的一个分配给程序A,现在伙伴系统的内存为一个order 0的内存块,一个order1的内存块,一个order 2的内存块以及一个order 3的内存块

  • 3 程序B申请一块大小为66K的内存,对应的order为1,即2^1=2个最小内存块,由于系统中正好存在一个order 1的内存块,所以直接用来分配

  • 4 程序C申请一块大小为35K的内存,对应的order为0,同样由于系统中正好存在一个order 0的内存块,直接用来分配

  • 5 程序D申请一块大小为67K的内存,对应的order为1
      5.1 系统中不存在order 1的内存块,于是将order 2的内存块分裂成两块order 1的内存块
      5.2 找到order 1的内存块,进行分配

  • 6 程序B释放了它申请的内存,即一个order 1的内存块

  • 7 程序D释放了它申请的内存
      7.1 一个order 1的内存块回收到内存当中
      7.2由于该内存块的伙伴也是空闲的,因此两个order 1的内存块合并成一个order 2的内存块

  • 8 程序A释放了它申请的内存,即一个order 0的内存块

  • 9 程序C释放了它申请的内存
      9.1 一个order 0的内存块被释放
      9.2 两个order 0伙伴块都是空闲的,进行合并,生成一个order 1的内存块
      9.3 两个order 1伙伴块都是空闲的,进行合并,生成一个order 2的内存块
      9.4 两个order 2伙伴块都是空闲的,进行合并,生成一个order 3的内存块
      9.5 两个order 3伙伴块都是空闲的,进行合并,生成一个order 4的内存块

内存对换

1 对换的引入

在多道程序环境下,内存中可能存在多个被阻塞的进程,占用大量内存空间,而多个作业在外存上无法进入内存,系统吞吐量下降,资源利用率低。

为解决这一问题,在操作系统中增设了对换操作。对换是指把内存中暂时不能运行的进程或者暂时不用的程序和数据调到外存上,以便腾出足够的内存空间,把已具备运行条件的进程从赋存移入内存。

如果对换是以整个进程为单位的,便称之为“整体对换”或“进程对换”,这种对换被广泛应用于分时系统中,其目的是为了解决内存紧张问题,提高内存利用率。如果对换是以“页”或“段”为单位进行的,则分别称之为“页面对换”或“分段对换”,又统称为“部分对换”。“部分对换”的目的是为了支持虚拟存储系统。

2 对换空间的管理

在具有对换功能的OS中,通常把外存分为文件区和对换区。前者用户存放文件,后者用于存放从内存中换出的进程。通常,为提高文件的存储空间的利用率,文件区采用离散分配方式。为提高进程在对换区换入和换出的速度,对换区采用连续分配方式,较少考虑外存中的碎片问题。

为了对对换区中的空闲盘块进行管理,在系统中应配置相应的空闲分区表或空闲分区链,以记录外存中的使用情况。对换区的内存分配与回收方式与连续分配方式相同。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 存储器管理 存储器的层次结构 存储器的层次结构:寄存器-高速缓存-主存-磁盘缓存-磁盘-可移动存储介质 可执行存储...
    颜洛滨阅读 883评论 0 2
  • 嵌入式系统的内存管理 姓名:张猛 引用自:http://blog.csdn.net/baskmmu/article...
    oliverabc阅读 2,024评论 0 0
  • 5.1计算机体系结构和内存层次 计算机体系结构 内存层次 操作系统的内存管理 存储管理要达到效果是抽象,把线性的物...
    龟龟51阅读 1,120评论 0 1
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,494评论 18 139
  • 爱的根源-原生家庭幸福课 在物质相对丰富的今天,我们的情感却如此的空乏;情感深处的伤痛久久无法愈合爱情的表达让我们...
    冷爱阅读 738评论 0 0