Cтраница 2
Однако даже при использовании этой схемы имеются определенные проблемы. Что случится с символами, прибывающими в тот момент, когда страница пользователя загружается с диска. Поскольку буфер полон, их некуда поместить. При этом буферы как бы меняются местами, то есть первый буфер начинает играть роль запасного. Такая схема часто называется двойной буферизацией. [16]
Рассмотрим еще раз программу, которая заполняет буфер результатами вычислений и затем выталкивает буфер на диск. Не ожидая завершения записи на диск, программа может продолжить вычисления. Однако она не должна затрагивать буфер, который в текущий момент записывается на диск, до тех пор, пока операция ввода-вывода не будет закончена. Поэтому программе нужен еще один буфер, куда заносятся данные в то время, пока первый буфер освобождается. [17]
Очевидно, что ЦП может генерировать адреса команд и коды операций со скоростью, в несколько раз превосходящей скорость электромеханических выводных устройств. Один из них состоит в использовании циклической буферной схемы. В этом случае устройство не ждет, пока заполнятся все буферы, чтобы начать вывод накопленной информации, а начинает вывод, как только заполнится первый буфер. Пока идет вывод с первого буфера, информация от главной системы поступает на следующий буфер. Однако при такой схеме может быстро наступить насыщение, если скорость поступления команд значительно превосходит скорость вывода. Опять скорость выводного устройства ограничивает скорость монитора. [18]
Если в методах доступа с очередями к моменту открытия какого-либо набора данных для него не были выделены буфера статического буферного пула или же не был получен буферный пул с помощью макрокоманды GETPOOL, то операционная система в свободной части основной памяти автоматически строит буферный пул, формирует блок управления буферным пулом и связывает созданный пул с обрабатываемым набором данных. В этом случае операнд BUFCB в макрокоманде DCB должен быть опущен. Число буферов принимается равным значению операнда BUFNO или, если он опущен, считается равным двум. Операнд BUFNO обязателен только для методов доступа ВРАМ и BSAM. Первый буфер пула выравнивается по границе, указанной операндом BFALN макрокоманды DCB, при его отсутствии - по границе двойного слова. [19]
Прежде всего предположим, что ввод записей, составляющих один блок, операции сравнения и вывод этих записей производятся с одинаковой скоростью. Для вывода обычно достаточно двух буферов. В то время как в один буфер размещаются результаты слияния, содержимое другого буфера выводится. Ко времени заполнения первого буфера должно заканчиваться освобождение второго. То же самое справедливо и в отношении ввода; ясно, что при наших предположениях для каждого файла ввода потребуется использование двух буферов. Иными словами, если при слиянии одних блоков производится считывание других блоков, то к моменту, когда заканчивается обработка первых, должно заканчиваться также и считывание других. Однако это рассуждение предполагает, что используется достаточное количество каналов ввода-вывода и что требуемые каналы свободны в требуемое время. Ниже мы покажем, что если правильно выбрать порядок файлов ввода, то можно прекрасно обойтись даже одним каналом. [20]
Очевидно, что ЦП может генерировать адреса команд и коды операций со скоростью, в несколько раз превосходящей скорость электромеханических выводных устройств. Один из них состоит в использовании циклической буферной схемы. В этом случае устройство не ждет, пока заполнятся все буферы, чтобы начать вывод накопленной информации, а начинает вывод, как только заполнится первый буфер. Пока идет вывод с первого буфера, информация от главной системы поступает на следующий буфер. Однако при такой схеме может быстро наступить насыщение, если скорость поступления команд значительно превосходит скорость вывода. Опять скорость выводного устройства ограничивает скорость монитора. [21]
В процессе обмена данными с внешними устройствами операционная система использует буферную область, расположенную в основной памяти. Буферная область предназначена для временного хранения входных данных, считанных в основную память, и выходных данных, подготовленных для пересылки на внешние устройства. Область буферной памяти, выделенная для нужд одной операции обмена, называется буфером. Совокупность связанных в цепочку буферов образует буферный пул. В начале буферного пула находится блок управления буферным пулом, который содержит информацию о числе буферов в пуле и длине буфера и указывает адрес первого буфера в цепочке. Длина буфера обычно равна длине наибольшего блока в обрабатываемом наборе данных. При обмене данными в буфере размещается блок набора данных, состоящий из одной или нескольких логических записей. Часть буфера, в которой находится одна из логических записей блока, называется сегментом буфера. [22]
Фраза RESERVE ( РЕЗЕРВИРОВАТЬ) характеризует буферные области, используемые во внутренней памяти для ускорения процесса ввода-вывода. Физический блок считывается в область буфера. Затем каждый раз, когда выполняется оператор READ, очередная логическая запись делается доступной программе. Чередование работы двух буферов позволило бы значительно убыстрить операции ввода. Увеличение количества буферов для каждого файла позволило бы повысить скорость ввода не только потому, что передача внешних данных занимает миллисекунды, в то время как внутренние передачи исчисляются микросекундами, но еще и потому, что передача от файла к буферу может выполняться параллельно с выполнением внутренних операций. Таким образом, в тот момент, когда второй буфер будет заполняться новым блоком, в первом буфере записи данных становятся доступными программе. Чем больше буферов, тем быстрее выполняются операции, однако для буферов требуется значительная внутренняя память. [23]
Таким образом, на процесс сбора данных накладываются ограничения, связанные с необходимостью выполнения этих двух требований. Если же частота измерений слишком велика, то возможны проблемы с вычислительной системой, которая должна в этом случае хранить и обрабатывать большой объем поступающих данных. Для хранения этих данных обычно используется буферная память. По мере того как она заполняется, подлежащие хранению данные необходимо передавать в некоторую вторичную память. Однако данный процесс может оказаться относительно медленным и вызвать задержки в функционировании всей системы. В примере, показанном на рис. 5.10 0, цифровые данные хранятся в памяти до тех пор, пока не заполнится первый буфер. Когда это произойдет, поступающие данные направляются во второй буфер, а содержимое первого тем временем передается во вторичную память - обычно магнитную ленту или перфоленту. [24]