Контрольная работа: Модель асинхронного процесса ввода символа с клавиатуры и вывода его на экран
Задание
1. Выбрать вычислительный процесс и на его примере:
- построить метамодель «асинхронный процесс» и определить свойства исходного процесса на основе анализа метамодели;
- выполнить операции над процессом: репозиция, редукция, композиция, и оценить полученные результаты с практической точки зрения;
- построить предметную интерпретацию метамодели на основе сети Петри и сделать вывод о динамических характеристиках исходного процесса.
Описание процесса
В качестве процесса я выбрал процесс ввода символа с клавиатуры и вывода его на экран. Краткие сведения о клавиатуре и принцип её действия описаны далее.
Клавиатура
Клавиатура — клавишное устройство управления персональным компьютером. Служит для ввода алфавитно-цифровых (знаковых) данных, а также команд управления. Комбинация монитора и клавиатуры обеспечивает простейший интерфейс пользователя. С помощью клавиатуры управляют компьютерной системой, а с помощью монитора получают от нее отклик.
Принцип действия. Клавиатура относится к стандартным средствам персонального компьютера. Ее основные функции не нуждаются в поддержке специальными системными программами (драйверами). Необходимое программное обеспечение для начала работы с компьютером уже имеется в микросхеме ПЗУ в составе базовой системы ввода-вывода (BIOS), и потому компьютер реагирует на нажатия клавиш сразу после включения.
Принцип действия клавиатуры заключается в следующем
1. При нажатии на клавишу (или комбинацию клавиш) специальная микросхема, встроенная в клавиатуру, выдает так называемый скан-код.
2. Скан-код поступает в микросхему, выполняющую функции порта клавиатуры. (Порты — специальные аппаратно-логические устройства, отвечающие за связь процессора с другими устройствами.) Данная микросхема находится на основ ной плате компьютера внутри системного блока.
3. Порт клавиатуры выдает процессору прерывание с фиксированным номером. Для клавиатуры номер прерывания — 9 (Interrupt 9, Int 9).
4. Получив прерывание, процессор откладывает текущую работу и по номеру пре рывания обращается в специальную область оперативной памяти, в которой находится так называемый вектор прерываний. Вектор прерываний — это список адресных данных с фиксированной длиной записи. Каждая запись содержит адрес программы, которая должна обслужить прерывание с номером, совпадаю щим с номером записи.
5. Определив адрес начала программы, обрабатывающей возникшее прерывание, процессор переходит к ее исполнению. Простейшая программа обработки кла виатурного прерывания «зашита» в микросхему ПЗУ, но программисты могут «подставить» вместо нее свою программу, если изменят данные в векторе пре рываний.
6. Программа-обработчик прерывания направляет процессор к порту клавиатуры, где он находит скан-код, загружает его в свои регистры, потом под управле нием обработчика определяет, какой код символа соответствует данному скан- коду.
7. Далее обработчик прерываний отправляет полученный код символа в небольшую область памяти, известную как буфер клавиатуры, и прекращает свою работу, известив об этом процессор.
8. Процессор прекращает обработку прерывания и возвращается к отложенной задаче.
Введенный символ хранится в буфере клавиатуры до тех пор, пока его не забе рет оттуда та программа, для которой он и предназначался, например тексто вый редактор или текстовый процессор. Если символы поступают в буфер чаще, чем забираются оттуда, наступает эффект переполнения буфера. В этом слу чае ввод новых символов на некоторое время прекращается. На практике в этот момент при нажатии на клавишу мы слышим предупреждающий звуковой сиг нал и не наблюдаем ввода данных.
Построение метамодели «асинхронный процесс»
Поставим
нашему асинхронному процессу в соответствие четвёрку
, в которой:
— непустое
множество ситуаций;
— отношение
непосредственного следования ситуаций, определённое на множестве
;
— множество
инициаторов;
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 и вспомогательного процесса «Печать символа в текстовом виде». Некоторые действия сопровождены семантическими пояснениями. Проведена аналитическая работа, направленная на анализ свойств данного асинхронного процесса.
Важной частью работы является построение сети Петри по данному АП на основе структуры и логики поведения процесса. С помощью этого инструмента изучены принципы функционирования компонентов сети, а следовательно и компонентов процесса.