Все о моделировании в Компас-3D LT
   Главная Статьи Файлы Форум Ссылки Категории новостей
December 21 2024 11:48:07   
Навигация
Главная
Статьи
Файлы
FAQ
Форум
Ссылки
Категории новостей
Обратная связь
Фото галерея
Поиск
Разное
Карта Сайта
Популярные статьи
Что необходимо ... 65535
4.12.1 Професси... 34422
Учимся удалять!... 32315
Примеры, синони... 23621
Просмотр готовы... 22917
Декартовы коорд... 22628
FAST (методика ... 21660
содержание - се... 20968
Просмотр готовы... 19696
Работа с инстру... 15138
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

Пользователей: 9,955
новичок: Logyattella
Друзья сайта
Ramblers Top100
Рейтинг@Mail.ru

Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ по Delphi
Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog
10.4.1 Более детальное рассмотрение потоков
Пайк описывает реализацию мультиплексных виртуальных терминалов, использующую потоки (см. [Pike 84]). Пользователь видит несколько виртуальных терминалов, каждый из которых занимает отдельное окно на экране физического терминала. Хотя в статье Пайка рассматривается схема для интеллектуальных графических терминалов, она работала бы и для терминалов ввода-вывода тоже; каждое окно занимало бы целый экран и пользователь для переключения виртуальных окон набирал бы последовательность управляющих клавиш.
Рисунок 10.23. Отображение виртуальных окон на экране физического терминала
На Рисунке 10.23 показана схема расположения процессов и модулей ядра. Пользователь вызывает процесс mpx, контролирующий работу физического терминала. Mpx читает данные из линии физического терминала и ждет объявления об управляющих событиях, таких как создание нового окна, переключение управления на другое окно, удаление окна и т. п.
Когда mpx получает уведомление о том, что пользователю нужно создать новое окно, он создает процесс, управляющий новым окном, и поддерживает связь с ним через псевдотерминал. Псевдотерминал — это программное устройство, работающее по принципу пары: выходные данные, направляемые к одной составляющей пары, посылаются на вход другой составляющей; входные данные посылаются тому модулю потока, который расположен выше по течению. Для того, чтобы открыть окно (Рисунок 10.24), mpx назначает псевдотерминальную пару и открывает одну из составляющих пары, направляя поток к ней (открытие драйвера служит гарантией того, что псевдотерминальная пара не была выбрана раньше). Mpx ветвится и новый процесс открывает другую составляющую псевдотерминальной пары. Mpx выдвигает модуль управления сообщениями в псевдотерминальный поток, чтобы преобразовывать управляющие сообщения в информационные (об этом в следующем параграфе), а порожденный процесс помещает в псевдотерминальный поток модуль строкового интерфейса перед запуском shell'а. Этот shell теперь выполняется на виртуальном терминале; для пользователя виртуальный терминал неотличим от физического.
/* предположим, что дескрипторы файлов 0 и 1 уже относятся к физическому терминалу */
for (;;) { /* цикл */
выбрать(ввод);
/* ждать ввода из какой-либо линии */
прочитать данные, введенные из линии;
переключить(линию с вводимыми данными) {
если выбран физический терминал: /* данные вводятся по линии физического терминала */
if (считана управляющая команда) { /* например, создание нового окна */
открыть свободный псевдотерминал;
пойти по ветви нового процесса:
if (процесс родительский) {
выдвинуть интерфейс сообщений в сторону mpx;
continue; /* возврат в цикл "для" */
}
/* процесс-потомок */
закрыть ненужные дескрипторы файлов;
открыть другой псевдотерминал из пары, выбрать stdin, stdout, stderr;
выдвинуть строковый интерфейс терминала;
запустить shell; /* подобно виртуальному терминалу */
}
/* "обычные" данные, появившиеся через виртуальный терминал */
демультиплексировать считывание данных с физического терминала, снять заголовки и вести запись на соответствующий псевдотерминал;
continue; /* возврат в цикл "для" */
если выбран логический терминал: /* виртуальный терминал связан с окном */
закодировать заголовок, указывающий назначение информации окна;
переписать заголовок и информацию на физический терминал;
continue; /* возврат в цикл "для" */
}
}
Рисунок 10.24. Псевдопрограмма мультиплексирования окон
Процесс mpx является мультиплексором, направляющим вывод данных с виртуальных терминалов на физический терминал и демультиплексирующим ввод данных с физического терминала на подходящий виртуальный. Mpx ждет поступления данных по любой из линий, используя системную функцию select. Когда данные поступают от физического терминала, mpx решает вопрос, являются ли поступившие данные управляющим сообщением, извещающим о необходимости создания нового окна или удаления старого, или же это информационное сообщение, которое необходимо разослать процессам, считывающим информацию с виртуального терминала. В последнем случае данные имеют заголовок, идентифицирующий тот виртуальный терминал, к которому они относятся; mpx стирает заголовок с сообщения и переписывает данные в соответствующий псевдотерминальный поток. Драйвер псевдотерминала отправляет данные через строковый интерфейс терминала процессам, осуществляющим чтение. Обратная процедура имеет место, когда процесс ведет запись на виртуальный терминал; mpx присоединяет заголовок к данным, информируя физический терминал, для вывода в какое из окон предназначены эти данные.
Если процесс вызывает функцию ioctl с виртуального терминала, строковый интерфейс терминала задает необходимые установки терминала для его виртуальной линии; для каждого из виртуальных терминалов установки могут быть различными. Однако, на физический терминал должна быть послана и кое-какая информация, зависящая от типа устройства. Модуль управления сообщениями преобразует управляющие сообщения, генерируемые функцией ioctl, в информационные сообщения, предназначенные для чтения и записи их процессом mpx, и эти сообщения передаются на физическое устройство.
Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Случайные статьи
Идентификация атри...
6.6 ПРИОСТАНОВКА В...
6.6.1 События, выз...
3.5. Ключевые прак...
Движение по маршруту
1. Линейно-функцио...
Глава 2. GARMIN ST...
6.6.2 Алгоритмы пр...
2.6.3. Сжатие данных
Встроенная карта
8.3.3 Построение п...
О чем мы узнали ?
Внешний вид
Программное обеспе...
2.1.5. Уровень 5 –...
Предисловие
Необходимые предпо...
продолжение...
Современные акусти...
До 200 долларов
Предстартовая подг...
2.2 ВВЕДЕНИЕ В ОСН...
Пралогическое мыш...
Случаи из жизни
Убирайте повторяющ...
Введение
Глава 4. Я и GPS
ССЫЛКИ НА ИСПОЛЬЗУ...
7.1. Интерпретация...
6.4.3 Переключение...
6.7 ВЫВОДЫ
Декартовы координа...
11.2 ВЗАИМОДЕЙСТВИ...
содержание - сетев...
Самые продаваемые ...
10.3.3 Терминальн...
Реинжиниринг бизне...
10.4.2 Анализ потоков
Глава шестая. РАС...
Продолжение расска...
Мини-чат
Вам необходимо залогиниться.

Нет присланных сообщений.
Copyright © 2009