Здавалка
Главная | Обратная связь

Перенесення коду в гетерогенних системах



Для гомогенних систем передбачено припущення, що перенесений код може бути легко виконаний на цільовій машині, але розподілені системи створюються з набору гетерогенних платформ, кожна з яких має свою власну машинну архітектуру й операційну систему. Перенесення в таких розподілених системах передбачає, щоб підтримувалися всі платформи, на яких функціонує система, і сегмент коду має виконуватися на всіх платформах без перекомпіляції тексту програми, а сегмент виконання на кожній платформі має бути правильно представленим.

Проблеми можна частково усунути, якщо обмежитися слабкою мобільністю, коли зазвичай немає інформації щодо часу виконання, яку треба передавати від машини до машини. Це означає, що достатньо скомпілювати вихідний текст програми, створивши різні варіанти сегмента коду – по одному на кожну потенційну платформу.

В разі сильної мобільності основною проблемою, яку треба розв’язати, є перенесення сегмента виконання, оскільки він значною мірою залежить від платформи, на якій виконується завдання. На практиці перенести сегмент виконання, не вносячи до нього жодних змін, можна лише за умови, що машина-приймач має таку саму архітектуру і працює під керуванням тієї самої операційної системи.

Сегмент виконання містить закриті дані процесу, його поточний стек і лічильник програми. Поточний стек зазвичай містить тимчасові дані: значення локальних змінних, інформацію, що залежить від платформи, зокрема значення регістрів. Важливо відзначити, що якби вдалося позбавитися від даних, які залежать від платформи, то перенести сегмент на іншу машину і продовжити виконання там було б значно простіше.

Процедура перенесення коду обмежена декількома конкретними аспектами виконання програми. Перенесення можливе лише у момент виклику чергової підпрограми, під якою розуміють функцію в С, метод в Java тощо. Виконуюча система створює власну копію програмного стека, причому машинно-незалежну, яку називають стеком перенесення (migrationstack), що оновлюється під час виклику підпрограми або повернення керування з підпрограми.

Під час виклику підпрограми виконуюча система проводить маршалінг даних, поміщених у стек перенесення під час попереднього виклику (рис. 15). Ці дані є значеннями локальних змінних та параметрів поточного виклику процедури. Дані, які отримують після маршалінга, теж розміщують у стеку перенесення разом з ідентифікатором викликаної підпрограми та адресою (у формі мітки переходу), з якої має продовжуватися виконання після повернення з підпрограми.

Якщо перенесення коду відбувається в точці виклику підпрограми, виконуюча система проводить спочатку маршалінг усіх глобальних даних програми, які становлять сегмент виконання. Дані, властиві для даної машини, і поточний стек ігноруються. Дані після маршалінга і стек перенесення передаються на машину, яка їх очікує. На машину-приймач завантажується сегмент коду, що містить відповідні для її архітектури й операційної системи код. На машині-приймачі виконується демаршалінг отриманих даних сегмента виконання, та зі стека перенесення формується новий стек виконання. Після цього виконання може бути продовжене за рахунок входу у підпрограму, викликану на вихідному сайті.

Зрозуміло, що такий підхід можливий лише за умови, що компілятор генерує код для оновлення стека перенесення під час кожного входу в підпрограму або виходу з неї. Компілятор має також генерувати в коді мітки, які дозволяють реалізувати вихід з підпрограми у вигляді переходів (машинно-незалежних). Для функціонування процесу перенесення коду необхідна відповідна виконуюча система. Є низка систем, які успішно використовують розглянуту технологію. Проблеми перенесення коду, зумовлені гетерогенністю розподілених систем, у багатьох випадках схожі з загальними проблемами перенесення, тому також схожі й методи їх вирішення.

Рис. 14. Перенесення коду в гетерогенних системах

Програмні агенти

З позицій взаємодії програмних компонентів в мережі розглянемо процеси,керуючі потоки виконання всередині процесів, узагальнену організацію клієнтів і серверів, а також перенесення програм і процесів. Незалежні процеси об’єднаються в те, що називають програмними агентами – автономними одиницями, здатними виконувати завдання в кооперації з іншими, можливо, віддаленими агентами. Агенти відіграють у розподілених системах важливу роль.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.