Я 1. Цей третій набір команд також формує мову, яку ми називатимемо Я 2, а відповідну віртуальну машину — М 2, Людина може писати програми на мові Я 2, неначе віртуальна машина з машинною мовою Я 2 дійсно існує. Такі програми можуть або транслюватися на мову Я 1, або виконуватися інтерпретатором, написаним на мові Я 1. Винахід цілого ряду мов, кожен з яких зручніший для людини, чим попередній, може продовжуватися до тих пір, поки ми не дійдемо до відповідної нам мови. Кожен така мова використовує свого попередника як основу, тому ми можемо розглядати комп'ютер у вигляді ряду рівнів, як показано на мал. 1. Мова, що знаходиться в самому низу ієрархічної структури, — найпримітивніший, а що знаходиться на самому верху — найскладніший.
Мал. 1. Багаторівнева машина
Між мовою і віртуальною машиною існує важлива залежність. У кожної машини є якась певна машинна мова, що складається зі всіх команд, які ця машина може виконувати. По суті, машина визначає мову. Схожим чином мова визначає машину, яка може виконувати всі програми, написані на цій мові. Машину, що задається певною мовою, дуже складно і дорого сконструювати з електронних схем, але ми можемо уявити собі таку машину. Комп'ютер з машинною мовою C++ або COBOL був би дуже складним, але його можна було б сконструювати, якщо враховувати високий рівень сучасних технологій. Проте існують вагомі причини не створювати такий комп'ютер: це злитком складно в порівнянні з іншими технічними прийомами.
Комп'ютер з п рівнями можна розглядати як п разных віртуальних
машин, у кожної з яких є своя машинна мова. Терміни «рівень» і «віртуальна машина» ми використовуватимемо як синоніми. Тільки програми, написані на Я 0, можуть виконуватися комп'ютером без застосування трансляції і інтерпретації. Програми, написані на Я 1, Я 2.... Я п, повинні проходити через інтерпретатор нижчого рівня або транслюватися на мову, відповідну нижчому рівню.
Людині, яка пише програми для віртуальної машини рівня п, не обов'язково знати про транслятори і інтерпретатори нижчих рівнів. Машина виконає ці програми, і не важливо, чи будуть вони виконуватися крок за кроком інтерпретатором або їх виконуватиме сама машина. У обох випадках результат один і той же: програма буде виконана.
Сучасні багаторівневі машини
Більшість сучасних комп'ютерів складаються з двох і більш за рівні. Існують машини навіть з шістьма рівнями (мал. 2). Рівень 0 — апаратне забезпечення машини. Його електронні схеми виконують програми, написані на мові рівня 1. Ради повноти потрібно згадати про існування ще одного рівня, розташованого нижче рівня 0. Цей рівень не показаний на мал. 1.2, оскільки він потрапляє в сферу електронної техніки і, отже, не розглядається в цій книзі. Він називається рівнем фізичних пристроїв. На цьому рівні знаходяться транзистори, які є примітивами для розробників комп'ютерів. Пояснювати, як працюють транзистори, — завдання фізики.
На самому нижньому рівні, цифровому логічному рівні, об'єкти називаються вентилями. Хоча вентилі складаються з аналогових компонентів, таких як транзистори, вони можуть бути точно змодельовані як цифрові засоби. У кожного вентиля є одне або декілька цифрових вхідних даних (сигналів, що представляють 0 або 1). Вентиль обчислює прості функції цих сигналів, такі як і або АБО. Кожен вентиль формується з декількох транзисторів. Декілька вентилів формують 1 біт пам'яті, який може містити 0 або 1. Біти пам'яті, об'єднані в групи, наприклад, по 16,32 або 64, формують регістри. Кожен регістр може містити одне двійкове число до певної межі. З вентилів також може полягати сам комп'ютер.
Мал. 2. Комп'ютер з шістьма рівнями. Спосіб підтримки кожного рівня
вказаний під ним.
Наступний рівень — мікроархітектурний рівень. На цьому рівні можна бачити сукупності 8 або 32 регістрів, які формують локальну пам'ять і схему, звану АЛП (арифметико-логічний пристрій). АЛП виконує прості арифметичні операції. Регістри разом з АЛП формують тракт даних, по якому поступають дані. Основна операція тракту даних полягає в наступному. Вибирається один або два регістри, АЛП проводить над ними яку-небудь операцію, наприклад складання, а результат поміщається в один з цих регістрів.
На деяких машинах робота тракту даних контролюється особливою програмою, яка називається мікропрограмою. На інших машинах тракт даних контролюється апаратними засобами. У попередніх виданнях книги ми назвали цей рівень «рівнем мікропрограмування», тому що раніше він майже завжди був інтерпретатором програмного забезпечення. Оскільки зараз тракт даних зазвичай контролюється апаратним забезпеченням, ми змінили назву, щоб точніше відобразити сенс.
На машинах, де тракт даних контролюється програмним забезпеченням мікропрограма — це інтерпретатор для команд на рівні 2. Мікропрограма викликає команди з пам'яті і виконує їх одну за іншою, використовуючи при цьому тракт даних. Наприклад, для того, щоб виконати команду ADD, ця команда викликається з пам'яті, її операнди поміщаються в регістри, АЛП обчислює суму, а потім результат переправляється назад. На комп'ютері з апаратним контролем тракту даних відбувається така ж процедура, але при цьому немає програми, яка контролює інтерпретацію команд рівня 2.
Другий рівень ми називатимемо рівнем архітектури системи команд. Кожен виробник публікує керівництво для комп'ютерів, які він продає, під назвою «Керівництво по машинній мові» або «Принципи роботи комп'ютера Western Wombat Model 100Х» - і т.п. Таке керівництво містить інформацію саме про цей рівень. Коли вони описують набір машинних команд, вони насправді описують команди, які виконуються мікропрограмою-інтерпретатором або апаратним забезпеченням. Якщо виробник поставляє два інтерпретатори для однієї машини, він повинен