Модель асинхронного процесса ввода символа с клавиатуры и вывода его на экран
Задание
Выбрать вычислительный процесс и на его примере:
построить метамодель «асинхронный процесс» и определить свойства исходного процесса на основе анализа метамодели;
выполнить операции над процессом: репозиция, редукция, композиция, и оценить полученные результаты с практической точки зрения;
построить предметную интерпретацию метамодели на основе сети Петри и сделать вывод о динамических характеристиках исходного процесса.
Описание процесса
В качестве процесса я выбрал процесс ввода символа с клавиатуры и вывода его на экран. Краткие сведения о клавиатуре и принцип её действия описаны далее.
Клавиатура
Клавиатура — клавишное устройство управления персональным компьютером. Служит для ввода алфавитно-цифровых (знаковых) данных, а также команд управления. Комбинация монитора и клавиатуры обеспечивает простейший интерфейс пользователя. С помощью клавиатуры управляют компьютерной системой, а с помощью монитора получают от нее отклик.
Принцип действия. Клавиатура относится к стандартным средствам персонального компьютера. Ее основные функции не нуждаются в поддержке специальными системными программами (драйверами). Необходимое программное обеспечение для начала работы с компьютером уже имеется в микросхеме ПЗУ в составе базовой системы ввода-вывода (BIOS), и потому компьютер реагирует на нажатия клавиш сразу после включения.
Принцип действия клавиатуры заключается в следующем
При нажатии на клавишу (или комбинацию клавиш) специальная микросхема, встроенная в клавиатуру, выдает так называемый скан-код.
Скан-код поступает в микросхему, выполняющую функции порта клавиатуры. (Порты — специальные аппаратно-логические устройства, отвечающие за связь процессора с другими устройствами.) Данная микросхема находится на основ ной плате компьютера внутри системного блока.
Порт клавиатуры выдает процессору прерывание с фиксированным номером. Для клавиатуры номер прерывания — 9 (Interrupt 9, Int 9).
Получив прерывание, процессор откладывает текущую работу и по номеру пре рывания обращается в специальную область оперативной памяти, в которой находится так называемый вектор прерываний. Вектор прерываний — это список адресных данных с фиксированной длиной записи. Каждая запись содержит адрес программы, которая должна обслужить прерывание с номером, совпадаю щим с номером записи.
Определив адрес начала программы, обрабатывающей возникшее прерывание, процессор переходит к ее исполнению. Простейшая программа обработки кла виатурного прерывания «зашита» в микросхему ПЗУ, но программисты могут «подставить» вместо нее свою программу, если изменят данные в векторе пре рываний.
Программа-обработчик прерывания направляет процессор к порту клавиатуры, где он находит скан-код, загружает его в свои регистры, потом под управле нием обработчика определяет, какой код символа соответствует данному скан- коду.
Далее обработчик прерываний отправляет полученный код символа в небольшую область памяти, известную как буфер клавиатуры, и прекращает свою работу, известив об этом процессор.
Процессор прекращает обработку прерывания и возвращается к отложенной задаче.
Введенный символ хранится в буфере клавиатуры до тех пор, пока его не забе рет оттуда та программа, для которой он и предназначался, например тексто вый редактор или текстовый процессор. Если символы поступают в буфер чаще, чем забираются оттуда, наступает эффект переполнения буфера. В этом слу чае ввод новых символов на некоторое время прекращается. На практике в этот момент при нажатии на клавишу мы слышим предупреждающий звуковой сиг нал и не наблюдаем ввода данных.
Построение метамодели «асинхронный процесс»
Поставим нашему асинхронному процессу в соответствие четвёрку , в которой:
— непустое множество ситуаций;
— отношение непосредственного следования ситуаций, определённое на множестве ;
— множество инициаторов;
1. Выделить компоненты рассматриваемого процесса.
a) Клавиша (скан-код).
К = 1 / К = 0: клавиша нажата / нет.
б) Порт клавиатуры (прерывание).
ПК = 1 / ПК = 0: в порт поступил скан-код / нет.
в) Вектор прерываний.
ВП = 1 / ВП = 0: вектор прерываний получил запрос от процессора / нет.
г) Процессор (обработчик прерываний).
П = 1 / П = 0: процессор обработал код / нет.
д) Буфер клавиатуры.
БК = 1 / БК = 0: буфер клавиатуры переполнен / нет.
е) Символ.
С = 1 / С = 0: печать возможна / нет
2. Сформировать множество ситуаций рассматриваемого процесса.
1) Клавиша нажата.
2) Порт клавиатуры получил скан-код.
3) Активизируется вектор прерываний.
4) Процессор определил код символа.
5) Буфер клавиатуры получает код символа, буфер не переполнен, печать символа возможна.
асинхронный процесс редукция репозиция
6) Буфер клавиатуры получает код символа, буфер переполнен, печать символа невозможна.
|
К |
ПК |
ВП |
П |
БК |
С |
|
1 |
0 |
0 |
0 |
0 |
0 |
|
1 |
1 |
0 |
0 |
0 |
0 |
|
1 |
1 |
1 |
0 |
0 |
0 |
|
1 |
1 |
1 |
1 |
0 |
0 |
|
1 |
1 |
1 |
1 |
0 |
1 |
|
1 |
1 |
1 |
1 |
1 |
0 |
Описать модель «асинхронный процесс»
Ситуация описывает начальный этап данного процесса – нажатие клавиши, который инициирует ход всего процесса. Ситуация описывает ситуацию, когда процессор определяет код символа, который выводится на печать. Она инициирует дальнейшую работу с этим кодом. Ситуации и описывают два возможных результата – возможность и невозможность печати.
Определить траектории выполнения процесса и классы эквивалентности ситуаций и сделать вывод о свойствах рассматриваемого процесса (эффективность, управляемость, простота)
Траектории:
Первая траектория описывает процесс, результат которого – возможность печати. Вторая траектория описывает процесс, результат которого – невозможность печати. Третья траектория описывает определение кода символа и возможность заполнения буфера клавиатуры.
Четвёртая траектория описывает определение кода символа и невозможность заполнения буфера клавиатуры.
АП эффективен, т.к. из инициаторов все траектории ведут в результанты и все траектории, приводящие к результантам, исходят из инициаторов.
Определим классы эквивалентности. Для множества можно определить отношение такое, что:
1) , если ;
2) .
Отношение позволяет разбить множество на классы эквивалентности:
Так как мой АП - эффективный, то:
,
где - множество начальных классов, - множество конечных классов.
Так как в моём ЭАП каждый класс идёт от начального в один и тот же конечный класс эквивалентности, то он управляемый.
Данный ЭАП не является простым, так как первая и вторая траектории содержат 2 инициатора.
Таким образом, АП P1 является эффективным и управляемым, но не является простым.
Операции над процессами
Смыслом репозиции данного процесса будет повторное нажатие клавиши, причём неважно после какой ситуации – успешной (символ напечатался) или нет (символ не напечатался).
- reset all settings (interrupt)
Осуществлённая репозиция является частичной, так как .
Репозиция позволяет инициировать процесс повторно после его выполнения. Для данной модели это означает, что нажатие клавиши может быть вызвано не только один раз, но и несколько. Фактически репозиция процесса показывает, что процесс выполняется не один, а столько, сколько нужно в какой-то конкретной ситуации.
Редукция
Выделим в качестве входных компонент первую и вторую – клавишу и порт клавиатуры. Первая компонента может принимать только одно значение – 1, вторая – 1 и 0.
Выделим , т.к. все ситуации, входные компоненты которых равны значениям , либо являются результантами, либо ведут к ним, т.е. способствуют окончанию выполнения процесса.
Составим множество ситуаций, входящие в блок разбиения , которые соответствуют выбранным значениям входной компоненты.
Для каждого инициатора построим множество ситуаций, встречающихся на траекториях процесса, ведущих из указанного инициатора.
Образуем множество :
Таким образом, редукция отображает ветвление на 2 ситуации: символ печатается или символ не печатается.
Композиция
Составим АП «Печать символа в текстовом режиме» и поставим ему в соответствие четвёрку P2 = <S2,F2,I2,R2>. Описание процесса на примере ЯНУ Assembler.
mov ax, 9h ; команда печатать строку, адрес которой а dx
mov dx, offset string ; посылает адрес строки в dx
int 21h ; программное прерывание
Компоненты:
1) ax (reg). ax = 1 / 0 : есть команда на печать / нет (mov ax, xh)
2) dx (reg).
dx = 1 / 0 : есть адрес строки (символа) / нет.
3) int 21h (int).
int 21h = 1 / 0 : сработало прерывание / нет.
Эти ситуации образованы следующим образом: к набору компонент ситуаций процесса P1 добавляется справа третья компонента процесса P2, причём она всегда принимает значение 0, так как при срабатывании ситуаций процесса P1 прерывание с номером 21 для вывода символа ещё не срабатывает и на эти ситуации не влияет.
Аналогично к набору компонент процесса P2 приписываются слева четыре первых компоненты первого процесса, и по той же причине они равны нулю.
Смысл этого следования заключается в том, что обрабатывается нажатие клавиши, затем в случае удачного исхода с помощью небольшой процедуры на ассемблере символ выводится на экран в текстовом режиме.
Так как этот процесс начинается прежде всего с нажатия клавиши, а процесс вывода работает с кодом символа в регистрах процессора, то инициаторами процесса P3 можно считать ситуации и , т.е. по сути те же ситуации, коими являлись инициаторы процесса P1.
Результантом же примем ситуацию , т.к. по её завершению символ выводится на экран, что и является долгожданным результатом.
Вывод: частичная репозиция процесса P1 показала, что процесс может выполнятся много раз, редукция процесса P1 отображает ветвление на две ситуации – возможность и невозможность печати символа, осуществлена последовательная композиция АП P1 и АП «Печать символа в текстовом режиме».
Предметная интерпретация асинхронного процесса
Здесь местами являются компоненты процесса, а разметками – ситуации. Начальная разметка совпадает с ситуацией S1.
Как мы видим, вершины построенного графа и их следование (и ветвление) совпадают с векторами ситуаций процесса P1, след. сеть построена правильно.
Данная сеть неограниченна, т.к. место БК не является ограниченным. В нём происходит бесконечное накопление фишек. Данная сеть небезопасна, т.к. небезопасно место БК.
Данная сеть является живой, т.к. все её переходы живы. Все переходы в этой сети устойчивы, т.к. структура сети линейная и из каждой позиции дуга (дуги) направлена (направлены) только на один переход; поэтому и эта сеть – устойчива. Вывод: используя понятия модели «сеть Петри», мы описали составляющие модели «асинхронный процесс». Анализ построенной сети показал, что сеть является живой и устойчивой, но не является ограниченной и безопасной.
Заключение
Целью этой работы является получение опыта по построению метамодели «асинхронный процесс» и модели «сеть Петри», а также по исследованию их свойств.
На основе реального физического процесса «ввод символа с клавиатуры и вывод его на экран» была построена метамодель АП P1, над ней были проведены операции репозиции, редукции и композиции АП P1 и вспомогательного процесса «Печать символа в текстовом виде». Некоторые действия сопровождены семантическими пояснениями. Проведена аналитическая работа, направленная на анализ свойств данного асинхронного процесса.
Важной частью работы является построение сети Петри по данному АП на основе структуры и логики поведения процесса. С помощью этого инструмента изучены принципы функционирования компонентов сети, а следовательно и компонентов процесса.