精华内容
下载资源
问答
  • 内碎片外碎片

    千次阅读 2016-07-11 10:11:23
    在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。 外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。 固定分区存在内部碎片,可变式分区...
    在内存管理中,内部碎片是已经被分配出去的的内存空间大于请求所需的内存空间。 外部碎片是指还没有分配出去,但是由于大小太小而无法分配给申请空间的新进程的内存空间空闲块。 固定分区存在内部碎片,可变式分区分配会存在外部碎片; 页式虚拟存储系统存在内部碎片;段式虚拟存储系统,存在外部碎片 为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。 为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。
    展开全文
  • 操作系统:理解外碎片内碎片

    千次阅读 2019-07-06 16:41:12
    而关于内碎片的“”,指的是在进程使用中产生的,即,它们是被进程所占用的,但是进程并没有利用它们。(当然,系统也无法利用,除非进程释放了这些内存) 补充一点: 多道可变连续分配 → 只会产生外碎片; 单...

    碎片的内外之分与分配与否有关,比如可变分区的那些没有被分出去给进程的小空间,就是“外碎片”。因为进程的需要是:希望分配到的内存空间是连续的,所以那些小的、分散的就用不上咯。

    而关于内碎片的“内”,指的是在进程使用中产生的,即,它们是被进程所占用的,但是进程并没有利用它们。(当然,系统也无法利用,除非进程释放了这些内存)

    补充一点:

    • 多道可变连续分配 → 只会产生外碎片;
    • 单道连续分配 → 只会产生内碎片;
    • 多道固定连续分配 → 内、外碎片都会有;(没有分出去的固定分区就是外碎片咯)
    展开全文
  • 内部碎片和外部碎片

    2016-03-31 14:10:05
    内存碎片分为内部碎片和外部碎片。 内部碎片:  内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;  内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程...
    内存碎片分为内部碎片和外部碎片。 
    
    内部碎片:
           内部碎片就是已经被分配出去(能明确指出属于哪个进程却不能被利用的内存空间;
          内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。
           为了有效的利用内存,使内存产生更少的碎片,要对内存分页,内存以页为单位来使用,最后一页往往装不满,于是形成了内部碎片。
          由于被装入的数据块小于分区大小,从而导致分区内部有空间浪费,这种现象成为内部碎片。

    外部碎片:
       外部碎片指的是还没有被分配出去(不属于任何进程,但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。
         外部碎片是出于任何已分配区域或页面外部的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。
         分区外的存储空间会出现很多不能使用的碎片。
         为了共享要分段,在段的换入换出时形成外部碎片,比如5K的段换出后,有一个4k的段进来放到原来5k的地方,于是形成1k的外部碎片。

    固定分区、简单分页存在内部碎片,简单分段存在外部碎片。

    外部碎片示意图:

    内存碎片(内部碎片&外部碎片)
    展开全文
  • 内部碎片和外部碎片的区别

    千次阅读 2018-08-09 10:48:15
    一、在内存上(使用连续分配算法来管理分配内存时会产生)的外部碎片和内部碎片两个概念   这几天一直看操作系统,看到内存的连续分配时,对于外部碎片和内部碎片时甚是不解:   内存碎片分为:内部碎片和外部...

    转自:

    一、在内存上(使用连续分配算法来管理分配内存时会产生)的外部碎片和内部碎片两个概念

     

    这几天一直看操作系统,看到内存的连续分配时,对于外部碎片和内部碎片时甚是不解:

     

    内存碎片分为:内部碎片和外部碎片

    【内部碎片】

    内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;

    内部碎片是处于(操作系统分配的用于装载某一进程的内存)区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储块时,系统无法利用它。直到进程释放它,或进程结束时,系统才有可能利用这个存储块。

    单道连续分配只有内部碎片。多道固定连续分配既有内部碎片,又有外部碎片。

    【外部碎片】

    外部碎片指的是还没有被分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的内存空闲区域。

    外部碎片是处于任何两个已分配区域或页面之间的空闲存储块。这些存储块的总和可以满足当前申请的长度要求,但是由于它们的地址不连续或其他原因,使得系统无法满足当前申请。
    产生外部碎片的一种情况:

    举个例子,在内存上,分配三个操作系统分配的用于装载进程的内存区域A、B和C。假设,三个内存区域都是相连的。故而三个内存区域不会产生外部碎片。现在假设B对应的进程执行完毕了操作系统随即收回了B,这个时候A和C中间就有一块空闲区域了。

     

    多道可变连续分配只有外部碎片。

     

     

    总之,在内存上,外部碎片是位于任何两个操作系统分配的用于装载进程的内存区域或页面之间的空闲区域,内部碎片是位于一个操作系统分配的用于装载进程的内存区域或页面内部的空闲区域。

    ================================

    二、在磁盘上的外部碎片和内部碎片两个概念

     

    很多人会把文件碎片跟簇的概念混淆起来。其实对windows系统来说硬盘上的每个分区都是由最小存储单元——簇组成的。就好比,一面墙是由一块块转头组成的。簇的大小可以在分区格式化时由用户定义,一般是数个KB大小,比如是8KB。假设我有一个文件,大小是80MB零1KB(1MB=1000KB),换算一下就是80,001KB,其中的80,000KB正好占用10000个簇,剩下的那1KB,不得以也要占用1个簇,但这最后一个簇还有7KB的空间没用上了。而且这个未完全使用的簇,其他文件也不允许继续使用。这就造成了一点点的空间浪费。

    不少人就把这被浪费了的7KB空间就是磁盘上的内部碎片。

     

    磁盘上的外部碎片(即平时所说的磁盘碎片,磁盘碎片清理工具只能清理磁盘上的外部碎片,清除不了磁盘上的内部碎片,除非改变文件系统的分配单位即簇的大小,使之是一个文件大小的整数倍。)实际上指的是一个文件占据那些簇是不连续的,就相当于文件被分割开来,分别存放在相互间断的几段簇上。文件被分割为几个部分就是几个碎片。所以碎片其实是指文件碎片,可以理解成,文件破碎成片之意。而且文件碎片之间有时候顺序还是错乱的。比如说,有时候“文件里靠后的碎片”所占的簇段在硬盘上反而会排在“文件里位置靠前的碎片”簇段的前面。这样一来,一个文件就会以比较混乱的顺序存放在硬盘上。

    显然计算机读取连续的有序的数据肯定要比不连续的乱序的数据来得快。所以整理碎片可能会大幅度提高系统性能。

    举个例子,起初硬盘某个分区是空白的,写入三个文件A、B和C。显然这个时候,三个文件都是顺次占用三个簇段(这个说明存放文件所用的文件系统应该是类似FAT这样的文件系统,具体参看注释1)。故而三个文件不会产生碎片。

    现在假设你删除了B文件,这个时候A和C中间就有一块空闲簇段了。此时还是不存在文件碎片的,因为每个文件各自占据的簇段都是连续的,没有文件被分割。而如果现在需要写入一个文件D,而且D比刚刚删去的文件B要大。那么A和C之间的空闲簇段就不足以放入D,再假设C后面的空闲簇段也不足以放下D,这个时候D就势必要分割成两块存放,一块放在A和C之间,另一块放在C之后。这样一来,文件碎片就产生了。D文件有两个文件碎片。

    磁盘碎片整理要做的工作就是:把C文件前移,一直移到紧接A文件的簇段上去。这样A和C之间就没有空闲簇了,C之后剩下的将是一段完整的空闲簇段,足以放下文件D。这样D就也占据一段连续的簇段。碎片也就消除了。

     

    =====================================

     

    外部碎片的两种理解:

    1、在内存上,位于任何两个操作系统分配的用于装载进程的内存区域或页面之间的空闲区域称为外部碎片

    2、在磁盘上,将文件分割成几块不相连的分片,这样不相连的分片叫做文件碎片,也即外部碎片。如果将文件分割成几块相连的分片,这样相连的分片则不是文件碎片。

    ==============================

     

    减少内存碎片

     内存碎片是因为在分配一个内存块后,使之空闲,但不将空闲内存归还给最大内存块而产生的。最后这一步很关键。如果内存分配程序是有效的,就不能阻止系统分配内存块并使之空闲。即使一个内存分配程序不能保证返回的内存能与最大内存块相连接(这种方法可以彻底避免内存碎片问题),但你可以设法控制并限制内存碎片。所有这些作法涉及到内存块的分割。每当系统减少被分割内存块的数量,确保被分割内存块尽可能大时,你就会有所改进。

    这样做的目的是尽可能多次反复使用内存块,而不要每次都对内存块进行分割,以正好符合请求的存储量。分割内存块会产生大量的小内存碎片,犹如一堆散沙。以后很难把这些散沙与其余内存结合起来。比较好的办法是让每个内存块中都留有一些未用的字节。留有多少字节应看系统要在多大程度上避免内存碎片。对小型系统来说,增加几个字节的内部碎片是朝正确方向迈出的一步。当系统请求1字节内存时,你分配的存储量取决于系统的工作状态。

    如果系统分配的内存存储量的主要部分是 1 ~ 16 字节,则为小内存也分配 16 字节是明智的。只要限制可以分配的最大内存块,你就能够获得较大的节约效果。但是,这种方法的缺点是,系统会不断地尝试分配大于极限的内存块,这使系统可能会停止工作。减少最大和最小内存块存储量之间内存存储量的数量也是有用的。采用按对数增大的内存块存储量可以避免大量的碎片。例如,每个存储量可能都比前一个存储量大 20%。在嵌入式系统中采用“一种存储量符合所有需要”对于嵌入式系统中的内存分配程序来说可能是不切实际的。这种方法从内部碎片来看是代价极高的,但系统可以彻底避免外部碎片,达到支持的最大存储量。

    将相邻空闲内存块连接起来是一种可以显著减少内存碎片的技术。如果没有这一方法,某些分配算法(如最先适合算法)将根本无法工作。然而,效果是有限的,将邻近内存块连接起来只能缓解由于分配算法引起的问题,而无法解决根本问题。而且,当内存块存储量有限时,相邻内存块连接可能很难实现。

    有些内存分配器很先进,可以在运行时收集有关某个系统的分配习惯的统计数据,然后,按存储量将所有的内存分配进行分类,例如分为小、中和大三类。系统将每次分配指向被管理内存的一个区域,因为该区域包括这样的内存块存储量。较小存储量是根据较大存储量分配的。这种方案是最先适合算法和一组有限的固定存储量算法的一种有趣的混合,但不是实时的。

    有效地利用暂时的局限性通常是很困难的,但值得一提的是,在内存中暂时扩展共处一地的分配程序更容易产生内存碎片。尽管其它技术可以减轻这一问题,但限制不同存储量内存块的数目仍是减少内存碎片的主要方法。

    现代软件环境业已实现各种避免内存碎片的工具。例如,专为分布式高可用性容错系统开发的 OSE 实时操作系统可提供三种运行时内存分配程序:内核 alloc(),它根据系统或内存块池来分配;堆 malloc(),根据程序堆来分配; OSE 内存管理程序 alloc_region,它根据内存管理程序内存来分配。

    从 许多方面来看,Alloc就是终极内存分配程序。它产生的内存碎片很少,速度很快,并有判定功能。你可以调整甚至去掉内存碎片。只是在分配一个存储量后,使之空闲,但不再分配时,才会产生外部碎片。内部碎片会不断产生,但对某个给定的系统和八种存储量来说是恒定不变的。

    Alloc 是一种有八个自由表的固定存储量内存分配程序的实现方法。系统程序员可以对每一种存储量进行配置,并可决定采用更少的存储量来进一步减少碎片。除开始时以外,分配内存块和使内存块空闲都是恒定时间操作。首先,系统必须对请求的存储量四舍五入到下一个可用存储量。就八种存储量而言,这一目标可用三个 如果 语句来实现。其次,系统总是在八个自由表的表头插入或删除内存块。开始时,分配未使用的内存要多花几个周期的时间,但速度仍然极快,而且所花时间恒定不变。

    堆 malloc() 的内存开销(8 ~ 16 字节/分配)比 alloc小,所以你可以停用内存的专用权。malloc() 分配程序平均来讲是相当快的。它的内部碎片比alloc()少,但外部碎片则比alloc()多。它有一个最大分配存储量,但对大多数系统来说,这一极限值足够大。可选的共享所有权与低开销使 malloc() 适用于有许多小型对象和共享对象的 C++ 应用程序。堆是一种具有内部堆数据结构的伙伴系统的实现方法。在 OSE 中,有 28 个不同的存储量可供使用,每种存储量都是前两种存储量之和,于是形成一个斐波那契(Fibonacci)序列。实际内存块存储量为序列数乘以 16 字节,其中包括分配程序开销或者 8 字节/分配(在文件和行信息启用的情况下为 16 字节)。

    当你很少需要大块内存时,则OSE内存管理程序最适用。典型的系统要把存储空间分配给整个系统、堆或库。在有 MMU 的系统中,有些实现方法使用 MMU 的转换功能来显著降低甚至消除内存碎片。在其他情况下,OSE 内存管理程序会产生非常多的碎片。它没有最大分配存储量,而且是一种最先适合内存分配程序的实现方法。内存分配被四舍五入到页面的偶数——典型值是 4 k 字节。

    展开全文
  • 外部碎片和内部碎片

    千次阅读 2016-06-19 10:04:07
    对于教材而言,单一连续区存储管理、固定分区存储管理、分页式存储管理请求页式存储管理都会出现内部碎片。只是前两种存储管理造成的内部碎片比较大,浪费较为严重;后两种页式存储管理,平均来说每个作业都会出现...
  • 一、在内存上(使用连续分配算法来管理分配内存时会产生)的外部碎片和内部碎片两个概念 这几天一直看操作系统,看到内存的连续分配时,对于外部碎片和内部碎片时甚是不解: 内存碎片分为:内部碎片和外部碎片 ...
  • 什么是内部碎片和外部碎片

    千次阅读 2021-02-04 09:22:40
    什么是内部碎片? 内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间; 内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不使用这个存储块。而在进程占有这块存储...
  • 内部碎片 外部碎片

    千次阅读 2013-10-29 23:07:44
    内存碎片的产生:  内存分配有静态分配动态分配两种  静态分配在程序编译链接时分配的大小使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请释放任意大小内存的功能,这就是内存的动态...
  • 操作系统内部碎片和外部碎片In a computer storage system, as processes are loaded and removed from memory, the free memory space is broken into small pieces. In this way memory space used inefficiently,...
  • 内存碎片---内部碎片&外部碎片

    千次阅读 多人点赞 2018-05-05 20:44:01
    内部碎片的产生:因为所有的内存分配必须起始于可被 4、8 或 16 整除(视处理器体系结构而定)的地址或者因为MMU的分页机制的限制,决定内存分配算法仅能把预定大小的内存块分配给客户。假设当某个客户请求一个43...
  • 内存分配外部碎片和内部碎片

    千次阅读 2018-05-16 15:51:54
    随着进程装入移出内存,空闲的内存空间被分为小片段,当所有的空闲的这些小片段的内存之可以满足请求,但是并不连续的时候,这个时候就会出现外部碎片的问题,这个问题可能会很严重,这个就是外部碎片 ...
  • 内部碎片与外部碎片

    千次阅读 2016-04-22 20:44:15
    内存碎片分为内部碎片和外部碎片。 内部碎片:  内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间;  内部碎片是处于区域内部或页面内部的存储块。占有这些区域或页面的进程并不...
  • 内部碎片 && 外部碎片

    千次阅读 2013-06-24 09:57:06
    外部碎片:没有一块单独的空闲块足够大可以处理分配请求。 内部碎片:(书上的原话)“是在一个已分配块比有效载荷时发生的。很多原因都可能造成这个问题。例如,一个分配器的实现可能对已分配块强加一个最小的最大...
  • 在牛客网上刷题: 外部碎片( External Fragmentation )最严重的存储管理方式是() A、固定分区; B、可变分区; C、分页; D、分段。答案为B,并不明白,就整理了一下大牛的总结~ 感谢博主: ...
  • 内部碎片和外部碎片是在内存连续分配中产生的。内部碎片是因为固定分区分配方式,而外部碎片是由于动态分区分配产生的。 内部碎片:分配给作业的存储空间中未被利用的部分。 外部碎片:系统中无法利用的小存储空间。...
  • 分段、分页&&内存碎片碎片

    千次阅读 2019-10-04 02:30:35
    关键词: 分段、分页、内存碎片碎片 1、分段&&分页: 分页与分段都是磁盘的存储单位。 (1)分页: ①定义:在内存空间中,将内存空间划分为一个又一个大小相等的基本单位,称为“块”,也称为...
  • 碎片的内存”描述一个系统中所有不可用的空闲内存。这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置。由于...
  • 内存碎片和磁盘碎片

    2010-08-22 14:33:00
    内存碎片和磁盘碎片 一 内存碎片 内存碎片包括:内部碎片和外部碎片。 <br /> <br />内部碎片就是已经被分配出去(能明确指出属于哪个进程)却不能被利用的内存空间; 外部碎片指的是还没有被...
  • 外部内部索引碎片率统计

    千次阅读 2012-02-27 11:41:33
    --外部碎片率>10 表示外部碎片率发生; --内部碎片率 SELECT OBJECT_NAME(dt.object_id) 表名 ,  si.name 索引名 ,  外部碎片率=CASE WHEN  dt.avg_fragmentation_in_percent>10 THEN '碎片率高'  ELSE ...
  • 关于碎片, 对话框碎片DialogFragment
  • 后,我们开始认为:可能索引“碎片”中的那个“碎片和“磁盘碎片”中的那个“碎片”是差不多的,甚至是相同的。  有朋友可能会从数据库的存储机制去分析,但是后可能分析清晰了索引碎片是怎么样回事,至于它...
  • 碎片的内存”描述一个系统中所有不可用的空闲内存。这些资源之所以仍然未被使用,是因为负责分配内存的分配器使这些内存无法使用。这一问题通常都会发生,原因在于空闲内存以小而不连续方式出现在不同的位置。由于...
  • 碎片整理

    2015-01-11 21:30:34
    碎片整理
  • 其它都是抄回来的,不好意思写原创,可是转载又不知写是转自哪的.. 外部是还没有分给具体进程的,但是由又由于过小而未能进行分配. 内部是已分给进程的,但...上面是我用自己的理解对外部碎片与内部碎片的一些描述...
  • 内存碎片和内存泄露

    千次阅读 2015-08-19 19:13:08
    内存碎片: 内存碎片的产生:  1.动态内存分配问题:  内存分配有静态分配动态分配两种  静态分配在程序编译链接时分配的大小使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 266,948
精华内容 106,779
关键字:

内碎片和外碎片