[OSy] mikrosekundova presnost sleep a podobnych funkcii
Dalibor Straka
dast at panelnet.cz
Fri Nov 2 15:55:25 CET 2007
Ahoj!
On Fri, Nov 02, 2007 at 11:46:36AM +0100, Milan Burda wrote:
> zdravim,
> chcem sa spytat naco je dobra mikrosekundova presnost nasledovnych funkcii
>
> * thread_join_timeout()
> * thread_usleep()
> * timer_init()
> * mutex_lock_timeout()
>
> ked napriklad thread_sleep() ma parameter v sekundach. rozdiel s
> oproti us je 10000000x (10^6), nieje to trosku moc?
>
Uz to tady bylo, jedna vec je skutecna presnost mereni casu a druha
uzitecne rozhrani. Je lepsi mit thread_sleep(), thread_msleep() a
thread_usleep(). Nebo jen thread_usleep a volat si ho se spravnou
hodnotou? (Podotykam, ze neberu v potaz pripadnou jinou casovou
narocnost techto funkci.)
> ved napriklad vo Windows funkcia Sleep ma presnost ms... a to tiez len
> na nejake zhruba nasobky 15ms kvoli hustote vyvolavanie interruptu
> casovaca.
>
Jenze ten PIC casovac co je na x86 architekture je pripojen nekde pres
jizni mustek na starou isa a komunikace s nim pres in/out instrukce trva
vecnost. Takze se vubec nepreprogramovava! Nastavi se jednou a necha se
tikat. Kdezto na MIPSu mohu mit casovace vyrazne presnejsi a timer
scheduleru je jen dalsim zakaznikem driveru casovace.
>
> ked uvazujeme ze na simulatore na pocitacoch na MS nam ten CPU dava zhruba 5 MHz...
> tak to mame 5 taktov za 1 mikrosekundu... oproti 5000 za milisekundu.
> na pomalsom pocitaci, napriklad PIII 500 MHz zodpovedal MSIM zdruha 500 KHz CPU, co je
> 0.5 taktu/mikrosekunda.
>
> je jasne, ze na realnom CPU by bola jeho frekvencia radovo stvoky MHz... ale
>
> ak pouzijeme interval casoveho interruptu nejakych 100 Hz (Linux ma
> moznosti 100, 250, 300 (kvoli NTSC), 1000) tak niesme schopny cakat
> menej ako 10ms... takze tu nejake presnosti v us neprichadzaju do
> uvahy.
>
Ale jo, je v poradku mit casovace rychle a nepresne, ale az to nekdo
naprogramuje presneji nebo budete mit vice casovacu, tak bude muset
zmenit API...
-- Dalibor Straka
More information about the NSWI004
mailing list