Обработка устройства ввода в компьютерной графике

Опубликовано: 4 Сентября, 2022

Устройство, с помощью которого пользователь может передавать компьютеру данные, информацию или управляющие сигналы, называется устройством ввода. Центральный процессор компьютера (ЦП) принимает и обрабатывает данные для создания выходных данных. Например, световое перо, клавиатура и т. д. являются примерами устройств ввода, управляемых событиями.

Обработка устройств, управляемых событиями: Обработка устройств, управляемых событиями, может осуществляться двумя способами:

  1. Начните с входа в цикл опроса, который проверяет состояние устройства до тех пор, пока не будет сообщено о событии. Когда происходит событие, цикл завершается с результатами события. В языках высокого уровня чтение ввода терминала часто обрабатывается таким образом. Одним из недостатков этого метода является то, что ЦП часто простаивает, ожидая, что что-то произойдет.
  2. Разрешение прерываний, которые передаются устройством при возникновении события, является еще одним вариантом. Используя механизм прерывания, процессор может выполнять некоторые другие операции, ожидая возникновения события.

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

  1. Кнопка-
    При нажатии кнопка является управляемым событием устройством, которое отправляет прерывание. Это только передает тот факт, что это было нажато как информация.
  2. Выбирать-
    Он обозначен пером. Это управляемое событиями устройство, которое выбирает некоторую часть дисплея.
  3. Клавиатура-
    Для имитации клавиатуры внутренняя форма подпрограмм впоследствии изменяется по сравнению с общим случаем. Это из-за 2 факторов. Во-первых, ввод с клавиатуры с помощью языка высокого уровня выглядит сэмплированным, а не механизмом, управляемым событиями.
  4. локатор-
    Локатор — это выборочное устройство, которое возвращает координаты некоторой позиции.
  5. Оценщик-
    Оценщик — это выборочное устройство, очень похожее на локатор, но возвращающее только одно значение. Это может быть двойная кнопка или ручка, которую может установить пользователь.

Предположим, что каждое устройство имеет средства для его включения или отключения, и упростим эту процедуру, создав флаг для каждого класса, а не включая и отключая отдельные устройства. Флаги (установлены или не установлены) определяют, включен ли конкретный класс. Чтобы упростить определение классов, дайте им числовые имена.

1. Подпрограмма для включения класса Button:

BEGIN
    If Class = 1 Then
    BEGIN
        // Perform all the operations needed to permit 
        // input from the button devices
        Button <-- True
    END;
    If Class = 2 Then
    BEGIN
        // Perform all the operations needed to permit 
        // input from the pick devices
        Pick <-- True
    END;
    If Class = 3 Then
    BEGIN
        // Perform all the operations needed to permit 
        // input from the keyboard
        Keyboard <-- True
    END;
    If Class = 4 Then
    BEGIN
        // Perform all the operations needed to permit 
        // input from the Loactor devices
        Loactor <-- True
    END;
    If Class = 5 Then
    BEGIN
        // Perform all the operations needed to permit 
        // input from the valuator devices
        Valuator <-- True
    END;
    AND so on
    .
    .
    .
    RETURN;
END;

2. Подпрограмма для отключения класса Button:

BEGIN
    If Class = 1 Then
    BEGIN
        // Perform all the operations needed to prohibit 
        // input from the button devices
        Button <-- False
    END;
    If Class = 2 Then
    BEGIN
        // Perform all the operations needed to prohibit 
        // input from the pick devices
        Pick <-- False
    END;
    If Class = 3 Then
    BEGIN
        // Perform all the operations needed to prohibit 
        // input from the keyboard
        Keyboard <-- False
    END;
    If Class = 4 Then
    BEGIN
        // Perform all the operations needed to prohibit 
        // input from the Loactor devices
        Loactor <-- False
    END;
    If Class = 5 Then
    BEGIN
        // Perform all the operations needed to prohibit 
        // input from the valuator devices
        Valuator <-- False
    END;
    And so on
    .
    .
    .
    RETURN;
END;

Для отключения подпрограмма принимает номер класса в качестве входных данных и выполняет любые операции, необходимые для логического отключения этого класса устройств и изменения соответствующего флага устройства на false. Точно так же подпрограмма включения принимает номер класса, выполняет необходимые операции для логического включения устройств и устанавливает флаг соответствующего устройства в значение true.

3. Процедура отключения всех устройств ввода:

BEGIN
    For Class = 1 to 5
        Do disable button(Class); 
        // calling routine 2 Above
    RETURN;
END;

Для обработки событий: прерывание генерируется устройством, управляемым событием. Процессор останавливает свою текущую работу всякий раз, когда происходит прерывание. Процессор выполняет процедуру обслуживания прерывания для устройства, сгенерировавшего прерывание. После обслуживания устройства процессор возобновляет свою старую работу.

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

1. Алгоритм обработки прерывания устройства ввода:

BEGIN
    Disable Physical Interrupt;
    Save Status Of CPU ;
    Identify Interrupt Causing Device;
    If the device is logically enabled, Then
    BEGIN
        If event from a string Input Devivce, Then
            BEGIN
                Get the input string;
                // Add string to the queue, Described in 
                // the next algorithm
                ADD_STRING_Q(STRING, DATA);
            END
        Else
            BEGIN 
                Get the data from the device;
                // Add string to the queue, Described in 
                // the next algorithm
                ADD_EVENT_Q(CLASS, NUMBER, DATA);
            END
    END
    Restore the status of processor;
    Renable the physical Interrupt;
    RETURN
END

2. Алгоритм добавления события в очередь:
Этот алгоритм использует функцию-

ADD_EVENT_Q(CLASS, NUMBER, DATA)
BEGIN
    If Qrear = Qsize, Then
        Qrear <- 1
    Else
        Qrear <- Qrear + 1;
    If Qfront = Qrear, Then
        Return error - " Event Queue - overflow"
    // Add class of the input device to the event 
    // queue class array at rear position
    EVENT_QC[Qrear] <- Class;
    // Add the number of the input device to the 
    // event queue number array at rear position
    EVENT_QN[Qrear] <- Number;
    // Add data from the input device to the event 
    // queue data array at rear position
    EVENT_QD[Qrear] <- Data;
    If QFront <- 0, Then
        QFront <- 1;
    RETURN ;
END;

В очереди строк каждая новая строка добавляется в массив строк. Достигнув конца массива, вернитесь в переднее положение. Используется следующая функция:

ADD_STRING_Q(STRING, DATA)
BEGIN
    If SQrear = SQsize, Then
        SQrear <- 1
    Else
        SQrear <- SQrear + 1
    // Add String from the input device to the 
    // String queue data array at rear position
    STRING_Q[SQrear] <- String;
    Data <- SQrear
    RETURN;
END;

Если не происходит никаких событий или не генерируется прерывание, а очереди остаются пустыми.