2

УДК 004.78:004.042

Ляшкевич В.Я., к.т.н., Сидорук А.В.


РОЗРОБКА ВІРТУАЛЬНОГО ПРОЦЕСОРА ДЛЯ РЕАЛІЗАЦІЇ ПРОГРАМ З МОЖЛИВІСТЮ МОДИФІКАЦІЇ КОДУ

В ПРОЦЕСІ ВИКОНАННЯ


Чернівецький національний університет імені Юрія Федьковича


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


Вступ

Сучасні інструментальні засоби мов програмування надають можливість повноцінно використовувати можливості апаратного забезпечення комп’ютерних систем користувачам прикладного програмного забезпечення. Така взаємодія користувача із комп’ютерною системою можлива згідно наперед визначених і реалізованих алгоритмів у вигляді завантажувальних *.com чи *.exe файлів. [1, 2] Це зумовлено тим, що не завжди є можливість вийти за рамки „безумовних” реакцій на вхідні дані, тобто обмеження полягає в тому, що не можливо в процесі виконання змінити виконавчий файл без перекомпіляції.


Постановка задачі

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

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

Інтелектуалізовані системи технічного діагностування використовують багато різноманітних параметрів комп’ю­терних систем із відомостями експертів-діагностів, що забезпечують виявлення несправностей комп’ютерних систем та їх компонентів і т.д. [4] Ефективність даних систем залежить від багатьох факторів, серед яких нас цікавлять наступні:

• оперативність реакції системи на результати діагностування;

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

• обчислювальні можливості системи.

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


Загальні підходи вирішення проблеми гнучкості коду

1. Зовнішнє програмування (рис.1). У випадку невідомих вхідних даних програма робить запит користувачу для подальшого виконання й запису відповідної реакції.


Рис. 1. Принципи зовнішнього

програмування


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


Рис. 2. Принципи самопрограмування


3. Комбінований метод (рис.4). Даний метод базується на застосуванні принципів зовнішнього програмування та самопрограмування (рис. 3).

Рис. 3. Принципи комбінованого методу


Програмна структура віртуального процесора

Основні частини віртуального процесора (рис. 4) – матриця та ядро. Весь код збережено в чотиривимірній матриці. Вона зберігає, як код, так і систему команд, які його обробляють. Власне, вся обробка відбувається в даній матриці. Код в матрицю завантажується частинами, і зберігається також частинами, що дає можливість не утримувати постійно весь код великої програми в динамічній пам’яті, а користуватись лише необхідними частинами коду в певний час роботи. Для цього створено багатосекторний код, який дозволяє розбивати загальну структуру на частини, кожній з яких буде виділятись окремий потік. Код потоку зберігається в третьому вимірі матриці. Ядро, при необхідності, завантажує і зберігає сектори коду. Команда (точка входу) стартового сектору активує процес виконання команд.

Рис. 4. Програмна структура віртуального процесора

Ядро (рис. 5) використовується всіма потоками процесора, також при завантаженні, збереженні секторів (для синхронізації між потоками). Ядро – основна сила, яка створює рух по коду і призводить до конструктивних змін у матриці, що використовує для кожного потоку як його код, так і систему команд, прив’язану до даного коду. Тобто, ядро тісно взаємодіє з матрицею, проводячи в ній реконструкцію й відповідно дублює зміни в оригінальному файлі коду.


Рис. 5. Структурна організація ядра


Матриця складається з 4 площин і являє собою складну структуру зі складними внутрішніми зв’язками:

- перша площина. Рядок – елементарні значущі одиниці;

- друга площина. Сторінка – послідовність рядків;

- третя площина. Сектор – набір двомірних сторінок із зв’язками між секторами та кодом потоку;

- четверта площина. Об’єднання внутрішніх наборів команд, кожній з яких відповідає набір секторів із міжмовними зв’язками.


Можливості, які дозволить реалізувати віртуальний процесор

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

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

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

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

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

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


Система обробки інформації з можливістю зміни внутрішньої структури на основі віртуального процесора

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

Реалізація інформаційної системи здійснюється за принципами:

• елементарної можливості добавляти нові правила реакцій (блоки коду в програмі), тобто можливість на етапі виконання якісно та швидко змінювати код;

• алгоритму, який створює нові правила реакцій (генерує умовні рефлекси);

• кожна реакція має певний степінь достовірності (відсоток).

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


Рис.6. Зразок тексту програми для віртуального процесора


Висновки

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

Запропонована мова програмування має ряд недоліків, а саме:

  • обмежена швидкодія;

  • строгість написання коду;

  • необхідність віртуального процесора під кожну платформу.

До переваг можна віднести:

  • можливість створювати програму в реальному часі;

  • можливість розвитку в напрямку динамічної автокорекції в реальному часі;

  • поліпшене використання в навчальних цілях, через те що непотрібно перетворення у двійковий код;

  • можливість працювати на довільній платформі.

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

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


Література

1. Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989. - 360 с.

2. Гуц А. К. Математическая логика и теория алгоритмов: Уч. пособие. - Омск: Изд-во „Диалог-Сибирь”, 2003. – 108 с.

3. Герасимов Б.М., Локазюк В.М., Оксіюк О.Г., Поморова О.В. Інтелектуальні системи підтримки прийняття рішень: Навч. посібник. – К.: Вид-во Європ. ун-ту, 2007. – 355 с.

4. Локазюк В.М., Поморова О.В., Домінов А.О. Інтелектуальне діагностування мікропроцесорних пристроїв та систем: Навч. посібник для вузів, – Київ: Такі справи, 2001. – 286 с.

Статья создана 2008-2009 рр. Опубликована 28.09.2018 

Назад

 

TerminalCoin

2018-09-30 07:55:56