Forth
http://fforum.winglion.ru/

5.1 Базовая модель Форт-Машины
http://fforum.winglion.ru/viewtopic.php?f=36&t=2233
Страница 1 из 8

Автор:  WingLion [ Ср авг 12, 2009 21:29 ]
Заголовок сообщения:  5.1 Базовая модель Форт-Машины

Вариант от mOleg:

Изображение
Форт-машина основана на 0-операндной модели, то есть в формате команды не кодируются регистры источники и приемники информации. В простейшем случае это четырехрегистровый (R1-R4) процессор, под двумя из регистров (RTOP,SUB) наращены стеки. Два арифметико-логических устройства (АЛУ) обеспечивают преобразование информации, причем, один работает с данными (дАЛУ) и жестко связан со стеком данных и регистром TOS (R4), а второй (аАЛУ) жестко связан с указателем интерпретации (R2), и отвечает за операции формирования адресов в памяти.
TOS – (top of stack) не смотря на общепринятое название является регистром аккумулятором, а так же адресным регистром, с участием этого регистра выполняются все операции над данными.
SUB – (subtop) это верхний элемент стека данных, который работает совместно с регистром TOS в случае двухоперандных операций с dALU и памятью. Под данным регистром наращен стек данных, кэширующий необходимые данные.
IP – (interpretation\instruction pointer в зависимости от того ФВМ или ФМ) указатель на следующую (еще не исполненную) команду; либо литеральные данные, содержащиеся в коде за текущей командой.
RTOS – верхний элемент стека возвратов, хранит адрес возврата из текущей процедуры. Под данным регистром наращен стек возвратов, хранящий трассу возвратов из процедур.
Управляющее устройство включает в себя дешифратор команд, устройство синхронизации, другие необходимые управляющие механизмы (в случае ФВМ оно фактически отсутствует).
ФМ может работать с различными моделями памяти и различными разрядностями данных, но в простейшем случае используется плоская модель памяти и одинаковые разрядности данных и адресов. Пространство данных стеков так же может быть расположено в любом месте, в том числе в общей памяти, но наиболее выгодно выносить каждый из стеков в отдельное адресное пространство. Доступ к стекам может вестись как только с вершины, так и произвольным образом в зависимости от методики реализации ВМ, однако, базовый набор слов предполагает, что доступ к стеку ведется только с одного его конца (то есть с вершины стека).

В классическом случае любая команда выполняется за два такта (1 цикл = 2 такта ), на первом такте производится чтение очередной команды, на которую указывает IP (при этом IP инкрементируется на размер команды), на втором команда исполняется, что на два такта меньше по сравнению с RISC архитектурой. Данные всегда берутся со стека данных и туда же возвращаются, поэтому этапы дешифрации команды и сохранения результата совмещаются, соответственно, с чтением команды, и выполнением команды. Команды Форт-процессора не являются элементарными, и могут одновременно задействовать множество регистров и исполнительных устройств.

Формат команды выглядит следующим образом:
Opcode [Literal]
Опкод занимает 1 cell адресного пространства, за которым может следовать литеральное поле, выбираемое на втором такте цикла (команды LIT BRANCH CALL и подобные).
В опкоде не кодируются источники и приемники команд в явном виде, т.к. каждая команда работает с фиксированными, заранее известными регистрами, стеками и исполнительными устройствами, то есть обычно используется 0-операндная модель.
Каждое новое определение (последовательность опкодов, составляющих аналог подпрограммы в других языках программирования) так же является опкодом. Таким образом, набор команд процессора как бы расширяется с каждым новым определением (то есть во время работы количество команд растет). Однако при этом появляется деление на примитивы ( т.е. команды, исполняемые процессором в рамках одного цикла), и высокоуровневые определения, выполнение которых производится за множество тактов.
Вне зависимости от того, на реальном процессоре, либо на ВМ выполняется программа, базовый формат команды остается похожим, на описанный выше вариант.

Вариант WingLion:

Изображение

Автор:  mOleg [ Ср авг 12, 2009 22:44 ]
Заголовок сообщения: 

пока скопировал старое описание, которое явно надо править согласно рисунку

По сути Форт-Машина (ФМ) это модель четырехрегистрового проецессора
IP - указатель на следующую команду\данные
RTOS - вершина стека возвратов
TOS - регистр общего назначения\аккумулятор\флаговый
SUB - регистр общего назначения
Только перечисленные регистры доступны программно, под двумя из них: IP
и SUB нарощены стеки. Под IP - стек возвратов с вершиной в RTOP, а под SUB -
стек данных, причем, регистр SUB может быть верхним регистром в стеке данных,
а может быть и независимым регистром общего назначения.

В простейшем случае ФВМ работает с "плоской" моделью памяти, когда в
одном и том же адресном пространстве находится код, данные, содержимое обоих
стеков (стека данных, и стека возвратов), а так же пространство имен. ФВМ
организуется как минимум на двух стеках: стек данных, и стек возвратов (хотя
их может быть больше), данные и код перемешаны друг с другом в произвольном
порядке. Доступ к стекам может вестись как только с вершины, так и
произвольным образом в зависимости от методики реализации ВМ, однако, базовый
набор слов предполагает, что доступ к стеку ведется только с одного его конца
(то есть с вершины стека).

ФВМ включает в себя как минимум следующие регистры:
IP - хранит адрес следующей команды, которая будет исполняться после
выполнения текущей команды. Регистр IP может быть недоступен.
TOS - хранит значение верхнего элемента стека данных
SUB - хранит значения второго элемента стека данных от его вершины
RTOS - хранит значение верхнего элемента стека возвратов

Необязательные регистры ФВМ:
TOP - хранит указатель на вершину стека данных
RTOP - хранит указатель на вершину стека возвратов

Так же возможно существования вспомогательных регистров различного назначения,
к примеру: TEMP, ADDR и подобные им.

Автор:  вопрос [ Ср авг 12, 2009 23:04 ]
Заголовок сообщения: 

Цитата:
Только перечисленные регистры доступны программно, под двумя из них: IP
и SUB нарощены стеки. Под IP - стек возвратов с вершиной в RTOP, а под SUB -
стек данных,
Олег, я прошу прощения. но по рисунку кажется получается наоборот: стек возвратов ближе к SUB ,
а данных к RTOP.
И вообзе - раньше были более выразительные цветные рисунки, а это какой-то чёрно-белый схемтизм

Автор:  mOleg [ Ср авг 12, 2009 23:13 ]
Заголовок сообщения: 

вообще, наши рисунки хоть и похожи, но все же разные, поэтому вопросы надо еще утрясать.

поэтому
вопрос писал(а):
Цитата:Только перечисленные регистры доступны программно, под двумя из них: IP
и SUB нарощены стеки. Под IP - стек возвратов с вершиной в RTOP, а под SUB -
стек данных, Олег, я прошу прощения. но по рисунку кажется получается наоборот: стек возвратов ближе к SUB ,
а данных к RTOP.

надо переписывать.
но, вобщем так получается, что SUB может быть вообще не вершиной стека, а еще одним регистром (к примеру, если поддерживать команду ROT)
что же касается RTOP, то он полностью относится к стеку возвратов и в отдельный регистр его выделять бессмысленно.

вопрос писал(а):
И вообзе - раньше были более выразительные цветные рисунки, а это какой-то чёрно-белый схемтизм

это не окончательный вариант. критикуйте, предлагайте !!!:)

Автор:  вопрос [ Ср авг 12, 2009 23:24 ]
Заголовок сообщения: 

Цитата:
надо переписывать.
но, вобщем так получается, что SUB может быть вообще не вершиной стека...
Ответил в личку

Автор:  mOleg [ Ср авг 12, 2009 23:36 ]
Заголовок сообщения: 

да, вопрос прав, перепутаны подписи стеков местами. Испавим 8)

Автор:  WingLion [ Чт авг 13, 2009 05:59 ]
Заголовок сообщения: 

схемы обновлены
1. Подписи исправлены, картинки раскрашены,
2. Добавлен компас для однозначности определения, какое ALU южное, какое северное.
3. Добавлены связи между TOP и RTOP

Автор:  вопрос [ Чт авг 13, 2009 15:15 ]
Заголовок сообщения: 

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

тут, правда отсутствуют регистры и стеки в явном виде, и может быть схема не совсем удачна :shuffle; , но заманчивая цель (схематически охватить "форт вообще") привела вот к этому рисунку
левая часть рисунка схематически изображает код, точнее, зависимости внутри кода, правая часть - данные

стрелки изображают зависимости, т.е. идя по стрелке "задом наперёд" мы ответим на вопрос "из чего состоит" или "на что сориентировано". Так, например, стрелка 6 (посредине) отображает, что
"слова для работы со стеком сориентированы на то, как организован стек" (и стек ли это в буквальном смысле слова)
стрелка 7 означает, что
" в форте работа с массивами и другими структурами данных реализуются на базе слов для работы со стеком"
при этом: то, что стрелка 7 направлена не "обратно" говорит, что "стек не есть один из массивов, используемый как стек", т.е. стек в форт системе не моделируется, а входит в "замысел", тогда как массивы и т.п. нуждаются в моделировании, впрочем стрелки 8 и 9 показывают, что их можно включать в замысел при желании (ARRAY как в кварке, где-то я видел очередь)
Изображение

Автор:  mOleg [ Пт авг 14, 2009 00:38 ]
Заголовок сообщения: 

вопрос, вобщем картинка у тебя ничего. Но мы пока ниже находимся.
Вот то, что у тебя в нижнем левом углу разбираем 8)

конечно, не факт, что графическое представление взаимосвязи регистров, памяти, АЛУ, стеков между собой наиболее удобный вариант (тут уже ругался я с Хищником по этому поводу), но в голову пока ничего лучше не приходит.

Собственно в предлагаемом мною наброске предусмотрена трех (можно и больше, но никак не меньше) уровневая структура:

1) основа - это либо виртуальная машина, либо физическая машина и минимальный\оптимальный\выше_оптимального набор команд (примитивов)
2) компилятор
3) транслятор и утилиты

замечу, что от форта часто может оставаться только первый уровень, то есть код на форт-процессор, написанный на сях, или код, написанный на чем угодно под работу внутри ФВМ.
Второй уровень, это уже ближе к форту, но формализуется лишь базовая структура форт-системы, которая может быть очень маленькой, влазить, к примеру в 1.5 Кб и стоять на каком-нибудь датчике, позволяющем только "заливать" предварительно обработанный код (это минимум, может быть все гораздо сложнее, но я пока отталкиваюсь от минимума)
И на третьем уровне уже есть разбор текстов, и прочая, прочая, прочая, то есть особенности уже форт-системы, к примеру уровня СПФ, Swift, WIN32 и пр.

Автор:  Hishnik [ Пт авг 14, 2009 01:21 ]
Заголовок сообщения: 

mOleg писал(а):
1) основа - это либо виртуальная машина, либо физическая машина и минимальный\оптимальный\выше_оптимального набор команд (примитивов)
2) компилятор
3) транслятор и утилиты

Сначала интерпретатор, потом компилятор. Интерпретатор - это ввод и поиск, а компилятор - еще и модификация памяти после ввода и поиска. Интерпретатор может присутствовать в компактных реализациях, которые тем не менее могут управляться непосредственно текстом на Форте с внешнего источника.

Автор:  mOleg [ Пт авг 14, 2009 01:29 ]
Заголовок сообщения: 

Хищник писал(а):
Сначала интерпретатор, потом компилятор. Интерпретатор - это ввод и поиск, а компилятор - еще и модификация памяти после ввода и поиска. Интерпретатор может присутствовать в компактных реализациях, которые тем не менее могут управляться непосредственно текстом на Форте с внешнего источника.

Цитата:
Ко второму уровню языка относится все, что позволяет транслировать
исходные тексты и в результате трансляции компилировать исполнимый код и
формировать данные (как статические, так и динамические), однако к данному
уровню не относятся средства связи с пользователем (то есть терминал).
Предполагается, что Форт-среда второго уровня может находиться на удаленном
микроконтроллере, и кто-то другой может посылать данные и исходные тексты для
трансляции по какому-нибудь каналу передачи данных. Все слова, необходимые для
реализации второго уровня языка, не вошедшие в Расширенный набор примитивов
относятся ко второму уровню языка.

вобщем и транслятор тоже

Автор:  вопрос [ Пт авг 14, 2009 10:53 ]
Заголовок сообщения: 

Цитата:
графическое представление взаимосвязи регистров, памяти, АЛУ, стеков между собой наиболее удобный вариант
предположим, что регистров больше ...
уже возникают сложности - куда деть и как встроить в схему доп. регистр?

Автор:  WingLion [ Пт авг 14, 2009 17:09 ]
Заголовок сообщения: 

вопрос писал(а):
предположим, что регистров больше ...
уже возникают сложности - куда деть и как встроить в схему доп. регистр?


a если мне торт захочется, его тоже на схеме предусмотреть?

Автор:  вопрос [ Пт авг 14, 2009 18:56 ]
Заголовок сообщения: 

Цитата:
a если мне торт захочется, его тоже на схеме предусмотреть?

Я на самом деле не против регистров и схем тоже, и те, что есть вполне рабочие, но можно и нужно искать и лучшие решения, потому что не всегда успех у того, кто талантлив, а часто и у того, кто просто постоянно искал и получше.

Автор:  mOleg [ Пт авг 14, 2009 20:56 ]
Заголовок сообщения: 

вопрос писал(а):
Цитата:графическое представление взаимосвязи регистров, памяти, АЛУ, стеков между собой наиболее удобный вариант предположим, что регистров больше ...
уже возникают сложности - куда деть и как встроить в схему доп. регистр?

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

вопрос писал(а):
Я на самом деле не против регистров и схем тоже, и те, что есть вполне рабочие, но можно и нужно искать и лучшие решения, потому что не всегда успех у того, кто талантлив, а часто и у того, кто просто постоянно искал и получше.

все нормально. Вопросы вы задаете вполне понятные.
Количество регистров и исполнительных устройств сверх представленной модели может быть неограниченное количество, но это уже будет сверх базового варианта.

Страница 1 из 8 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/