Какие действия выполняет микроядерная ОС, работающая в реальном режиме времени при такой простой задаче, как ручное сканирование?
Для чего может быть нужно ручное сканирование? Предположим, вам необходимо отсканировать пару десятков полос в разных газетах. А газеты — в библиотеке.
Конечно, можно взять обычный сканер и ноутбук, набрать стопку газет и не спеша их сканировать, вырезая потом нужные блоки.
А другой вариант — взять ручной сканер с USB подключением, USB HDD ну или на крайний случай — флешку, соединить с некоторым «iQube», представляющим гламурную коробочку с сенсорными боковушками и usb разъемами
Если мы возьмем за пример обычное ядро Linux, то там есть два вида устройств — блочные и символьные.
Но нам в нашем случае не подойдут ни символьное, ни блочное. Нам нужен принципиально новй вид устройств, а точнее — интерфейс взаимодействия с устройствами. Назовем его iStream.
iStream характеризуется инициализацией, с аргументами частоты выдачи информации и ее объема, а так-же возможностью работать с памятью напрямую (DMA).
Как работает USB диск или USB флешка с интерфейсом iStream? Можно открыть канал к сырому (raw) формату или к файловой системе на этом устройстве. Можно запросить информацию, например — максимальны объем DMA, IO (скорость считывания/записи между устройством и DMA), и получить некоторые параметры.
Допустим для файловой системы FAT32 на USB флешке объем DMA будет 16Mb, скорость IO — 0,3с. Таким образом, в пике может быть 3,33 прерывания по 16Mb каждое. Округлим до 3 и получим 48Mb в секунду.
Как работает USB сканер с интерфейсом iStream? Иницализируется с объемом памяти DMA в 8MB, минимальная частота сброса информации из памяти сканера — от 0,01с, объем буфера, который скидывается в DMA — 16K. Таким образом, в минимуме может быть сброшено 1,5Mb в секунду. А если пользователь «вжикнет сканером», то 8Mb будут забиты полностью за секунду. Следовательно, частота сброса может значительно выше. Если мы не заберем из DMA данные вовремя, то старая информация затрется по верх новой, соответственно переполнения нельзя допускать!
Псевдоустройство iConvert работает как некоторый черный ящик — оно получает в качестве аргументов входящие iStream, некоторый метод преобразования, описываемый метамаркером. А на выходе дает свой поток. Например
iConvert(iStream(scan[0].raw),raw2bmp) выдаст iStream типа bmp. Который можно будет записать в iStream USB носителя.
iConvert тоже имеет свою пропускную способность, которая зависит от процессора и свободной оперативной памяти iQube. Устройство постоянно генерирует прерывания и сообщает о проценте свободных ресурсов для текущего состояния.
А теперь о том, как это все работает.
Пользователь втыкает в iQube iScanner и iFlash, заходит в библиотеку, берет газету и проводит сканером по полосе
Сканер сбрасывает буферы в DMA. iConvert — делает bmp и отправляет ее на флешку.
Если пользователь будет слишком быстро вести сканером — поток повысится с 1,5MB/s до 8MB/s.
iConvert выдает прерывания о своем статусе. При максимальной загрузке 8MB/s, устройству через некоторое время может перестать хватать ресурсов. Система iQube следит за этим и меняет цвет кубика сначала в желый, а при критичных ситуациях — в красный цвет.
А хотие, я его ударю и он станет фиолетовым? :)
Для чего может быть нужно ручное сканирование? Предположим, вам необходимо отсканировать пару десятков полос в разных газетах. А газеты — в библиотеке.
Конечно, можно взять обычный сканер и ноутбук, набрать стопку газет и не спеша их сканировать, вырезая потом нужные блоки.
А другой вариант — взять ручной сканер с USB подключением, USB HDD ну или на крайний случай — флешку, соединить с некоторым «iQube», представляющим гламурную коробочку с сенсорными боковушками и usb разъемами
Если мы возьмем за пример обычное ядро Linux, то там есть два вида устройств — блочные и символьные.
Но нам в нашем случае не подойдут ни символьное, ни блочное. Нам нужен принципиально новй вид устройств, а точнее — интерфейс взаимодействия с устройствами. Назовем его iStream.
iStream характеризуется инициализацией, с аргументами частоты выдачи информации и ее объема, а так-же возможностью работать с памятью напрямую (DMA).
Как работает USB диск или USB флешка с интерфейсом iStream? Можно открыть канал к сырому (raw) формату или к файловой системе на этом устройстве. Можно запросить информацию, например — максимальны объем DMA, IO (скорость считывания/записи между устройством и DMA), и получить некоторые параметры.
Допустим для файловой системы FAT32 на USB флешке объем DMA будет 16Mb, скорость IO — 0,3с. Таким образом, в пике может быть 3,33 прерывания по 16Mb каждое. Округлим до 3 и получим 48Mb в секунду.
Как работает USB сканер с интерфейсом iStream? Иницализируется с объемом памяти DMA в 8MB, минимальная частота сброса информации из памяти сканера — от 0,01с, объем буфера, который скидывается в DMA — 16K. Таким образом, в минимуме может быть сброшено 1,5Mb в секунду. А если пользователь «вжикнет сканером», то 8Mb будут забиты полностью за секунду. Следовательно, частота сброса может значительно выше. Если мы не заберем из DMA данные вовремя, то старая информация затрется по верх новой, соответственно переполнения нельзя допускать!
Псевдоустройство iConvert работает как некоторый черный ящик — оно получает в качестве аргументов входящие iStream, некоторый метод преобразования, описываемый метамаркером. А на выходе дает свой поток. Например
iConvert(iStream(scan[0].raw),raw2bmp) выдаст iStream типа bmp. Который можно будет записать в iStream USB носителя.
iConvert тоже имеет свою пропускную способность, которая зависит от процессора и свободной оперативной памяти iQube. Устройство постоянно генерирует прерывания и сообщает о проценте свободных ресурсов для текущего состояния.
А теперь о том, как это все работает.
Пользователь втыкает в iQube iScanner и iFlash, заходит в библиотеку, берет газету и проводит сканером по полосе
Сканер сбрасывает буферы в DMA. iConvert — делает bmp и отправляет ее на флешку.
Если пользователь будет слишком быстро вести сканером — поток повысится с 1,5MB/s до 8MB/s.
iConvert выдает прерывания о своем статусе. При максимальной загрузке 8MB/s, устройству через некоторое время может перестать хватать ресурсов. Система iQube следит за этим и меняет цвет кубика сначала в желый, а при критичных ситуациях — в красный цвет.
А хотие, я его ударю и он станет фиолетовым? :)