Рівні абстракції - основи as, 400

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

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

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

Для більшості програмістів мову асемблера - також не цілком природний, тому був створений ще більш високий рівень абстракції - мова програмування високого рівня (МВР). В даний час налічується сотні таких мов; найбільш відомі з них - Basic, C, C ++, Cobol і RPG. Програма, яка приймає на вході текст на одній з мов високого рівня і транслює його в оператори мови асемблера, називається компілятором.

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

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

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

Схожа на емуляцію інтерпретація програм. Програма-інтерпретатор вибирає інструкції по одній і виконує еквівалентну їм послідовність команд нижчого рівня. Деякі з новітніх ЯВУ, використовуваних в розподілених обчисленнях, наприклад Java, розроблені так, щоб їх було легко інтерпретувати. Більшість командних мов також інтерпретованих. Введіть «dir» в командному рядку DOS на будь-якому ПК і на екрані з'явиться вміст каталогу. Якщо після цього натиснути клавішу Enter, інтерпретатор командного рядка DOS вважає введену команду, а потім виконає послідовність інструкцій, необхідних для її виконання. Такий інтерпретатор команд є в більшості операційних систем. У мікропрограмміруемой машині інтерпретація зазвичай підтримується спеціальним обладнанням. Мікропрограма для розрізнення такої апаратної форми інтерпретації називається емулятором.

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

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