<
  • Главная
Статьи

Мови, рівні і віртуальні машини

Вищезгадану проблему можна вирішити двома способами. Обидва способи мають на увазі розробку нових команд, більш зручних для людини, ніж вбудовані машинні команди. Ці нові команди в сукупності формують мову, який ми будемо називати Я 1. Вбудовані машинні команди теж формують мову, і ми будемо називати його Я 0. Комп'ютер може виконувати тільки програми, написані на його машинній мові Я 0. Два способи вирішення проблеми різняться тим , яким чином комп'ютер буде виконувати програми, написані на мові Я 1, - адже в кінцевому підсумку комп'ютера доступний тільки машинний мову Я 0.

Перший спосіб виконання програми, написаної на мові Я 1, має на увазі заміну кожної команди еквівалентним набором команд на мові Я 0. У цьому випадку комп'ютер виконує нову програму, написану на мові Я 0, замість старої програми, написаної на Я 1. Ця технологія називається трансляцією .

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

Між трансляцією і інтерпретацією багато спільного. В обох підходах комп'ютер в кінцевому підсумку виконує набір команд на мові Я 0, еквівалентних командам Я 1. Різниця лише в тому, що при трансляції вся програма Я 1 переробляється в програму Я 0, програма Я 1 відкидається, а нова програма на Я 0 завантажується в пам'ять комп'ютера і потім виконується.

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

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

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

Очевидне рішення проблеми - створення ще одного набору команд, які в більшій мірі, ніж Я 1 орієнтовані на людину і в меншій мірі на комп'ютер. Цей третій набір команд також формує мову, який ми будемо називати Я 2, а відповідну віртуальну машину - М 2. Людина може писати програми на мові Я 2, як ніби віртуальна машина для роботи з машинною мовою Я 2 дійсно існує. Такі програми можуть або транслюватися на мову Я 1, або виконуватися інтерпретатором, написаним на мові Я 1.

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

Вищезгадану проблему можна вирішити двома способами

Мал. 1.1. багаторівнева машина

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

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

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

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

Багаторівнева комп'ютерна організація || Зміст || Сучасні багаторівневі машини



Новости
  • Виртуальный хостинг

    Виртуальный хостинг. Возможности сервера распределяются в равной мере между всеми... 
    Читать полностью

  • Редизайн сайта

    Редизайн сайта – это полное либо частичное обновление дизайна существующего сайта.... 
    Читать полностью

  • Консалтинг, услуги контент-менеджера

    Сопровождение любых интернет ресурсов;- Знание HTML и CSS- Поиск и обновление контента;-... 
    Читать полностью

  • Трафик из соцсетей

    Сравнительно дешевый способ по сравнению с поисковым и контекстным видами раскрутки... 
    Читать полностью

  • Поисковая оптимизация

    Поисковая оптимизация (англ. search engine optimization, SEO) — поднятие позиций сайта в результатах... 
    Читать полностью