Michał Maćkowski, dr inż. Maciej Wawrzyniak Programowe metody pomiaru czasu w systemach operacyjnych Windows.Sesja: Nowe obszary badań systemów i sieci telekomuniacyjnych.Politechnika Poznańska, Instytut Elektroniki i Telekomunikacji
Pełen tekst
(2) www.pwt.et.put.poznan.pl. Czas trwania TX sygnału prostokątnego U(t) można obliczyć na podstawie zależności:. Tx = n ⋅ Tw. (1). gdzie: n – liczba zliczeń licznika, TW – okres generatora częstotliwości wzorcowej. Względny błąd pomiaru czasu tą metodą można obliczyć na podstawie zależności:. ∆Tx 1 ∆Tw ∆Tb = + + Tx n Tw Tb. (2). gdzie: 1/n = TW/TW - względny błąd zliczania (Δn = ±1), ΔTW - bezwzględny błąd okresu generatora częstotliwości wzorcowej, ΔTb - bezwzględny błąd bramkowania wynikający z różnych czasów otwierania i zamykania bramki. W metodach programowych pomiaru czasu generator częstotliwości wzorcowej jest realizowany poprzez licznik zdefiniowany w pamięci operacyjnej komputera. Licznik taki może być zdefiniowany przez system operacyjny, kompilator użyty do kompilacji lub programistę wewnątrz pisanego programu. Zdefiniowany licznik jest inkrementowany z ustalonym okresem TW. W celu pomiaru czasu pomiędzy dwoma zdarzeniami należy dwukrotnie odczytać stan licznika w chwilach początku pomiaru (Start) i końca pomiaru (Stop). Wartość mierzonego czasu można obliczyć na podstawie zależności:. Tx = ( nStop − nStart ) ⋅ Tw. (4). Jeżeli odczytane wartości spełniają zależność:. nStart > nStop. (5). to nastąpiło przepełnienie licznika. W tym przypadku wartość mierzonego czasu należy obliczyć na podstawie zależności:. Tx = ( nmax − nStart + nStop + 1) ⋅ Tw. (6). gdzie: nmax - maksymalna wartość, która może być wpisana do licznika. Metoda ta może służyć do pomiaru czasów TX < nmax·TW. Względny błąd pomiaru programowej metody pomiaru czasu można opisać także zależnością (2). Liczbę zliczeń n należy obliczyć na podstawie zależności:. n = nStop − nStart. (7). lub w przypadku przepełnienia licznika na podstawie zależności:. n = nmax − nStart + nStop + 1. (8). Generator wzorcowy jest realizowany poprzez inkrementację licznika zrealizowanego w pamięci. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. operacyjnej komputera. Wiąże się to z wywołaniem odpowiedniego fragmentu kodu programu. Wywołanie tego fragmentu kodu programu w systemach wielozadaniowych może być opóźnione przez system operacyjny i głównie z tego opróżnienia wynika błąd generatora częstotliwości wzorcowej ΔTw. Podobnie odczyt licznika w chwilach "Start" i "Stop" wiąże się z wywołaniem odpowiednich fragmentów kodu programu. Wywołania tych fragmentów kodu programu będą także opóźniane przez system operacyjny. Błąd bramkowania ΔTb będzie wynikał z różnicy opóźnień wprowadzanych przez system operacyjny przy realizacji odczytu licznika w chwili "Start" i chwili "Stop". 3. PROGRAMOWY POMIAR CZASU Z WYKORZYSTANIEM ZEGARÓW WINDOWS W systemach operacyjnych Windows występuje mechanizm nazywany zegarem programowym. Służy on do informowania aplikacji o upływie zadanego odcinka czasu. Aby aplikacja mogła skorzystać z mechanizmu zegara programowego system operacyjny musi przydzielić zegar aplikacji. Przydzielenie zegara następuje po wywołaniu funkcji API "UINT SetTimer (HWND hWnd, UINT nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);". Parametrami wywołania funkcji są: – hWnd - uchwyt okna, którego procedura będzie otrzymywała komunikat Windows WM_TIMER, – nIDEvent - identyfikator zegara, – uElapse - długość odmierzanego odcinka czasu w ms, – lpTimerFunc - wskaźnik do funkcji zwrotnej. Po przydzieleniu zegara programowego do kolejki komunikatów aplikacji, której został przydzielony zegar programowy, będzie wstawiany komunikat Windows WM_TIMER. Częstotliwość wstawiania tego komunikatu będzie wynosiła 1/uElapse. Mechanizm okresowego uruchamiania funkcji obsługi komunikatu WM_TIMER może posłużyć do implementacji generatora częstotliwości wzorcowej. W tym celu w pamięci operacyjnej komputera należy zrealizować licznik a w każdym wywołaniu funkcji obsługi komunikatu WM_TIMER należy inkrementować zrealizowany licznik. Pomiar czasu pomiędzy dwoma zdarzeniami będzie polegał na odczycie zawartości licznika w chwilach "Start" i "Stop" i obliczeniu szukanego odcinka czasu na podstawie zależności (4) lub (6) podstawiając za TW wartość parametru uElapse. Parametr uElapse może przyjmować wartości od 1 ms do 4 294 967 295 milisekund. Rozdzielczość wstawiania komunikatu WM_TIMER jest większa od 1 ms i wynosi 54,9 ms dla systemu operacyjnego Windows 98 oraz 10 ms dla systemów operacyjnych Windows 2000 i Windows XP. W celu weryfikacji tych danych wykonano pomiary odcinka czasu pomiędzy dwoma wywołaniami funkcji obsługującej komunikat WM_TIMER dla różnych nastaw parametru TZ = uElapse. Do pomiarów okresu pomiędzy wywołaniami funkcji obsługującej komunikat WM_TIMER wykorzystano specjalny program oraz zewnętrzny, 24– bitowy licznik taktowany przebiegiem o wzorcowej. 2/5.
(3) www.pwt.et.put.poznan.pl. częstotliwości 20 MHz. Uproszczony algorytm działania tego programu przedstawiono na rysunku 2. Licznik był otwierany opadającym zboczem sygnału RTS, a zamykany narastającym. Otwieranie następowało w funkcji obsługującej k-ty komunikat WM_TIMER, a zamykanie w funkcji obsługującej komunikat k+1. Błąd spowodowany czasem ustawienia poziomu linii RTS był na poziomie pojedynczych mikrosekund.. Celeron 2 GHz, Pentium 4 2,66 GHz oraz Pentium 4 HT 2,8 GHz. Zauważono, że rozdzielczość i błąd nastawy zegara dla starszych komputerów (AMD K6-2 300 i Celeron 466 - komputery A) były bardzo zbliżone. Podobnie zachowywały się zegary programowe w nowszych komputerach (Celeron 2 GHz, Pentium 4 2,66 GHz oraz Pentium 4 HT 2,8 GHz - komputery B). Na rysunkach 4 i 5 przedstawiono odpowiednio: wyniki pomiarów okresu zegara programowego oraz względny błąd nastawy. 80 70. TS [ms]. 60 50 40. Komputery A Komputery B. 30 20 10. TZ [ms]. 0 0. δ[%]. Win2000. 60. WinXP. 40 30 20 10. TZ [ms]. 0 150. 70. 200. 250. Rys. 3 Względny błąd ustawienia okresu zegara programowego. Względny błąd ustawienia zegara programowego oraz jego rozdzielczość zależą również od konfiguracji sprzętowej komputera. Porównano wyniki pomiarów dla kilku różnych komputerów z systemem operacyjnym Windows XP. Badano komputery zbudowane w oparciu o procesory: AMD K6-2 300 MHz, Celeron 466 MHz,. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. 80. Komputery A Komputery B. 40 35 30 25 20 15 10 5. TZ[ms] 10. 20. 30. 40. 50. 60. 70. 80. Rys. 5. Względny błąd ustawienia okresu zegara programowego.. Tabela 1. Rozdzielczość zegara programowego.. 50. 100. 60. W tabeli 1 przedstawiono uśrednione wartości rozdzielczości zegara programowego TR dla badanych komputerów.. Win98. 70. 50. 50. 45. 0. (9). 90. 0. 40. 0. TZ − TS ⋅ 100% TS. 80. 30. δ[%]. 50. Pomiary okresu zegara programowego powtórzono 1000 razy dla każdej nastawy okresu TZ tego zegara z przedziału od 1 do 250 ms dla Windows 98 oraz od 1 do 60 ms dla Windows 2000 i XP. Dla każdej nastawy okresu obliczono wartość średnią TS. Na rysunku 3 przedstawiono względny błąd ustawienia zegara programowego δ w funkcji TZ,. Pomiary wykonano na komputerze z procesorem AMD K6-2 300 MHz. Błąd względny δ obliczano z zależności (9).. 100. 20. Rys. 4. Wyniki pomiarów okresu zegara programowego.. Rys. 2. Uproszczony algorytm programu wykorzystywanego w pomiarach.. δ=. 10. Zestaw komputerowy AMD K6-2 300 Celeron 466 Celeron 2 GHz P4 2.66 GHz P4 HT 2,8 GHz. TR [ms] 10.00 9.99 15.55 15.49 15.54. Komunikat WM_TIMER jest komunikatem Windows o niskim priorytecie, dlatego obsługa tego komunikatu może być zakłócona przez inne procesy pracujące w systemie. W celu wyznaczenia niestabilność okresu obsługi komunikatu WM_TIMER przez aplikację, zmierzono okres pomiędzy 2000 wywołań funkcji obsługującej ten komunikat dla różnych nastaw zegara Windows. Na. 3/5.
(4) www.pwt.et.put.poznan.pl. podstawie wyników pomiarów wyznaczono histogramy. Na rys. 6 przedstawiono histogram dla TZ = 10 ms (Celeron 466). Prezentowany rozkład jest zbliżony do rozkładu normalnego, dlatego dla powyższych nastaw mechanizm okresowego uruchamiania funkcji obsługi komunikatu WM_TIMER może być wykorzystany jako generator częstotliwości wzorcowej dla pomiarów odpowiednio długich odcinków czasu. 0,06. P. 0,05 0,04 0,03 0,02 0,01 0 9,85. T [ms] 9,9. 9,95. 10. 10,05. 10,1. 10,15. Rys. 6. Histogram dla czasu TZ = 10 ms (Celeron 466). Odpowiednio na rysunkach 7 i 8 przedstawiono dwa histogramy zmierzone dla komputera z procesorem P4 HT 2,8 GHz, dla nastaw TZ = 10 ms oraz TZ = 46 ms. Dla tych przypadków mechanizm okresowego uruchamiania funkcji obsługi komunikatu WM_TIMER nie może być wykorzystany jako generator częstotliwości wzorcowej. W pierwszym przypadku dla nastawy 10 ms wartość maksymalna rozkładu przypada dla 15,62 ms. W drugim przypadku, dla nastawy 46 ms, na histogramie pojawiły się dwa rozkłady wokół 46,9 ms i 62,5 ms. 0,07. 4. PROGRAMOWY POMIAR CZASU Z WYKORZYSTANIEM ZEGARA WYSOKIEJ ROZDZIELCZOŚCI Systemy Windows posiadają także inny mechanizm, który można wykorzystać do pomiaru czasu pomiędzy dwoma zdarzeniami. Jest to zegar wysokiej rozdzielczości (WR). Wykorzystanie mechanizmu zegara WR opiera się na zastosowaniu dwóch funkcji API: – „QueryPerformanceFrequency()”, – „QueryPerformanceCounter()”. Pierwsza funkcja: „BOOL QueryPerformanceFre quency(LARGE_INTEGER *lpFrequency );” jako argument przekazuje wskaźnik „lpFrequency” do struktury LARGE_INTEGER, w której w czasie wywołania zostanie zapisana częstotliwość zegara WR [3]. Mechanizm zegara WR do zliczania wykorzystuje układ licznika 8253/8254 lub następców w zależności od konfiguracji sprzętowej komputera PC. Układ programowalnego licznika znajduje się w układzie chiset’u komputera PC. Np. w układzie Intel 82443MX znajduje się układ 82C54 taktowany z częstotliwością 14,31818 MHz [5]. Zazwyczaj pełna częstotliwość taktowania nie jest dostępna w mechanizmie zegara WR. W tabeli 2 zestawiono częstotliwości zegarów WR dostępne dla programisty dla różnych procesorów i różnych systemów operacyjnych. Zazwyczaj pełna częstotliwość taktowania nie jest dostępna dla mechanizmu zegara WR. W tabeli 2 zestawiono częstotliwości zegarów WR, dostępne dla programisty, dla różnych systemów operacyjnych Windows i różnych procesorów. Tabela 2. Zestawienie częstotliwości zegarów WR. P. Procesor. 0,06 0,05. Celeron 466 MHz. 0,04 0,03. Celeron 1 GHz. 0,02 0,01 T [ms] 0 15,45. 15,5. 15,55. 15,6. 15,65. 15,7. 15,75. 15,8. Rys. 7. Histogram dla czasu TZ = 10 ms (P4 HT 2,8). 0,4. P. 0,35. Celeron 2 GHz Pentium 4 2,66 GHz. 0,3 0,25 0,2 0,15 0,1 0,05 0 46,61. Celeron 1,7 GHz. TZ[ms] 46,74. 46,86. 46,99. 62,21. 62,34. 62,46. 62,59. Rys. 8. Histogram dla czasu TZ = 46 ms (P4 HT 2,8).. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. System operacyjny Windows 98 Windows 2000 Windows XP Windows 98 Windows 2000 Windows XP Windows 98 Windows 2000 Windows XP Windows 98 Windows 2000 Windows XP Windows 98 Windows 2000 Windows XP. Częstotliwość zegara WR [Hz] 1193180 1193182 1193182 1193180 3579545 3579545 1193180 3579545 3579545 1193180 3579545 3579545 1193180 3579545 3579545. Druga funkcja „BOOL QueryPerformanceCounter (LARGE_INTEGER *lpPerformanceCount);” służy do odczytu stanu licznika zegara WR, który jest zaimplementowany w pamięci operacyjnej komputera przez system operacyjny. Argument wywołania funkcji jest wskaźnik „lpPerformanceCount” do struktury „LARGE_INTEGER”, w której zostanie zapisana aktualna wartość licznika w chwili wywołania funkcji.. 4/5.
(5) www.pwt.et.put.poznan.pl. Przed pomiarem czasu z wykorzystaniem zegara WR należy określić częstotliwość tego zegara poprzez wywołanie funkcji „QueryPerformanceFrequency()” i obliczyć okres Tw. Pomiar czasu pomiędzy dwoma zdarzeniami będzie polegał na dwukrotnym wywołaniu funkcji „QueryPerformanceCounter()” w chwilach "Start" i "Stop" w celu odczytu zawartości licznika (nStart i nStop) i obliczeniu szukanego odcinka czasu na podstawie zależności (4) lub (6). Względny błąd pomiaru czasu z wykorzystaniem zegara wysokiej rozdzielczości można wyznaczyć na podstawie zależności (2). Ponieważ metoda ta wykorzystuje do taktowania zegar sprzętowy błąd generatora częstotliwości wzorcowej można pominąć. Na wielkość błędu będą wpływały tylko błąd zliczania i błąd bramkowania. Wartość błędu bramkowania będzie wynikała z różnicy opóźnień wprowadzanych przez system operacyjny przy wywołaniu funkcji „QueryPerformanceCounter()” w chwili „Start” i „Stop”. W celu wyznaczenia tego rozrzutu 106 razy zmierzono czas wywołania funkcji „QueryPerformanceCounter()” i wyznaczono histogram. Na podstawie histogramu dla poziomu ufności P = 0,99 wyznaczono błąd bramkowania ΔTb. Wyniki pomiarów i obliczeń zamieszczono w tabeli 3. W kolumnie 4 tabeli 3 zestawiono także zarejestrowano najgorsze wartości ΔTbnw. Prawdopodobieństwo wystąpienia tych wartości wyniosło P = 10-6. W systemach operacyjnych Windows 2000 i Windows XP wielkość najgorszy wartości ΔTb można znacznie zredukować poprzez nadanie aplikacji wywołującej funkcje „QueryPerformanceCounter()” priorytetu czasu rzeczywistego. Wyniki pomiarów najgorszej wartości ΔTbnw po nadaniu aplikacji priorytetu czasu rzeczywistego (ΔTbnwr) zestawiono w kolumnie 5 tabeli 3. Tabela 3. Wyniki pomiarów i obliczeń błędów bramkowania ΔTb. Procesor. Celeron 466 MHz. Celeron 1 GHz. Pentium 4 2,66 GHz. System operacyjny. Windows 98 Windows 2000 Windows XP Windows 98 Windows 2000 Windows XP Windows 98 Windows 2000 Windows XP. ΔTb (P = 0,99) [μs]. ΔTbnw (P = 10-6) [μs]. ΔTbnwr (P = 10-6) [μs]. 1,676. 40303. -. 1,676. 1090. 111. 1,676. 1594. 184. 0,838. 643. -. 0,558. 326. 62,8. 0,279. 590. 169. 0,838. 359. -. 0,279. 308. 35,2. 0,279. 640. 104. PWT 2005 - POZNAŃ 8-9 GRUDNIA 2005. 5. PODSUMOWANIE Analizując wyniki pomiarów zawarte w punkcie 3 zauważono, że dla komputerów wyposażonych w procesory pracujące z częstotliwością powyżej 2 GHz maleje rozdzielczość okresu obsługi komunikatów WM_TIMER z 10 na 15,5 ms (dla systemów operacyjnych z rodziny NT, czyli Windows 2000 oraz XP). Pomiary uzupełniono, powtarzając je na komputerach z procesorami 1 GHz oraz 1,7 GHz. Dla tych komputerów rozdzielczość wystawienia komunikatów WM_TIMER wynosiła średnio 10 ms (Windows 2000 i XP). Możliwy spadek rozdzielczości powoduje, że programista, po inicjalizacji zegara Windows, nie zna częstotliwości wstawiania komunikatów WM_TIMER do kolejki komunikatów aplikacji. Pomiary czasu wykorzystujące programowy zegar Windows mogą mieć charakter szacunkowy. Generator częstotliwości wzorcowej oparty na funkcji obsługującej komunikat WM_TIMER będzie się charakteryzował dużymi niestabilnościami. Znacznie lepszym zegarem programowym, który można wykorzystać do pomiaru czasu, jest zegar wysokiej rozdzielczości. W przypadku wykorzystania tego mechanizmu głównym składnikiem błędu pomiaru będzie błąd bramkowania. Z wyników pomiarów przedstawionych w punkcie 4 wynika, że wartość tego błędu będzie zależna od konfiguracji sprzętowej komputera oraz wersji systemu Windows. Wykorzystanie zegarów programowych do odmierzania odcinków czasu w systemach kontrolno – pomiarowych, wiąże się z koniecznością ich wcześniejszej weryfikacji w celu określenia ich rozdzielczości oraz stabilności. Do pomiarów czasu w systemach Windows można użyć także funkcję API: „GetTickCount()” oraz w kompilatorach C funkcji clock(). Rozdzielczość pomiarów czasu z wykorzystaniem tych funkcji jest na poziomie rozdzielczości okresu zegara programowego Windows. Najlepszym mechanizmem programowego pomiaru czasu dostępnym w systemach rodziny Windows jest zegar wysokiej rozdzielczości. Jeżeli jest on niewystarczający należy użyć systemu czasu rzeczywistego np. QNX. SPIS LITERATURY [1] C. Petzold, Programowanie Windows, Wydawnictwo RM, Warszawa 1999. [2] Leinecker R. C., Archer T., Visual C++6. Helion, Gliwice 2000. [3] http://www.msdn.microsoft.com [4] Intel 82443MX PCIset, http://www.intel.com. 5/5.
(6)
Powiązane dokumenty
Rozdział jest uzupełniony bibliografią książek (bibliografia artykułów znaj duje się w Scientific Books) z zakresu ogólnej historii nauki z uwzględnieniem
'Cieszy mnie i kolegów flisaków, że spraw ą naszych dłubanek zajął się pan magister M ieczysław Boczar, gdyż dotychczas n a próżno szukałem takich ludzi,
As discussed in the introduction, H attachment com- petes with Eley–Rideal-type abstraction reactions (see Eq. In the previous section, we have shown that multiple hydrogen
18(a) show the comparison of cogging torque waveforms under static and dynamic angular misalignment calculated by the proposed method and 3D FEM model, respectively..
A continuous wave 24 GHz radar module is used to capture the first contributions to the Dop- NET database and classi fication results based on discriminating these hand gestures
Wiąże się to ze szczególnym nasileniem we współczesnej biologii prac z zakresu ewolucjonizmu, zarówno teoretycznych, jak warsztatowych, jak również z
Stołyhwo w ZSRR zwiedził wiele muzeów w Leningradzie i Moskwie, znanych z bogatych materiałów naukowych. Jego spotkania z uczonymi radzieckimi były bardzo