Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Разное

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Побайтный ввод-вывод графических устройств
 
 автор: dump   (05.12.2011 в 13:53)   письмо автору
 
 

Насколько я знаю, для осуществления графического ввода-вывода(например, вывода окна на монитор в Windows) процесс осуществляет вызов соотвествующей функции операционной системы(в Windows GDI), далее GDI перенаправляет данные после обработки и синхронизации с другими приложениями на низкоуровневый драйвер графического устройства(видеодаптера или принтера, например). А как выглядит ввод-вывод на побайтном уровне - например, какие байты принимает принтер, чтобы вывести картинку? И есть ли к принтерам документация, в которой описывается на уровне байт, обмен между принтером и компьютером?

  Ответить  
 
 автор: cheops   (05.12.2011 в 14:11)   письмо автору
 
   для: dump   (05.12.2011 в 13:53)
 

>операционной системы(в Windows GDI), далее GDI перенаправляет данные после обработки и
>синхронизации с другими приложениями на низкоуровневый драйвер графического устройства
Да, если это не игра, то процесс так и поступает, если же приложение использует DirectX, то приложение исключает GDI и еще чертову тучу промежуточных библиотек и взаимодействие идет через DirectX, который обращается к драйверам напрямую, фактически монаполизируя устройство.

>А как выглядит ввод-вывод на побайтном уровне - например, какие байты принимает принтер,
>чтобы вывести картинку? И есть ли к принтерам документация, в которой описывается на уровне
>байт, обмен между принтером и компьютером?
Фактически у любого принтера или видео-карты есть память, которую и заполняет через драйвер операционная система или приложение, если в этой памяти что-то есть - принтер печатает, нет - стоит. С видео-памятью посложнее, там обычно используется двойная или тройная буферизация, т.е. пока вам отображается кадр, в другом участке памяти готовится следующий, потом происходит переключение и пока вам показывается новый кадр, на месте старого участка памяти идет подготовка следующего. В GDI от вас это все скрыто, в DirectX вы буферами чуть не в ручную управляете. Принтера управляются через операционную систему, но смысл тот же самый, есть язык PostScript, на котором формируется страница - она записывается в память принтера, он её разбирает печатает, освобождает память. Если у операционной системы есть еще что распечатать, она ему еще пришлет (запишет в память), нет - процесс печати прекратиться. У принтеров памяти что-то в районе 6Мб, у видео-карт уже на гигабайты счет идет... хотя для двойной буферизации монитора 1920x1200 хватило бы и 20Мб (но в неё подтаскиваются текстуры, шейдеры, в общем там сейчас довольно сложно).

PS Раньше, кстати, до Windows, программы могли писать непосредственно в память устройства в обход драйвера (если знали что и как писать). Сейчас так делают в Linux при разработке свободных драйверов, понятно, только базовые свойства устройства, так как редко публикуют все подробности по внутренней работе (опасаются конкурентов).

  Ответить  
 
 автор: dump   (05.12.2011 в 16:10)   письмо автору
 
   для: cheops   (05.12.2011 в 14:11)
 

Ну вот к примеру если в память принтера записать произвольную последовательность байт(среди которых будут и ascii символы), что произойдёт?Ведь принтер же ещё должен ответить компьютеру, об успехе или неудаче печати....

  Ответить  
 
 автор: cheops   (05.12.2011 в 19:07)   письмо автору
 
   для: dump   (05.12.2011 в 16:10)
 

Вообще говоря да, но принтер не обладает зверской интеллектуальностью и операционной системой, если в памяти будет абра-кодабра, он в лучшем случае зависнет, возможно, у драйвера есть алгоритм, что делать в случае если принтер начал дурить, но вряд ли на все случаи жизни. Т.е. сигналы он конечно, посылает и принимает (в том числе об успехе и неудачи), и драйвер их интерпретирует, сообщая операционной системе о состоянии принтера. Однако, вряд ли у него есть механизмы противостояния тому, чтобы в его память были записаны только правильные инструкции - это забота операционной системы не позволять пользователю слишком сильно измываться над устройствами, а действовать через ограничивающие драйверы. Но при должном упорстве возможно все, можно записать абра-кодабру и посмотреть что произойдет...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования