Slab

Slab

Распределение slab – это механизм управления памятью, предназначенный для более эффективного распределения памяти и устранения значительной фрагментации. Основой этого алгоритма является сохранение выделенной памяти, содержащей объект определенного типа, и повторное использование этой памяти при следующем выделении для объекта того же типа. Этот метод был впервые введен в SunOS Джефом Бонвиком и сейчас широко используется во многих операционных системах Unix, включая FreeBSD и Linux.

Содержание

Основа

Фундаментальная идея способа распределения slab основывается на результатах наблюдений, показывающих, что некоторые объекты данных ядра часто создаются и уничтожаются после того, как перестают быть нужными. Таким образом, при каждом выделении памяти для объектов такого типа затрачивается некоторое время для нахождения наиболее подходящего места для этого объекта. Кроме того, освобождения памяти после уничтожения объекта способствует фрагментации памяти, которая создает дополнительную нагрузку на ядро для реорганизации памяти.

В случае же распределением slab, при использовании программистом определенных системных вызовов, участки памяти, подходящие для размещения объектов данных определенного типа и размера, заранее предопределены. Распределитель slab хранит информацию о размещении этих участков, известных также как кэши. Таким образом, если поступает запрос на выделение памяти для объекта данных определенного размера, он может мгновенно удовлетворить запрос уже выделенным слотом. Однако, уничтожение объектов не освобождает память, а только открывает слот, который помещается в список свободных слотов распределителем slab. Следующий вызов для выделения памяти того же размера вернет слот памяти, неиспользуемый в данный момент. Этот процесс устраняет необходимость в поиске подходящего участка памяти и значительно снижает фрагментацию памяти. В этом контексте slab – это одна или более смежных страниц в памяти, содержащих заранее выделенные участки памяти.

Реализация

Понимание распределения slab требует определения следующих терминов:

  1. Кэш: кэш представляет собой небольшой объём очень быстрой памяти. Здесь мы используем кэш как память для хранения таких объектов, как семафоры, дескрипторы процессов, объекты файлов и т. д. Каждый кэш способен хранить только один тип объектов.
  2. Slab: slab представляет собой непрерывный участок памяти, обычно составленный из нескольких физических смежных страниц. Кэш состоит из одного или более slab’ов.

Когда программа создает кэш, она выделяет ряд объектов в него. Их количество зависит от размера связанных slab’ов. Slab может находиться в одном из следующих состояний:

  1. пустой – все объекты в slab’e помечены как свободные
  2. частично занятый – slab содержит как используемые, так и пустые объекты
  3. заполненный – все объекты в slab’е помечены как используемые

Изначально система помечает каждый slab как «пустой». Когда процесс обращается за новым объектом ядра, система делает попытку найти свободное место для этого объекта в частично занятом slab’е в кэше для этого типа объектов. Если такого места не находится, система выделяет новый slab из смежных физических страниц и передает их в кэш. Новый объект размещается в этом slab’е, а это местоположение помещается как «частично занятое». Основное преимущество алгоритма slab заключается в том, что память выделяется точно в том объёме, в котором требуется. Таким образом, отсутствует внутренняя фрагментация памяти. Распределение происходит быстро, поскольку система создает объекты заранее и легко выделяет их из slab’а.

Slab

Slab – объём памяти, за счет которого кэш может увеличиваться или уменьшаться. Он представляет собой распределение памяти в кэш, а его размер обычно кратен размеру страницы памяти. Slab должен содержать список свободных буферов, а также список буферов, которые были выделены (в случае большого размера slab’а).

Большие slab’ы

Предназначены для кэшей, хранящих объекты, размер которых не менее 1/8 размера страницы памяти данной машины. Причина, по которой большие slab’ы имеют структуру, отличную от небольших slab’ов, заключается в том, что так они могут лучше умещаться на страницах памяти, таким образом избегая фрагментации. Slab содержит список буферов, которые являются контроллерами для каждого буфера, который может быть выделен (буфер – это память, которую пользователь распределителя slab будет использовать).

Малые slab’ы

Содержат объекты, которые не превышают 1/8 размера страницы памяти данной машины. Они должны быть оптимизированы отдельно от логической структуры, избегая использования буферов (которые были бы такими же большими, как и данные в них, вызывая тем самым намного больший расход памяти). Небольшие slab’ы занимают точно одну страницу, и имеют определенную структуру, позволяющую им избежать буферизации. Последняя часть страницы содержит «заголовок slab», представляющий собой информацию, необходимую для хранения slab’а. Начиная с первого адреса страницы, есть столько буферов, сколько может быть выделено без использования заголовка slab в конце страницы.

Вместо обычного использования буферов, используется буфер для хранения списка свободных ссылок. Это позволяет обходиться без использования буферов в небольших slab’ах.

Системы, использующие распределение slab

  1. AmigaOS (введено в 4.0)
  2. DragonFly BSD (введено в релизе 1.0)
  3. FreeBSD (введено в 5.0)
  4. Haiku (введено в alpha 2)
  5. HP-UX (введено в 11i)
  6. Linux (введено в ядре 2.2, много популярных дистрибутивов отдают предпочтение методу распределения SLUB[источник?], но SLAB по-прежнему доступен в качестве опции)
  7. NetBSD (введено в 4.0)
  8. Solaris (введено в 2.4)

Wikimedia Foundation. 2010.

Игры ⚽ Нужен реферат?

Полезное


Смотреть что такое "Slab" в других словарях:

  • slab — SLAB, Ă, slabi, e, adj. 1. (Despre oameni şi animale sau despre părţi ale corpului lor) Care nu are un strat (consistent) de grăsime sub piele; uscăţiv. ♦ (Despre carne) Fără grăsime; macră. ♦ (Despre mâncăruri, alimente) Care conţine sau are… …   Dicționar Român

  • Slab — can refer to:Physical objects and substances* A broad flat square or rectangular piece of wood, stone or other solid material used to construct buildings, pavements, patios, paths, etc: see Paver (flooring) and flagstone. * An outside piece cut… …   Wikipedia

  • slab — slab·ber·er; slab·bery; slab·bi·ly; slab·bing; slab; slab·man; slab·ber; slab·by; …   English syllables

  • slab — [ slæb ] noun count 1. ) a large flat piece of a hard material such as stone or wood: a slab of rock/marble a concrete/stone slab 2. ) slab of a large piece of food: a slab of meat/butter/chocolate A man was eating a huge slab of pizza. 3. ) a… …   Usage of the words and phrases in modern English

  • slab — slab1 [slab] n. [ME sclabbe] 1. a piece that is flat, broad, and fairly thick [a slab of concrete, a slab of bread] 2. any of the rough, outer pieces removed from a log in sawing it into lumber vt. slabbed, slabbing 1. to make into a slab or… …   English World dictionary

  • slab — [slæb] n 1.) a thick flat piece of a hard material such as stone ▪ a concrete slab ▪ paving slabs slab of ▪ They used a slab of concrete as a lid. 2.) slab of cake/chocolate/meat etc a large flat piece of cake etc 3.) …   Dictionary of contemporary English

  • slab — slȁb prid. <odr. ī> DEFINICIJA 1. koji je male snage, koji nije jaka tijela (o čovjeku i životinji), opr. jak 2. koji nije postojana karaktera, koji nije jake volje 3. koji ne raspolaže jakom vlašću i utjecajem [slab vladar] 4. koji nešto… …   Hrvatski jezični portal

  • slab — ● slab nom masculin (anglais slab, visqueux, gluant) Caoutchouc de qualité inférieure, consistant en un coagulat obtenu directement à partir de latex non filtré. slab [slab] n. m. ÉTYM. Mil. XXe; mot angl., de l adj. slob « visqueux ». ❖ ♦ Anglic …   Encyclopédie Universelle

  • Slab — Slab, n. [OE. slabbe, of uncertain origin; perhaps originally meaning, a smooth piece, and akin to slape, Icel. sleipr slippery, and E. slip, v. i.] 1. A thin piece of anything, especially of marble or other stone, having plane surfaces. Gwilt.… …   The Collaborative International Dictionary of English

  • Slab — Slab, a. [Cf. Gael. & Ir. slaib mud, mire left on a river strand, and E. slop puddle.] Thick; viscous. [Obs.] [1913 Webster] Make the gruel thick and slab. Shak. [1913 Webster] …   The Collaborative International Dictionary of English

  • slab — s.m.inv. ES ingl. {{wmetafile0}} TS metall. → bramma {{line}} {{/line}} VARIANTI: slebo. DATA: 1960. ETIMO: ingl. slab propr. 1lastra , der. di (to) slab appiattire …   Dizionario italiano


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»