ЖУРНАЛ «СТА» №3/2004

bool key::code(_Uint8t*s,unsigned long n,_Uint8t*d,bool(t*)(_Uint8t)){ for(unsignedlongi=0; i<n;i++)if(! *t(d[i]=(s[i]^*(p+i%k))))return false; return true; }; Поскольку оценивалось и сравни- валось только время выполнения, то неэффективные реализации меня бо- лее чем устраивали, так как они тре- бовали более продолжительного и поэтому легче фиксируемого вре- мени. О РГАНИЗАЦИЯ КЛАСТЕРА Наконец мы подошли к самому ин- тересному! Теперь проделаем анало- гичные манипуляции, но распределив работу между всеми доступными хоста- ми в сети QNET. Идея состоит в сле- дующем: ● с помощью инициирующей про- граммы master на каждом хосте се- ти (включая и тот, на котором вы- полняется master ) запустить другую автономную программу agent , но передать ей только часть рабо- ты, соответствующую определён- ному диапазону ключей («от и до»), которые должен отработать этот хост [1]; ● хорошо бы ещё, чтобы программа master выделяла хостам диапазон об- работки ключей не «поровну», а предварительно «попросив» каж- дый хост сообщить производитель- ность своего процессора и раздав ра- боту пропорционально сообщённой производительности каждого, то есть «по справедливости» (Д. Алексеев «Получение системной информа- ции» [1]; ● программа master должна синхрони- зироваться и дождаться завершения каждой из запущенных программ agent (потому и разумно на своём хосте запустить agent – чего же ждать попусту?); ● далее программа master должна полу- чить (собрать) результаты работы всех хостов и представить их на вы- вод, как это делала программа single . Из такой постановки уже видно, что программы master и agent должны до- статочно плотно кооперироваться и пересылать друг другу данные в обо- их направлениях, пользуясь транспорт- ным механизмом сообщений уровня микроядра. Какой самый простой, от- работанный и высокоуровневый меха- низм обработки сообщений микрояд- ра? — Конечно же, менеджер ресурса, реализующий технологию, которая в QNX отработана для написания драй- веров устройств и псевдоустройств (см. «Writing Resource Manager» в доку- ментации QNX Momentics 6.2.1). То есть в качестве agent (это и есть псевдо- устройство) мы пишем менеджер ре- сурса. Причём это тот не столь частый случай в практике, когда нам абсолют- но не нужен многопотоковый (multithread) менеджер и нас вполне устроит менеджер однопотоковый. Как всегда с любым менеджером ре- сурсов, первейшим вопросом после принятия решения о его написании является следующий: какие операции он будет обрабатывать? В данном слу- чае я определил это так (решение было принято весьма произвольно; возмож- но, лучше было бы возложить весь об- мен master и agent на devctl() , но та- кое предположение появилось у меня только на завершающей стадии проек- та): ● задания «порции» работы master бу- дет осуществлять операцией write() , причём в качестве буфера 58 СТА 3/2004 П Р О Г РАММНО Е ОБ Е С П Е Ч Е НИ Е / СИС Т ЕМЫ Р Е АЛ Ь НО ГО В Р ЕМЕ НИ www.cta.ru “ВНЕДОРОЖНИКИ” для Ethernet #50 ОБОРУДОВАНИЕ ДЛЯ ПРОМЫШЛЕННЫХ СЕТЕЙ

RkJQdWJsaXNoZXIy MTQ4NjUy