Если все элементы в кластерах строго меньше элементов подматриц связи, то частные решения проходят через все кластеры и соединяются через подматрицы связи, причем реализуется схема: один вход в кластер — один выход (в качестве элементов в подматрицах связи можно использовать, например, минимальные). Причина тому - особенности метода ветвей и границ; он ищет минимальный путь, а все минимальные ребра лежат в кластерах, значит, путь будет проходить через них. Редуцированная таким образом задача представляется как задача коммивояжера с количеством вершин, равным количеству кластеров (рис. 3). Решение данной задачи позволяет
An A12 A0
м 312 a13
A21 A22 A21 а21 м a23
м
A31 A32 A33
Рис. 3
найти оптимальную последовательность ребер, соединяющих кластеры. В свою очередь, редуцированная задача может оказаться достаточно большой размерности, сложной для получения точного решения, тогда, если полученная матрица обладает рассматриваемой топологией, то возможно рекурсивное применение описанной процедуры, что удобно с точки зрения единообразия подхода. Применяя такого рода рекурсивное обобщение, возможно построение эффективной процедуры решения задачи коммивояжера. Если редуцированная задача не обладает описанными топологическими свойствами, то для нахождения последовательности ребер связи допустимо применение приближенных процедур полиномиальной сложности.
В общем случае, когда элементы из кластеров в среднем меньше элементов из подматриц связи и строгое неравенство не выполняется, схема один раз
вошел — один вышел может оказаться недостаточно эффективной, и тогда потребуется построение более гибких многовходовых процедур организации связи. Однако общий подход к решению задачи остается прежним.
Если размеры кластеров не позволяют реализовать эффективную процедуру нахождения точного решения и кластеры обладают указанными топологическими особенностями, то в отношении данных кластеров может быть применена предложенная декомпозиция. После чего частичные решения объединяются в единый гамильтонов цикл.
Если в задаче существует фазовый переход описанного типа, то вследствие ее топологических особенностей она обладает свойством естественного параллелизма и процедура поиска решения может быть эффективно реализована в многопроцессорной системе.
Следует заметить, что в задачах рассматриваемого типа с априори известными областями наиболее вероятных решений возможна организация интеллектуального возврата в среде CLP.
Разумеется, предлагаемый подход носит достаточно общий характер и требует дальнейшей детализации для его практического воплощения.
Список литературы
1. CP-AI-OR'99, Workshop on Integration of AI and OR Techniques in Constraint Programming for Combinatorial Optimization Problems - Ferrara, Italy, 25 - 26 February, 1999.
2. Valkovsky V.B., Gerasimov M.B., Savvin K.O. Phase Transitions in TSP and Matrix Topology. In Proc. of the Joint Workshop on Integration of AI and OR techniques in Constraint Programming for Combinatorial Optimization Problems. Universita degli Studi di Ferrara - Facolta di Ingegneria, Italy 1999. 5 pp.
3. Fierbinteanu C. "The Implementation by Constraint Logic Programming of a Decision Support System Generator for Transportation Planning", Proc. Of the Fourth Int'l Conf. On the Practical Application of Constraint Technology, PAPPACT98, London, pp.285-294, March 1998.
4. Gent J.P., Walsh T. The TSP Phase Transition, Research Report/95/178, Department of Computer Science, University of Strathclyde.
ДИСКОВАЯ СБОРКА МУСОРА С ЛОГИЧЕСКИМ ДЕЛЕНИЕМ ПРОСТРАНСТВА КУЧИ
В.С. Козловский
Сборка мусора в оперативной памяти является широко изучаемой областью [1]. Для разных условий было предложено и исполнено множество алгоритмов, чего, однако, нельзя сказать о дисковой сборке мусора. Логичным кажется применение алгоритмов, разработанных для сборки мусора в основной памяти, но преобразованных к условиям долговременного хранения. Как показывают исследования, проведенные в области управления памятью в системах управления объектно-ориентированными БД, алгоритмы, хорошо зарекомендовавшие себя для языков программирования, фактически не применимы в отношении БД [2]. Причина этого в большом количестве различий между этими системами, например,
наличие в СУБД транзакций, мультидоступа, долго-временности и объемов данных, на порядки превышающих объемы, используемые большинством приложений. На работу дискового сборщика мусора влияют параметры, значение которых для обычных сборщиков может быть пренебрежимо мало. Так, например, время доступа к объекту на диске на несколько порядков больше, чем при обращении к объекту, резидентному в основной памяти.
Простой способ сборки мусора состоит в трассировке всех объектов, достижимых из корневых указателей (root set), и затем следует учет и обработка неиспользуемого пространства. Однако трассировка глобального графа объектов в распределенной сис-
38
теме будет требовать кооперативной работы всех серверов, и все серверы должны закончить трассировку до начала сборки мусора. Подобный подход требует задержек в работе процессов (сервер должен ждать результатов работы других), а в случае возникновения сбоя на одном из серверов это ожидание может быть сколь угодно долгим.
Как правило, дисковое пространство в сотни и более раз превышает объем имеющейся оперативной памяти. В случае трассировки всего объема дискового пространства одна и та же страница может загружаться в память и удаляться оттуда несколько раз, что замедляет проведение трассировки. А это приводит к необходимости проведения множества операций ввода/вывода и требует использования оперативной памяти, что отнимает ресурс, необходимый для исполнения приложениями.
Опыт исследований сборки мусора в языках программирования показывает, что проведение сборки мусора в широких адресных пространствах может быть более эффективным, если сборку производить в частях пространства, где каждая часть может быть обработана независимо от других [3]. По этой причине во многих системах используется логическое деление кучи на подпространства. В настоящей статье речь идет о сборке в частях кучи (partitioned garbage collection) для системы, в которой кучей является область диска [4]. Для проведения одного цикла сборки мусора на диске целесообразно его разбить на части, которые называются подпространством. Преимущество разбиения на подпространства состоит в более компактном расположении указателей, уменьшается количество страничных операций ввода/вывода. Причем наблюдается уменьшение помех со стороны сборщика мусора другим процессам, протекающим на сервере.
Для выполнения сборки мусора в подпространстве независимо от остальных подпространств сборщик запоминает объекты, на которые имеются ссылки извне, и использует их как корневые указатели. Набор таких указателей называется списком входящих ссылок подпространства. Каждый из входящих указателей обычно содержит ассоциированный с ним счетчик, содержащий число указателей на объект извне. Если значение счетчика уменьшается до нуля, соответствующий член списка исключается.
Рассмотрим случай, когда по каким-либо причинам не удается использовать только одно подпространство для размещения объектов приложения (это значит, что будут существовать ссылки, пересекающие границы подпространств). Такая ситуация может возникнуть из-за недостаточного объема свободной памяти в пределах одного подпространства в случае неэффективного выделения свободных блоков по причине фрагментации памяти.
Для проведения сборки учитывается набор входящих в подпространство ссылок, которые в этом случае считаются частью набора изначальных (корневых) указателей. Консервативность подхода в этом случае состоит в том, что все достижимые из входящих указателей объекты считаются живыми, то есть используемыми приложением, даже если некоторые
из них не являются достижимыми из изначального набора.
Для оценки объема памяти, который может быть удержан вследствие использования такой схемы логического разбиения диска, рассмотрим худший случай развития событий (рис. 1). По рисунку видно, что часть данных приложения с некоторого момента стала недоступна. Существуют ссылки, пересекающие границы подпространств. Очевидно, что пока объект А в подпространстве I не будет освобожден, ссылка из этого объекта будет рассматриваться как один из корневых указателей для подпространства II и все мусорные данные, достижимые из объекта А, будут считаться живыми, удерживая при этом дополнительный объем памяти. В свою очередь, объект С не может быть освобожден до освобождения объекта В и т.д.
Оценим объем памяти, который будет необходим для работы приложения в системе с трассирующей сборкой мусора, исходя из предположения о наиболее длинной структуре данных приложения (части графа достижимости приложения с наиболее длинным путем), которая может стать мусором. В дальнейших рассуждениях предполагается определить дополнительный объем памяти, вносимый нециклическими структурами.
С точки зрения занимаемого объема памяти любая структура данных может быть представлена как совокупность определенного количества ссылок, направленных извне подпространства, и объемов памяти, удерживаемых каждой такой ссылкой в пределах одного подпространства. Рисунок 2 иллюстрирует такое описание структуры данных приложения.
Примем следующие обозначения: I - величина пути в графе достижимости структуры данных приложения, которая может стать мусором; тг - вес г-го узла рассматриваемой части графа. При этом 0<г<=1+1. Весу узла соответствует объем памяти, занимаемый группой объектов, удерживаемых входящей ссылкой в пределах одного подпространства. За величину первого веса принимается объем памяти, занимаемый группой объектов, которые содержат первую исходящую ссылку; N - количество узлов в графе; р - коэффициент пересекаемости, который показывает отношение количества ссылок, выходящих за границы подпространства, к общему количеству ссылок в структуре данных, где р=1/^-1).
Ссылки, входящие в путь графа, вершинами которого являются плавающие мусорные объекты, на рисунке 2 обозначены серым цветом. Пунктирными
39
Рис. 2. Пример описания структуры данных приложения
линиями обозначены области, все объекты которых принадлежат соответствующему множеству т;. Обратим внимание на то, как объекты графа объединяются во множества т;. Объект С является достижимым из объекта В, следовательно, оба эти объекта будут освобождены за один цикл сборки, и ссылка, исходящая из объекта С, не будет учитываться на следующем цикле. Объект Е может быть освобожден только после освобождения объекта Н, следовательно, он относится ко множеству, в котором лежит Н, несмотря на то, что Е также достижим из О.
Рассмотрим общий случай, когда существуют ссылки, пересекающие границы нескольких подпространств. На рисунке 3 представлена ситуация, когда в мусорных объектах существуют ссылки, пересекающие границы нескольких подпространств. В худшем случае цепочки мусора будут равномерно распределены между подпространствами, и направление ссылок будет противоположно перемещению работы сборщика мусора. Затемненными областями на рисунке показаны подпространства, где производится сборка мусора. Через Np обозначим количество
1 подпрос ранства 4 5 6
1
г*"1
I
\ новая цепочка
Цикл 2 /1
I
-■ /
Ц
I
^-^ перемещение сборки Рис. 3. Использование шести подпространств
подпространств, в которых может располагаться цепочка мусора. В худшем случае цепочка плавающего мусора образуется в том подпространстве, в котором производится сборка мусора. Если сборщик мусора вызывается для всех подпространств последовательно, это значит, что он доберется до головы цепочки только после обработки всех остальных подпространств, сделав полный круг.
Попробуем оценить объем памяти, занимаемый плавающим мусором в зависимости от номера цикла сборки мусора, для нескольких подпространств. Для начала будем считать, что все указатели структуры данных пересекают границы подпространства, то есть р=1. Примем, что в рассматриваемом случае внешняя фрагментация отсутствует.
На рисунке 3 показан случай для шести подпространств (N=6), в которых расположена мусорная структура. Очевидно, что память, занимаемая мусорными объектами первой цепочки в первом подпространстве, будет освобождена не раньше чем сборщик произведет Np +1 сборку мусора. В приведенном примере это будет сборка под номером 7. Следующий раз для этой же мусорной структуры память будет освобождаться не ранее 12-го цикла, что соответствует 2 далее не ранее цикла 22=^р -1. Для второй цепочки сборки мусора будет аналогичная картина, но с запаздыванием на один цикл. В таблице 1 приведены номера циклов сборки, на которых осуществляется освобождение блоков памяти, для нескольких цепочек мусора.
Таблица 1
1 цепочка 2 цепочка 3 цепочка 4 цепочка 5 цепочка
т1 N +1 N +2 N +3 N +4 N +5
т2 2 N 2 +1 2 N +2 2 N +3 2 N +4
тз 3 N -1 3 ^ 3 N +1 3 N +2 3 N +3
т5 4 N -2 4 N -1 4 N 4 N +1 4 N +2
те 5 N -3 5 N -2 5 N -1 5 N 5 N +1
т7 6 N -4 6 N -3 6 N -2 6 N -1 6 N
Отметим, что память, освобожденная на п цикле, может быть использована заново только на п+1 цикле. Можно выделить три стадии работы системы: сборка мусора не приводит к освобождению блоков; освобождается и используется заново часть требуемых блоков; памяти освобождается достаточно для размещения любой структуры данных приложения.
Объем памяти мЩ1 , занимаемый плавающим мусором, для рассматриваемого случая на п-м шаге можно подсчитать с использованием следующих формул.
мЩ = ^л^,
1=1 п
1 < п < N р +1 ;
МЩ = £ - £ (п - ¡* N р +Ь - 2)*тЬ ¡=1 ¡=1
Nр +1 < п < (I +1 )* (Np -1) + 2 ; к = п - ¡* Nр + Ь -2 ; к > 0
„ 1+3 . , I МЩ = £ Л(еаЛ - £(I - Ь + 1)*т1 , ¡=1 ¡=1
(I +1 )* (Nр -1) + 2 < п ;
где п - номер цикла сборки.
40
i $ ■Ф' Ф -Ф & $ & & «& %
Номер цикла
Рис. 4. Зависимость объема плавающего мусора от номера цикла сборки мусора
На рисунке 4 показаны зависимости объемов плавающего мусора (в Кб) от номера цикла сборки мусора с р = 0,1 для Np = 6. Графики строились с использованием следующих условий: шШп= 1Кб; N = 411; А(еай = 411.
В таблице 2 приведены данные о номерах циклов, на которых происходит насыщение, и о максимальном объеме плавающего мусора (в Кб), рассчитанные с теми же исходными условиями для различных р и Np. Как видно из таблицы, значения номера цикла насыщения в лучшем из рассмотренных случаев р=0,1 и Np =2 и худшем из рассмотренных случаев р=1 и Np =10 различаются в 84 раза. А объемы памяти, занимаемые плавающим мусором, различаются в 44 раза для одного и того же приложения. Это говорит о необходимости применения способов, позволяющих локализовать указатели в пределах минимально возможного количества подпространств.
Рассмотренный подход позволяет оценить потери памяти, которые могут возникнуть в ходе работы системы. На основе предварительных данных система может быть настроена на использование определенных приложений, которые могут различаться наборами характеристик, таких как структуры данных, объемы размещаемой памяти, связность графа достижимости. Верхняя граница объема используемой памяти, полученная на основе сведений о работе приложений и характеристиках системы, гарантированно не будет превышена.
Существуют другие схемы выбора подпространства для выполнения текущего цикла сборки мусора, для каждой из которых необходимо рассмотреть
Таблица 2
Np P
0.1 0.2 0.3 0.5 0.7 1
2 цикл 44 85 126 208 290 413
Мтх 17223 31532 44160 64373 77862 85488
3 цикл 86 168 250 414 578 824
Мтх 33624 62242 87498 127924 154902 170154
4 цикл 128 251 374 620 866 1235
Мтх 50025 92952 130836 191475 231942 254820
5 цикл 170 334 498 826 1154 1646
Мтах 66426 123662 174174 255026 308982 339486
6 цикл 212 417 622 1032 1442 2057
Мтах 82827 154372 217512 318577 386022 424152
7 цикл 254 500 746 1238 1730 2468
мтш 99228 185082 260850 382128 463062 508818
8 цикл 296 583 870 1444 2018 2879
Мтах 115629 215792 304188 445679 540102 593484
9 цикл 338 666 994 1650 2306 3290
мтш 132030 246502 347526 509230 617142 678150
10 цикл 380 749 1118 1856 2594 3701
мтш 148431 277212 390864 572781 694182 762816
наихудший случай исполнения. Приведенные рассуждения являются лишь частью работы по оценке наихудшего случая использования памяти. Необходимо также получить оценку работы применяемых алгоритмов сборки мусора и размещения новых блоков памяти. Для прогнозирования работы и конфигурации системы с учетом рационального использования ресурсов достаточно использовать результаты исследования исполнения сборки мусора в худшем случае.
Список литературы
1. Richard Jones, Rafael Lins. Garbage collection: algorithms for automatic dynamic memory management. Chichester, England, John Wiley & Sons, 1996.
2. Jonathan E. Cook, Alexander L. Wolf, Benjamin G. Zorn, A Highly Effective Partition Selection Policy for Object Database Garbage Collection IEEE Transactions on knowledge and data engineering, Vol. 10, NO. 1, January/February 1998.
3. Andrew W. Appel Simple Generational Garbage Collection and Fast Allocation Department of [3]. Computer Science Princeton University, March 1988.
4. Barbara Liskov Umesh Maheshwari Tony Ng Partitioned Garbage Collection of a Large Stable Heap (Extended Abstract) Published in the Proceedings of IWOOOS, October 1996.
РЕАЛИЗАЦИЯ СТРУКТУРНОГО АНАЛИЗА ПРИКЛАДНОГО ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА
И.Р. Музяков, Н.Г. Мустафин, С.В. Савосин
Практически все прикладные программные продукты, находящиеся сегодня в одном классе решаемого ими определенного круга проблем, схожи друг с другом по составу решаемых функциональных за-
дач. Основной отличительной особенностью таких систем является прикладной пользовательский интерфейс (ППИ), который в наибольшей степени определяет удобство работы пользователя с системой.
41