Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225

что внешняя для процесса буферизации программа имеет следующий общий вид относительно нашего устройства В/В.

НАЗНАЧИТЬ ОСВОБОДИТЬ

НАЗНАЧИТЬ ОСВОБОДИТЬ

Другими словами, можно считать, что в программе чередуются действие под названием НАЗНАЧИТЬ и действие под названием ОСВОБОДИТЬ, между которыми выполняются другие вычисления, не оказывающие влияния на распределение буферов.

НАЗНАЧИТЬ означает, что программа получает адрес следующей буферной области; этот адрес присваивается как значение некоторой переменной, использующейся в программе.

ОСВОБОДИТЬ означает, что программа закончила работу с текущей буферной областью.


Рис. 23. Кольцо буферов {N = 6).

Между НАЗНАЧИТЬ и ОСВОБОДИТЬ программа работает с одним из буферов, который называется текущей буферной областью, а между ОСВОБОДИТЬ и НАЗНАЧИТЬ программа не обращается ни к одной буферной области.

Понятно, что НАЗНАЧИТЬ может непосредственно следовать за ОСВОБОДИТЬ. Рассмотрение вопросов буферизации часто основывалось на этом предположении. Но если ОСВОБОДИТЬ вьшолняется как можно быстрее, то процесс буферизации является более независимым и более эффективны.м. Разделяя эти две, по существу, разные функции, т. е. НАЗНАЧИТЬ и ОСВОБОДИТЬ, мы обнаружим, что метод буферизации остается легким для восприятия, а наше обсуждение - содержательным даже при iV = 1.

Для большей определенности давайте рассмотрим операции ввода и вывода по отдельности. Для операции ввода будем предполагать, что мы имеем дело с устрой-



ством чтения перфокарт. Действие НАЗНАЧИТЬ означает, что программе нужна информация с новой перфокарты. Поэтому следует занести в индексный регистр адрес ячейки памяти, в которой находится образ следующей карты. Действие ОСВОБОДИТЬ выполняется, когда информация об образе текущей перфокарты больше не нужна, так как она некоторым способом обработана программой (возможно, скопирована в другую часть памяти и т. д.). Поэтому текущую буферную область теперь можно заполнить следующей порцией опережающего ввода.

Для операции вывода рассмотрим АЦПУ. Действие НАЗНАЧИТЬ происходит, когда нужна свободная буферная область, в которую помещается образ строки для печати. Мы хотим занести в индексный регистр адрес ячейки памяти, с которой начинается такая область. Действие ОСВОБОДИТЬ происходит, когда этот образ строки полностью помещен в буферную область в виде, готовом для печати.

Пример. Чтобы напечатать содержимое ячеек 0800-0823, можно записать следукь щее.

JMP ASSIGN? (Занести в г15 адрес буфера.)

ENT1 0,5 /о

MOVE 800(24) Переместить 24 слова в выходной буфер. JMP RELEASEP

Здесь ASSIGNP и RELEASEP - это подпрограммы, выполняющие две описанные функции буферизации для АЦПУ.

В оптимальной ситуации с точки зрения компьютера для выполнения операции НАЗНАЧИТЬ времени практически не требуется. Для ввода это означает, что каждый образ перфокарты будет введен с опережением, так что данные уже имеются в наличии, когда программа готова их принять. А для вывода это означает, что в памяти всегда будет свободное место для записи образа строки. В любом случае время на ожидание устройств В/В не тратится.

Чтобы получше описать алгоритм буферизации и сделать его более красочным, будем говорить, что буферная область либо зеленая, либо желтая, либо красная (на рис. 24 они обозначены буквами 3, Ж и К).

Зеленый цвет означает, что область готова для того, чтобы ее НАЗНАЧИЛИ, т. е. заполнена информацией с опережением (в случае ввода) либо является свободной (в случае вывода).

Желтый цвет означает, что область уже НАЗНАЧЕНА, но еще ие СВОБОДНА, т. е. это текущий буфер, с которым работает программа.

Красный цвет означает, что область уже СВОБОДНА, т. е. это свободная область (в случае ввода) или область, заполненная информацией (в случае вывода).

На рис. 23 изображены два "указателя", направленных на обозначенные кружочками буферные области. Это, по сути, индексные регистры в программе. СЛЕДЗ и СЛЕДК расшифровываются как "следующий зеленый" и "следующий красный" буфер соответственно. Третий указатель, ТЕКУЩИЙ (рис. 24), указывает на желтый буфер, если он есть.

Приведенные ниже алгоритмы можно с одинаковым успехом применять как для ввода, так и для вывода, но для определенности сначала рассмотрим случай ввода с устройства чтения перфокарт. Предположим, что программа достигла состояния, показанного на рис. 23. Это означает, что четыре образа перфокарт были введены





СЛЕДЗ (b)

Рис. 24. Состояния буферов: (а) после НАЗНАЧИТЬ, (Ь) после завершения В/В и (с) после ОСВОБОДИТЬ.

СЛЕ (с)

с опережением с помощью процесса буферизации и находятся в зеленых буферах. В этот момент одновременно происходят два действия: (а) программа проводит вычисления по командам, следующим за ОСВОБОДИТЬ, и (Ь) перфокарта считывается в буфер, на который указывает СЛЕДК. Это состояние дел сохранится до тех пор, пока не завершится цикл ввода (и тогда устройство перейдет из состояния "занято" в состояние "готово") и.ли пока программа не выполнит операцию НАЗНАЧИТЬ. Предположим, что сначала произошло последнее. Тогда буфер, на который указывает стрелка СЛЕДЗ, станет желтым (т. е. текущим), стрелка СЛЕДЗ сместится по часовой стрелке и получится конфигурация, изображенная на рис. 24, (а). Если к этому моменту ввод завершится, то останется еще один блок, введенный с опережением. Поэтому красный буфер станет зеленым, и стрелка СЛЕДК переместится, как показано на рис. 24, (Ь). Если следующей идет операция ОСВОБОДИТЬ, то получится конфигурация, изображенная на рис. 24, (с).

Пример, касающийся вывода, приведен на рис. 27 на с. 264. Здесь "цвета" буферных областей представлены как функция от вре.мени. При этом рассматривается программа, которая начинает работу с четырех быстрых выводов, затем медленно выдает еще четыре вывода и в конце концов выдает два вывода подряд. В этом примере используются три буфера.

Указатели СЛЕДК и СЛЕДЗ весело продвигаются по кругу по часовой стрелке, каждый со своей скоростью. Это состязание между программой (которая делает зеленые буфера красными) и процессами буферизации В/В (которые делают красные буфера зелеными). В подобном случае могут возникнуть две конфликтные ситуации.

a) Если СЛЕДЗ пытается обогнать СЛЕДК, то программа опережает устройство В/В и вынуждена ждать, пока оно будет готово.

b) Если СЛЕДК пытается обогнать СЛЕДЗ, то устройство В/В опережает программу и необходимо остановить его до тех пор, пока не будет выполнена следующая операция RELEASE.

Обе эти ситуации отображены на рис. 27 (см. упр. 9).



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 [ 81 ] 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225