Что понимается под термином внешняя фрагментация
СОДЕРЖАНИЕ
Типы фрагментации
Существует три различных, но связанных формы фрагментации: внешняя фрагментация, внутренняя фрагментация и фрагментация данных, которые могут присутствовать изолированно или вместе. Фрагментация часто принимается в обмен на повышение скорости или простоты. Аналогичные явления происходят и с другими ресурсами, такими как процессоры; см. ниже.
Основной принцип
Когда компьютерная программа запрашивает блоки памяти у компьютерной системы, блоки выделяются порциями. Когда компьютерная программа завершает работу с фрагментом, она может освободить его обратно в систему, сделав его доступным для последующего распределения для другой или той же программы. Размер и время, в течение которого фрагмент удерживается программой, различаются. В течение своего жизненного цикла компьютерная программа может запрашивать и освобождать множество фрагментов памяти.
Когда программа запускается, свободные области памяти длинные и непрерывные. Со временем и по мере использования длинные смежные области становятся фрагментированными на все меньшие и меньшие смежные области. В конце концов, программа может стать невозможной для получения больших непрерывных участков памяти.
Внутренняя фрагментация
Внешняя фрагментация
Внешняя фрагментация возникает, когда свободная память разделяется на небольшие блоки и перемежается выделенной памятью. Это слабость некоторых алгоритмов распределения памяти, когда они не могут эффективно упорядочить память, используемую программами. В результате, хотя доступно бесплатное хранилище, оно фактически непригодно для использования, поскольку разделено на части, которые по отдельности слишком малы, чтобы удовлетворить потребности приложения. Термин «внешний» относится к тому факту, что неиспользуемое хранилище находится за пределами выделенных регионов.
Например, рассмотрим ситуацию, когда программа выделяет три непрерывных блока памяти, а затем освобождает средний блок. Распределитель памяти может использовать этот свободный блок памяти для будущих распределений. Однако он не может использовать этот блок, если размер выделяемой памяти превышает размер этого свободного блока.
Внешняя фрагментация также происходит в файловых системах, поскольку создается много файлов разного размера, которые меняют размер и удаляются. Эффект будет еще хуже, если файл, который разделен на множество мелких частей, будет удален, потому что при этом остаются такие же небольшие области свободных пространств.
0x0000 | 0x1000 | 0x2000 | 0x3000 | 0x4000 | 0x5000 | Комментарии |
---|---|---|---|---|---|---|
Начните со всей доступной для хранения памяти. | ||||||
А | B | C | Выделено три блока A, B и C размером 0x1000. | |||
А | C | Освобожденный блок B. Обратите внимание, что память, которую использовал B, не может быть включена для блока, размер которого превышает размер B. | ||||
А | C | Блок C перемещен в пустой слот блока B, позволяя использовать оставшееся пространство для более крупного блока размером 0x4000. |
Фрагментация данных
Обзор
По сравнению с внешней фрагментацией накладные расходы и внутренняя фрагментация приводят к небольшим потерям с точки зрения потери памяти и снижения производительности. Это определяется как:
Фрагментация 0% означает, что вся свободная память находится в одном большом блоке; фрагментация составляет 90% (например), когда имеется 100 МБ свободной памяти, но самый большой свободный блок памяти для хранения составляет всего 10 МБ.
Внешняя фрагментация, как правило, представляет меньшую проблему в файловых системах, чем в системах хранения с первичной памятью (ОЗУ), потому что программы обычно требуют, чтобы их запросы к хранению в ОЗУ выполнялись с помощью смежных блоков, но файловые системы обычно спроектированы так, чтобы иметь возможность использовать любую коллекцию доступных блоков (фрагментов), чтобы собрать файл, который логически выглядит непрерывным. Следовательно, если сильно фрагментированный файл или много небольших файлов удаляются из полного тома, а затем создается новый файл с размером, равным только что освобожденному пространству, новый файл просто повторно использует те же фрагменты, которые были освобождены при удалении. Если был удален один файл, новый файл будет таким же фрагментированным, как и старый, но в любом случае не будет препятствий для использования всего (сильно фрагментированного) свободного пространства для создания нового файла. В ОЗУ, с другой стороны, используемые системы хранения часто не могут собрать большой блок для удовлетворения запроса из небольших несмежных свободных блоков, поэтому запрос не может быть выполнен, и программа не может продолжить выполнение того, для чего требуется эта память (если только он может повторно отправить запрос в виде нескольких небольших отдельных запросов).
Проблемы
Сбой хранилища
Чтобы избежать этого, распределитель может вместо сбоя запустить дефрагментацию (или цикл сжатия памяти) или другое восстановление ресурсов, например, основной цикл сборки мусора, в надежде, что тогда он сможет удовлетворить запрос. Это позволяет процессу продолжаться, но может серьезно повлиять на производительность.
Снижение производительности
Фрагментация вызывает снижение производительности по ряду причин. По сути, фрагментация увеличивает объем работы, необходимой для выделения ресурса и доступа к нему. Например, на жестком диске или ленточном накопителе последовательное чтение данных происходит очень быстро, но поиск другого адреса происходит медленно, поэтому чтение или запись фрагментированного файла требует многочисленных поисков и, следовательно, намного медленнее, в дополнение к большему износу. Устройство. Кроме того, если ресурс не фрагментирован, запросы на выделение могут быть просто удовлетворены путем возврата одного блока из начала свободной области. Несмотря на то, что он фрагментирован, запрос требует либо поиска достаточно большого свободного блока, что может занять много времени, либо выполнения запроса несколькими меньшими блоками (если это возможно), что приводит к фрагментации этого распределения и требует дополнительных накладные расходы на управление несколькими частями.
Аналогичные явления
Некоторые файловые системы флеш-памяти имеют несколько различных видов внутренней фрагментации, включая «мертвое пространство» и «темное пространство».
Разница между внутренней и внешней фрагментацией
Содержание:
Внутренняя и внешняя фрагментация
Что такое внутренняя фрагментация?
Рассмотрим рисунок выше, где используется механизм распределения памяти фиксированного размера. Первоначально память пуста, и распределитель разделил память на разделы фиксированного размера. Затем три программы с именами A, B, C были загружены в первые три раздела, в то время как 4-й раздел все еще был свободен. Программа A соответствует размеру раздела, поэтому в этом разделе нет потерь, но программа B и программа C меньше размера раздела. Итак, в части 2 и разделе 3 остается свободное место. Однако это свободное пространство невозможно использовать, поскольку распределитель памяти назначает программам только полные разделы, но не t их части. Эта потеря свободного пространства называется внутренней фрагментацией.
В приведенном выше примере это фиксированные разделы одинакового размера, но это может произойти даже в ситуации, когда доступны разделы различных фиксированных размеров. Обычно память или самое жесткое пространство делится на блоки, которые обычно имеют размер степени двойки, например 2, 4, 8, 16 байтов. Таким образом, программа или файл размером 3 байта будут назначены 4-байтовому блоку, но один байт этого блока станет непригодным для использования, что приведет к внутренней фрагментации.
Что такое внешняя фрагментация?
Рассмотрим приведенный выше рисунок, на котором распределение памяти выполняется динамически. При динамическом распределении памяти распределитель выделяет только точный необходимый размер для этой программы. Первая память полностью свободна. Затем программы A, B, C, D и E разных размеров загружаются одна за другой и помещаются в память в указанном порядке. Позже, программа A и программа C закрываются, и они выгружаются из памяти. Теперь в памяти есть три области свободного места, но они не смежные. Теперь будет загружена большая программа под названием Программа F, но ни одного блока свободного пространства недостаточно для Программы F. Добавление всех свободных пространств определенно достаточно для Программы F, но из-за отсутствия смежности это пространство неприменимо для Программы F. Это называется внешней фрагментацией.
В чем разница между внутренней и внешней фрагментацией?
• Внутренняя фрагментация происходит при использовании метода выделения памяти фиксированного размера. Внешняя фрагментация происходит при использовании метода динамического распределения памяти.
• Внутренняя фрагментация происходит, когда раздел фиксированного размера назначается программе / файлу с меньшим размером, чем раздел, в результате чего остальное пространство в этом разделе становится непригодным для использования. Внешняя фрагментация происходит из-за отсутствия достаточного количества смежного пространства после загрузки и выгрузки программ или файлов в течение некоторого времени, потому что тогда все свободное пространство распределяется здесь и там.
• Внешняя фрагментация может быть достигнута путем сжатия, когда назначенные блоки перемещаются в одну сторону, так что получается непрерывное пространство. Однако эта операция требует времени, а также невозможно безопасно перемещать определенные критически важные области, например системные службы. Мы можем наблюдать, как этот этап сжатия выполняется на жестких дисках при запуске дефрагментации диска в Windows.
• Внешнюю фрагментацию можно предотвратить с помощью таких механизмов, как сегментация и разбиение по страницам. Здесь дано логическое непрерывное пространство виртуальной памяти, в то время как на самом деле файлы / программы разбиты на части и размещаются здесь и там.
• Внутреннюю фрагментацию можно искалечить, если будут иметь разделы нескольких размеров и назначить программу на основе наиболее подходящей. Однако до сих пор внутренняя фрагментация полностью не устранена.
Резюме:
Внутренняя и внешняя фрагментация
Фрагментация (вычисления)
Существует три различных, но связанных формы фрагментации: внешняя фрагментация, внутренняя фрагментация и фрагментация данных, которые могут присутствовать изолированно или вместе. Фрагментация часто принимается в обмен на повышение скорости или простоты. Аналогичные явления происходят и с другими ресурсами, такими как процессоры; см. ниже.
Когда компьютерная программа запрашивает блоки памяти у компьютерной системы, блоки выделяются порциями. Когда компьютерная программа завершает работу с фрагментом, она может освободить его обратно в систему, сделав его доступным для последующего распределения для другой или той же программы. Размер и время, в течение которого фрагмент удерживается программой, различаются. В течение своего жизненного цикла компьютерная программа может запрашивать и освобождать множество фрагментов памяти.
Когда программа запускается, свободные области памяти длинные и непрерывные. Со временем и по мере использования длинные смежные области становятся фрагментированными на все меньшие и меньшие смежные области. В конце концов, программа может стать невозможной для получения больших непрерывных участков памяти.
Внутренняя фрагментация
Внешняя фрагментация
Внешняя фрагментация возникает, когда свободная память разделяется на небольшие блоки и перемежается выделенной памятью. Это слабость некоторых алгоритмов распределения памяти, когда они не могут эффективно упорядочить память, используемую программами. В результате, хотя доступно бесплатное хранилище, оно фактически непригодно для использования, потому что оно разделено на части, которые по отдельности слишком малы, чтобы удовлетворить потребности приложения. Термин «внешний» относится к тому факту, что неиспользуемое хранилище находится за пределами выделенных регионов.
Например, рассмотрим ситуацию, когда программа выделяет три непрерывных блока памяти, а затем освобождает средний блок. Распределитель памяти может использовать этот свободный блок памяти для будущих распределений. Однако он не может использовать этот блок, если размер выделяемой памяти превышает размер этого свободного блока.
Внешняя фрагментация также происходит в файловых системах, поскольку создается много файлов разного размера, которые меняют размер и удаляются. Эффект будет еще хуже, если файл, который разделен на множество маленьких частей, будет удален, потому что при этом остаются такие же небольшие области свободных пространств.
0x0000 | 0x1000 | 0x2000 | 0x3000 | 0x4000 | 0x5000 | Комментарии |
---|---|---|---|---|---|---|
Начните со всей доступной для хранения памяти. | ||||||
А | B | C | Выделено три блока A, B и C размером 0x1000. | |||
А | C | Освобожденный блок B. Обратите внимание, что память, которую использовал B, не может быть включена для блока, размер которого превышает размер B. | ||||
А | C | Блок C перемещен в пустой слот блока B, позволяя использовать оставшееся пространство для более крупного блока размером 0x4000. |
Фрагментация данных
Фрагментация данных происходит, когда набор данных в памяти разбивается на множество частей, которые не расположены близко друг к другу. Обычно это результат попытки вставить в хранилище большой объект, который уже подвергся внешней фрагментации.
По сравнению с внешней фрагментацией накладные расходы и внутренняя фрагментация приводят к небольшим потерям с точки зрения потери памяти и снижения производительности. Это определяется как:
Фрагментация 0% означает, что вся свободная память находится в одном большом блоке; фрагментация составляет 90% (например), когда имеется 100 МБ свободной памяти, но самый большой свободный блок памяти для хранения составляет всего 10 МБ.
Внешняя фрагментация, как правило, представляет меньшую проблему в файловых системах, чем в системах хранения с первичной памятью (ОЗУ), потому что программы обычно требуют, чтобы их запросы к хранению в ОЗУ выполнялись с помощью смежных блоков, но файловые системы обычно предназначены для использования любой коллекции. доступных блоков (фрагментов), чтобы собрать файл, который логически выглядит непрерывным. Следовательно, если сильно фрагментированный файл или много небольших файлов удаляются из полного тома, а затем создается новый файл с размером, равным только что освобожденному пространству, новый файл просто повторно использует те же фрагменты, которые были освобождены при удалении. Если был удален один файл, новый файл будет таким же фрагментированным, как и старый, но в любом случае не будет препятствий для использования всего (сильно фрагментированного) свободного пространства для создания нового файла. В ОЗУ, с другой стороны, используемые системы хранения часто не могут собрать большой блок для удовлетворения запроса из небольших несмежных свободных блоков, поэтому запрос не может быть выполнен, и программа не может продолжить выполнение того, для чего требуется эта память (если только он может повторно отправить запрос в виде нескольких небольших отдельных запросов).
Сбой хранилища
Чтобы избежать этого, распределитель может вместо сбоя запустить дефрагментацию (или цикл сжатия памяти) или другое восстановление ресурсов, например, основной цикл сборки мусора, в надежде, что тогда он сможет удовлетворить запрос. Это позволяет процессу продолжаться, но может серьезно повлиять на производительность.
Снижение производительности
Фрагментация вызывает снижение производительности по ряду причин. По сути, фрагментация увеличивает объем работы, необходимой для выделения ресурса и доступа к нему. Например, на жестком диске или ленточном накопителе последовательное чтение данных происходит очень быстро, но поиск другого адреса происходит медленно, поэтому чтение или запись фрагментированного файла требует многочисленных поисков и, следовательно, намного медленнее, в дополнение к большему износу Устройство. Кроме того, если ресурс не фрагментирован, запросы на выделение могут быть просто удовлетворены путем возврата одного блока из начала свободной области. Несмотря на то, что он фрагментирован, запрос требует либо поиска достаточно большого свободного блока, что может занять много времени, либо выполнения запроса несколькими меньшими блоками (если это возможно), что приводит к фрагментации этого выделения и требует дополнительных накладные расходы на управление несколькими частями.
Некоторые файловые системы флеш-памяти имеют несколько различных видов внутренней фрагментации, включая «мертвое пространство» и «темное пространство». [5]
Фрагментация (вычисления)
Существует три различных, но связанных формы фрагментации: внешняя фрагментация, внутренняя фрагментация и фрагментация данных, которые могут присутствовать изолированно или вместе. Фрагментация часто принимается в обмен на повышение скорости или простоты. Аналогичные явления происходят и с другими ресурсами, такими как процессоры; см. ниже.
Когда компьютерная программа запрашивает блоки памяти у компьютерной системы, блоки выделяются порциями. Когда компьютерная программа завершает работу с фрагментом, она может освободить его обратно в систему, сделав его доступным для последующего распределения для другой или той же программы. Размер и время, в течение которого фрагмент удерживается программой, различаются. В течение своего жизненного цикла компьютерная программа может запрашивать и освобождать множество фрагментов памяти.
Когда программа запускается, свободные области памяти длинные и непрерывные. Со временем и по мере использования длинные смежные области становятся фрагментированными на все более мелкие смежные области. В конце концов, программа может стать невозможной для получения больших непрерывных участков памяти.
Внутренняя фрагментация
Внешняя фрагментация
Внешняя фрагментация возникает, когда свободная память разделяется на небольшие блоки и перемежается выделенной памятью. Это слабость некоторых алгоритмов распределения памяти, когда они не могут эффективно упорядочить память, используемую программами. В результате, хотя доступно бесплатное хранилище, оно фактически непригодно для использования, потому что оно разделено на части, которые по отдельности слишком малы, чтобы удовлетворить потребности приложения. Термин «внешний» относится к тому факту, что неиспользуемое хранилище находится за пределами выделенных регионов.
Например, рассмотрим ситуацию, когда программа выделяет три непрерывных блока памяти, а затем освобождает средний блок. Распределитель памяти может использовать этот свободный блок памяти для будущих распределений. Однако он не может использовать этот блок, если размер выделяемой памяти превышает размер этого свободного блока.
Внешняя фрагментация также происходит в файловых системах, поскольку создается много файлов разного размера, которые меняют размер и удаляются. Эффект будет еще хуже, если файл, который разделен на множество маленьких частей, будет удален, потому что при этом остаются такие же небольшие области свободных пространств.
0x0000 | 0x1000 | 0x2000 | 0x3000 | 0x4000 | 0x5000 | Комментарии |
---|---|---|---|---|---|---|
Начните со всей доступной для хранения памяти. | ||||||
А | B | C | Выделено три блока A, B и C размером 0x1000. | |||
А | C | Освобожденный блок B. Обратите внимание, что память, которую использовал B, не может быть включена для блока, размер которого превышает размер B. | ||||
А | C | Блок C перемещен в пустой слот блока B, позволяя использовать оставшееся пространство для более крупного блока размером 0x4000. |
Фрагментация данных
Фрагментация данных происходит, когда набор данных в памяти разбивается на множество частей, которые не расположены близко друг к другу. Обычно это результат попытки вставить в хранилище большой объект, который уже подвергся внешней фрагментации.
По сравнению с внешней фрагментацией накладные расходы и внутренняя фрагментация приводят к небольшим потерям с точки зрения потери памяти и снижения производительности. Это определяется как:
Фрагментация 0% означает, что вся свободная память находится в одном большом блоке; фрагментация составляет 90% (например), когда имеется 100 МБ свободной памяти, но самый большой свободный блок памяти для хранения составляет всего 10 МБ.
Внешняя фрагментация, как правило, представляет меньшую проблему в файловых системах, чем в системах хранения первичной памяти (ОЗУ), потому что программы обычно требуют, чтобы их запросы к хранилищу ОЗУ выполнялись с помощью смежных блоков, но файловые системы обычно предназначены для использования любого набора файлов. доступные блоки (фрагменты) для сборки файла, который логически выглядит непрерывным. Следовательно, если сильно фрагментированный файл или много небольших файлов удаляются из полного тома, а затем создается новый файл с размером, равным только что освобожденному пространству, новый файл просто повторно использует те же фрагменты, которые были освобождены при удалении. Если был удален один файл, новый файл будет таким же фрагментированным, как и старый файл, но в любом случае не будет никаких препятствий для использования всего (сильно фрагментированного) свободного пространства для создания нового файла. В ОЗУ, с другой стороны, используемые системы хранения часто не могут собрать большой блок для удовлетворения запроса из небольших несмежных свободных блоков, поэтому запрос не может быть выполнен, и программа не может продолжить выполнение того, для чего требуется эта память (если только он может повторно отправить запрос в виде нескольких небольших отдельных запросов).
Сбой хранилища
Чтобы избежать этого, распределитель может вместо сбоя запустить дефрагментацию (или цикл сжатия памяти) или другое восстановление ресурсов, например, основной цикл сборки мусора, в надежде, что тогда он сможет удовлетворить запрос. Это позволяет процессу продолжаться, но может серьезно повлиять на производительность.
Снижение производительности
Фрагментация вызывает снижение производительности по ряду причин. По сути, фрагментация увеличивает объем работы, необходимой для выделения ресурса и доступа к нему. Например, на жестком диске или ленточном накопителе последовательное чтение данных происходит очень быстро, но поиск другого адреса происходит медленно, поэтому чтение или запись фрагментированного файла требует многочисленных поисков и, следовательно, намного медленнее, в дополнение к большему износу. Устройство. Кроме того, если ресурс не фрагментирован, запросы на выделение могут быть просто удовлетворены путем возврата одного блока с начала свободной области. Несмотря на то, что он фрагментирован, запрос требует либо поиска достаточно большого свободного блока, что может занять много времени, либо выполнения запроса несколькими меньшими блоками (если это возможно), что приводит к фрагментации этого распределения и требует дополнительных накладные расходы на управление несколькими частями.
Более тонкая проблема заключается в том, что фрагментация может преждевременно исчерпать кеш, вызывая перегрузку из-за того, что кеши содержат блоки, а не отдельные данные. Например, предположим, что программа имеет рабочий набор в 256 КБ и работает на компьютере с кешем 256 КБ (скажем, инструкция L2 + кеш данных), поэтому весь рабочий набор помещается в кеш и, таким образом, выполняется быстро, по крайней мере, в условия попадания в кеш. Предположим далее, что у него есть 64 записи временного буфера трансляции (TLB), каждая для страницы размером 4 КиБ : каждый доступ к памяти требует трансляции из виртуальной в физическую, что выполняется быстро, если страница находится в кеше (здесь TLB). Если рабочий набор нефрагментарный, то он помещается на ровно 64 страниц ( страница рабочего набора будет 64 страниц), и все поиски памяти могут обслуживаться из кэша. Однако, если рабочий набор фрагментирован, он не умещается в 64 страницы, и выполнение будет замедляться из-за перебоев: страницы будут многократно добавляться и удаляться из TLB во время работы. Таким образом, определение размера кэша при проектировании системы должно включать запас для учета фрагментации.
Некоторые файловые системы флеш-памяти имеют несколько различных видов внутренней фрагментации, включая «мертвое пространство» и «темное пространство». [5]