Как операционные системы обрабатывают несколько устройств одновременно? - PullRequest
0 голосов
/ 29 апреля 2020

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

1 Ответ

2 голосов
/ 30 апреля 2020

Для драйверов устройств и устройств обычно (в качестве базовой / упрощенной модели):

  • что-то (с использованием ЦП) просит, чтобы драйвер устройства попросил свое устройство выполнить какую-то работу, вызывая Код драйвера устройства для запуска
  • Код драйвера устройства проверяет, занято ли устройство в данный момент, и, если устройство занято, драйвер помещает новое задание в своего рода «очередь ожидающих заданий» и возвращает его. Если устройство не занято; затем драйвер устройства сообщает своему устройству, что делать, а затем возвращается. В любом случае драйвер устройства возвращается очень быстро (ЦП возвращается к выполнению обычного кода и т. Д. c).
  • , затем (позже) устройство отправляет IRQ обратно, чтобы сказать, что оно (успешно или безуспешно) завершило выполнение то, что было сказано, заставляя ЦПУ снова запускать код драйвера устройства
  • , затем код драйвера устройства проверяет состояние предыдущей работы и выполняет любые необходимые действия (информирование любого запрашиваемого задания о статусе, передача любые полученные данные и т. д. c)
  • , затем драйвер устройства проверяет, есть ли другое задание в «очереди ожидающих заданий». Если он есть, он удаляется, и драйвер просит устройство выполнить эту работу, прежде чем вернуться из IRQ. В любом случае, драйвер возвращается из IRQ (ЦП возвращается к нормальному выполнению кода).

Важной частью здесь является то, что драйвер устройства использует лишь небольшое количество процессорного времени для управления устройством ( в то время как устройство проводит большую часть своего времени, выполняя то, что ему говорят, без использования процессора); и почти все время процессора может быть потрачено на другие задачи (в том числе на то, чтобы тратить немного времени на управление многими другими устройствами и много времени на выполнение обычного кода пользовательского пространства). Это означает, что множество различных устройств могут выполнять полезные действия одновременно, в то время как центральные процессоры тратят большую часть своего времени на выполнение нормального кода.

Как правило, только 2 вещи управляют порядком. Во-первых, как устроена «очередь ожидающих заданий» драйвера устройства. Это может быть простая очередь FIFO «первым пришел - первым обслужен»; но часто это что-то более сложное, включающее «приоритеты ввода-вывода» (например, чтобы убедиться, что чтение срочно необходимых данных из пространства подкачки происходит до предварительной выборки данных, которые на самом деле еще не нужны с того же устройства).

Второе использованное управлять порядком приоритетов IRQ (для случаев, когда несколько устройств генерируют IRQ в одно и то же / подобное время). Это может быть либо «первым пришел - первым обслужен» (ничего не меняет порядок обработки IRQ), либо может включать поддержку оборудования и взаимодействие с ОС.

ПРЕДУПРЕЖДЕНИЕ 1: Это была базовая / упрощенная модель. В реальных системах возникает больше сложностей (например, задания, которые уже находятся в «очереди ожидающих заданий» драйвера устройства, могут быть отменены, драйвер устройства должен выполнять управление питанием, устройство может быть отключено и т. Д. c) ; и некоторые устройства имеют свои собственные внутренние очереди и / или могут одновременно выполнять несколько заданий.

ПРЕДУПРЕЖДЕНИЕ 2: Это было «типично для современной ОС». Операционные системы отличаются, а некоторые (например, MS-DOS от 30 лет go) могут не выполнять ничего из вышеперечисленного (и могут вообще не разрешать одновременное использование нескольких устройств).

...