Poprzednia - Następna

Komunikacja między procesami

Koncepcja tworzenia systemu real-time wybrana przez twórców RTLinuksa, to znaczy wyraźny podział na cześć real-time i cześć non-real-time w połączeniu z ograniczoną funkcjonalnością dostępną części real-time, narzuca wymaganie, by możliwa była komunikacja pomiędzy procesami, także pomiędzy zwykłymi procesami Linuksa a procesami RT.

RTLinux zapewnia taki komunikacji między procesami. Dostępne są proste kolejki FIFO, zwane RT-FIFO, w celu odróżnienia łącz nazwanych mechanizmu IPC UNIXa. RT-FIFO to proste bufory, które działają podobnie jak UNIXowe pipe'y, to znaczy są strumieniem bajtów bez narzuconej struktury. RT-FIFO jest buforem stałego rozmiaru, na którym można wykonywać operacje czytania i pisania. Interfejs RT-FIFO od strony procesów RT jest podobny do interfejsu łącz nazwanych IPC. Operacje na RT-FIFO są od strony procesów RT nieblokujące.

Procesy Linuksa widzą RT-FIFO jako urządzenia znakowe. Procesy Linuksa działają na RT-FIFO jak na normalnych plikach, oczywiście pod warunkiem, że wcześniej jakiś proces RT utworzył odpowiednie RT-FIFO.

Obsługa RT-FIFO zmieniała się w różnych wersjach RTLinuksa. W pierwszych wersjach RTLinux RT-FIFO musiały być urządzeniami o nazwach /dev/rtf0 do /dev/rtf/64. Co więcej, odpowiednie pliki trzeba było ręcznie utworzyć (poprzez mknod) po stronie Linuksa. Obecnie RT-FIFO mogą mieć dowolne nazwy i nie trzeba tworzyć plików specjalnych za pomocą mknod. Przy wyborze nazw dla RT-FIFO trzeba jednak uważać, bo jeżeli istnieje plik o tej nazwie, to zostanie on zniszczony bez komunikatu o błędzie i zastąpiony przez urządzenie znakowe.

RT-FIFO implementowane są jako bufory w przestrzeni adresowej jądra. Ponieważ zasoby dla procesów RT są przydzielane statycznie, pamięć na RT-FIFO musi zostać zaalokowana w wątku Linuksa. W praktyce wygląda to tak, że RT-FIFO są tworzone w funkcji init_module i usuwane w funkcji cleanup_module. Jest także możliwość skompilowania jądra w ten sposób, by można było utworzyć dynamicznie RT-FIFO. Wtedy jednak przestrzeń na bufor RT-FIFO musi zostać alokowana statycznie. Także liczba RT-FIFO dostępnych w systemie jest ograniczona. Ograniczenie to można zmienić przy konfiguracji jądra.

Poprzednia - Komunikacja między procesami - Następna