Начальный курс программирования на языке Форт


БЛОЧНЫЕ БУФЕРЫ - часть 4


Фиг-Форт FLUSH

Копирование всех обновленных буферов во внешнюю память и их освобождение

SAVE-BUFFERS

(Не определено)

Стандарт-79 (Не определено: переименованное слово SAVE-BUFFERS) Копирование всех обновленных буферов во внешнюю память и их освобождение
Стандарт-83 Копирование всех обновленных буферов и их освобождение Копирование всех обновленных буферов во внешнюю память, сброс флагов обновления этих буферов без их освобождения

На всех диалектах слово EMPTY-BUFFERS заставляет систему «забыть» о том, что у нее какие-то блоки размещены в буферах и сбрасывает все флаги обновления без записи содержимого блоков на диск. EMPTY-BUFFERS полезно применять в тех случаях, если вы случайно испортили1 содержимое некоторого буфера (на-

1 Для начинающих. Испорченные, бессмысленные или не имеющие отношения к обработке, ради которой были введены, данные программисты называют «мусором».

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

Согласно Стандарту-83 слово FLUSH можно определить следующим образом:

: FLUSH SAVE-BUFFERS EMPTY-BUFFERS ;

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

UPDATE

( -- )

Блок, доступ к которому осуществлялся в последнюю очередь, отмечается как модифицируемый. Этот блок будет впоследствии переписан во внешнюю память, если его буфер потребуется для размещения другого блока или в результате выполнения слова FLUSH.

SAVE-BUFFERS

( -- )

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

FLUSH

( -- )

Осуществляется SAVE-BUFFERS, затем происходит погашение признака обновления всех буферов. Используется при установке или смене накопителей внешней памяти.

EMPTY-BUFFERS

( -- )

Все блочные буфера отмечаются как пустые независимо от им содержания. Обновленные блоки во внешнюю память не записываются.

BLOCK

( u -- )

Занесение в стек адреса первого байта в блоке u. Если данного блока еще в памяти нет, то происходит его пересылка из внешней памяти в тот буфер, к которому

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

BUFFER

( u -- a)

Функции те же, что и у BLOCK, за исключением того, что сам блок из внешней памяти не считывается.

1 для пользователей мультипрограммной системы. Будьте осторожны! Слово EMPTY-BUFFERS освобождает все буферы. Программа для работы с базой данных, широко применяющая средства восстановления после ошибок, не должна делать это с помощью EMPTY-BUFFERS. Но Форт-программы, использующие блоки, легко расширить с тем, чтобы они удовлетворяли запросы любой пользовательской программы.




Начало  Назад  Вперед



Книжный магазин