Изобразим теперь процесс обмена информацией между источником и получателем во времени в виде последовательности временных интервалов, которые требуются каждому из участников для выполнения своих задач. Это очень полезный методический приём, который позволит нам получить аргументированный ответ на поставленные выше вопросы.
Рассмотрим ситуацию, когда получатель затрачивает на обработку данных значительно больше времени, чем источник. Эта ситуация изображена на рис. 38.
Рис. 38. Линии времени |
Рис. 39. Линии времени |
Из этого рисунка можно видеть, что источник выводит данные к получателю, устанавливает семафор и затем неоднократно проверяет его с тем, чтобы определить состояние сброса. В свою очередь получатель проверяет семафор на условие установки; когда такое условие выполняется, получатель вводит данные, сбрасывает семафор и продолжает обработку введённых данных. После того как источник обнаружит, что семафор сброшен, он переходит к своим собственным задачам. Пунктирные линии на рис. 37 и 38 отображают передачу одноразрядной информации о состоянии семафора. Очевидно, что в рассматриваем случае источник устанавливает семафор значительно раньше, чем получатель начинает проверять состояние семафора. Следовательно, получатель выполняет только один проход через проверочный цикл семафора и поэтому он может быть исключён. Устранение этого цикла превращает семафор в флаг, который проверяется только источником. В результате получается ситуация, показанная на рис. 39.
Сравнение рис. 38 и 39 показывает, что когда получатель затрачивает на обработку данных значительно больше времени, чем источник, семафор может быть заменён флагом.
Кроме того, источник напрасно теряет время, проверяя условие сброса флага. Альтернативный вывод метода ввода-вывода предполагает использование механизма прерывания.
При использовании прерывания проверочный цикл источника исключается, источник занимается задачами обработки, связанными с другими получателями, а флаг формирует сигнал прерывания всякий раз, когда получатель нуждается в обслуживании.
Для микроЭВМ на основе МП 8080А, работающего на частоте 2 Мгц, время, связанное со стековыми операциями, которые непосредственно не связаны с обработкой данных, находится в пределах от 25 до 50 мкс, в то время как единственный проход через цикл проверки флага занимает около 14 мкс. Следовательно, использование прерывания, реализация которого требует дополнительных аппаратных средств, может быть неоправданным, если источник делает только несколько проходов через проверочный цикл флага.
Использование семафора становится оправданным, когда времена обработки данных источником и получателем сравнимы или являются как сравнимыми, так и непостоянными (переменными): каждый из них может тратить на обработку данных больше или меньше времени, чем другой. Подобная ситуация представлена на рис. 40.
Рис. 40. Линии времени |
Сначала каждый из участников обмена занят обработкой своих данных. Затем источник выводит данные, устанавливает семафор и переходит к проверке условия сброса семафора. Примерно в это же время получатель проверяет условие установки семафора, обнаруживает это условие, вводит данные, сбрасывает семафор и переходит к обработке введённых данных. Время этой обработки невелико, поэтому получатель значительный отрезок времени тратит на проверку семафора, ожидая, когда источник введёт новые данные и вновь установит семафор. Проверочный цикл получателя может рассматриваться как способ, с помощью которого получатель синхронизирует себя с источником, и, аналогично, проверочный цикл источника может рассматриваться как средство синхронизации источника с получателем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.