Архитектура Unix

       

. Алгоритм переписи данных на терминал



Рисунок 10.13. Алгоритм переписи данных на терминал



алгоритм terminal_write { выполнить (пока из пространства задачи еще поступают данные) { если (на терминал поступает информация) { приступить к выполнению операции записи данных из списка, хранящего выводные данные; приостановиться (до того момента, когда терми- нал будет готов принять следующую порцию дан- ных); продолжить; /* возврат к началу цикла */ } скопировать данные в объеме символьного блока из пространства задачи в список, хранящий выводные данные: строковый интерфейс преобразует символы табуляции и т.д.; } приступить к выполнению операции записи данных из спис- ка, хранящего выводные данные; }


Если на терминал ведут запись несколько процессов, они независимо друг от друга следуют указанной процедуре. Выводимая информация может быть искажена; то есть на терминале данные, записываемые процессами, могут пересекаться. Это может произойти из-за того, что процессы ведут запись на терминал, используя несколько вызовов системной функции write. Ядро может переключать контекст, пока процесс выполняется в режиме задачи, между последовательными вызовами функции write, и вновь запущенные процессы могут вести запись на терминал, пока первый из процессов приостановлен. Выводимые данные могут быть также искажены и на терминале, поскольку процесс может приостановиться на середине выполнения системной функции write, ожидая завершения вывода на терминал из системы предыдущей порции данных. Ядро может запустить другие процессы, которые вели запись на терминал до того, как первый процесс был повторно запущен. По этой причине, ядро не гарантирует, что содержимое буфера данных, выводимое в результате вызова системной функции write, появится на экране терминала в непрерывном виде.









Содержание раздела