Какие действия микроядерная ОС выполняет в реальном времени при выполнении такой простой задачи, как ручное управление? сканирование ? Почему может потребоваться ручное сканирование? Допустим, вам нужно отсканировать пару десятков страниц в разных газетах.
А газеты есть в библиотеке.
Конечно, можно взять обычный сканер и ноутбук, собрать стопку газет и медленно их сканировать, затем вырезая нужные блоки.
Другой вариант — взять руководство сканер с USB-подключением, USB HDD или, в крайнем случае, флешку, подключите его к какому-нибудь «iQube», представляющему собой гламурную коробочку с сенсорными боковинами и USB-разъемами Если взять в качестве примера обычное ядро Linux, то есть два типа устройств — блокировать И символический .
Но в нашем случае ни символическое, ни блочное нам не подойдет. Нам нужен принципиально новый тип устройства, а точнее, интерфейс взаимодействия с устройствами.
Назовем его iStream. Для iStream характерна инициализация, с аргументами частоты вывода информации и ее объема, а также возможность работы с памятью напрямую (DMA).
Как работает USB-диск или USB-флешка с интерфейсом iStream? Вы можете открыть канал в необработанном формате или в файловой системе на этом устройстве.
Вы можете запросить информацию, например, максимальный объем DMA, IO (скорость чтения/записи между устройством и DMA), а также получить некоторые параметры.
Допустим, для файловой системы FAT32 на флешке объём DMA будет 16Мб, скорость ввода-вывода — 0,3с.
Таким образом, в пике может быть 3,33 прерывания по 16Мб каждое.
Округлите до 3 и получите 48Мб в секунду.
Как работает USB-сканер с интерфейсом iStream? Инициализируется с объемом памяти DMA 8МБ, минимальная частота сброса информации из памяти сканера от 0,01с, объем буфера, который сбрасывается в DMA, 16К.
Таким образом можно сбросить как минимум 1,5Мб в секунду.
А если пользователь нажмет на сканер, то 8Мб за секунду заполнится полностью.
Следовательно, частота сброса может быть значительно выше.
Если мы не получим данные из DMA вовремя, то старая информация будет перезаписана поверх новой, поэтому переполнение допускать нельзя! Псевдоустройство iConvert работает как своеобразный черный ящик — оно получает в качестве аргументов входящий iStream — некий метод преобразования, описываемый метамаркером.
И на выходе дает свой поток.
Например iConvert(iStream(scan[0].
raw),raw2bmp) создаст iStream типа bmp. Который можно записать на USB-носитель iStream. iConvert также имеет собственную пропускную способность, которая зависит от процессора и свободной оперативной памяти iQube. Устройство постоянно генерирует прерывания и сообщает процент свободных ресурсов для текущего состояния.
А теперь о том, как все это работает. Пользователь подключает iScanner и iFlash к iQube, заходит в библиотеку, берет газету и проводит сканером по полосе.
Сканер сбрасывает буферы в DMA. iConvert - делает bmp и отправляет на флэшку.
Если пользователь перемещает сканер слишком быстро, скорость потока увеличится с 1,5 МБ/с до 8 МБ/с.
iConvert выдает прерывания о своем статусе.
При максимальной нагрузке 8 МБ/с устройству через некоторое время может перестать хватать ресурсов.
Система iQube следит за этим и меняет цвет куба сначала на желтый, а в критических ситуациях — на красный.
Или, может быть, я ударю его, и он станет фиолетовым ? :) Теги: #OS #микроядро #iThings #iQube #Ненормальное программирование
-
Анонс «Вечерней Школы Slurm По Agile»
19 Oct, 24 -
Как Приручить Ddd. Часть 1. Стратегическая
19 Oct, 24 -
Награды Игровой Индустрии «Белые Ночи»
19 Oct, 24 -
Человек И Компьютер Полностью Совместимы.
19 Oct, 24 -
О Проблемах С Ревью Кода
19 Oct, 24 -
Вторая Хабрамиттинг В Алматы
19 Oct, 24