Анализ некоторых методов размещения в памяти очереди с n

реклама
Системы массового обслуживания
Анализ некоторых методов размещения в
памяти очереди с n приоритетами1
А. В. Драц, А. В. Соколов, д. ф.-м. н.2
Петрозаводский универ-т, ИПМИ КарНЦ РАН, Петрозаводск
adeon88@mail.ru, avs@krc.karelia.ru
В работе рассматриваются представления очереди с n приоритетами в
памяти одного уровня в виде массива и в виде n последовательных FIFOочередей. Возможны операции “вставить”, “удалить элемент с наибольшим
приоритетом” и “найти элемент”. Предложены алгоритмы нумерации состояний, построения соответствующих поглощающих цепей Маркова и нахождения оптимального разбиения памяти с точки зрения максимизации среднего
времени работы до переполнения. Приводятся результаты численных экспериментов.
Ключевые слова: очереди с приоритетами, FIFO-очереди, случайное блуждание, цепи Маркова, динамические структуры данных.
1.
Введение
Во многих приложениях используется структура данных, в которой основными операциями являются вставка элемента и удаление элемента с наибольшим приоритетом. Такую структуру данных
называют приоритетной очередью. Основными методами реализации такой структуры данных являются упорядоченные и неупорядоченные списки, массивы, бинарные деревья, пирамиды [1–4].
В работе будут рассмотрены представления в виде массива и в
виде n последовательных FIFO-очередей. Ранее случай n = 2 был
рассмотрен в работе [5].
1 Работа
выполнена при финансовой поддержке РФФИ (грант №09-01-00330-
а).
2 А.
c
В. Драц, А. В. Соколов, 2009
115
2.
Постановка задачи
Рассмотрим очередь с n приоритетами, расположенную в размере памяти m. Будем считать, что время дискретно, и в каждый
момент времени происходит одна из следующих операций:
• вставить элемент с приоритетом i с вероятностью pi , i = 1, ..., n;
• удалить элемент с наибольшим приоритетом с вероятностью q;
• найти элемент с наибольшим приоритетом с вероятностью r:
p1 + · · · + pn + q + r = 1.
Наивысший приоритет равен n, наименьший – 1. Работа начинается
с пустой очереди. Предположим также, что не происходит завершения работы в случае исключения элемента из пустой структуры
данных.
Требуется найти среднее время работы до переполнения при
различных вариантах представления, а в случае представления в
виде n FIFO-очередей оптимальное разбиение памяти между очередями.
3.
Представление в виде массива
В случае представления в виде массива в памяти вместе с информационной частью хранится ключ(приоритет), поэтому часть
памяти расходуется на приоритеты.
Введем обозначения: p = p1 + · · · + pn ;
l – отношение размера памяти, которую занимает ключ, к размеру
информационной части;
m
– количество элементов, которые можно расположить в
M = 1+l
памяти вместе с ключами.
В работе [5] в качестве математической модели было предложено случайное блуждание в интервале длины M , в [6,7] показано,
116
что среднее время работы до переполнения равно:

q M+1
q
−M − 1


−
1
, p 6= q,
+
q−p
(q − p)2 p
T =

 1 (m + 1)(m + 2),
p = q.
2q
4.
Представление в виде n последовательных
FIFO-очередей
В случае представления в виде n FIFO-очередей все элементы, имеющие один и тот же приоритет, помещаются в одну FIFOочередь. Количество FIFO-очередей будет равно количеству приоритетов.
Пусть ki — память, выделенная i-ой FIFO-очереди. Рассмотрим
фиксированное разбиение памяти между очередями. В качестве математической модели рассмотрим блуждание по целочисленному
n-мерному параллелепипеду с вершиной в начале координат, ребрами, параллельными осям координат, и длинами ребер k1 , . . . , kn .
Qn
Количество состояний равно i=1 (ki + 1). Перечислим их:
(0, 0, 0, . . . , 0, 0), (0, 0, 0, . . . , 0, 1), . . . , (0, 0, 0, . . . , 0, kn − 1),
(0, 0, 0, . . . , 0, kn ),
(0, 0, 0, . . . , 1, 0), (0, 0, 0, . . . , 1, 1), . . . , (0, 0, 0, . . . , 1, kn − 1),
(0, 0, 0, . . . , 1, kn ),
...
(0, 0, 0, . . . , kn−1 − 1, 0), (0, 0, 0, . . . , kn−1 − 1, 1), . . . ,
(0, 0, 0, . . . , kn−1 − 1, kn − 1), (0, 0, 0, . . . , kn−1 − 1, kn ),
(0, 0, 0, . . . , kn−1 , 0), (0, 0, 0, . . . , kn−1 , 1), . . . ,
(0, 0, 0, . . . , kn−1 , kn − 1), (0, 0, 0, . . . , kn−1 , kn ),
...
(1, 0, 0, . . . , 0, 0), (1, 0, 0, . . . , 0, 1), . . . ,
(1, 0, 0, . . . , 0, kn − 1), (1, 0, 0, . . . , 0, kn ),
...
(k1 , 0, 0, . . . , 0, 0), (k1 , 0, 0, . . . , 0, 1), . . . ,
(k1 , 0, 0, . . . , 0, kn − 1), (k1 , 0, 0, . . . , 0, kn ),
...
(k1 , k2 , k3 , . . . , kn−1 , 0), (k1 , k2 , k3 , . . . , kn−1 , 1), . . . ,
117
(k1 , k2 , k3 , . . . , kn−1 , kn − 1), (k1 , k2 , k3 , . . . , kn−1 , kn ).
Введем нумерацию этих состояний, начиная с 0. Пример нумерации состояний при n = 3, m = 8 представлен на рис. 1.
Рис. 1: Пример нумерации при m = 8, n = 3, k1 = 2, k2 = 4, k3 = 3.
Для того чтобы построить матрицу переходных вероятностей,
построим функцию F (X) = I, X = (x1 , x2 , . . . , xn ), где x1 , x2 , . . . , xn
– текущие длины очередей, I – номер состояния.
В случае n = 1, то функция имела бы вид F (x1 ) = x1 . Если появляется вторая очередь, то состояния (xi ) становятся эквивалентными (xi , 0). Между состояниями (xi , 0) и (xi+1 , 0) нужно вставить
k2 − 1 состояний: (xi , 1), (xi , 2), . . . , (xi , kn−1 − 1), поэтому функция
будет иметь вид F (x1 , x2 ) = k2 x1 + x2 .
При появлении третьей очереди получаем функцию
F (x1 , x2 , x3 ) = k3 (k2 x1 + x2 ) + x3 . Рассуждая таким образом, получим для n очередей F (x1 , x2 , . . . , xn ) = kn (kn−1 (. . . (k3 (k2 x1 +
118
x2 ) + x3 ) + · · · + xn−1 ) + xn . Для построения матрицы переходных
вероятностей нужно перебрать все состояния (от (0, 0, . . . , 0, 0) до
(k1 , k2 , . . . , kn−1 , kn )) и вычислить вероятности перехода из I-го состояния в остальные (I = F (x1 , x2 . . . , xn )):
Q[F (x1 , x2 . . . , xn )][F (x1 + 1, x2 , . . . , xn )] = p1 ,
...
Q[F (x1 , x2 . . . , xn )][F (x1 , x2 , . . . , xn + 1)] = pn ,
Q[F (x1 , . . . , xi , . . . , xn )][F (x1 , . . . , xi − 1, . . . , xn )] = q,
где i = max {j : xj > 0},
1≤j≤n
Q[F (x1 , x2 . . . , xn )][F (x1 , x2 , . . . , xn )] = r.
Для вычисления среднего времени блуждания при заданном
разбиении памяти нужно вычислить фундаментальную матрицу
N = (E − Q)−1 [8] и просуммировать элементы первой строки, поскольку она соответствует начальному состоянию.
Для нахождения оптимального разбиения памяти необходимо
перебрать все возможные разбиения памяти, для каждого из них
найти среднее время работы до переполнения и выбрать наибольшее время. Всего для размера памяти m и n FIFO-очередей суще(m−1)!
n−1
способов разбиения [9].
ствует Cm−1
= (n−1)!(m−n)!
5.
Сравнение различных
способов представлений
Для решения задачи разработаны программы для ЭВМ, которые реализуют вышеописанные алгоритмы.
В таблице 1 приведены результаты вычислений.
В строке T находится среднее время работы в случае представления в виде n FIFO-очередей,
а в строках ki (1 ≤ i ≤ 4) – оптимальное разбиение памяти.
В строке l1 указано время работы в случае представления в
виде массива, когда размер ключа равен размеру информационной
части. (На ключи тратится половина памяти).
В строке l2 – когда размер ключа равен 1/2 размеру информационной части. (На ключи тратится 1/3 часть памяти).
119
В строке l4 – когда размер ключа равен 1/4 размеру информационной части. (На ключи тратится 1/5 часть памяти).
В строке l8 – когда размер ключа равен 1/8 размеру информационной части. (На ключи тратится 1/9 часть памяти).
Таблица 1: n = 4, m = 24.
r
p1
p2
p3
p4
q
k1
k2
k3
k4
T
l1
l2
l4
l8
0
0.15
0.15
0.15
0.15
0.4
9
6
5
4
64.3
55.05
75.01
90
100
0
0.2
0.15
0.1
0.05
0.5
13
6
3
2
234.98
182
306
420
506
0
0.05
0.1
0.15
0.2
0.5
6
7
6
5
200.46
182
306
420
506
0
0.2
0.2
0.2
0.2
0.2
7
7
6
4
27.32
21.11
27.78
32.78
36.11
0.5
0.1
0.1
0.1
0.1
0.1
7
7
6
4
54.65
42.22
55.56
65.56
72.22
0
0.4
0.1
0.05
0.05
0.4
17
3
2
2
78.32
55.05
75.01
90
100
0
0.05
0.05
0.1
0.4
0.4
5
4
6
9
68.37
55.05
75.01
90
100
0.1
0.18
0.1
0.1
0.02
0.5
13
5
4
2
1165.8
729.5
2000.45
4086.81
6506.26
Из полученных результатов можно сделать вывод, что представление приоритетной очереди в виде массива предпочтительнее
использовать, если на приоритеты тратится 1/3 часть или меньше
памяти. Если на приоритеты тратится половина памяти, то предпочтительнее использовать представление в виде n FIFO-очередей.
Список литературы
[1] Кнут Д. Искусство программирования для ЭВМ. Т. 3. — М.:
Вильямс, 2001.
[2] Кормен Е., Лейзерсон Ч., Ривест Р. Алгоритмы: построение и
анализ. — М.:МЦНМО. 2000.
120
[3] Седжвик Р. Фундаментальные алгоритмы на С++. Анализ
/Структуры данных /Сортировка/ Поиск: Пер. с англ./ Роберт
Седжвик. — К.: Издательство “ДиаСофт”. 2001.– 688 с.
[4] Боллапаргада В., Мэрфи К., Расс У. Структура операционной
системы Cisco IOS. — М.: Вильямс. 2002. C. 163–189.
[5] Аксенова Е.А., Соколов А.В. Анализ некоторых методов реализации приоритетной очереди // Межвуз. сб. “Стохастическая
оптимизация в информатике.” Изд-во С.-Петербургского университета. Вып. 4. 2008. C. 61–71.
[6] Феллер В. Введение в теорию вероятностей и ее приложения. —
М.: Мир. 1964.
[7] Тарасюк А.В. Оптимальная реализация N FIFO-очередей в памяти одного уровня в случае одновременного выполнения операций // Cистемы управления и информационные технологии.
2008. № 1 (31). C. 75–78.
[8] Кемени Дж., Снелл Дж. Конечные цепи Маркова. — М.: Наука. 1970.
[9] Риордан Дж. Введение в комбинаторный анализ. — М.: Издательство иностранной литературы. 1963.
121
Скачать