Каталог статей
перевод 22-32
12 "вершина" стека 2400 большинство стеков растет к низкой памяти Рисунок 4. Пункты на стеке данных Число, с которым сталкивается текстовый переводчик, будет преобразовано в набор из двух предметов и выдвинуто на стек. Дальше объекты данных (такие как определенные ПЕРЕМЕННЫМ и ПОСТОЯННЫМ) выдвигают свои адреса или ценности на стек. Таким образом стек обеспечивает среду коммуникации не только между рутинами, но и между человеком и компьютером. Вы можете, например, поместить числа или адреса на стеке и затем напечатать слова, которые действуют на них, чтобы привести к желаемому результату. Например, печатание: 12 2400 * 45/. ... (a) выдвигает номер 12 на стеке; (b) продвигается 2400 выше этого (см. рисунок 4); © выполняет умножить рутину *, который заменяет оба числа их продуктом; (d) продвигается 45 на стеке; (e) выполняет рутину дележа / который заменяет продукт и 45 withs quo¬tient; и (f) выполняет рутину продукции. ("точка"), которая удаляет и показывает главный пункт стека (фактор). Все числа ставят стек, были удалены, оставляя стек, поскольку это прежде печатало 12. Стандарт Дальше словарь обеспечивает слова для простого manipula¬tion единственных - и операнды двойные длиной на стеке: ОБМЕН, ДУБЛИКАТ, СНИЖЕНИЕ, 2SWAP, и т.д. (покрытый подробно Разделом 2.1). Стек толчка вниз упрощает внутреннюю структуру Дальше и производит естественно рутины переучастника. Мимолетные параметры через стек означают, что меньше переменных нужно назвать, уменьшая объем памяти, требуемый для названных переменных (так же как уменьшая pro¬grammer’s связал домашнее хозяйство). Указатель на вершину (то есть, последний вход) стека пользователя поддержан системой. Есть также указатель на "основание" стека, так, чтобы пустой от стека или условия подземного глубинного потока мог быть обнаружен, и помочь в прояснении стека, если условие аварийного прекращения работы обнаружено. Наиболее Дальше системы проверяют на подземный глубинный поток стека только после выполнения (или попытка выполнить) слово от входного потока (см. рисунок 5). Подземные глубинные потоки, которые происходят в исполнительном судебном приказе, не будут немедленно обнаружены, когда они произойдут, но только когда текстовый переводчик готов разобрать входной поток снова. Обычный результат обнаруженного подземного глубинного потока стека - сообщение: Сложите пустой.followed системным аварийным прекращением работы. Ссылки Манипуляция стека, Системные рутины аварийного прекращения работы Раздела 2.1, Типы данных Раздела 5.3 в примечании стека, операциях по Стеку Раздела B.2, Разделе 2.1 1.1.4 Возвратите Стек Каждый Дальше у системы также есть стек возвращения. В системе, которой мультизадают работу у каждой задачи есть свой собственный стек возвращения. Как стек данных, стек возвращения - список LIFO всей клетки. Это используется для системных функций, но может также быть получено доступ непосредственно приложением. Это обычно служит следующим целям: • Это держит обратные адреса для вложенных определений. • Это держит параметры петли. • Это может использоваться системой в других временных целях; консультируйтесь со своей системной документацией. Поскольку у стека возвращения есть многократное использование, забота должна быть осуществлена, чтобы избежать конфликтов, получая доступ к нему непосредственно. Нет никаких команд для того, чтобы непосредственно управлять стеком возвращения, кроме тех для того, чтобы переместить один или два параметра между стеком данных и стеком возвращения. Максимальный размер стека возвращения для каждой задачи определен в то время, когда задача определена, и остается неподвижной во время операции; типичный размер - 128 клеток. Ссылки Погрузка, Разделы 5.5.1, C.2 Параметры петли, Раздел 4.5 Стек данных, Раздел 1.1.3 Передачи между стеками, Разделом 2.1.3 1.1.5 Текстовый Переводчик Другое название текста места проживает, в то время как текстовый переводчик обрабатывает это, область разбора, потому что процесс вовлекает парсинг текста во входной поток, ища слова, отделенные местами. Текстовый переводчик повторяет следующие шаги, пока область разбора не исчерпана, или ошибка произошла: 1. Старт в начале области разбора, пропустите ведущие места и извлеките слово из строки ввода, использующей пространство charac¬ter (ASCII 32) как разделитель. Заставьте указатель переводчика указывать на первый характер вне разделителя. Если не было никакого разделителя (конец входного буфера был достигнут), установите указатель переводчика до конца области разбора, чтобы закончить операцию. Если текст прибудет из текстового файла, то переводчик будет рассматривать любые неграфические характеры как “whitespace” (эквивалентный символу пробела). 2. Ищите словарь имя определения, соответствующее входному слову (включая чувствительность к регистру, если применимый). Если определение соответствия найдено, выполните его поведение интерпретации (если в настоящее время в способе интерпретации) или поведение компиляции (если в настоящее время в компилировании способа). Тогда проверьте на подземный глубинный поток стека и, если не было никакой ошибки, возвратитесь к шагу (1); если был подземный глубинный поток стека, аварийное прекращение работы. 3. Если имя определения, соответствующее входному слову, не найдено, попытка преобразовать слово в двоичное число (см. затем sec¬tion). Если это успешно, поместите число в стек данных (если в настоящее время в способе интерпретации); или, если в способе компиляции, соберите кодекс, который, когда выполнено, поместит это число в стек данных (см. определение БУКВАЛЬНЫХ). Тогда возвратитесь к шагу 1. 4. Если ни поиск словаря, ни преобразование числа не успешны, аварийное прекращение работы. Например, печатание: ДОПОЛНИТЕ 100 СВАЛОК .causes слово ПОДУШКА, которая будет интерпретироваться от текстового входного буфера. Это будет найдено в словаре и выполнено, возвращая адрес области царапины(описанный в Разделе 3.1.2), чтобы быть выдвинутым на стеке. Тогда последовательность 100 преобразована в число, которое выдвинуто на стеке, и СВАЛКА найдена в словаре и выполнена. Результат состоит в том, чтобы показать 100 байтов памяти, начинающейся в местоположении, данном ПОДУШКОЙ. ВКЛЮЧАЙТЕ и ВКЛЮЧАТЬ-ФАЙЛ временно переадресовывают переводчика к pro¬cess исходному коду от текстовых файлов (Раздел 5.5). Для этого предшествующее положение во входном потоке спасено, и восстановлено после того, как файл полностью обработан. Если ВКЛЮЧАТЬ команда найдена в обрабатываемом файле, указатели на тот входной поток спасены и восстановлены, таким образом, ВКЛЮЧЕНИЕ вложено. Когда текстовый переводчик выполняет слово определения (например, СОЗДАЙТЕ, ПЕРЕМЕННАЯ, или:), определение собрано в словарь. Блок-схему для процесса интерпретации показывают в рисунке 5. ЭКОНОМИТЬ-ВХОД команд и ВОССТАНАВЛИВАТЬ-ВХОД доступны, если Вы хотите вручную направить текстового переводчика к различной области. Они не требуются вокруг стандартных слов, которые переадресовывают переводчика, такого как ВКЛЮЧАТЬ-ФАЙЛ, и ОЦЕНИВАЮТ. Ссылки Текстовые файлы для источника программы, Системных рутин аварийного прекращения работы Раздела 5.5, текстовый переводчик Раздела 5.3 слова, Дисковые блоки Раздела 6.1, Приложение C
1.1.6 Числовой Вход Если текстовый переводчик будет не в состоянии найти слово в словаре, то это попытается преобразовать это в двойное целое число, которое будет выдвинуто на стек. Если нет никакой пунктуации (за исключением дополнительного продвижения минус знак), последовательность действительных цифр преобразована в число единственной клетки, независимо от длины. Если последовательность действительных цифр будет закончена десятичной запятой, то текстовый переводчик преобразует ее в двойную клетку (dou¬ble-точность) число независимо от длины. Двойная точность num¬ber займет две клетки стека данных с высокого уровня частью на вершине. На восьмибитовых и 16-битовых системах целое число единственной точности 16 битов шириной, и целое число двойной точности 32 бита шириной. На 32-битовых системах эти ширины составляют 32 и 64 бита, соответственно. На системах с дополнительными рутинами с плавающей запятой действительные числовые последовательности, содержащие E или e (для образца), будут преобразованы как числа с плавающей запятой occupy¬ing одно местоположение стека с плавающей запятой (см. Раздел 5.8 в этой книге и Вашей документации продукта для деталей). Таблица 1: точность Целого числа и ширина данных о центральном процессоре Ширина Данных о центральном процессоре Дальше Единственная точность Целое число Дальше Двойная точность Целое число 8 битов 16 битов 32 бита 16 битов 16 битов 32 бита 32 бита 32 бита 64 бита
Весь Стандарт Дальше системы будут интерпретировать число с тянущимся периодом как целое число двойной точности, но некоторые, включая тех от FORTH, Inc., будут интерпретировать любое число, содержащее, включал punctua¬tion (см. ниже) в любой позиции целого числа двойной точности. Числа Single¬precision признаны их нехваткой специальной пунктуации. Преобразования воздействуют на строки символов следующего формата: [-] dddd [пунктуация] dddd... разделитель ... где dddd - одна или более действительных цифр согласно текущей основе или корню в действительности для пользователя. Содержание пользовательской ОСНОВЫ переменной всегда используется в качестве корня. Все числовые последовательности должны быть закончены бланком или концом входного потока. Если с другим характером сталкиваются — то есть, характер, который не является ни действительной цифрой в текущей основе, ни пунктуацией, ни whitespace характером (см. глоссарий) — аварийное прекращение работы произойдет. В пределах числа не должно быть никаких мест, потому что пространство - разделитель. На системах, позволяющих вложенную пунктуацию, характеры, показанные в Таблице 2, могут появиться в числе. Продвижение минус знак, если есть должен немедленно предшествовать первой цифре или характеру пунктуации. Таблица 2: Действительные числовые характеры пунктуации Описание характера , запятая . период + плюс - дефис, может появиться где угодно кроме к непосредственному, оставленному наиболее - существенная цифра / разрез : двоеточие
Все характеры пунктуации функционально эквивалентны, включая период (десятичная запятая). Пунктуация не выполняет функции кроме установить флаг, который указывает на его присутствие. Многократные характеры пунктуации могут содержаться в единственном числе; следующий charac¬ter натягивает обоих новообращённых к тому же самому целому числу двойной точности 123456: 1234.56 12,345.6 На некоторых системах характер пунктуации также вызывает цифры, которые следуют за ним, чтобы быть посчитанными с количеством, доступным последующей цифре - слова преобразования частоты ошибок по битам. Немедленно после преобразования числа, на многих системах, количество цифр направо от самого правого punctu¬ation найдено в адресе, данном DPL. Глоссарий ОСНОВА (-a-addr) Ядро Возвратите a-addr, адрес клетки, содержащей текущий конверсионный корень числа. Корень - ценность между 2 и 36, включительно. Это используется для обоих преобразований входа и выхода. ДЕСЯТИЧНОЕ ЧИСЛО (-) Ядро ОСНОВА наборов, таким образом, что числа будут преобразованы, используя корень 10. ВЕДЬМА (-) Основное Расширение ОСНОВА наборов, таким образом, что числа будут преобразованы, используя корень 16. Ссылки Использование текстового переводчика для входа числа, входа Раздела 3.6.1 С плавающей запятой, Раздела 5.8.2 1.1.7 Виртуальная машина с двумя стеками Управление Дальше система представляет программисту виртуальную машину (VM), как процессор. У этого есть два стека толчка вниз, кодекс и пространство данных, Арифметическая Логическая Единица (ALU), который выполняет инструкции, и несколько регистров. Предыдущие секции кратко обсуждают стеки и некоторые аспекты использования памяти в Дальше; эта секция описывает некоторый fea¬tures виртуальной машины как процессор. За эти годы были развиты много подходов к осуществлению Дальше VM. У каждого есть особенности, которые оптимизируют VM для физического центрального процессора, на котором он бежит для его намеченного использования, или для некоторой комбинации их. Здесь мы обсуждаем наиболее распространенные implementa¬tion стратегии. Функция Дальше VM, как этот большинства процессоров, к exe¬cute инструкциям. Два из регистров VM используются, чтобы управлять стеками. Другие управляют выполнением различными способами. Различные implementa¬tions называют и используют эти регистры по-другому; в целях discus¬sion в этой книге мы используем имена в Таблице 3. Таблица 3: Регистры в Дальше виртуальной машине Назовите Мнемоническое Описание S Указатель указателя Стека данных на текущую вершину стека данных. R Указатель указателя стека Возвращения на текущую вершину стека возвращения. Я Инструкция Указатель указателя на следующую инструкцию (определение), которое будет выполнено; поток выполнения средств управления.
Таблица 3: Регистры в Дальше виртуальной машине (продолжались) Назовите Мнемоническое Описание W Указатель указателя Word на текущее выполняемое определение; используемый, чтобы получить доступ к области параметра определения. U Пользовательский указатель В выполнении, которому мультизадают работу, указатель на в настоящее время выполняющую задачу.
Стандарт, Дальше высокого уровня, или двоеточие, определение состоит fundamen¬tally имени, сопровождаемого ссылками на ранее определенные слова. Когда такое определение призвано звонком в его имя, кодекс во время выполнения должен управлять последовательным выполнением слов compris¬ing тело определения. Точно то, как это сделано, зависит от особой системы и метода это использование, чтобы осуществить Дальше vir¬tual машину. Стратегия выполнения затрагивает, как определения структурированы и как они выполнены; см. соответствующую документацию для своей системы. Есть несколько возможностей: • Косвенно пронизывавший кодекс. Это было оригинальным проектом и является все еще наиболее распространенным методом. Указатели на ранее определенные слова собраны в область параметра слова выполнения. Кодовая область слова выполнения содержит указатель на машинный код для переводчика адреса, который последовательно выполняет те defini¬tions, выполняя косвенные скачки через регистр I, который используется, чтобы держать его место. Когда определение называет другое определение высокого уровня, поток, я выдвинут на стек возвращения; когда названное определение заканчивается, спасенный, я суюсь от стека возвращения. Этот процесс походит на вызовы подпрограммы, и я в этой модели похожу на указатель инструкции физического процессора. • Прямой переплетенный кодекс. В этой модели кодовая область содержит фактический машинный код для переводчика адреса вместо указателя на это. Это несколько быстрее, но требует большей памяти для некоторых классов слов. Поэтому это было большинство prev¬alent на 32-битовых системах. • Пронизывавший подпрограммой кодекс. В этой модели, для каждого определения, на которое ссылаются, в слове выполнения, компилятор помещает действующую, инструкцию скачка в подпрограмму с адресом получателя. Это - техника предоставления возможности, чтобы позволить прогрессию родной генерации объектного кода. В этой модели указатель инструкции основного процессора используется в качестве I Форта (который обычно не является названным регистром в таком выполнении). Родная генерация объектного кода. Делание одного шага вне подпрограммы - пронизывало кодекс, эта техника производит действующую машину instruc¬tions для простых примитивов, такой как +, и использует скачки в другие рутины высокого уровня. Много родного кодового выполнения также применяют стратегии оптимизации к произведенному кодексу. Результат может бежать намного быстрее, за счет сложности компилятора. Побочный эффект этой техники состоит в том, что, возможно, не возможно восстановить исходный код из собранных инструкций. • Символическое пронизывание. Эта техника собирает ссылки на другие слова при использовании символа, такие как индекс в стол, который более компактен чем абсолютный адрес. Символическое пронизывание было основным элементом в оригинальном выполнении Макфорта и использовалось во многих другое специализированное Дальше системы. В других отношениях такое выполнение напоминает косвенное - пронизывал модель. Ссылки: Раздел 6.2.2 Собирая слова и опечатки, Раздел 6.3 1.2 ДАЛЬШЕ ОСОБЕННОСТИ ОПЕРАЦИОННОЙ СИСТЕМЫ Рано Дальше выполнение бежало в полностью автономном способе, в котором Дальше предоставил всем водителям для аппаратных средств, приложенных к системе. Позже, большинство версий Дальше пробега в cо-резидентском способе, с операционной системой хозяина, таких как Windows или разновидность Unix. Выполнение Stand¬alone все еще используется во встроенных системах, как бы то ни было. В cо-резидентском выполнении водители, которые поставляют услуги ввода / вывода для периферии, такой как диски и принтеры, делают так, выпуская звонки в хост-систему. Хотя cо-резидентские системы как правило медленнее чем автономные версии, они предлагают полную совместимость файла с хозяином OS и обычно более гибки относительно конфигурации аппаратных средств, в этом у них автоматически есть доступ ко всем устройствам, поддержанным OS. Cо-резидентские версии Дальше обычно предлагают все особенности на уровне системы родных систем плюс добавленные команды для того, чтобы взаимодействовать с хозяином OS. Последние зарегистрированы в документацию продукта системы. Дальше Руководство Программиста 1.2.1 Дисковый ввод / вывод Дисковый ввод / вывод обработан Дальше системами по-разному, в зависимости от системной окружающей среды. Cо-житель Дальше диск доступа систем, используя основанную на файле систему, как описано в Разделе 5.5. Файлы могут содержать pro¬gram источник или данные, и совместимы с хозяином OS. Исходные файлы могут быть отредактированы редактором любого программиста, хотя некоторые Forths также предоставляют редактору. Автономные системы, которые включают дисковод как правило, используют стандартные блоки 1024 байтов. Этот неподвижный размер блока применяется и к Дальше исходному тексту программы и к данным, используемым программами Forth. Этот стандарт for¬mat позволяет ввод / вывод — использование различных СМИ с различным физическим сектором или рекордными размерами, или даже на различных операционных системах — через stan¬dard блокирует укладчика. Основанные на блоке Forths редки сегодня, но несколько все еще доступны. Некоторые системы достигают гибридного подхода, нанося на карту блоки в хозяина файлы OS; это обеспечивает меру исходного кода por¬tability между двумя типами систем. Блоки обсуждены fur¬ther в Приложении C. Также см. свою документацию продукта для деталей. Большинство Дальше выполнения сегодня - просто базируемый файл, таким образом, мы примем эту стратегию баланса этой книги. 1.2.2 Мультиуправление задачами С начала 1970-ых автономных Дальше, системы обычно предлагали способность управлять многократными асинхронными задачами, или back¬ground задачи или предельные задачи, которые предоставляют независимому пользователю inter¬faces. Маленький набор команд управляет средством для мультиуправления задачами. Число задач в системе обычно ограничивается только размером памяти. Поскольку Дальше определения - естественно переучастник, задачи редко требуют большой памяти. Предельная задача связала аппаратные средства, которые позволяют ей поддерживать пользовательский интерфейс (выполните текстовый вход и выход). У каждой предельной задачи есть разделение, которое содержит его стеки, частные (или пользователь) переменная область, и электронный блокнот (для текстовых строк). У фоновой задачи есть намного меньшая область только с достаточным количеством пространства для его стеков. Нет никакого терминала, связанного с этим, и это не может выполнить текстовый ввод / вывод. Рутины, которые выполняет фоновая задача, находятся в a общая область или в словаре одной из предельных задач. Использование в Дальше стеков для прохождения параметра облегчает multitask¬ing, потому что это позволяет большинству слов быть неотъемлемо переучастником. Provid¬ing уникальный набор стеков для каждой задачи позволяет словам быть переучастником, одновременно выполнимым многократными задачами. Автономное Дальше обычно бежит с позволенными перерывами. Векторный контроль за передачей перерыва непосредственно, чтобы закодировать это обслуживает устройство прерывания, без
|
Категория: Мои статьи | Добавил: JDBaha (12.10.2011)
|
Просмотров: 516
| Рейтинг: 0.0/0 |
|
Наш опрос | |
|
|