|
dev.gamez.lv Latvian Game Developers Community
|
View previous topic :: View next topic |
Author |
Message |
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Wed Jul 22, 2009 4:01 pm Post subject: Driver thread safety |
|
Mazliet ne-gamedev jautaajums, kuram atbildi neizdevaas samekleet pasham - varbuut te kaads zinaas, kaa nekaa, mums te ir dazaadu backgroundu guru nolasiijushies :)
Vai rakstot draivera funkciju, kas handlee MajorFunction IRP_MJ_DEVICE_CONTROL, ir jaauztraucas par thread safety?
Tas ir, ja es ielaadeeju draiveri savaa aplikaacijaa ar CreateFile, un taalaak izmantoju ieguuto handli no diviem threadiem, katraa izsaucot DeviceIoControl, vai ir kaut kaada garantija, ka windows pados vienu no pieprasiijumiem, pagaidiis, liidz tas tiek izpildiits, un tikai tad dos otru? Vai arii, mieriigi var buut, ka mana draivera kods vienlaiciigi izpildiisies kaut kaados divos paraleelos sisteemas threados, un man vajag kaut kaadu mutexu/locku, lai aizsargaatu resurus - shajaa gadiijumaa konkreetas ieriices I/O portus?
Paldies _________________
|
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Wed Jul 22, 2009 10:03 pm Post subject: |
|
Cik no vienkaarsa testa sanaak tad
Code: | NTSTATUS Control( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )
{
LARGE_INTEGER time;
int cnt;
time.QuadPart = -1000*10000;
cnt = 0;
while (cnt < 10)
{
KeDelayExecutionThread(KernelMode, FALSE, &time);
cnt += 1;
DbgPrint("numer %i \n ", cnt);
}
return STATUS_SUCCESS;
} |
.. vispirms izpilda pirmo, tad tikai keraas klaat otrajam.
http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx (lai redzeetu ko DbgPrint izvada)
Man nebija arii probleemas reaalaa aplikaacijaa kur no vairaakiem threadiem suuta DeviceIO control, viss straadaaja kaa naakaas. Skaties varbuut tev ir izdeviigi taisiit tos threadus kernel mode _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
GiGa Indago Uzvarētājs
Joined: 25 Sep 2003 Posts: 887
|
Posted: Wed Jul 22, 2009 10:25 pm Post subject: |
|
Nedomaaju, ka te buus liidzeets ar kaut kaadu "wait" funkciju, (iisti gan nezinu, ko noziimee taa negatiivaa veertiiba, aka "relative timeout"), SpinLock / QueuedSpinLock / FastMutex gan vareetu dereet, atkariibaa no konkreetaam prasiibaam, bet mans jautaajums ir cits - vai to vajag? Vai vienam draiverim ir garanteets, ka IRP_MJ_DEVICE_CONTROL notiks tikai seciigi, vai ir iespeejams tiem notikt paraleeli, dazaados threados?
Vai varbuut tas nav vienkaarshs jaa / nee jautaajums, un ir kaads labs links par sho teemu? _________________
|
|
Back to top |
|
|
Storm
Joined: 11 Apr 2006 Posts: 742
|
Posted: Thu Jul 23, 2009 4:17 am Post subject: |
|
Spin lock vnk navar likt (peec labo zeenu principiem) ilgaak par 50 mikrosekundeem.
Ja tev tajaa vietaa kur ir tas control notiek raksanaas pa vieniem resursiem, tev ir jaasinhronizee, bet nevis in da user mode bet kernel mode liimenii, kaut kur lasiiju ka tev ir jaapasaka katram requestam, ka, luuk, vinjam buus gaidiit un jaatgriezaas, bet siikaak man nav ne jausmas, es tikai nojausu ka tu nedriiksti vinjam likt gaidiit uz lock kernel mode. Tu driiksti kernel mode threadam likt gaidiit uz lock no kernel mode thread, bet nedriikst uzlikt vienu lock pie deviceiocontrol. Siikaak gan nepateiksu un arii nesaku ka viss ko saku ir preciizi, jo nav gadiijies veidot taa.
Generaali:
http://support.microsoft.com/kb/186775
Man liekas ka DDK ir savs dokumentaacijs un samplji varbuut tur kaut ko atradiisi, taalaak tikai google, diemzeel sis nav baigi populaars topics.
Ja noskaidro ka vari taapat lockot ieks kernel tad varbuut noderees vienkaars table ar funkcijaam:
download.microsoft.com/download/e/b/a/eba1050f-a31d-436b-9281-92cdfeae4b45/synch_table.doc _________________ Izraadaas ka dazu dev.gamez.lv lietotaaju absurdaa ignorance meedz eksisteet arii augstaakas paakaapees : http://www.gamedev.net/community/forums/topic.asp?topic_id=411552 |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|