
- •Л.С. Глоба
- •Розподілені системи
- •Історична довідка
- •Базові терміни та визначення
- •Комп'ютерні мережі, як частковий випадок розподілених систем
- •Модель клієнт-сервер.
- •Особливості розподілених систем
- •Переваги розподілених систем
- •Недоліки розподілених систем
- •Класифікація розподілених систем
- •Характеристики розподілених систем
- •Висновки
- •Питання для самоконтролю
- •Поняття розподіленого середовища
- •Концепції апаратних рішень
- •Архітектура багатопроцесорних систем
- •Системи із спільною пам'яттю
- •Системи з роздільною пам'яттю
- •Представники систем з роздільною пам'яттю
- •Топології багатопроцесорних систем
- •Концепції програмних рішень
- •Таблиця 2.1. Короткий опис розподілених і мережних операційних систем, а також засобів проміжного рівня
- •Операційні системи й розподіленість
- •Проміжне середовище
- •Поняття розподіленого середовища
- •Розподіл прикладних програм по рівнях
- •Варіанти архітектури клієнт-сервер
- •Де ік – інтерфейс користувача, лп – логіка прикладних програм, дд – доступ до даних, бд – база даних
- •Де ік – інтерфейс користувача, лп – логіка прикладних програм, дд – доступ до даних, бд – база даних
- •Програмні компоненти розподілених систем
- •Основи мережної взаємодії
- •Де ік – інтерфейс користувача, лп – логіка прикладних програм, дд – доступ до даних, бд – база даних
- •Взаємодія компонент розподіленої системи
- •Концепції взаємодії компонент розподіленої системи
- •Обмін повідомленнями
- •Віддалений виклик процедур
- •Використання віддалених об'єктів
- •Розподілені події
- •Розподілені транзакції
- •Безпека в розподілених системах
- •Опис інтерфейсу програмної компоненти
- •Мова xml і схеми xml
- •Soap: мова повідомлень розподіленої системи
- •Wsdl: опис інтерфейсу програмної компоненти
- •Серіалізація об'єктів
- •Базові технології представлення інформації в розподілених системах
- •Вимоги до прикладних програм серверної сторони
- •Огляд базових технологій
- •Таблиця 2.1 Основні оціночні характеристики платформ
- •Технологія ria
- •Таблиця 2.2 Порівняння даних профілізації традиційної веб-прикладної програма і ria
- •Таблиця 2.4 Порівняння технологій створення ria -прикладних програм
- •Дескриптор розгортання web-прикладних програм та компонент
- •Висновки
- •Питання для самоконтролю
- •Зв'язок
- •Рівні протоколів
- •Низькорівневі протоколи
- •Транспортні протоколи
- •Протоколи верхнього рівня
- •Віддалений виклик процедур
- •Звертання до віддалених об'єктів
- •Розподілені об'єкти
- •Прив'язка клієнта до об'єкта
- •Статичне й динамічне віддалене звернення до методів
- •Invoke(fobject, id(append). Int).
- •Передача параметрів
- •Зв’язок на основі потоків даних
- •Підтримка безперервних середовищ
- •Потоки даних й якість обслуговування
- •Таблиця 3.1 Характеристики технологій якості обслуговування
- •Синхронізація потоків даних
- •Протоколи проміжного рівня
- •Протокол soap
- •Родина протоколів xmpp
- •Протокол umsp
- •Висновки
- •Питання для самоконтролю
- •Процеси
- •Поняття процесу. Визначення та структура
- •Потоки виконання. Визначення та структура
- •Стан процесів та потоків виконання
- •Реалізація потоків виконання
- •Потоки виконання в нерозподілених системах
- •Потоки виконання в розподілених системах
- •Багатопотокові клієнти
- •Багатопотокові сервери
- •Таблиця 4.1 Три способи побудови сервера
- •Клієнти
- •Інтерфейси користувача
- •Клієнтське програмне забезпечення, яке забезпечує прозорість розподілу
- •Сервери
- •Загальні питання розробки серверів прикладного програмного забезпечення
- •Сервери об'єктів
- •Перенесення коду
- •Підходи до перенесення коду
- •Моделі перенесення коду
- •Перенесення і локальні ресурси
- •Перенесення коду в гетерогенних системах
- •Огляд перенесення коду в d'Agent
- •Питання реалізації
- •Програмні агенти
- •Програмні агенти в розподілених системах
- •Таблиця 4.2 Деякі важливі властивості агентів
- •Технологія агентів
- •Мови взаємодії агентів
- •Висновки
- •Питання для самоконтролю
- •Іменування
- •Іменовані сутності
- •Імена, ідентифікатори й адреси
- •Простір імен
- •Реалізація просторів імен
- •Покращене керування даними.
- •Допомагає організувати потоковий процес роботи.
- •Єдиний репозиторій і пошукової механізм для прикладного програмного забезпезпечення і сервісів.
- •Розміщення мобільних сутностей
- •Іменування й локалізація сутностей
- •Прості рішення
- •Підходи на основі базової точки
- •Ієрархічні підходи
- •Видалення сутностей, на які немає посилань
- •Проблема об'єктів, на які немає посилань
- •Підрахунок посилань
- •Організація списку посилань
- •Ідентифікація сутностей, на які немає посилань
- •Висновки
- •Фізичні годинники
- •Алгоритми синхронізації часу
- •Використання синхронізованих годин
- •Логічні годинники
- •Оцінка часу Лампорта (відмітки часу)
- •Векторна оцінка часу
- •Глобальний стан
- •Між записом свого стану й одержанням маркера процесQне приймав повідомлень по жодному зі своїх вхідних каналів.
- •Алгоритми голосування
- •Алгоритм «забіяки»
- •Кільцевий алгоритм
- •Взаємне виключення
- •Централізований алгоритм
- •Розподілений алгоритм
- •Алгоритм маркерного кільця
- •Порівняння трьох алгоритмів
- •Розподілені транзакції
- •Модель транзакцій
- •Таблиця 6.1 Деякі примітиви, використовувані в транзакціях
- •Класифікація транзакцій
- •Рівні ізольованості транзакцій
- •Таблиця 6.2 Рівні ізольованості та проблеми, які вони допускають
- •Реалізація розподілених транзакцій
- •Керування паралельним виконанням транзакцій
- •Компоненти розподілених транзакцій
- •Висновки
- •Список літератури
Перенесення коду в гетерогенних системах
Раніше передбачалось, що перенесений код може бути з легкістю виконаний на цільовій машині. Це припущення відносилося виключно до гомогенних систем. Проте розподілені системи створюються з набору гетерогенних платформ, кожна з яких має свою власну машинну архітектуру і операційну систему. Перенесення в подібних системах вимагає, аби підтримувалися всі ці платформи, тобто сегмент коду повинен виконуватися на всіх цих платформах без перекомпіляції тексту програми. Крім того, треба упевнитись, що сегмент виконання на кожній з цих платформ буде представлений правильно.
Проблеми можуть бути частково усунені в тому випадку, якщо обмежитися слабкою мобільністю. В цьому випадку зазвичай не існує інформації часу виконання, яку треба було б передавати від машини до машини. Це означає, що досить скомпілювати вихідний текст програми, створивши різні варіанти сегменту коду – поодинці на кожну потенційну платформу.
В разі сильної мобільностіосновною проблемою, яку треба буде вирішити, є перенесення сегменту виконання. Проблема полягає в тому, що цей сегмент в значній мірі залежить від платформи, на якій виконується завдання. Насправді перенести сегмент виконання, не вносячи до нього жодних змін, можна лише в тому випадку, якщо машина-приймач має ту ж архітектуру і працює під управлінням тієї ж операційної системи.
Сегмент виконання містить закриті дані процесу, його поточний стек і лічильник програми. Стек зазвичай містить тимчасові дані, такі як значення локальних змінних, але може також містити і інформацію, залежну від платформи, наприклад значення регістрів. Важливо відзначити, що якби вдалося позбавитися від даних, залежних від платформи, то перенести сегмент на іншу машину і продовжити виконання там було б значно простіше.
Перенесення коду обмежене декількома конкретними моментами виконання програми. Точніше, перенесення можливе лише у момент виклику чергової підпрограми. Під підпрограмою мається на увазі функція в С, метод в Java і тому подібне. Виконуюча система створює власну копію програмного стека, причому машинно-незалежну. Ця копія називаєтьсястеком перенесення (migration stack).Стек перенесенняоновлюється під час виклику підпрограми або поверненні управління з підпрограми.
Під час виклику підпрограми виконуюча система виконує маршалінг даних,які були поміщені в стек під час попереднього виклику (рис. 4.15). Ці дані єзначеннями локальних змінних, а такожзначеннями параметрів поточного виклику процедури.Даніпісля маршалінга поміщаютьсяв стек перенесення разом з ідентифікатором викликаної підпрограми. Крім того, в стек перенесення поміщаєтьсяадреса (у формі мітки переходу),з якої повинне продовжуватися виконання після повернення з підпрограми.
Якщо перенесення коду відбувається в точці виклику підпрограми, виконуюча система виконує спочатку маршалінг всіх глобальних даних програми, які утворюють сегмент виконання. Дані, специфічні для даної машини, і поточний стек ігноруються. Дані після маршалінга і стек перенесення передаються на машину, яка їх очікує. Крім того, на машину-приймач завантажується відповідний сегмент коду, що містить відповідні для її архітектури і операційної системи код. На машині-приймачі виконується демаршалінг отриманих даних сегменту виконання, та із стека перенесення формується новий стек виконання. Після цього виконання може бути продовжене простим входом в підпрограму, яка була викликана на вихідному сайті.
Рис. 4.15 Перенесення коду в гетерогенних системах
Зрозуміло, що подібний підхід можливий лише в тому випадку, якщо компілятор генерує код для оновлення стека перенесення при кожному вході в підпрограму або виході з неї. Компілятор повинен також генерувати в коді мітки, які дозволяють реалізувати вихід з підпрограми у вигляді переходів (машинно-незалежних). Крім того, необхідна відповідна виконуюча система. Проте існує безліч систем, що успішно використовують подібну технологію. Проблеми перенесення коду, викликані гетерогенністю, у багатьох випадках схожі з проблемами переносимості, тому також схожі і методи їх рішення.
Приклад
В кінці 70-х років було запропоновано просте рішення, що дозволило вирішити безліч проблем з перенесенням мови Pascal на різні машини. Таким рішенням стала генерація проміжного машинно-незалежної коду для абстрактної віртуальної машини. Ця машина вимагала реалізації на ряді різних платформ, завдяки якій програми на мові Pascal могли працювати на них всіх. Ця проста ідея деякий час знаходила широке використання, однак вона ніколи не вважалася загальним рішенням всіх проблем переносимості для інших мов, особливо С.
На сьогоднішній день проблему перенесення коду в гетерогенних системах почали вирішувати засобами мов сценаріїв, а також мов, що володіютьвисокою мірою переносимості, таких якJava.
Всі ці рішення, загалом, засновані на віртуальній машині, яка інтерпретує або безпосередньо вихідні тексти програм (в разі мов сценаріїв), або проміжний код, що видається компілятором (для Java).
Єдиний серйозний недолік переносимості, що реалізовується за допомогою віртуальних машин, полягає в тому, що доводиться обмежуватися конкретною мовою програмування. З цієї причини важливо, аби мови, призначені для перенесення, мали інтерфейс з існуючими мовами.
Приклад
Аби проілюструвати перенесення коду, розглянемо тепер платформу проміжного рівня, який підтримує різні форми перенесення коду. D'Agent, або повністю Agent TCL, – це система, побудована на основі концепції агента. Агентом в системі D'Agent називається програма, яка в гетерогенній системі здатна переміщатися з однієї машини на іншу.