Язык Форт и его реализации


         

Многозадачный режим


Запуская на исполнение какое-либо форт-слово, программист имеет возможность исполнить следующее только по завершении исполнения предыдущего. Если исполнение данного слова требует значительного времени счета, то длительные перерывы в диалоге создают определенное неудобство. Ввиду этого представляется весьма привлекательной идея многозадачной форт-системы, в которой программист может создавать фоновые задачи и запускать их на исполнение, не прерывая диалога. Текстовый интерпретатор такой системы, обеспечивающий диалог, является одной из задач и разделяет центральный процессор наряду с другими задачами. Идея многозадачного режима привлекательна еще и тем, что разные задачи могут разделять значительную часть кода — практически все ядро форт-системы. Из стандартных слов только системные переменные (STATE, BASE и другие) и списки слов (FORTH, ASSEMBLER) не могут одновременно участвовать в нескольких вычислительных процессах (задачах), поскольку их код (значение поля параметров) в процессе работы может изменяться. В то же время вся остальная часть кода форт-системы, включая все слова, определенные через двоеточие и CONSTANT, в процессе работы не меняется и может даже размещаться в постоянной оперативной памяти (ПЗУ). Чтобы снять это ограничение, во многих реализациях выделены особая область для размещения значений, которые могут изменяться во время счета. Эта область называется пользовательской и обычно располагается в конце адресного форт-пространства рядом со стеками и буферным пулом. Распределение памяти внутри пользовательской области выполняет сам программист через определяющее слово USER (пользовательский):

: USER ( N:СМЕЩЕНИЕ-> ) CREATE , DOES> ( PFA->A:АДРЕС) @ U0 + ;

По характеру использования это слово аналогично CONSTANT; значение, которое оно снимает со стека и компилирует в поле параметров определяемого слова, представляет собой смещение от начала пользовательской области. При исполнении такого слова на стеке будет оставлен соответствующий адрес (слово U0, использованное в определении слова USER, дает адрес начала пользовательской области).


Содержание  Назад  Вперед