Nowe technologie Edukacja Kontakt O nas Dodaj do ulubionych Ustaw tę stronę jako startową

Artykuły dotyczące systemu QNX i jego zastosowań

 

QNX - wielozadaniowy, wielodostępny,
sieciowy system operacyjny czasu rzeczywistego.

Opracował: Wiesław Barcikowski

Wydział Cybernetyki
Wojskowa Akademia Techniczna

System operacyjny QNX pojawił się na rynku w 1982 roku. Jest historycznie pierwszym wielozadaniowym i wielodostępnym systemem operacyjnym dla mikrokomputerów IBM PC.

QNX jest wynikiem prac badawczych prowadzonych nad technikami komunikacji międzyprocesorowej prowadzonych na Uniwersytecie Waterloo w Kanadzie.

Pierwowzorem systemu QNX był system operacyjny Thoth (nazwany imieniem egipskiego boga mądrości, nauki i magii). Dwóch pracowników uniwersytetu Dan Dodge i Gordon Bell, zainspirowanych systemem Thoth, zaprojektowało i zaimplementowało dla mikrokomputera IBM PC (który właśnie pojawił się na rynku) nowy system operacyjny, który został nazwany pierwotnie QUNIX.

System został wprowadzony na rynek przez firmę Quantum Software Systems utworzoną przez autorów systemu. W wyniku protestów firmy AT&T, która uznała, że nazwa 'Qunix ' zbyt mocno zbliżona jest do nazwy 'Unix ' (która jest zastrzeżonym znakiem towarowym właśnie firmy AT&T), firma Quantum zmieniła nazwę swego produktu na QNX i pod taką nazwą system znany jest od 10 lat.

System QNX różni się od systemu UNIX dwoma elementami mającymi kardynalne znaczenie dla systemu operacyjnego: strukturą modułową i architekturą opartą o technikę przesyłania komunikatów ( model client - server).

W przeciwieństwie do struktury systemu UNIX opartej o monolityczne jądro (rys. 1), system QNX składa się z wielu współpracujących ze sobą modułów zwanych zadaniami administrującymi. Moduły te kooperują ze sobą za pośrednictwem niewielkiego jądra systemu, którego główną funkcją jest zarządzanie zadaniami i przesyłanie komunikatów między nimi (rys. 2). Wszystkie pozostałe funkcje systemu operacyjnego (zarządzanie zbiorami, urządzeniami wejścia/wyjścia, współpraca z siecią lokalną, operatorem, itp.) realizowane są właśnie przez zadania administrujące.

Modułowość pozwala na dynamiczne konfigurowanie systemu QNX w zależności od wymagań zewnętrznych: zadania administrujące mogą być usuwane w trakcie pracy systemu. Struktura modułowa ma również podstawowe znaczenie w realizacji rozwiązań sieciowych opartych o system QNX. Zadanie może być załadowane w dowolnym węźle sieci i może mieć "przezroczysty" dostęp do dowolnego zasobu znajdującego się w dowolnym węźle sieci. Zadania nie muszą kontaktować się z jednym węzłem dedykowanym do obsługi zbiorów (w wielu sieciach tzw. file server stanowi wąskie gardło systemu). Użytkownik nie musi instalować oddzielnego oprogramowania sieciowego, gdyż moduł organizujący współpracę z siecią lokalną jest wbudowany w system QNX (jedno z zadań administrujących - NET).

Kluczem do tak efektywnej struktury modułowej i możliwości realizacji przetwarzania rozproszonego jest technika komunikacji zwana przesyłaniem komunikatów. Zadania, bez względu na ich umiejscowienie (w jednym węźle lub dwóch odległych węzłach) komunikują się ze sobą w taki sam sposób: poprzez przesłanie komunikatu.

Wysoka efektywność komunikacji międzyzadaniowej systemu QNX została osiągnięta dzięki przyjęciu tej techniki jako jednego z fundamentalnych założeń na etapie projektowania systemu. Dzięki jednolitej dla całej sieci komunikacji międzyzadaniowej QNX tworzy środowisko, w którym aplikacje mogą wykorzystywać moc wszystkich procesorów dostępnych w sieci. Każdy użytkownik z kolei może traktować sieć QNX jako jeden jednolity komputer składający się z zadań, zbiorów i urządzeń zewnętrznych i gdzie granice między fizycznymi węzłami są praktycznie "przezroczyste" (rys.3).

Wielozadaniowość.

System operacyjny QNX przeznaczony jest dla rodziny mikrokomputerów IBM PC i PS/2 opartych o mikroprocesory INTEL 80x86.

QNX dostępny jest w dwóch wersjach pracujących w trybie:

- rzeczywistym (ang. real mode)

- ochrony pamięci (ang. protected mode)

wykorzystujących odpowiadające tryby pracy mikroprocesora INTEL 80286.

System QNX pracujący w trybie rzeczywistym zajmuje 135kB pamięci i może zarządzać pracą 64 zadań, dla których dostępna jest pamięć operacyjna o wielkości 1MB. Wersja pracująca z ochroną pamięci zajmuje 160kB i może nadzorować pracę 150 zadań udostępniając im 16MB pamięci operacyjnej.

Zadania mają przydzielone priorytety z zakresu: 1-15 (1=max.). Priorytety: 1-4 zarezerwowane są dla zadań administrujących.

System QNX tworzą następujące zadania administrujące:

TASK- zadanie odpowiedzialne za zarządzanie innymi zadaniami: tworzenie i kasowanie zadań oraz przydzielanie im pamięci. Zadanie to ma najwyższy priorytet : 1.

FSYS- zadanie zarządza systemem zbiorów: tworzy, otwiera, czyta i pisze, a także zarządza dostępem do zbiorów. Zadanie to korzysta z własnych programów obsługi dysków twardych nie odwołujących się do BIOS'u, a także z kilku rodzajów pamięci buforowej co daje mu dużą efektywność.

DEV- zadanie obsługuje wszystkie znakowe urządzenia we/wy podłączone do portów szeregowych (np. terminale, modemy) i równoległych (np. drukarki) oraz sterowniki monitorów ekranowych.

NET- zadanie odpowiada za przesyłanie komunikatów w sieci lokalnej. Mimo niewielkiego rozmiaru ( ok. 10kB) zadanie umożliwia realizację przetwarzania rozproszonego w sieci.

IDLE- zadanie uruchamiane w sytuacjach, gdy nie ma innych zadań w stanie gotowości; jest to zadanie "wytracania" czasu.

Poza tymi podstawowymi zadaniami, system może być rozszerzany o kolejne zadania, które można dynamicznie ładować i usuwać w miarę potrzeb:

TIMER- zadanie udostępnia usługi czasowe: zegar czasu astronomicznego, zawieszenia czasowe, itp.

LOCKER- zadanie implementuje mechanizm blokowania rekordów kompatybilny z mechanizmem systemu UNIX.

QUEUE- zadanie kolejkowania komunikatów; umożliwia współpracę komunikujących się zadań o różnych szybkościach pracy (szybki 'producent' - wolny 'konsument')

SPOOLDEV- zadanie organizuje dostęp do fizycznych urządzeń wykorzystywanych przez wiele zadań

ACCOUNTANT- zadanie prowadzi rejestrację pracy zagaszających się użytkowników.

Zarządzanie zadaniami realizowane jest przez mikrojądro (ok. 10kB) i oparte jest o bazującą na priorytetach technikę wywłaszczania. Dla zadań wykonujących się na tym samym poziomie priorytetu czas procesora przydzielany jest zgodnie z zasadą podziału czasu przy czym, wielkość odcinka czasu może być regulowana: jest to wielokrotność taktu zegara systemowego (min. 1 ms).

Biblioteki systemu udostępniają programistom wiele funkcji pozwalających na tworzenie i efektywne sterowanie zadaniami (np. create, exec, fork, wait, slice, set_priority, itd.).

Operator systemu może uruchomić i sprawować kontrolę nad wieloma zadaniami drugoplanowymi.

W celu umożliwienia jednoczesnej realizacji wielu zadań, które komunikują się w sposób interakcyjny z operatorem (piszą na konsolę, pobierają dane z klawiatury) w systemie QNX zaimplementowano tzw. konsole wirtualne . System udostępnia 8 logicznych konsol związanych z jedną konsola fizyczną. Przełączenia między konsolami może dokonać operator (specjalną kombinacją klawiszy) bądź zadanie (specjalnym kodem sterującym). Dzięki temu można uruchomić wiele zadań, jednocześnie piszących na ekran.

Wielodostęp.

Pełne wykorzystanie możliwości systemu wielozadaniowego przez jedną osobę jest praktycznie niemożliwe chyba, że zostanie uruchomiona aplikacja monopolizująca procesor. Wynika stąd naturalna potrzeba udostępnienia mocy obliczeniowej komputera (nawet prostego IBM AT) wielu osobom. Najprostszą formą umożliwiającą realizację tego jest podłączenie terminali do komputera centralnego.

System QNX jest systemem wielodostępnym i umożliwia podłączenie do 32 terminali. Standardowo BIOS mikrokomputera PC pozwala na podłączenie dwóch terminali za pośrednictwem portów szeregowych. Większą liczbę terminali podłącza się za pośrednictwem specjalnych kart zwiększających liczbę portów szeregowych (np. 4*RS232, 8*RS232). Istnieją wersje takich kart wyposażone we własny procesor (ang. smart cards), odciążające procesor główny od czasochłonnych operacji transmisji w liniach szeregowych. Karta taka, pełniąc faktycznie rolę procesora komunikacyjnego, wpływa na zwiększenie przepustowości całego systemu.

Terminale mogą być podłączane za pomocą modemów telefonicznych oraz specjalnych kart pracujących w standardzie X.25, co pozwala na organizację na bazie systemu QNX terytorialnie rozproszonego systemu wielodostępnego.

Na pytanie o sens wielodostępu opartego o mikrokomputery małej mocy np. IBM AT można odpowiedzieć jak najbardziej twierdząco. Oczywiście nie ma to sensu jeśli kilka osób jednocześnie uruchomi aplikacje mocno obciążające procesor (np. obliczanie szybkiej transformaty Fouriera). Natomiast, jeżeli uruchomione zostaną zadania interakcyjne (np. edytor tekstu, wprowadzanie informacji do bazy danych, proste obliczenia tabelaryczne, a nawet kompilacja zbiorów źródłowych) spowalniane reakcją człowieka bądź urządzeń zewnętrznych (a tego typu aplikacji jest zdecydowana większość), to moc obliczeniowa np. IBM>AT wystarczy aby obsłużyć kilka osób, oferując satysfakcjonujące czasy reakcji.

Sieć lokalna.

System QNX został zaprojektowany jako sieciowy system operacyjny, tzn. współpraca z siecią lokalną jest integralną częścią systemu (realizuje to zadanie NET). Lokalna sieć komputerowa QNX Network pracuje w protokóle ARCNET z szybkością 2.5 MBit/sek.

Wybrano ten protokół komunikacyjny oraz związaną z nim metodę dostępu do medium komunikacyjnego opartą o tzw. przesyłanie znacznika z uwagi na determinizm i niezawodność szczególnie istotne w zastosowaniach czasu rzeczywistego. Metoda dostępu oparta o regułę rywalizacji (CSMA/CD) wykorzystywana w sieci ETHERNET nie ma tych zalet.

Sieć może składać się z 255 węzłów. Każdy węzeł (komputer) wyposażony jest w kartę sieciową QNX Netboard i ma przydzielony unikalny numer.

Węzły połączone są kablem koncentrycznym za pomocą rozgałęźników pasywnych i aktywnych. Pozwala to na tworzenie rozległych terytorialnie instalacji o drzewiastej strukturze połączeń technicznych. Logiczna architektura sieci QNX Network odpowiada topologii magistrali.

W sieci QNX Network nie ma ograniczeń w dostępie do zasobów takich jak: pamięci zewnętrzne, urządzenia znakowe (drukarki, modemy), terminale.

Nie ma również ograniczeń w wyborze procesora, na którym zadanie będzie wykonywane. Wszystkie zasoby komputerów włączonych do sieci mogą być dostępne dla wszystkich zadań. Określenie "mogą" oznacza, że administrator sieci może określonym użytkownikom zezwalać lub zabraniać dostępu do określonych zasobów (np. w celu zabezpieczenia istotnych zasobów przed niepowołanym dostępem).

Dla przykładu, zlecenie wydane w węźle nr 5 :

[1] [4]sort <[2]/ >[3]$

spowoduje załadowanie z kartoteki komend dysku bieżącego węzła nr 4 programu o nazwie "sort" i wykonanie go w węźle nr 1. Program "sort" będzie pobierał dane ze zbioru "z1" z kartoteki "/user" z węzła nr 2 a wyniki drukował na drukarce podłączonej do węzła nr 3.

Oczywiście, użytkownik musi mieć nadane odpowiednie uprawnienia pozwalające na realizację takiego przetwarzania.

Komunikacja między zadaniami realizowanymi w różnych węzłach odbywa się bez żadnych przeszkód, gdyż sieć QNX Network jest w tym zakresie "przezroczysta". Umożliwia to realizację przetwarzania rozproszonego, tzn. można zdalnie uruchamiać zadania w mniej obciążonych węzłach i zadania w dalszym ciągu mają dostęp np. do bazy danych leżącej w jeszcze innym węźle.

Dzięki wielodostępowi i możliwościom sieciowym QNX jest systemem, który może rozwijać się wraz z potrzebami użytkownika. Możliwości rozwoju są szerokie: poczynając od jednostanowiskowego komputera PC, poprzez instalację wielodostępną np. IBM PC/386 wyposażony w 16 terminali, aż wreszcie po sieć lokalną składającą się maksymalnie z 255 węzłów , z których każdy może być wyposażony w 32 terminale, co daje imponującą liczbę (32+1)*255=8415 stanowisk pracy (rys.4). Należy dodać, że zmiany konfiguracji nie wpływają na konieczność wprowadzania zmian w oprogramowaniu użytkowym.

Bardzo ważną cechą systemu QNX jest możliwość zdalnego ładowania systemu do pamięci mikrokomputera za pomocą sieci. Pozwala to na budowę tanich sieci komputerowych opartych w większości o całkowicie bezdyskowe stacje robocze . Możliwe jest również włączenie do sieci węzłów pozbawionych monitora ekranowego i klawiatury (np. typowe sterowniki przemysłowe lub węzły obliczeniowe), oczywiście przy zachowaniu pełnych możliwości zdalnego sterowania!!.

Czas rzeczywisty.

QNX był projektowany jako system czasu rzeczywistego i spełnia wszystkie wymogi stawiane takim systemom tj. wielozadaniowość, priorytety zadań, wywłaszczanie zadań, asynchroniczna obsługa we/wy, krótki czas obsługi przerwania efektywna komunikacja międzyzadaniowa, itd.

QNX jest bardzo szybkim systemem operacyjnym co wyraża się w bardzo krótkich czasach przełączania zadań (ang. task-switch time): np. w mikrokomputerze IBM PC/486-33MHz - 13 mikrosekund.

W poniższej tabeli przedstawione są wyniki pomiarów kilku systemów typu UNIX, przeprowadzone dla mikrokomputerów rodziny IBM PC.

Procesor typ / zegar System operacyjny Czas przełączenia [mikrosek] Ilość przełączeń na sek
80486 / 25 MHz QNX 16 64485
80486 / 25 MHz Interactive 386/IX 360 2778
80386 / 16 MHz QNX 58 17260
80386 / 16 MHz ISC 386/IX 1300 769
80386 / 16 MHz XENIX 1501 666
80286 / 8 MHz QNX 164 6102
80286 / 8 MHz XENIX 4878 205
8088 / 5 MHz QNX 1284 778

Komunikacja międzyzadaniowa realizowana jest również w sposób bardzo efektywny. Przesłanie 1 bajtu między dwoma zadaniami uruchomionymi w mikrokomputerze IBM PC/386-20MHz zajmuje 140 mikrosekund. zwiększenie długości komunikatu nieznacznie tylko zwiększa czas przesłania: np. dla komunikatu o długości 100 bajtów czas ten wynosi 150 mikrosekund.

Komunikacja za pośrednictwem sieci QNX Network między zadaniami wykonującymi się w różnych węzłach realizowana jest również w sposób efektywny:

1 bajt - ok. 1 milisekundy

100 bajtów - ok. 1.8 milisekundy.

Dla porównania: przesłanie 1 bajtu między zadaniami uruchomionymi w tym samym węźle pod systemem ISC 386/IX zajmuje ok. 1.2 milisekundy.

Obsługa przerwań realizowana jest w systemie QNX również bardzo efektywnie. Poniższy rysunek obrazuje przebieg obsługi przerwania:

moment uruchomienie koniec wznowienie

zgłoszenia handlera pracy przerwanego

przerwania handlera zadania

| | | |

| | | |

V V V V

DDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDDDEDDD> t

@DDDDDDDDDDDDDDDDY @DDDDDDDDDDDDDDDDDY

Til Tiret

@DDDDDDDDDDDDDDDDDDY

Tint

gdzie:

Til - opóźnienie obsługi przerwania

Tint - czas obsługi przerwania

Tiret - opóźnienie wznowienia przerwanego procesu

W poniższej tabeli przedstawione zostaną czasy opóźnień zmierzone dla różnych mikroprocesorów:

ZDDDDDDDDDDDDDDDDDDDDBDDDDDDDDDDDDDDDBDDDDDDDDDDDDDDD?

3 Mikroprocesor 3 Til 3 Tiret 3

3 3 [mikrosek.] 3 [mikrosek.] 3

CDDDDDDDDDDDDDDDDDDDDEDDDDDDDDDDDDDDDEDDDDDDDDDDDDDDD4

3 INTEL 80486-33MHz 3 6 3 5 3

3 3 3 3

3 INTEL 80386-33MHz 3 11 3 10 3

3 3 3 3

3 INTEL 80386-20MHz 3 19 3 17 3

3 3 3 3

3 INTEL 80286-8MHz 3 65 3 59 3

@DDDDDDDDDDDDDDDDDDDDADDDDDDDDDDDDDDDADDDDDDDDDDDDDDDY

Tabela ta przekonuje również o tym, że inwestowanie w lepszy procesor (wyższy model, szybszy zegar) jest szczególnie uzasadnione właśnie w systemach czasu rzeczywistego.

Oprócz przesyłania komunikatów i kolejek (zadanie QUEUE) w systemie QNX zaimplementowane są jeszcze dwie techniki komunikacji międzyzadaniowej:

- łącza (ang. ports) - głównie do komunikacji z handlerami urządzeń zewnętrznych

- wyjątki (ang. exceptions) - obsługa asynchronicznych zdarzeń zewnętrznych i wewnętrznych.

W systemie QNX zrealizowana jest bardzo efektywna obsługa czasomierzy (minimalna rozdzielczość- 1ms) oraz istnieje możliwość programowej regulacji kwantu przydzielanego zadaniom realizowanym na tym samym poziomie priorytetu.

Programista ma pełną kontrolę nad priorytetami zadań: na etapie tworzenia oraz w trakcie ich realizacji, za pomocą komend systemowych lub z poziomu realizowanego zadania użytkowego.

System QNX może być wraz z programami użytkowymi w całości ładowany do pamięci ROM. Cecha ta w połączeniu z niewielkimi rozmiarami systemu (135kB), możliwością tworzenia zadań realizujących się w oparciu o współdzielony kod oraz możliwością wykorzystywania współdzielonych bibliotek pozwala na stosowanie systemu QNX również w systemach wbudowanych np. prostych sterownikach przemysłowych.

Organizacja i ochrona danych.

System plików QNX'a jest bardzo podobny do systemu plików UNIX'a: hierarchiczność, postać katalogów, podstawowe operacje, itp.

Pliki mogą mieć wielkość 1 TB. Najmniejszą jednostką przydzielaną plikowi jest blok o wielkości 512 bajtów. Zapis plików nie musi być ciągły. Sektory dysku, w których zapisany został plik tworzą przy pomocy 'łączników dwukierunkową list'. Ułatwia to odzyskiwanie plików po różnego rodzaju awariach. System operacyjny używa mapy zajętości sektorów na dysku w celu szybkiego przydzielania wolnej pamięci oraz zmniejszania fragmentacji zapisywanych plików. Mapa ta zajmuje pierwsze sektory na dysku, lecz w celu przyspieszenia zapisywania plików, mapa ta może być załadowana do bufora w pamięci operacyjnej tzw. bmcache. Poza tym mogą być stosowane specjalne bufory (ang. cache) przyspieszające dostęp do danych.

Każdy plik (a katalog też jest plikiem) ma związane ze sobą pola zezwoleń określających uprawnienia dostępu różnych użytkowników systemu. Zezwolenia dotyczą operacji: czytaj, pisz, wykonaj, itp.