КаталогИндекс раздела
НазадОглавлениеВперед


1. ОСНОВНІ ПОНЯТТЯ ТА ВИЗНАЧЕННЯ

1.1 Програми та програмне забезпечення

Спочатку дамо визначення програми згідно з діючим державним стандартом [5].

Програма - це дані, які призначені для керування конкретними компонентами системи обробки інформації (СОІ) з метою реалізації визначеного алгоритму.

У першу чергу потрібно звернути особливу увагу в цьому визначенні на той факт, що програма являє собою дані. Відомо, що один з основних принципів машини фон Неймана полягає в тому, що як програми, так і дані зберігаються у тій же самій пам'яті. Тобто програма, яка зберігається у пам'яті, являє собою деякі коди, які можуть розглядатися як дані. Можливо, з точки зору програміста, програма є активним компонентом, бо вона виконує деякі дії. Але для процесора команди програми являють собою дані, які він читає та інтерпретує. З іншого боку, програма - це дані з точки зору обслуговуючих програм, наприклад, з точки зору компілятора, який на вході одержує одні дані - програму мовою високого рівня (МВР), а на виході видає інші дані - програму в машинних кодах.

А тепер дамо визначення програмного забезпечення згідно з діючим державним стандартом [5].

Програмне забезпечення (ПЗ) - це сукупність програм СОІ та програмних документів, необхідних для їх експлуатації.

Суттєвим є той факт, що програмне забезпечення - це програми, які призначені для багаторазового використання та застосування різними користувачами. У зв'язку з цим слід звернути увагу на низку необхідних властивостей програмного забезпечення.

1) Необхідність документування.

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

2) Ефективність.

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

3) Надійність.

Забезпечення надійності передбачає:

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

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

Системні структури даних повинні зберігатися безумовно. Збереження цілісності даних користувача бажане. 4) Можливість супроводження.

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

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

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

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

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

1.2 Системне програмування

Дамо визначення системної та прикладної програми згідно з діючим державним стандартом [5].

Системна програма - це програма, яка призначена для підтримки працездатності СОІ або підвищення ефективності її використання.

Прикладна програма - це програма, яка призначена для розв'язання задачі або класу задач у певній галузі застосування СОІ.

Відповідно до термінології, системне програмування - це процес розробки системних програм (у тому числі керуючих та обслуговуючих).

З іншого боку, система - єдине ціле, що складається з множини компонентів та множини зв'язків між ними. Тоді системне програмування - це розробка програм складної структури.

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

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

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

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

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

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

Дамо визначення системної керуючої програми та системної обслуговуючої програми згідно з діючим державним стандартом [5].

Керуюча програма - це системна програма, що реалізує набір функцій керування, який включає у себе керування ресурсами та взаємодію з оточуючим середовищем СОІ, відновлення роботи системи після виявлення несправностей у технічних засобах.

Програма обслуговування (утиліта) - призначена для надання послуг загального характеру користувачам та обслуговуючому персоналу СОІ .

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

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

Дамо визначення системи програмування згідно з діючим державним стандартом [5].

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

1.3 Етапи підготовки програми

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

Дамо визначення програмного модуля згідно з діючим державним стандартом [5].

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

При обранні модульної структури мають враховуватися такі основні міркування:

На рис.1.1 показано етапи, які проходить програма від її написання до виконання.

Програма пишеться у вигляді початкового модуля (ПМ).

Дамо визначення початкового модуля згідно з діючим державним стандартом [5].

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

Першим (не для всіх мов програмування обов'язковим) етапом підготовки програми є обробка її макропроцесором (або препроцесором). Макропроцесор обробляє текст програми, і на виході його отримується нова редакція тексту (дивись ПМ* на рис. 1.1). У більшості систем програмування макропроцесор суміщений з транслятором, і для програміста його робота і проміжний ПМ* невидимі. Слід мати на увазі, що макропроцесор виконує обробку тексту. Це означає, з одного боку, що він не інтерпретує операторів мови програмування та змінних програми, а з іншого боку, що усі оператори та змінні макромови (тих виразів у програмі, які адресовані макропроцесору) в проміжному ПМ* вже відсутні і для подальших етапів обробки невидимі. Так, якщо макропроцесор замінив у програмі деякий текст A на текст B, то транслятор вже має тільки текст B і не знає, був цей текст написаний програмістом чи він підставлений макропроцесором.


Рисунок 1.1 - Етапи проходження програми

Наступним етапом є трансляція.

Дамо визначення трансляції згідно з діючим державним стандартом [5].

Трансляція - це перетворення програми, поданої однією мовою програмування, у програму, подану іншою мовою програмування, у певному сенсі рівнозначну першій.

Як правило, результатом роботи транслятора є програма, подана на машинній мові цільової обчислювальної системи (ОС). Цільова ОС - це та ОС, на якій програма буде виконуватися.

Дамо визначення машинної мови згідно з діючим державним стандартом [5].

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

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

Дамо визначення автокоду, мови асемблера і мови високого рівня згідно з діючим державним стандартом [5].

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

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

Мова високого рівня - це мова програмування, поняття якої і структура програми, написаній на цій мові, зручні для сприйняття людиною.

Дамо визначення об'єктного модуля (ОМ) згідно з діючим державним стандартом [5].

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

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

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

Задовільнення зовнішніх посилань виконується на наступному етапі підготовки, який забезпечується редактором зв'язків або компонувальником (укладачем). Редактор зв'язків з'єднує разом усі об'єктні модулі, що входять до складу програми. Оскільки редактору зв'язків доступні всі об'єктні компоненти програми, він має можливість обробити ті місця в об'єктних модулях, які містять зовнішні посилання. Результатом роботи редактора зв'язків є завантажуваний, тобто виконуваний модуль.

Дамо визначення завантажуваного модуля (ЗМ) згідно з діючим державним стандартом [5].

Завантажуваний модуль - це програмний модуль, поданий у формі, придатній для завантаження в оперативну пам'ять для виконання.

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

Можливий також варіант, в якому редагування зв'язків виконується при кожному запуску програми на виконання та сполучається (поєднується) із завантаженням. Це робить зв'язуючий завантажувач. Варіант зв'язування при запуску більш витратний, оскільки витрати на зв'язування тиражуються при кожному запуску. Але він забезпечує:

Варіант інтерпретації передбачає пряме виконання початкового модуля.

Дамо визначення інтерпретації згідно з діючим державним стандартом[5].

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

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

Приклади інтерпретаторів: мови процедур (shell, REXX), JVM.

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

Типове застосування крос-систем передбачене для тих випадків, коли цільове обчислювальне середовище просто не має ресурсів, необхідних для підготовки програм (наприклад, вбудовані системи).

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

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

Контрольні запитання

  1. Визначення програми та програмного забезпечення.
  2. Необхідні властивості програмного забезпечення.
  3. Визначення системної та прикладної програми.
  4. Визначення системного програмування.
  5. Поділ програмного забезпечення.
  6. Визначення системної керуючої програми.
  7. Визначення системної обслуговуючої програми.
  8. Визначення системи програмування.
  9. Визначення машинної мови.
  10. Визначення автокоду, мови асемблера, мови високого рівня.
  11. Визначення програмного модуля.
  12. Визначення початкового модуля.
  13. Визначення об'єктного модуля.
  14. Визначення завантажуваного модуля.
  15. Визначення трансляції та транслятора.
  16. Призначення редактора зв'язків.
  17. Визначення інтерпретації та інтерпретаторів.
  18. Призначення завантажувача.
  19. Призначення крос-системи.
  20. Етапи підготовки програм.

НазадОглавлениеВперед

КаталогИндекс раздела