Способы организации ввода-вывода

Независимо от того, какая схема адресации используется, ввод-вывод можно осуществлять тремя способами:

  1. Программно-управляемый ввод-вывод, или ввод-вывод с опросом.
  2. Ввод-вывод по прерываниям.
  3. Прямой доступ к памяти.

Такая последовательность соответствует историческому появлению этих способов.

Первый способ используется и до сих пор. Например процессору нужно получить данные от УВВ. Сначала процессор выдает команду на чтение этой информации, то есть он записывает в управляющий регистр этого устройства специальную командуМ . После этого процессор смотрит, в каком состоянии находится устройство, готово оно к приему информации или  нет. Для этого процессор проверяет состояние специальных регистров. Если устройство еще не готово, то нужно опять повторить этот фрагмент программы, который реализует обращение к устройству. Если устройство уже готово, то записываем в него данные. То есть процессор должен постоянно сканировать состояние УВВ. Рассмотрим такую реализацию на примере записи информации в принтер. У принтера, который подключен к порту LPT1, специальному последовательному порту, имеется несколько портов. Во-первых, это порт состояния, который отражает состояние готовности принтера, его адрес 379h, каждый бит в нем отражает разные состояния принтера. Чтобы управлять принтером, имеется порт управления, например чтобы выключить, включить принтер, разрешить прием следующего символа, его адрес 37Ah. Порт принтера работает по определенным правилам, которые называются протоколом. Подготовив символ для печати, мы должны дать команду принтера его напечатать. Для этого нулевой бит управления принтера STROBEмы должны на какое-то время установить в единицу, а затем обнулить, через определенное время, тогда принтер будет знать, что ему готов символ для печати. Помимо этих двух портов, имеется и порт данных, куда мы будем записывать символ для печати, его адрес 378h. Итак рассмотрим наш пример работы с принтером, показанный на слайде. Сначала мы должны ждать, пока будет готов принтер, командой test проверяем содержимое бита STROBE, и когда он будет равен 1, записываем данные в регистр данных. Затем заносим команду «записать», и обнуляем содержимое STROBE. Такой метод имеет большой недостаток – он очень медленный, и занимает лишнее процессорное время, так как у нас в программе должен быть цикл для выяснения готовности принтера, да и доступ к другим УВВ в это время не возможен. Поэтому сейчас доступны другие способы записи на УВВ.

   

Независимо от того, какая схема адресации используется, ввод-вывод можно осуществлять тремя способами:

  1. Программно-управляемый ввод-вывод, или ввод-вывод с опросом.
  2. Ввод-вывод по прерываниям.
  3. Прямой доступ к памяти.

Такая последовательность соответствует историческому появлению этих способов.

Первый способ используется и до сих пор. Например процессору нужно получить данные от УВВ. Сначала процессор выдает команду на чтение этой информации, то есть он записывает в управляющий регистр этого устройства специальную командуМ . После этого процессор смотрит, в каком состоянии находится устройство, готово оно к приему информации или  нет. Для этого процессор проверяет состояние специальных регистров. Если устройство еще не готово, то нужно опять повторить этот фрагмент программы, который реализует обращение к устройству. Если устройство уже готово, то записываем в него данные. То есть процессор должен постоянно сканировать состояние УВВ. Рассмотрим такую реализацию на примере записи информации в принтер. У принтера, который подключен к порту LPT1, специальному последовательному порту, имеется несколько портов. Во-первых, это порт состояния, который отражает состояние готовности принтера, его адрес 379h, каждый бит в нем отражает разные состояния принтера. Чтобы управлять принтером, имеется порт управления, например чтобы выключить, включить принтер, разрешить прием следующего символа, его адрес 37Ah. Порт принтера работает по определенным правилам, которые называются протоколом. Подготовив символ для печати, мы должны дать команду принтера его напечатать. Для этого нулевой бит управления принтера STROBEмы должны на какое-то время установить в единицу, а затем обнулить, через определенное время, тогда принтер будет знать, что ему готов символ для печати. Помимо этих двух портов, имеется и порт данных, куда мы будем записывать символ для печати, его адрес 378h. Итак рассмотрим наш пример работы с принтером, показанный на слайде. Сначала мы должны ждать, пока будет готов принтер, командой test проверяем содержимое бита STROBE, и когда он будет равен 1, записываем данные в регистр данных. Затем заносим команду «записать», и обнуляем содержимое STROBE. Такой метод имеет большой недостаток – он очень медленный, и занимает лишнее процессорное время, так как у нас в программе должен быть цикл для выяснения готовности принтера, да и доступ к другим УВВ в это время не возможен. Поэтому сейчас доступны другие способы записи на УВВ.

           

Независимо от того, какая схема адресации используется, ввод-вывод можно осуществлять тремя способами:

  1. Программно-управляемый ввод-вывод, или ввод-вывод с опросом.
  2. Ввод-вывод по прерываниям.
  3. Прямой доступ к памяти.

Такая последовательность соответствует историческому появлению этих способов.

Первый способ используется и до сих пор. Например процессору нужно получить данные от УВВ. Сначала процессор выдает команду на чтение этой информации, то есть он записывает в управляющий регистр этого устройства специальную командуМ . После этого процессор смотрит, в каком состоянии находится устройство, готово оно к приему информации или  нет. Для этого процессор проверяет состояние специальных регистров. Если устройство еще не готово, то нужно опять повторить этот фрагмент программы, который реализует обращение к устройству. Если устройство уже готово, то записываем в него данные. То есть процессор должен постоянно сканировать состояние УВВ. Рассмотрим такую реализацию на примере записи информации в принтер. У принтера, который подключен к порту LPT1, специальному последовательному порту, имеется несколько портов. Во-первых, это порт состояния, который отражает состояние готовности принтера, его адрес 379h, каждый бит в нем отражает разные состояния принтера. Чтобы управлять принтером, имеется порт управления, например чтобы выключить, включить принтер, разрешить прием следующего символа, его адрес 37Ah. Порт принтера работает по определенным правилам, которые называются протоколом. Подготовив символ для печати, мы должны дать команду принтера его напечатать. Для этого нулевой бит управления принтера STROBEмы должны на какое-то время установить в единицу, а затем обнулить, через определенное время, тогда принтер будет знать, что ему готов символ для печати. Помимо этих двух портов, имеется и порт данных, куда мы будем записывать символ для печати, его адрес 378h. Итак рассмотрим наш пример работы с принтером, показанный на слайде. Сначала мы должны ждать, пока будет готов принтер, командой test проверяем содержимое бита STROBE, и когда он будет равен 1, записываем данные в регистр данных. Затем заносим команду «записать», и обнуляем содержимое STROBE. Такой метод имеет большой недостаток – он очень медленный, и занимает лишнее процессорное время, так как у нас в программе должен быть цикл для выяснения готовности принтера, да и доступ к другим УВВ в это время не возможен. Поэтому сейчас доступны другие способы записи на УВВ.

      

Независимо от того, какая схема адресации используется, ввод-вывод можно осуществлять тремя способами:

  1. Программно-управляемый ввод-вывод, или ввод-вывод с опросом.
  2. Ввод-вывод по прерываниям.
  3. Прямой доступ к памяти.

Такая последовательность соответствует историческому появлению этих способов.

Первый способ используется и до сих пор. Например процессору нужно получить данные от УВВ. Сначала процессор выдает команду на чтение этой информации, то есть он записывает в управляющий регистр этого устройства специальную командуМ . После этого процессор смотрит, в каком состоянии находится устройство, готово оно к приему информации или  нет. Для этого процессор проверяет состояние специальных регистров. Если устройство еще не готово, то нужно опять повторить этот фрагмент программы, который реализует обращение к устройству. Если устройство уже готово, то записываем в него данные. То есть процессор должен постоянно сканировать состояние УВВ. Рассмотрим такую реализацию на примере записи информации в принтер. У принтера, который подключен к порту LPT1, специальному последовательному порту, имеется несколько портов. Во-первых, это порт состояния, который отражает состояние готовности принтера, его адрес 379h, каждый бит в нем отражает разные состояния принтера. Чтобы управлять принтером, имеется порт управления, например чтобы выключить, включить принтер, разрешить прием следующего символа, его адрес 37Ah. Порт принтера работает по определенным правилам, которые называются протоколом. Подготовив символ для печати, мы должны дать команду принтера его напечатать. Для этого нулевой бит управления принтера STROBEмы должны на какое-то время установить в единицу, а затем обнулить, через определенное время, тогда принтер будет знать, что ему готов символ для печати. Помимо этих двух портов, имеется и порт данных, куда мы будем записывать символ для печати, его адрес 378h. Итак рассмотрим наш пример работы с принтером, показанный на слайде. Сначала мы должны ждать, пока будет готов принтер, командой test проверяем содержимое бита STROBE, и когда он будет равен 1, записываем данные в регистр данных. Затем заносим команду «записать», и обнуляем содержимое STROBE. Такой метод имеет большой недостаток – он очень медленный, и занимает лишнее процессорное время, так как у нас в программе должен быть цикл для выяснения готовности принтера, да и доступ к другим УВВ в это время не возможен. Поэтому сейчас доступны другие способы записи на УВВ.

            Второй способ использует прерывания. Принцип действия такого способа показан на слайде. Когда программа выдает команду, например, чтения УВВ, дальше она занимается «своими делами», а команда чтения поступает специальному контроллеру прерываний, который следит  за готовностью устройства, и посылает сигнал прерывания процессору, когда устройство будет готово. Программа в ответ на сигнал прерывания, считывает данные из регистра данных. То есть в тот момент времени – между командой на чтение и реальной подачей данных на чтение, программа не должна постоянно сканировать готовность устройства, и процессор в это время может выполнять другие команды. Затем по логике действия программы, если нужно снова считать данные с УВВ, посылаем команду, и снова

Ссылка на основную публикацию
Adblock detector