НЕГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
Институт Управления и Информатики
Метод близнецов (или buddy system) является схемой выделения памяти, сочетающей в себе возможность слияния буферов и распределитель по степени числа 21 [13]. В основе метода лежит создание буферов малого размера путем деления пополам больших буферов и слияния смежных буферов по мере возможности. При разделении буфера на два каждая половина называется близнецом (buddy) второй.
Рассмотрим метод близнецов на простом примере, в котором алгоритм применяется для обработки 1024-байтового блока с минимальным размером участков в 32 байта. Распределитель использует битовую карту для отслеживания каждой 32-битовой порции блока: если бит установлен, то соответствующий участок занят. Она также поддерживает список свободных буферов любого допустимого размера (по степеням двойки в диапазоне от 32 до 512). Изначально блок представляет собой единый буфер. Представим, что произойдет с ним при поступлении некоей последовательности запросов на выделение памяти и ответную реакцию распределителя.
1. attocate(256). Блок делится на два близнеца, А и А'; блок А' поступает в список свободных 512-байтовых буферов. Затем буфер А разбивается на В и В'. В' заносится в список свободных 256-байтных буферов, а буфер В передается клиенту.
2. attocate(128). Распределитель обнаруживает, что список свободных 128-байтовых буферов пуст. Тогда он проверяет список 256-байтовых буферов, изымает оттуда В' и разделяет его на С и С'. После этого буфер С' помещается в список свободных 128-байтовых буферов, а буфер В возвращается клиенту.
1 Здесь описывается двоичная методика близнецов, которая является наиболее простой и популярной из систем близнецов. На самом деле можно реализовать и другие варианты алгоритма, разделяющие буферы на четыре, восемь и более частей.
3. allocate(64). Распределитель выясняет, что список свободных 64-байтовых буферов пуст. Тогда он обходит список 128-байтовых буферов, удаляет оттуда С' и дробит его на D и D'. Последний передается в список свободных 64-байтовых буферов, а буфер D возвращается клиенту.
4. allocate(128). Распределитель узнает, что списки свободных 128- и 256- байтовых буферов пусты. Он проверяет список свободных 512-байтовых буферов и удаляет оттуда буфер А'. Затем А' разделяется на два близнеца Е и Е', а буфер Е — на F и F. После этого буфер Е' переносится в список свободных буферов размером 256 байтов, а буфер F — в список 128-байтовых буферов. Буфер F передается клиенту. При строительстве не обойтись без спецтехники. Наиболее универсальным является автокран 25 тонн. Он отличается высокой маневренностью и проходимостью, а также имеет дизельный двигатель, что гарантирует работу при любых погодных условиях.