dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

Driver thread safety

 
dev.gamez.lv Forum Index -> Programmēšana
View previous topic :: View next topic  
Author Message
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: 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 Smile
_________________
Back to top
View user's profile Send e-mail
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: 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
View user's profile
GiGa
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 25 Sep 2003
Posts: 887

PostPosted: 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
View user's profile Send e-mail
Storm



Joined: 11 Apr 2006
Posts: 742

PostPosted: 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
View user's profile
Display posts from previous:   
dev.gamez.lv Forum Index -> Programmēšana All times are GMT + 2 Hours
Page 1 of 1

 
Jump to:  
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