WWW.REFERATCENTRAL.ORG.UA - Я ТУТ НАВЧАЮСЬ

... відкритий, безкоштовний архів рефератів, курсових, дипломних робіт

ГоловнаФінанси (міжнародні, державні) → Сучасні методи і засоби інформаційних технологій - Реферат

Сучасні методи і засоби інформаційних технологій - Реферат

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

Швидке зростання продуктивності ЕОМ, з одного боку, і хронічний брак кадрів програмістів, з іншого боку, послужили причиною бурхливого розвитку і вживання високорівневих мов програмування.

Відособлене, проміжне положення між машинно-незалежними і машинно-залежними мовами займає мову Сі, створення якого з'явилося результатом спроби об'єднання достоїнств, властивих мовам обох класів:

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

• у плані максимального використання потужних виразних можливостей сучасних мов високого рівня.

Результат такого компромісу зумовив досить складний синтаксис мови Сі.

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

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

Процедурно-орієнтовані (універсальні) мови ефективні для опису алгоритмів вирішення широкого класу завдань. З мов цього класу найбільш відомі: Фортран, Кобол, ПЛ/1, Бейсик, Паськаль, Ада.

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

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

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

Робота всіх трансляторів будується по одному з двох принципів: інтерпретація або компіляція.

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

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

В разі багатократного рішення задачі, коли швидкодія роботи обчислювальної системи має істотне

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

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

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

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

Завантажувальний модуль може мати просту, оверлейну або динамічну структуру.

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

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

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

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

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

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

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

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

У загальному випадку залежно від виграшу в продуктивності і тимчасових витрат всі види оптимізації можна розділити на декілька рівнів. Перший і другий рівні оптимізації, як правило, підвищують швидкодію на 10 - 15% при мінімальних витратах. Третій рівень оптимізації дозволяє збільшити продуктивність ще на 5%, проте це обійдеться значно дорожчим.

Loading...

 
 

Цікаве