Кронос: семейство процессоров для языков высокого уровня

Д.Н. Кузнецов, А.Е. Недоря, Е.В. Тарасов, В.Э. Филиппов
Аннотация
Семейство процессоров КРОНОС разработано в Вычислительном центре СО АН СССР в рамках проекта МАРС (Модульные Асинхронные Развиваемые Системы).
Цель разработки - создание универсального процессора с аппаратной поддержкой языков высокого уровня для конструирования ЭВМ открытой архитектуры: от встроенных микро-ЭВМ и однопроцессорных рабочих станций до многопроцессорных ЭВМ класса супер-мини. Здесь дается обзор архитектуры процессоров и операционной системы для них.

КРОНОС - общее название семейства 32-разрядных процессоров, предназначенных для создания микро- и мини-ЭВМ.

Архитектура процессоров КРОНОС ориентирована на поддержку языков программирования высокого уровня (Си, Модула-2, Паскаль, Оккам и т.п.), что позволяет реализовать новейшие концепции в области использования ЭВМ.

В качестве базового языка разработки был выбран язык Модула-2, созданный Н.Виртом в 1975 г. на базе языков Паскаль и Модула [1]. Унаследовав лучшие черты языка Паскаль, Модула-2 имеет ряд отличительных особенностей, которые делают ее наиболее пригодной для разработки и реализации программного обеспечения, отвечающего современным требованиям. К этим особенностям относятся:

  1. модульность (введено понятие модуля и возможность его разбиения на определяющую и реализующую части);
  2. развитые структуры данных и управления;
  3. статическая типизация;
  4. наличие процедурных типов, что позволяет динамически параметризовать процедуры внешними действиями;
  5. наличие средств программирования низкого уровня, позволяющих ослабить жесткий контроль типов и отображать структурные данные на память.

Авторами был использован опыт разработки персональной ЭВМ Lilith, выполненной под руководством Н.Вирта в Высшей технической школе в Цюрихе, но многие решения были приняты достаточно независимо. Так, при почти неизменном наборе команд доступа к значениям в оперативной памяти, арифметико-логических операций и структур управления, была существенно переработана архитектура взаимодействия процессов, прерываний, адресации и работы с внешними устройствами. Много упрощений достигнуто за счет 32-разрядности процессора.

Наличие 32-разрядного машинного слова позволяет использовать процессоры семейства для решения вычислительных задач. Широкое адресное пространство (до 4 миллиардов слов) дает возможность создания виртуальной памяти для объектно-ориентированных моделей вычислений и тем самым обеспечивает разработку систем искусственного интеллекта.

Аппаратная поддержка прерываний по событиям, по синхронизации процессов, а также компактность кода программ обеспечивают успешное применение процессоров семейства КРОНОС в системах реального времени.

Архитектура процессоров Кронос

Архитектура процессоров КРОНОС отлична от традиционных. К основным отличительным чертам можно отнести следующие:

  1. вычисление выражений производится на быстром аппаратном стеке небольшой фиксированной глубины c сохранением содержимого стека при вызове процедур-функций и переключении процессов;
  2. код и область данных любого процесса разделены, следствием чего является повторновходимость всех программ и даже их отдельных частей (модулей);
  3. отказ от абсолютной адресации даже в сегменте кода. Наличие таблицы смещения начала процедур упрощает их вызовы;
  4. развитые виды адресации отражают понятия современных языков программирования. Имеется адресация локальных, глобальных, внешних объектов и объектов статически вложенных процедур;
  5. запатентованный метод межмодульной адресации позволяет организовать динамическую загрузку-связывание-исполнение программ;
  6. имеется развитый аппарат работы с мультизначениями.

Перейдем к более подробному описанию особенностей КРОНОС-архитектуры. Для этого потребуется ввести некоторые понятия.

Программа, исполняемая в текущий момент процессором, называется процессом. Процесс состоит из следующих компонент:

  1. таблицы загруженых в данный момент сегментов кода раздельно скомпилированных модулей [DFT];
  2. глобальной области данных [G];
  3. сегмента кода [F];
  4. области строковых констант [STRINGS];
  5. процедурного стека (П-стек) [P].

В скобках [ ] указаны базовые регистры, относительно которых происходит адресация внутри компонент.

DFT (data frame table) поддерживает динамическое связывание отдельно скомпилированных модулей.

П-стек, кроме того, размечен следующими указателями:

  • L - указатель на начало локальной области данных исполняемой процедуры;
  • S - начало свободной части П-стека;
  • H - ограничитель П-стека (предел увеличения S).

Переполнение П-стека (перекрытие S и H) отслеживается аппаратно с возбуждением соответствующего прерывания.

В КРОНОС-архитектуре поддерживаются следующие способы адресации: локальный, глобальный, внешний, промежуточный и косвенный.

Промежуточный способ адресации представляет собой обращение к нелокальным переменным внутри процедуры и осуществляет проход по статической цепочке процедур.

Значения всех структурных переменных (массивов и записей) представлены косвенно с помощью ссылки на начало выделенного им участка памяти. Структурные компоненты таких значений расположены внутри них непосредственно. Таким образом удалось ограничить максимальный размер статики процедуры до 256 слов, т.е. процедура в терминах Модулы-2 не может содержать более 256 локальных переменных. Это кажется нам вполне разумным ограничением.

Выражения вычисляются на арифметическом стеке - А-стеке. Компилятор статически отслеживает переполнение А-стека и в случае необходимости может сохранять его содержимое в памяти и восстанавливать его.

M-код представляет собой поток байтов, причем по коду операции всегда однозначно известно, сколько байтов непосредственных операндов следует за ним. Большинство команд однобайтовые. Извлечение команд и операндов из потока производится с одновременным продвижением вперед счетчика команд PC.

M-код имеет четыре модификации длины непосредственного операнда: полубайтовый операнд, когда последние 4 бита команды интерпретируются как операнд; байтовый, двухбайтовый и четырехбайтовый операнды, представляемые следующими за кодом команды байтом, двумя или четырьмя байтами соответственно.

Система команд построена так, что наиболее часто производимые операции имеют более короткий код, что увеличивает скорость и снижает размер кода. Так, загрузку на стек выражений чисел 0,1,...,15 выполняют команды LI0, LI1, ... , LI15 – Load Immediate, занимающие вместе с операндом один байт кода, в то время как для загрузки на стек числа 153 используется уже команда LIB - Load Immediate Byte, занимающая вместе с операндом два байта кода.

Процедуры представлены своим номером из диапазона 0...255. Кодовый сегмент содержит таблицу смещений процедур относительно его начала. Поэтому команды вызова процедур также имеют длину один (для процедур с номерами 0...15) или два байта.

Механизм передачи параметров процедурам может быть различным. Если у процедуры менее 7 параметров, их передача осуществляется через арифметический стек, что сокращает расходы на обработку параметров в точке вызова.

Все арифметико-логические операции работают над одним или двумя верхними элементами стека и помещают результат на место аргументов.

В начале П-стека всегда хранится так называемый дескриптор процесса, представленный копией всех регистров в момент последнего переключения на процесс. Имеется команда переключения процессов, которая сохраняет текущее состояние регистров в дескрипторе задерживаемого процесса, извлекает состояние регистров возобновляемого процесса и продолжает работу в возобновленном процессе. Этот аналог переключения сопрограмм служит мощным средством для организации мультипрограммной работы и синхронизации.

Все прерывания обрабатываются как переключения процессов, указатели которых находятся в соответствующем номеру прерывания элементе массива векторов прерываний.

Семейство процессоров Кронос 2.X

В настоящее время семейство 2.X включает три разработки: 2.2, 2.5, 2.6. У всех процессоров одна система команд; они различаются лишь по внутреннему функциональному устройству, быстродействию и конструктивному исполнению.

Логику функционирования всех блоков процессора реализует блок микропрограммного управления. Две шины данных объединяют арифметико-логическое устройство, блок регистров, быстрый аппаратный стек на 7 слов, устройство выборки команд и буфер связи с шиной ввода/вывода.

Двухшинная внутренняя структура процессора позволяет выполнять бинарные операции на стеке (сложение, вычитание, логические И, ИЛИ и т.д.) за один такт. Это существенно повышает производительность процессора на основном наборе команд. Микропрограммное управление упрощает устройство процессоров и дает возможность реализовать сложные команды.

Все узлы процессоров выполнены на отечественных ТТЛ и ТТЛШ микросхемах широкого применения серий 155, 531, 1802, 1804, 589, 556.

Кронос 2.2 является первой реализацией изложенных выше архитектурных концепций. Процессор выполнен в виде платы в конструктиве ЭВМ "Электроника-60". Кронос 2.2 полностью совместим со всеми устройствами, поддерживающими протокол обмена по шине Q-bus 22.

Процессор оперирует 32-разрядными словами. Поскольку шина 16-разрядная, доступ к слову данных в памяти происходит за два обращения по шине Q-bus 22. АЛУ Кронос 2.2 - 20-разрядное. Адресная арифметика обрабатывается за один такт, а данные – за два такта. Такая внутренняя организация позволила разместить весь процессор на одной плате при существующей элементной базе.

Объем прямо адресуемой оперативной памяти процессора до 4 Мбайт, тактовая частота - 4 МГц, производительность – 600 тысяч операций в секунду над стеком.

В отличие от 2.2, Кронос 2.5 является полностью 32-разрядным. Он выполнен в виде двух плат в конструктиве Intel. Интерфейс с внешними устройствами реализуется через шину Multibus-1. Еще одним существенным отличием является наличие локальной памяти объемом 0,5-2 Мбайт - в зависимости от применяемых микросхем. Тактовая частота процессора - 3 МГц, производительность - 1 млн простых операций в секунду над стеком.

Кронос 2.6 - дальнейшее развитие процессора 2.5. Он отличается конструктивным исполнением и гибкостью реконфигурации для конкретного применения. Процессор может быть встроен как в отдельную мини-ЭВМ, так и в мультипроцессорный комплекс.

Кронос 2.6 выполнен в конструктиве Евромеханика. Размер плат 233,3 х 220 мм (Е2). В минимальный комплект входят: плата обрабатывающего тракта (АЛУ, стек, регистры), плата микропрограммного управления, плата локальной памяти (0.5-2 Мбайт), плата адаптера шины ввода/вывода. Все устройства объединены локальной синхронной 32-разрядной шиной. Сам процессор не зависит от конкретной шины ввода/вывода. Настройка на конкретную шину производится с помощью соответствующего адаптера. К локальной шине могут быть добавлены платы памяти, адаптера межпроцессорной связи, контроллера к локальной сети и накопителя на магнитных дисках, плата памяти кода (при разделении плат кода и данных), bitmap-дисплея, арифметического вычислителя и других устройств, расширяющих возможности процессора.

Тактовая частота процессора - 3 МГц, производительность - 1,5 млн/сек операций над стеком.

Операционная система

ЭВМ с процессорами Кронос 2.2, Кронос 2.5 и Кронос 2.6 работают под управлением операционной системы Excelsior, предназначенной для решения широкого круга задач.

При создании ОС Excelsior разработчики руководствовались следующими принципами:

  1. открытость системы;
  2. модульность;
  3. интегрируемость результатов;
  4. удобство интерфейса.

Раскроем их содержание.

Открытость системы

Необходимость обеспечить комфортабельную работу программиста выдвигает требование открытости системы. Под открытой понимается система, в которой:

  1. для работы любого ПО необходимы только те программные и аппаратные средства, которые задействованы в нем непосредственно. Поясним на примере. Если программист создает программу для встроенного применения, которое не предполагает работу с файлами и дисковой памятью, и не нуждается в имеющейся файловой системе, ему гарантируется возможность получить способный функционировать как на рабочем месте, так и в целевых условиях программный продукт, в который не входит файловая система и все к ней прилагающееся.
  2. любое созданное программистом ПО автоматически наращивает программные средства и входит в их состав на равных правах с базовым ПО.

Модульность

Модульность программного обеспечения достигается прежде всего модульными свойствами языка Модула-2.

Модульность ПО поддерживает, в свою очередь, динамическую загрузку задач. Динамическая загрузка позволяет исключить из цикла редактирование - компиляция - запуск этап сборки задачи и тем самым значительно ускорить этот цикл. Кроме того, динамическая загрузка избавляет от необходимости хранить многочисленные копии кода часто используемых модулей, например, библиотек. А отсутствие многочисленных копий кода, в свою очередь, дает ощутимую экономию внешней памяти (в сравнением с "линкованием" со стандартными библиотеками традиционных систем).

Интегрируемость

Примером внутренней интегрируемости являются все программные средства ОС Excelsior, построенной как модульная расслоенная иерархическая система. Опыт эксплуатации машин КРОНОС как автоматизированных рабочих мест программиста в различных коллективах показал, что большая часть создаваемого программистами ПО выглядит не только как самостоятельный программный продукт, но и как набор библиотек, реализующих абстрактные типы данных. Эти библиотеки можно использовать в другом программном обеспечении, они постоянно пополняют набор "строительных материалов", из которых программисты КРОНОСа складывают свои программы.

Удобство интерфейсов

Удобство интерфейсов - главнейший принцип из положенных разработчиками во все разрабатываемые системы. Поскольку в условиях оснащенности оборудованием различных типов не удается жестко ориентировать ПО на тот или иной его тип, нужны самонастраивающиеся средства, максимально полно использующие возможности каждого конкретного вида оборудования, обслуживающего рабочее место программиста. Причем недопустимо просто минимизировать возможности терминалов, клавиатур и других устройств, поскольку это отрицательно скажется на удобстве работы программиста.


В ОС Excelsior эти проблемы преодолеваются с помощью хорошо зарекомендовавшей себя техники абстрактных типов данных. Вся работа с конкретными устройствами инкапсулирована в различные реализации одного и того же определяющего модуля, поддерживающего интерфейс всех программных средств с устройствами такого класса. Поэтому как сама система, так и прикладное ПО оперируют с устройствами только в терминах такого определения. Этим дополнительно достигается полное единообразие работы пользователя с различными (даже еще не знакомыми ему) программными средствами. Этому способствует также возможность в любой момент работы единообразным для всех программных средств способом получить толковую и понятную подсказку на родном для программиста языке.

В заключение остается заметить, что все программные средства ОС Excelsior ориентированы на мультипроцессное, многозадачное и многопользовательское применение. Благодаря модульной архитектуре спектр применения процессоров КРОНОС широк - от встроенных систем реального времени до супермини-ЭВМ. Самое замечательное свойство – легкость программирования (programmability) - делает Кронос незаменимым в приложениях, требующих постоянного развития и изменения программного обеспечения.

Литература

  1. N.Wirth Programming in Modula-2. Third, Corrected Edition. Springer-Verlag. Berlin, Heidelberg, New-York, 1985.
  2. N.Wirth A Fast and Compact Compiler for Modula-2. ETH. Zurich, 1985.
  3. Кузнецов Д.Н., Недоря А.Е., Осипов А.Е., Тарасов Е.В. Процессор КРОНОС в мультипроцессорной системе. В сб.: Вычислительные системы и программное обеспечение. ВЦ СОАН СССР, Новосибирск, 1986, c. 13-19.
  4. Кузнецов Д.Н., Недоря А.Е. Проектирование таблиц символов для языков со сложными правилами видимости. В сб.: Методы трансляции и конструирования программ. ВЦ СОАН СССР, Новосибирск, 1984, с. 153-158.
  5. Васекин В.А., Кузнецов Д.Н., Недоря А.Е., Тарасов Е.В. КРОНОС: аппаратная и программная поддержка языков высокого уровня. Тезисы докладов Всероссийского методического совещания-семинара по обмену опытом использования ЭВМ в учебной и научно-исследовательской работе студентов. Новосибирск, 1986, с. 92-94.
  6. Кузнецов Д.Н., Недоря А.Е. Симфайлы как интерфейс операционной системы. В сб.: Информатика. Технологические аспекты. ВЦ СОАН СССР, Новосибирск, 1987, с. 68-75.
  7. Кузнецов Д.Н., Недоря А.Е., Тарасов Е.В., Филиппов В.Э. КРОНОС - автоматизированное рабочее место профессионального программиста. В сб.: Автоматизированное рабочее место программиста. Новосибирск, 1988 (в печати).