Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л_3_ПРОЦЕСИ.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
1 Мб
Скачать
☆

7.2. Моделі перенесення коду

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

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

Сегмент коду – це частина, що містить набір інструкцій, які виконуються у процесі виконання програми.

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

Сегмент виконання використовується для зберігання поточного стану процесу, включаючи закриті дані, стек і лічильник програми.

Абсолютний мінімум для перенесення коду пропонує модель слабкої мобільності (weak mobility), згідно з якою допускається перенесення лише сегмента коду, можливо разом з деякими даними ініціалізації. Характерною рисою слабкої мобільності є те, що перенесена програма завжди запускається зі свого вихідного стану. Це відбувається, наприклад, якщо використовувати Java-aплети. Перевага такого підходу полягає в його простоті. Слабка мобільність потрібна лише для того, щоб машина, на яку переноситься код, мала змогу його виконувати. Цього цілком достатньо, щоб зробити код переносним.

На відміну від слабкої мобільності, в системах, що підтримують сильну мобільність (strong mobility), переноситься також і сегмент виконання. Характерна риса сильної мобільності – працюючий процес може бути припинений, перенесений на другу машину і його виконання продовжено з того місця, на якому його припинено. Зрозуміло, що сильна мобільність значно потужніша від слабкої, але і значно складніша в реалізації. Прикладом системи, що підтримує сильну мобільність, є система D'Agents.

Незалежно від того, є мобільність слабкою або сильною, слід розрізняти системи з перенесенням, ініційованим відправником, і системи з перенесенням, ініційованим одержувачем.

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

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

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

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

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

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

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

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

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

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

Полотно 102

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]