LINUX.ORG.RU

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

Akan
()

Naskolko mne izvestno Nezachem :) t.e. esli eto videokarta a ne akselerator :) esli akselerator to nadeyus ponyatno zachem. Dlya obychnoi vidyuhi preryvaniya ne nuzhny .

master
()

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

anonymous
()

2master. Так, ребята, вы чего это?.. Все устройства, в конечном итоге обмениваются информацией. Руководит этим обменом, практически всегда процессор, за исключением случаев обмена данными между устройствами IDE/SCSI и памятью. В последнем случае, этим обменом занимается Контроллер прямого доступа к памяти (DMA - direct memory access) или Контроллер Скази. В любом случае вся информация передается по шине данных по адресам выставленным на шине адреса, и если шинами не управляют контроллеры DMA или SCSI, то это делает микропроцессор. Например, для того, чтобы нарисовать картинку на экране, программа, которая этим занимается (например, движок игры Quake), высчитывает все необходимые параметры и запрашивает с помощю прерывания на прцессор, пересылку данных по шине данных с адреса, установленного на шине адреса по адресу памяти видеокарты. А картинка, появляющаяся на экране - это и есть отображение содержимого памяти видеокатры. А по поводу акселераторов могу сказать, что все рассчеты и зарисовки ведутся процессором акселератора, без "затрагивания" микропроцессора. В любом случае, прерывание видеокарте нужно хотя бы для того, чтобы сказать процессору, что процесс зарисовки окончен и он может заниматься своими делами. При этом процессор передает управляющей программе (возьмем ту же игру Quake) сигнал о том, что видеокарта нарисовала картинку и готова получать новые данные, на что игра опрашивает нажатые клавиши и мышки, производит расчет данных и, опять же записывает данные в память. И эта же самая управляющая программа дожидается подтверждения успешного окончания зарисовки экрана (которое видеокарта передает с помощью процессора, выставляя на него прерывание), для продолжения опросов и расчетов... Постарался изложить как можно подробнее, но, если кто не понял, Ай'м сорри... :)))

Akan
()

nazarov_serg303 Хм..., а разьве для зарисовывания картинки на мониторе требуется разное время? Если нет - то почему бы процессору тупо не обновлять содержимое видеопамяти через определенное число тактов?(и совсем не пользоваться прерыванием?)

anonymous
()

1) Ya govoryu kartochka imayu vvidu kartu video vyvoda bez accel 2) Eti karty imeyut svoyu sobstvennuyu pamyat otobrazhaemuyu na adresnoe prostrastvo processora 3) Karta postoyanno scaniruet svoyu pamyat preobrazuya v analogoviy signal. 4) Dlya izmeneniya parametrov raboty videokarty ispolzueyutsya porty vvoda/vyvoda 5) Eto vse chem zanimaetsya videokarta. 6) Nu i blin zachem ei preryvanie ?!!! 7) dlya kartochek s accel sushestvuet massa primeneniy. Delo v tom chto ee mozhno poprosit risovat graficheskie primitivy o zavershenii svoey raboty ona MOZHET soobshat vyzvav preryvanie 8) Vsem PCI slotam sootvestvuet preryvanie nuzhno ono ili net. Eshe voprosy ?

master
()

2master: убедил, молчу, т.к. не нахожу аргументов за недостатком знаний... :) 2nazarov_serg303: Это бы занимало очень много процессорного времени. Например, если у тебя на экране висит статическая картинка, то, пока не происходит никаких изменений (не двигаешь мышкой, не клацаешь кныпочками), ее абсолютно не стОит перерисовывать.

Akan
()

nazarov_serg303 Akan, почему бы это занимало процессорное время? В случае когда не двигаешь мышкой - Процессор например ничего не посылает в память видеокарты - там находится данные которые не меняются с тактами вывода на экран и на него(экран) просто отображаются

anonymous
()

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

nobody ★★
()

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

anonymous
()

Nazarov_serg303 Блин, не туда вставил "а луч экрана ..."

anonymous
()

to last anonymous
ne tak.
proc nikogda neznaet narisovalos na ekrane chtoto ili net.
pro obratniy hod lucha kartinka poluchitsya ne iskazhennoi a mozhet migat. nikakih prervaniy ne proishodit a lish mozhno chitat iz Porta.
Chtoby ne migala na sovremennyh kartah ispolzuyut double buffering.
t.e. delayut dva bufera. v odin pishut drugoi risuetsya potom pereklyuchayutsya.Proga dolzhna uspet zapihat v active buffer vse dannye inache opyat migat nachnet. na vse u progi est 1/VertSync sec. chego kak pravilo hvataet za glaza.
i est eshe knizhka takaya iz Biblioteki sistemnogo programmista. Tom 3
avtory Bratya Frolovy. Izdatelstvo Dialog-Mifi pravda etoi knige uzhe let 6-7 nazyvaetsya ona programmirovanie videoadapterov.
Kstati eshe usaetsya int v AGP - kogda kartochke nuzhno vzyat pamyati pod tekstury.
No naskolko ya pomnyu eto delaetsya odin raz pri nepomnyu sovsem kakih obstoyatelstvah.

master
()

master, почему раскладку не настроишь? Хотя писать любишь :)))

Usenko
()

Mne ne raskladku nado nastraivat :) ona u меня как видишь работает toka na translite ya pishu namnogo bystree a esli byt bolee tochnym na russkom nu ochen medlenno :)

master
()

nazarov_serg303 Эх... - задействовал кучу народа, а так ничего и не понял - буду читать книжки... - больше не пишите. Всем THANKS!

anonymous
()

Прерывание видюхе нужно для захвата кадров. Если, конечно, есть TV-тюнер :).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.