Рис Физический и логический обмен данными по сети 21 Рис Ахитектура процессов в распределенных системах

Вид материалаДокументы

Содержание


Распределенное суммирование
Подобный материал:
1   2   3   4   5   6   7

Распределенное суммирование


Рассмотрим задачу вычисления суммы N чисел {x1, x2, x3, …, xN} . На обычном «однопроцессорном» компьютере эта задача требует выполнения N-1 операций сложения.

// x – определен выше как массив чисел float[] x; x.length = N

float res;

for (int i = 0, res = 0.; i < N; i++)

res += x[i];


Предположим, что в нашем распоряжении имеется достаточное количество «сумматоров», способных выполнять операцию сложения двух чисел, и доступных для «удаленного» вызова таких операций.

Процедура вычисления суммы в таком случае может быть записана следующим образом

public static float DistrSum (float[] x, CalcOperations[] calcs) {

int N = x.length; // Number of summands

// ResHolder[] xHolder;

while (N > 1) {

int n;

// xHolder = new ResHolder[N/2];

for (n = 0; n < N/2; n++) { // храним промежуточные значения сумм в том же массиве

x[n] = calcs[n].add(x[2*n], x[2*n+1]);

// xHolder[n] = calcs[n].ami_add(x[2*n], x[2*n+1]);

}

// Цикл синхронизации

// for (n = 0; n < N/2; n++)

// x[n] = xHolder[n].getValue();

// Или

//int k = -1;

//while (k < N/2) {

// for (n = 0; n < N/2; n++)

// if (xHolder[n].poll()) {

// x[n] = xHolder[n].getValue();

k++;

//}

//};

if ( 2*n < N) {// N – нечетное вида 2*n + 1

x[n] = x[N-1];

// x[n] = xHolder[N-1].getValue();

n++;

}

N = n;

}

return x[0];

}


// …

public interface CalcOperations

{

float add(int a, int b);

float sub(int a, int b);

float mult(int a, int b);

float div(int a, int b) throws DivisionByZero;

}


Вернуться к определению (процессы, на хостах, соединенных сетью, ППО, компонентный подход к проектированию, координированная обработка данных).

Общим для всех перечисленных архитектур является то, что они представляют собой абстрактную модель распределенных вычислений, скрывающую особенности сетевого окружения от прикладных программ.

Для этих моделей характены:
  • компонентный подход к проектированию и реализации (программированию) системы, в основе которого лежит объектная технология программирования и четкое разделение интерфейсов объектов (абстрактных наборов связанных методов и свойств, не зависящих от выбора конкретного языка программирования) и их реализаций;
  • наличие специального связующего ПО (middleware), связывающего распределенные компоненты системы в единое целое, что является обобщением классической «клиент-серверной» архитектуры;
  • интероперабельность, т.е. обеспечение взаимодействия компонентов, реализованных на разных языках (например, C++ и Java) и функционирующих на различных платформах (Windows, Unix, Linux и т.д.), даже, возможно, в неоднородных компьютерных сетях;
  • многоразовость, т.е. возможность использования готового программного компонента в разных приложениях без необходимости внесения каких-либо изменений.



Типовые элементы распределенной системы


Завершая общее устройство РС.

Необходимо сказать о наличии стандартных служб ППО.

Кроме того, часть СПО может присутствовать в форме специальных служб, запущенных на серверах - узлах сетей различного уровня. При этом функциональные возможности этих служб представлены специальными сервисами, реализующими стандартные (описанные в спецификациях СПО) интерфейсы. Доступ к этим стандартным сервисам из клиентских фрагментов кода происходит точно так же, как и к любым другим сервисам - через соответствующих представителей интерфейсов.


RPCЛекция 2

Эволюция DCS

Лекция 2

Комментарии к рисунку

ONC Open Network Computing [Sun]

XDR eXternal Data Representation

XDR is an implementation of the presentation layer in the OSI model. XDR allows data to be wrapped in an architecture independent matter so data can be transferred between heterogenous computer systems. Converting from the local representation to XDR is called encoding. Converting from XDR to the local representation is called decoding. XDR is implemented as a software library of functions that is portable between different operating systems and is also independent of the transport layer. Sun RPC uses XDR.

XDR data types : { boolean, char, short, int, long, float, double, string,

enumeration, structure, union,

fixed length array, variable length array,

opaque data}


Процессы, RPC (удаленный вызов процедур)

Процесс – поток/единица выполнения набора команд под управлением OС. Процессы рождаются и «умирают» по командам пользователей или OC. TaskManager в Windows; команда ps в *nix.








Процессы могут быть многопоточными (multi-threaded), но и в этом случае существует некоторый главный (порождающий) поток. Современный GUI – кольца обработчиков событий, вызванных действиями пользователя и изменениями состояния внутренних переменных процесса.


Процессы <> Компоненты. Когда программа запущена – синонимы. Пока нет – компоненты, это набор файлов – результатов компиляции

W - *.exe, *.dll

*nix – исп., *.so

Java - *.class


Вызов процедуры (функции) внутри одного процесса (монолитное приложение)

Локальный вызов функции




Процесс #0

// Java



Calc calc = new Calc();

int x; int y; int res;

…// x = …; y = …

res = calc.add(x, y)



class Calc {



int add(int a, int b) {

return a+b;

}





Участок кода, откуда вызывается функция.

«Клиентский» участок кода


Участок кода, где функция реализована.

«Серверный» участок кода


Оба участка в одном процессе


Процесс #1


// Calc calc = new Calc();

???

int x; int y; int res;

…// x = …; y = …

// res = calc.add(x, y)

???


Процесс #2


class Calc

int add(int a, int b) {

return a+b;

}