FORTH — вперед, в четвертий вимір комп'ютерних архітектур

Мал. 1
БЛИСК ТА НИЦІСТЬ FORTH-СИСТЕМИ
Краща коротка розповідь про систему
FORTH для тих, хто її не знає, звучить приблизно так: «Це зовсім інша система».
FORTH — не зовсім мова програмування і не зовсім операційна система. FORTH — це
інша архітектура. Архітектура стекової машини. Тому навіть професійному
програмістові, не знайомому з FORTH і стековими машинами, при вивченні FORTH
доцільно впасти в стан deja'vu і почати все спочатку. У FORTH-системі дійсно
поєднуються блискуче реалізована архітектура і пуританськи-ниці, на перший
погляд, вбудовані можливості.
СТЕКОВА АРХІТЕКТУРА — ЭФФЕКТИВНОСТЬ І ДЕШЕВИЗНА
Поняття стеку (stack) відноситься до одних з фундаментальних і
найпростіших в теорії і практиці комп'ютерних обчислень. Наочна некомп'ютерна
реалізація стеку — це стос тарілок. З нього можна або зняти саму верхню тарілку
(операція pop), або покласти тарілку на вершину стосу (операція push). Остання
укладена тарілка, таким чином, буде знята першою. Ось, власне, і все, що
потрібно знати про стек. Не дивлячись на простоту, що здається, стек — основа
основ будь-якої програми, що виконується на будь-якому комп'ютері. Переривання,
виклик функцій і процедур, повернення значень — всі ці процеси, що становлять
операційні системи і прикладні програми, базуються на стеках.
Природно, фахівці з комп'ютерної архітектури давно створили і апаратну підтримку
стеків, і взагалі комп'ютери, побудовані на апаратних стеках. Тепер практично у
всіх процесорах стеки мають деяку апаратну підтримку. Наприклад, в
найпоширеніших процесорах сімейства Intel x86 є спеціальний регістр стеку. Існує
навіть класифікація різних процесорів по критерію апаратної підтримки стеків
(табл. 1).
|
Таблиця 1 Класифікатор процесорів по апаратній підтримці стеку |
|||
|
Кількість стеків |
Розмір стеків |
Число операндів в команді |
Процесор або сімейство процесорів |
|
Один |
Малий |
0 |
Трансп'ютери INMOS, сімейства Burrouahs |
|
Один |
Малий |
1 |
Hewlett-Packard 3000 |
|
Один |
Малий |
2 |
Intel 80х86 |
|
Один |
Великий |
0 |
Експериментальна ЕОМ NORMA |
|
Один |
Великий |
1 |
Система AADC |
|
Один |
Великий |
2 |
AMD AM29000 |
|
Багато |
Малий |
0 |
Мікроконтролери Rockwell |
|
Багато |
Малий |
1 |
DEC PDP-11 (CM-4) |
|
Багато |
Малий |
2 |
Motorola 680х0 |
|
Багато |
Великий |
0 |
FORTH.NCRNC4016 |
|
Багато |
Великий |
1 |
«Эльбрус» (СРСР), Lilith (Никлаус Вирт) |
|
Багато |
Великий |
2 |
Система SOCRATES |
УСЕРЕДИНІ СТЕКОВОЇ
МАШИНИ
Найпростіша реалізація «чистої стекової машини» передбачає мінімальний об'єм
необхідних апаратних засобів і так звану «високу регулярність виконання». Під
нею розуміється однорідність використовуваних при проектуванні базових блоків
цифрової електроніки — регістрів, лічильників і ін.

Мал. 2
Приведена на мал. 2 структура стекової машини потрапляє (по класифікації табл.
1) в клас «багато великих стеків, число операндів в команді 0». Призначення
окремих елементів структури: стек даних — аналог набору регістрів в процесорі
архітектури CISC (з складним набором команд) або регістрового вікна в
архітектурі RISC (з скороченим набором команд); стек повернень — унікальна для
стекової архітектури деталь — в ньому зберігаються адреси повернень в викликаючу
підпрограму з викликаної; АЛП (Арифметико-Логічний Пристрій), Підсистема
Введення/Виводу, Логіка Керування, Лічильник Команд і Регістр Адреси —
стандартні вузли практично всіх мікропроцесорів з абсолютно однаковим
призначенням в будь-якій архітектурі. Зате система команд канонічної стекової
машини не має нічого спільного з командами будь-яких інших мікропроцесорів.
По-перше, стекова машина — це дійсно RISC-машина, іноді навіть звана
MISC-архітектурою (Minimal Instructions Set Computer, комп'ютер з мінімальним
набором команд). По-друге, в командах канонічної стекової машини відсутнє
поняття регістру — основного елементу «класичної» процесорної архітектури.
ЯК ЦЕ ПРАЦЮЄ
Самою, мабуть, чудовою в стекових машинах є не стільки простота реалізації,
скільки простота розуміння принципу роботи. Якщо виключити очевидні арифметичні
і логічні команди (складання, віднімання, бітові операції і ін.), система команд
стекової машини включає всього лише 12 базових інструкцій (табл. 3). Мнемонічне
позначення команд (фактично, мова асемблера) стекової машини прийнято
запозичувати з FORTH-системи. Всі команди унікальні для стекової архітектури і
гранично прості. Їх можна пояснити навіть восьмилітній дитині (особистий досвід
автора). До речі, опікуни сучасної освіти і просвіти, скільки можна калічити
бідолашних дітей навчанням нікому не потрібній і абсолютно бездарній мові Basic?
|
Таблиця 2. Характеристики програми емуляції команди віртуальної машини Java IADD для різних процесорів |
||||
|
Показник |
Стекова машина |
Power РС, код оптимізований |
Pentium, код оптимізований |
М680х0, код оптимізований |
|
Довжина, байт |
1 |
16 |
10 |
2 |
|
Кількість інструкцій |
1 |
4 |
3 |
1 |
|
Пам'ять, цикл |
0.25 |
5 |
3.5 |
1.5 |
Ті,
кому відома мова асемблеру будь-якого мікропроцесору, відразу можуть зрозуміти
переваги стекової машини. Іншим доведеться прийняти на віру слова автора. У
будь-якому мікропроцесорі «класичної» архітектури виклик підпрограми, наприклад,
пов'язаний зі значними витратами: по-перше, необхідно зберегти значення всіх
регістрів процесору, по-друге, — зберегти адресу повернення в заздалегідь
організованому стеку, по-третє, — стежити у всій програмі за цілісністю стеку
повернень. У стековій машині значення регістрів зберігати не потрібно. Їх просто
немає. Створювати стек повернень теж не потрібно. Він є. Єдине, що потрібне, —
мінімально використовувати стек повернень не за прямим призначенням для
забезпечення високої надійності програми. Очевидно, що швидкий виклик підпрограм
— сильна сторона стекових машин. Саме тому вони широко застосовуються для
створення систем реального часу, критичних до надійності коду.
СТЕКОВІ МАШИНИ «В МЕТАЛІ»
Сучасний етап створення апаратних реалізації стекових машин безпосередньо
пов'язаний з ім'ям Чака Мура. Окрім прекрасної програмної реалізації віртуальної
стекової машини FORTH, Myp створив систему проектування великих інтегральних
мікросхем OKAD (природно, написану на FORTH) і з її допомогою спроектував
декілька дуже вдалих стекових машин, які і сьогодні серійно випускаються. До них
відноситься сімейство мікросхем F21 — 20-бітова стекова машина з продуктивністю
80 MIPS (пригадайте про ефективність командної системи стекової машини — це
дійсно дуже висока продуктивність). Окрім ядра процесора, на кристалі F21
розміщені схеми формування повного телевізійного сигналу у форматі NTSC,
підсистема обробки аналогових сигналів, бітовий процесор з підсистемою бітового
вводу/виводу, паралельний порт, годинник реального часу і ПЗП для початкового
завантаження. Надзвичайно зручна і вбудована підсистема програмно-керованого
інтерфейсу з оперативною пам'яттю/ПЗП практично будь-яких типів. Процесор
підтримує до 1 MB оперативної пам'яті і розміщений в корпусі JLCC з 68 виводами.
|
Таблиця 3 |
Базові команди канонічної стекової машини |
||
|
Стек даних до |
Команда |
Стек даних після |
Виконувані дії |
|
AN |
! |
|
Знімає із стеку даних А і N. Записує в оперативну пам'ять N за адресою А |
|
A |
@ |
N |
Знімає із стеку даних А. Кладе на стек даних N з елементу оперативної пам'яті з адресою А |
|
A |
>R |
|
Знімає із стеку даних число А і кладе його на стек повернень |
|
|
R> |
A |
Знімає із стеку повернень число А і кладе його на стек даних |
|
N |
DUP |
NN |
Кладе на стек даних копію N, яке знаходиться на вершині стеку даних |
|
NM |
DROP |
M |
Видаляє N зі стеку даних ; (верхнє значення стеку даних) |
|
NM |
OVER |
MNM |
Кладе на стек даних копію елементу, що знаходиться під верхнім елементом |
|
NM |
SWAP |
MN |
Міняє місцями два верхні елементи стека даних |
|
N |
IF addr |
|
Знімає із стеку даних N, якщо N рівне нулю, управління передається на комірку оперативної пам'яті з адресою addr |
|
|
CALL addr |
|
Кладе на стек повернень адресу наступної команди і передає управління на комірку оперативної пам'яті з адресою addr |
|
|
EXIT |
|
Знімає зі стеку повернень addr і передає управління на комірку оперативної пам'яті з адресою addr |
|
|
LIT N |
N |
Кладе на стек даних за командою комірки значення з наступної оперативної пам'яті |
|
MM |
+ |
D |
Знімає зі стеку даних N і M, кладе на стек даних їх суму D |
Вдалою була і розробка процесору з гучною назвою SH-ВООМ. Ядро цього 32-бітового
процесору ліцензовано компанією Patriot Scientific (США) і після модифікації
використовується в серійному мікропроцесорі PSC 1000 — на сьогоднішній день,
мабуть, найцікавішому для вбудовуваних і мікрообчислювальних систем для Java.
Він так само, як і F21, включає деякі корисні додаткові елементи: бітовий
процесор вводу/виводу, підсистему управління динамічним ОЗУ.
Більшість же стекових машин реалізовувалися і реалізуються до цього дня завдяки
властивій ним простоті на основі так званої програмованої логіки (програмованих
логічних матриць — PLM). Наприклад, створений в лабораторії прикладної фізики
Університету Джона Хопкин-са процесор FRISC 3 — чисто 32-розрядна стекова машина
— «вмістився» в кристалі з 35 тис. транзисторів. Швидкодія сучасних PLM, що
досягає 200 MHz, і властива стековим машинам висока продуктивність, а також
доступність процесів проектування і виготовлення (не потрібні ні вартістю в
багато мільйонів програмно-апаратні комплекси САПР, ні високочисті приміщення і
вакуумне устаткування) відкривають несподівану перспективу появи альтернативних
freeware-процесорів. Під ними розуміються відповідна «маска» програмування
заводський «чистою» PLM і відкритий опис реалізації процесора. Оскільки деякі
сучасні PLM допускають неодноразове програмування, можна автоматично вирішити
питання модернізацій (включаючи розширення системи команд) і усунення помилок в
проекті без заміни власне процесору.
ЧОМУ СТЕКОВІ МАШИНИ НЕ НАБУЛИ ШИРОКОГО ПОШИРЕННЯ?
Дійсно, архітектура стекових машин проста і ефективна, реалізація їх не вимагає
великих витрат. Але жоден з тих, що мали галасливий комерційний успіх
мікропроцесорів не був стековим. Найімовірніше, на початку своєї «кар'єри»
стекові машини не отримали розповсюдження в зв'язку з високою вимогливістю до
пропускної спроможності підсистеми оперативної пам'яті. Для процесорів
«класичної» архітектури ці вимоги м'якші. Природно, розвиток пішов шляхом
найменшого опору. Для стекової архітектури залишилася вузька і специфічна ніша —
високонадійні системи реального часу. Можливо, ситуація змінилася б на краще,
якби Чак Мур працював в Intel приблизно тоді, коли там «народжувалося» ядро
всієї архітектури х86 — процесор i8086. Сьогодні ж масовий перехід до стекової
архітектури просто неможливий з комерційної точки зору: у технократичній гонці
виробники процесорів витратили такі суми на вдосконалення своєї архітектури і
довели їх показники до такого рівня, що перехід на могутні десятидоларові
процесори повністю «висадить у повітря» індустрію напівпровідників.
ЯКИМ БУДЕ СТЕКОВИЙ ПРОЦЕСОР 2000 г.?
Природно, — 64-розрядним, з вбудованою підсистемою управління віртуальною
пам'яттю, з тактовою частотою порядка 200 MHz, реалізацією архітектури SIMD
(одна інструкція — багато даних), із ступенем інтеграції не більше 1 млн
транзисторів, з роздрібною ціною порядка $15-20. Шкода тільки, що персонального
комп'ютера на такому процесорі ми купити ніколи не зможемо.
Р. S.: Про Z80 І СЬОГОДНІШНЮ ДОЛЮ ЧАКА МУРА
А причому тут, власне, стародавній восьмибітовий комп'ютер (з процесором Zilog
Z80), про який я згадував на початку статті? Річ у тому, що єдина система, з
якою на ньому можна було із задоволенням працювати, був ... той самий FORTH.
Саме завдяки спогадам про майже естетичне задоволення від програмування в FORTH
і народилася ця стаття.
Чак Мур в даний час є засновником, власником і головним ідеологом страшно
засекреченої фірми iTVc. Слід зазначити, що в числі її партнерів і спонсорів
знаходиться зовсім не маленька корпорація Sanyo. Про iTVc відомо зовсім мало —
компанія розробляє персональну інформаційну систему нової (читай — стекової)
архітектури. Відома і орієнтовна ціна — до $100. Отже, стекові машини, можливо,
чекає несподіване майбутнє.
Автор -
А. Зубинський
Серпень, 20, 1998 року
©Издательский
Дом ITC