“碎片的内存”描述一个系统中所有不可用的空闲内存。这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置。由于分 配方法决定内存碎片是否是一个问题,因此内存分配器在保证空闲资源可用性方面扮演着重要的角色。

internal fragmentation:when memory allocated to a process is larger than requested memory,

the difference between these two numbers is internal fragmentation.

external fragmentation:External fragments exists when total memory space exists to satisfy a request,

but it is not continous. storage is broken into little pieces.

在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。

外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。

固定分区存在内部碎片,可变式分区分配会存在外部碎片;

页式虚拟存储系统存在内部碎片;段式虚拟存储系统,存在外部碎片

为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。

为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。

---------------------------------------------------------------------------------------------------------

存储器是个宝贵但却有限的资源。一流的操作系统,需要能够有效地管理及利用存储器。

内存为程序分配空间有四种分配方式:

1、连续分配方式

2、基本分页存储管理方式

3、基本分段存储管理方式

4、段页式存储管理方式

连续分配方式

首先讲连续分配方式。连续分配方式出现的时间比较早,曾广泛应用于20世纪60~70年代的OS中,但是它至今仍然在内存管理方式中占有一席之地,原因在于它实现起来比较方便,所需的硬件支持最少。连续分配方式又可细分为四种:单一连续分配、固定分区分配、动态分区分配和动态重定位分区分配。

其中固定分区分配方式,因为分区固定,所以缺乏灵活性,即当程序太小时,会造成内存空间的浪费;程序太大时,一个分区又不足以容纳,致使程序无法运行。但尽管如此,当一台计算机去控制多个相同对象的时候,由于这些对象内存大小相同,所以完全可以采用这种内存管理方式,而且是最高效的。这里我们可以看出存储器管理机制的多面性:即没有那种存储器管理机制是完全没有用的,在适合的场合下,一种被认为最不合理的分配方案却可能称为最高效的分配方案。一切都要从实际问题出发,进行设计。

为了解决固定分区分配方式的缺乏灵活性,出现了动态分配方式。动态分配方式采用一些寻表的方式,查找能符合程序需要的空闲内存分区。但代价是增加了系统运行的开销,而且内存空闲表本身是一个文件,必然会占用一部分宝贵的内存资源,而且有些算法还会增加内存碎片。

可重定位分区分配通过对程序实现成定位,从而可以将内存块进行搬移,将小块拼成大块,将小空闲“紧凑”成大空闲,腾出较大的内存以容纳新的程序进程。

基本分页存储管理方式

连续分配方式会形成许多“碎片”,虽然可以通过“紧凑”方式将许多碎片拼接成可用的大块空间,但须为之付出很大开销。所以提出了“离散分配方式”的想法。如果离散分配的基本单位是页,则称为分页管理方式;如果离散分配的基本单位是段,则称为分段管理方式。

分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页,并为各页加以编号,从0开始,如第0页、第1页等。相应地,也把内存空间分成与页面相同大小的若干个存储块,称为(物理)块或页框(frame),也同样为它们加以编号,如0#块、1#块等等。在为进程分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。由于进程的最后一页经常装不满一块而形成了不可利用的碎片,称之为“页内碎片”。

在分页系统中,允许将进程的各个页离散地存储在内存不同的物理块中,但系统应能保证进程的正确运行,即能在内存中找到每个页面所对应的物理块。为此,系统又为每个进程建立了一张页面映像表,简称页表。在进程地址空间内的所有页,依次在页表中有一页表项,其中记录了相应页在内存中对应的物理块号。在配置了页表后,进程执行时,通过查找该表,即可找到每页在内存中的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。

为了能够将用户地址空间中的逻辑地址,变换为内存空间中的物理地址,在系统中必须设置地址变换机构。地址变换任务是借助于页表来完成的。

页表的功能可由一组专门的寄存器来实现。由于寄存器成本较高,且大多数现代计算机的页表又很大,使页表项总数可达几千甚至几十万个,显然这些页表项不可能都用寄存器来实现,因此,页表大多驻留在内存中。因为一个进程可以通过它的PCB来时时保存自己的状态,等到CPU要处理它的时候才将PCB交给寄存器,所以,系统中虽然可以运行多个进程,但也只需要一个页表寄存器就可以了。

由于页表是存放在内存中的,这使得CPU在每存取一个数据时,都要两次访问内存。为了提高地址变换速度,在地址变化机构中增设了一个具有并行查询能力的告诉缓冲寄存器,又称为“联想寄存器”(Associative Lookaside Buffer)。

在单级页表的基础上,为了适应非常大的逻辑地址空间,出现了两级和多级页表,但是,他们的原理和单级页表是一样的,只不过为了适应地址变换层次的增加,需要在地址变换机构中增设外层的页表寄存器。

基本分段存储管理方式

分段存储管理方式的目的,主要是为了满足用户(程序员)在编程和使用上多方面的要求,其中有些要求是其他几种存储管理方式所难以满足的。因此,这种存储管理方式已成为当今所有存储管理方式的基础。

(1)方便编程;

(2)信息共享:分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义,不便于实现共享;然而段却是信息的逻辑单位。由此可知,为了实现段的共享,希望存储器管理能与用户程序分段的组织方式相适应。

(3)信息保护;

(4)动态增长;

(5)动态链接。

分段管理方式和分页管理方式在实现思路上是很相似的,只不过他们的基本单位不同。分段有段表,也有地址变换机构,为了提高检索速度,同样增设联想寄存器。所以有些具体细节在这个不再赘述。

分页和分段的主要区别:

1、两者相似之处:两者都采用离散分配方式,且都要通过地址映射机构来实现地址变换。

2、两者不同之处:

(1)页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要而不是      用户的需要。段则是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了能更好地满足用户的需要。

(2)页的大小固定且由系统决定,而段的长度却不固定。

(3)分页的作业地址空间是一维的,即单一的线性地址空间;而分段的作业地址空间则是二维的。

段页式存储管理方式

前面所介绍的分页和分段存储管理方式都各有优缺点。分页系统能有效地提高内存利用率,而分段系统则能很好地满足用户需求。我们希望能够把两者的优点结合,于是出现了段页式存储管理方式。

段页式系统的基本原理,是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。在段页式系统中,地址结构由段号、段内页号和页内地址三部分所组成。

和前两种存储管理方式相同,段页式存储管理方式同样需要增设联想寄存器。

离散分配方式基于将一个进程直接分散地分配到许多不相邻的分区中的思想,分为分页式存储管理,分段存储管理和段页式存储管理. 分页式存储管理旨在提高内存利用率,满足系统管理的需要,分段式存储管理则旨在满足用户(程序员)的需要,在实现共享和保护方面优于分页式存储管理,而段页式存储管理则是将两者结合起来,取长补短,即具有分段系统便于实现,可共享,易于保护,可动态链接等优点,又能像分页系统那样很好的解决外部碎片的问题,以及为各个分段可离散分配内存等问题,显然是一种比较有效的存储管理方式。

转载于:https://www.cnblogs.com/cane/p/3972010.html

操作系统--内存管理方式相关推荐

  1. 操作系统内存管理-Linux版

    引言 操作系统内存管理:总的来说,操作系统内存管理包括物理内存管理和虚拟内存管理. 物理内存管理: 包括程序装入等概念.交换技术.连续分配管理方式和非连续分配管理方式(分页.分段.段页式). 虚拟内存 ...

  2. 操作系统内存管理之 内部碎片vs外部碎片

    "碎片的内存"描述一个系统中所有不可用的空闲内存.这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用.这一问题通常都会发生,原因在于空闲内存以小而不连续方式出 ...

  3. 操作系统内存管理——分区、页式、段式管理

    操作系统内存管理--分区.页式.段式管理 标签: 内存管理操作系统数据结构算法 2010-07-05 11:26 20805人阅读 评论(5) 收藏 举报 分类: 操作系统(4) 版权声明:本文为博主 ...

  4. 操作系统——内存管理——分段和分页

    一. 物理地址和逻辑地址 物理地址:加载到内存地址寄存器中的地址,内存单元的真正地址.在前端总线上传输的内存地址都是物理内存地址,编号从0开始一直到可用物理内存的最高端.这些数字被北桥(Nortbri ...

  5. 六、操作系统——内存管理的概念(空间的分配与回收、空间的扩充、地址转换、存储保护)

    一.概述 二.操作系统作为系统资源的管理者,当然也需要对内存进行管理,要管些什么呢? 1. 内存空间的分配与回收 连续分配:指为用户进程分配的必须是一个连续的内存空间. 1. 单一连续分配 在单一连续 ...

  6. 操作系统 —— 内存管理

    目录 一.思维导图 二.内存的基础知识 2.1 什么是内存? 2.2 存储单元 2.3 逻辑地址和物理地址 2.4 编译.链接.装入 2.4.1 编译 2.4.2 链接 链接的三种方式 : 2.4.3 ...

  7. 虚拟地址空间及内存管理方式

    程序地址空间:进程的虚拟地址空间 1.通过代码演示两个进程中变量地址相同,但是数据不同---进程中访问的地址都是虚拟地址 2.虚拟地址空间:操作系统向进程通过mm_struct结构体描述的一个虚假的, ...

  8. 操作系统 -- 内存管理(分配与回收)

    目录 内存的分配方式 连续内存分配 单一连续分配(过时) 固态分区分配 动态分区分配 动态分区分配算法 首次适应算法 最佳适应算法 最坏适应算法 邻近适应算法 非连续内存分配 基础定义 地址转换 十进 ...

  9. 操作系统内存管理及虚拟内存技术

    一.内存管理 操作系统的内存管理主要负责内存的分配与回收(malloc 函数:申请内存,free 函数:释放内存),另外地址转换也就是将逻辑地址转换成相应的物理地址等功能也是操作系统内存管理做的事情. ...

最新文章

  1. pandas dataframe中的列进行重新排序、倒排、正排、自定义排序详解及实践
  2. linux中的和||(linux中=和==效果是一样的)
  3. polymer 绑定html元素,使用在Polymer元素内的light dom中定义的模板
  4. FTPClient.listFiles() 放到linux上,返回值为null或数组长度为0
  5. HTML5常用标签~
  6. GROUP BY 和SUBSTRING 的配合使用
  7. python 类变量(属性)和实例变量(属性
  8. 计算机网络技术放块队解说词,基于《计算机网络技术》课程多媒体课件制作与设计.doc...
  9. MyBatis的CRUD操作
  10. Eclipse中不使用内嵌Maven
  11. poj 1088(记忆化搜索)
  12. 华为手机计算机代码大全,华为手机指令代码大全,你想要了解的功能都在这里!...
  13. 关于翁恺老师Java网课中细胞自动机的一点点想法
  14. DATAGEAR统计报表简单教学
  15. idea 设置全局豆沙绿
  16. 安徽大学计算机科学与技术考研科目,2020安徽大学计算机专业课调整
  17. php apply filters,WordPress学习——apply_filters()详解
  18. 打开EXCEL运行脚本,报无法运行宏问题
  19. MongoDB——聚合管道之$project操作
  20. eureka集群高可用配置

热门文章

  1. docker安装kafka消息队列
  2. canvas java 上传截图_在Vue项目中使用html2canvas生成页面截图并上传
  3. ionic4中使用Swiper触屏滑动---心酸路
  4. Python zip() 函数
  5. 凭借128核芯片,安培寻求提供可靠的进步
  6. 混合装置实现了24/7的能量收集和储存
  7. python 把一个字典赋值给一个空的字典,或者是列表赋值给一个空的列表显示黄色警告
  8. Android 补间动画(Tween Animation)
  9. The Android Gradle plugin supports only Kotlin Gradle plugin version 1.3.0 and higher.
  10. 云时代架构阅读笔记二——一次CPU负载超高的分析