681.324 Лёвин Д.А.
Россия, Пенза, Пензенский государственный университет
МОДЕЛИРОВАНИЕ УСТРОЙСТВА УПРАВЛЕНИЯ РАЗДЕЛЯЕМЫМИ РЕСУРСАМИ НА FPGA
Аннотация. В представленном докладе рассматриваются вопросы аппаратной поддержки алгоритмов синхронизации процессов, действующих в параллельных вычислительных системах, при их обращении к общему ресурсу. Представлена модель многопроцессорной системы с разработанным устройством синхронизации, выполненная на языке VHDL. Получены временные диаграммы функционирования устройства и сравнительные оценки с традиционной реализацией спин-блокировки.
Ключевые слова: многопроцессорная система, операционная система, синхронизация параллельных процессов, производительность, PicoBlaze.
В вычислительных системах управление разделяемыми ресурсами заключается в синхронизации взаимодействующих параллельных процессов, в бесконфликтном их выполнении на совместно используемой части кода программы (критической секции). Для осуществления синхронизации запрашивающий процесс должен вначале проанализировать глобальную блокирующую переменную (mutex), закрепленную за разделяемым ресурсом. Операция чтения блокирующей переменной, её проверки и установки, а также записи в ячейку производится с помощью атомарной (неделимой) команды [1].
В многопроцессорной системе (МПС) блокирующая переменная хранится как разделяемое слово в оперативной памяти, доступное любым процессам, в том числе и тем, которые располагаются в разных процессорных узлах. Для доступа к слову блокировки процессор должен захватить межпроцессорную шину, выполнить операцию чтения ячейки памяти, в которой хранится блокирующая переменная, провести её анализ, изменить состояние на противоположное (если общий ресурс не занят), и записать новое значение в память. Применение атомарной операции «чтение - проверка - установка - запись» в многопроцессорной системе вызывает необходимость блокировки межпроцессорной шины, чтобы исключить возможность одновременного доступа к разделяемому ресурсу со стороны нескольких процессов выполняющихся в разных процессорах. Кроме того возникает проблема - кэш-память, т.к. возможно необоснованное увеличение трафика на межпроцессорной шине из-за частого перемещения строки кэша, содержащей слово блокировки, которая необходима процессам, конкурирующим за доступ к общему ресурсу [1]. Последние два обстоятельства приводят к снижению реальной пропускной способности межпроцессорной шины и, в конечном счете, к потерям производительности всей вычислительной системы.
Для решения проблем, возникающих в многопроцессорных системах, предлагается выполнять синхронизацию процессов аппаратными средствами. Размещение устройства синхронизации непосредственно на кристалле процессора позволит выполнять синхронизацию на его тактовой частоте. Этот подход особенно актуален для многопроцессорных систем на кристалле (СнК, SoC), используемых для выполнения задач реального времени. Аппаратный механизм управления синхронизацией позволит улучшить критерии производительности (такие как задержка и повышение пропускной способности шины) и полностью устраняет проблему когерентности кэш-памяти.
Для реализации функции синхронизации процессов используется специальные команды (микрокоманды) типа «занять ресурс» и «освободить ресурс». Устройство синхронизации процессов можно подключить в многопроцессорную систему как периферийное устройство, управляемое командами процессора. Другим способом является подключение с использованием специальных сигналов, вырабатываемых процессором микропрограммно [2].
Рассмотрим более подробно подключение устройства синхронизации в МПС с использованием сигналов. Один из вариантов интерфейса устройства синхронизации представлен на Рисунке 1.
Рисунок 1. Интерфейс блока синхронизации.
Это устройство исполняет роль spin-блокировки, которую можно захватить, а затем освободить.
Для захвата и освобождения, в устройстве соответственно используются сигналы req и free, которые подключаются к каждому процессору отдельно. Для уведомления о предоставлении ресурса (о захвате) используется сигнал gnt, так же для каждого процессора отдельный.
Алгоритм захвата выглядит следующим образом, процессор посылает сигнал req, и считывает состояние сигнала gnt. Если gnt сигнализирует о предоставлении доступа, то процессор вошёл в критическую секцию и может осуществлять доступ к разделяемому ресурсу, иначе ресурс уже занят кем-то другим и процессор должен повторить попытку захвата. После завершения работы с разделяемым ресурсом, процессор подаёт сигнал free, тем самым освобождает устройство синхронизации, и выходит из критической секции.
Для разрешения конфликтов, возникающих при одновременной подаче запросов на захват несколькими процессорами, внутри устройства синхронизации существует динамическая система приоритетов. Каждому входу req сопоставляется значение приоритета от 1 до n, где n - количество входов. При запросе устройства, доступ предоставляется запросу, пришедшему по входу с наибольшим приоритетом. После захвата устройства синхронизации, приоритеты меняются следующим образом
значение приоритет входа, которому предоставляется доступ, становится равным 1 (обозначим этот приоритет max_prior);
значения приоритетов входов, которые < max_prior увеличиваются на единицу;
значения приоритетов входов, которые > max_prior не изменяются.
На VHDL данная функциональность реализуется следующим образом:
-- поиск запроса с наибольшим приоритетом, и захват ресурса
select_req: for i in 0 to 3
loop
if ((prior(i) > max) and (req(i) = '1')) then
max := prior(i); sel := i;
end if;
end loop select_req;
-- если запрос найден
if (max > 0)
then
-- блокировка ресурса lock <= '1';
-- модификация приоритетов modif_prior: for i in 0 to 3 loop
if (prior(i) < max) then
prior(i) := prior(i) + 1; elsif (prior(i) = max) then
prior(i) := 1;
end if;
end loop modif_prior; end if;
Проведём моделирование созданного блока в составе четырёх-процессорной системе, как средство синхронизации при доступе к памяти. В качестве процессоров будем использовать soft-процессоры PicoBlaze фирмы Xilinx.
Каждый процессор выполняет программу, которая в цикле производит следующие действия:
- захват блока синхронизации;
- запись данных;
- освобождение блока синхронизации.
Для подключения каждого процессора к блоку синхронизации используются специально разработанные интерфейсные блоки, представленные на рисунке 2.
Рисунок 2. Интерфейсные блоки для подключения процессора к блоку синхронизации.
После компоновки процессора PicoBlaze с интерфейсными модулями, мы получаем процессорный блок (рисунок 3), который на микропрограммном и сигнальном уровне совместим с нашим устройством синхронизации.
Схема тестируемой системы показана на рисунке 4.
После проведения тестирования получены временные диаграммы, представленные на рисунке 5.
К 1
Name Value 1,000 ns 1,500 ns 2,000 ns 2,500 ns 3,000 ns 3,500
14* 14 reset 1 ш иишлллшшлл шшшшишшш шшшдш и шшишлг
_
Т Ч! teq[3:0] 0000 ooc 0 : X oooo XX- 000 УУ 0000 ~XX 0000 XX 0000 }
14 и 0 1 п п п
^■14 И 7 1 п п п
14 г>] 0 1 п п п п
14 га 0 1 п п п п
Т Чй free[3:0] 0000 0000 У 0000 XX 0000 >
14 И 0 1
14 И 0 п
14 [1] 0
14 га 0
№• Щ gnt[3:0] 0000 ииии X 0000 : юоо X oooo X )юо X о ioi Г~х оою \
write meml 0
write mem2 0 ■
"Щ) write_mem3 1 п .
0 шшшш -500 ns 0 ns 500 ns 1,000 ns 1,500 ns 2,000
Рисунок 5. Временная диаграмма.
Из диаграммы видно, что на занятие устройства синхронизации уходит 2 такта процессора.
В представленном докладе рассматриваются вопросы формального представления алгоритмов синхронизации процессов, действующих в параллельных вычислительных системах, при их обращении к общему ресурсу. Для формализации использовалась логика недетерминированных автоматов [3]. Получены уравнения, описывающие процедуры вхождения i-го процесса в критический интервал с учетом принятой дисциплины обеспечения приоритетности и взаимоисключения несовместных событий, а также выхода процесса из критического интервала, которые позволяют синтезировать аппаратуру устройства синхронизации.
Устройство синхронизации было реализовано на языке VHDL в составе трехпроцессорной системы. В состав устройства синхронизации входит интерфейсный блок для приема сигналов запроса и сигналов состояния разделяемого ресурса, блок выдачи сигналов разрешения доступа в критическую секцию и управляющий автомат. Проведено моделирование устройства в режиме спин-блокировки. Латентность устройства (бесконфликтная задержка доступа) составляет 2 процессорных такта, что значительно меньше, чем при его программной реализации, в которой только вызов функции семафора занимает несколько сотен или даже тысяч процессорных тактов.
Работа выполнена в рамках ФЦП «Научные и научно-педагогические кадры инновационной России», соглашение № 14.B37.21.0597.
ЛИТЕРАТУРА
1. Таненбаум Э. Современные операционные системы. 3-е изд. - СПб.: Питер, 2010. — 1120 с.
2. Вашкевич Н.П. Аппаратная реализация функций синхронизации параллельных процессов при обращении к разделяемому ресурсу на основе ПЛИС [текст] / Н.П.Вашкевич, Р.А.Бикташев, Е.И.Гурин // Известия вузов. Поволжский регион. Технические науки. № 2, 2007, с.3-12.
3. Вашкевич Н.П. Недетерминированные автоматы в проектировании систем параллельной обработки. Учебное пособие. - Пенза: изд-во Пенз.гос.ун-та, 2004.- 280 с.