Задачи, стоящие перед программным обеспечением ввода-вывода

Ключевая концепция разработки программного обеспечения ввода-вывода такова: независимость от конкретных устройств. Ее смысл заключается в предоставлении возможности создания программ, способных получить доступ к любому устройству ввода-вывода без необходимости предварительного определения устройства.
К примеру, программа, считывающая входной файл, должна иметь возможность читать его с жесткого диска, DVD или флеш-накопителя USB без изменения программы под каждое конкретное устройство. То есть любой пользователь должен получить возможность набрать команду типа sort output

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

С независимостью от конкретного устройства тесно связана задача однообразного именования. Имя файла или устройства должно быть просто строкой или целым числом и никоим образом не зависеть от устройства. В UNIX все диски могут быть произвольным образом сгруппированы в иерархию файловой системы, поэтому пользователь не должен знать, какое имя какому устройству соответствует. Например, флеш-накопитель USB может быть подключен (смонтирован) к каталогу /usr/ast/ backup, чтобы при копировании файла в каталог /usr/ast/backup/monday происходило его копирование в каталог monday на этом флеш-накопителе. Таким образом, все файлы и устройства адресуются одинаково: по полному имени, включающему путь в файловой системе.

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

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

Большинство физических операций ввода-вывода осуществляется в асинхронном режиме: центральный процессор инициирует передачу данных и устраняется от нее для выполнения каких-нибудь других задач до тех пор, пока не поступит прерывание. А вот прикладные программы значительно легче писать, если операции ввода-вывода осуществляются в блокирующем режиме: после системного вызова read программа автоматически приостанавливается до тех пор, пока данные не поступят в буфер. На операционную систему возлагается задача, чтобы фактически управляемые с помощью прерываний операции выглядели для пользовательской программы как блокирующие. Но некоторым приложениям с весьма высокой производительностью необходимо управление всеми деталями ввода-вывода, поэтому ряд операционных систем делают для них доступным асинхронный ввод-вывод.

Следующей задачей программного обеспечения ввода-вывода является буферизация. Часто данные, поступающие из устройства, не могут быть сохранены непосредственно в конечном пункте своего назначения. К примеру, когда пакет данных приходит по сети, операционная система не знает, куда его поместить, пока где-нибудь его не сохранит и не проанализирует. К тому же некоторые устройства (к примеру, цифровые аудиоустройства) предъявляют жесткие требования к работе в реальном времени, поэтому данные должны быть помещены в выходной буфер заранее, чтобы скорость получения данных из буфера не зависела от скорости наполнения буфера, что позволит избежать его опустошения. Буферизация влечет за собой многочисленные операции копирования данных и часто оказывает существенное влияние на производительность операций ввода-вывода.

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

5.2.2.

<< | >>
Источник: Э. ТАНЕНБАУМ Х. БОС. СОВРЕМЕННЫЕ ОПЕРАЦИОННЫЕ СИСТЕМ Ы 4-е ИЗДАНИЕ. 2015

Еще по теме Задачи, стоящие перед программным обеспечением ввода-вывода:

  1. Программное обеспечение
  2. Богомазова Г.Н.. Установка и обслуживание программного обеспечения персональных компьютеров, серверов, периферийных устройств и оборудования, 2015
  3. Эд САЛЛИВАН. ВРЕМЯ — ДЕНЬГИ Создание команды разработчиков, программного обеспечения, 2001
  4. Том ДеМарко. Вальсируя с Медведями Управление рисками в проектах по разработке программного обеспечения, 2005
  5. Алистэр Коуберн. Люди как нелинейные и наиболее важные компоненты в создании программного обеспечения, 1999
  6. Психологическое обеспечение непосредственной подготовки перед началом действий.
  7. Основные задачи морально-психологического обеспечения:
  8. Необходимость, виды и задачи психологического обеспечения действий при чрезвычайных обстоятельствах.
  9. В это время многие люди быстро стареют и слабеют, так как не понимают стоящих перед ними задач.
  10. Правило: слушать не только слова, но человека, стремиться понять его и действительные события, стоящие за словами.