Poprzednia - Następna

Linux jako RTOS

Pojawia się (oczywiste z racji naszego zafascynowania Linuksem) pytanie, czy Linux jest lub mógłby być real-time systemem operacyjnym. Aby odpowiedzieć sobie na to pytanie, warto spojrzeć ogólnie na "zwykle" systemy operacyjne i ich inklinacje do bycia RTOSami.


Ogólnozadaniowe systemy operacyjne jako RTOSy?

Ogólnozadaniowe systemy operacyjne nie są dobrymi kandydatami na RTOSy. Z czego to wynika? Aby odpowiedzieć na to pytanie, należy przyjrzeć się zadaniom i oczekiwaniom wobec "normalnego" systemu operacyjnego, a real-time systemu.

Zwyczajne OS maja cele inne niż real-time systemy, mianowicie:

Natomiast w przypadku systemu RT (również RTOSa) kwestia priorytetowa jest zapewnienie wykonywania zadań real-time stosunkowo szybko, lecz przede wszystkim - przewidywalnie.

Wyobraźmy sobie dwa systemy: w pierwszym przełączenie kontekstu zajmuje zazwyczaj 10 jednostek czasu, w najgorszym przypadku osiągając 12 jednostek czasu; drugi - w którym zazwyczaj przełączenie kontekstu trwa 3 jednostki czasu (a wiec dużo mniej niż w pierwszym systemie), natomiast w najgorszym wypadku zajmuje 20 jednostek czasu.

Jako "normalny" system operacyjny drugi system byłby preferowany. Z punktu widzenia idei real-time systemu, pierwszy z systemów jest lepszy, gdyż drugi zaczyna być niebezpieczny (choć wciąż mamy gwarancje czasu pesymistycznego).


Czy Linux jest real-time?

Z jednej strony Linux wspiera rozszerzenia real-time ze standardu POSIX 1003.13. POSIX 1003.13 (któremu dokładniej przyjrzymy się nieco później) definiuje minimalny real-time system, i m.in. techniki do "blokowania" procesów w pamięci, aby nie mogły być zrzucane na dysk, a także specjalny scheduler, który zapewnia deterministyczne wykonywanie procesów.

Aby być zgodnym ze standardem, Linux zapewnia zgodny z POSIXem mlock, specjalne wywołania systemowe, oraz sygnały POSIX RT.

Mimo zgodności z POSIX 1003.13, Linux nie może być określony mianem RT systemu - choćby z racji faktu, ze procesy mogą być blokowane przez aktywność jadra (którego do jadra 2.6 nie dało się wywłaszczyć).

Wymagania Linuksa jako ogólnozadaniowego systemu operacyjnego są odmienne od wymagań i potrzeb RTOSa. Ta różnica prowadzi do pewnych kwestii, które ograniczają potencjał Linuksa jako real-time systemu operacyjnego:

  1. Jadro Linuksa stosuje "gruboziarnista" synchronizacje - która pozwala procesom jądra mieć wyłączny dostęp do pewnych danych przez dłuższy czas. To odkłada wykonanie każdego innego POSIX real-time procesu, który potrzebuje dostępu do tych samych danych.
  2. Linux nie wywłaszcza procesów podczas wywołań systemowych. W związku z tym procesy o małych priorytetach mogą, będąc w wywołaniu systemowym, blokować procesy o wyższych priorytetach.
  3. Linux każe czekać wysoko priorytetowym zadaniom na zwolnienie zasobów, które posiadają zadania nisko priorytetowe.
  4. Linuksowy algorytm szeregowania (czasem) przyzna procesor nawet najmilszemu i najmniej ważnemu procesowi - nawet gdy jest gotowy do wykonania proces ważniejszy. Linux jest "dla wszystkich", co oznacza, ze nie chce dopuścić do zagłodzenia procesu.
  5. Linux przeszeregowuje żądania od procesów, by używać sprzętu bardziej wydajnie. Dla przykładu, żądania dostępu do dysku od procesów mniej ważnych mogą zostać wykonane przed analogicznymi zadaniami procesów ważniejszych, aby zminimalizować ruch głowicy lub zwiększyć szanse korekcji błędów.
  6. Niektóre operacje wykonywane są z wyprzedzeniem lub opóźnieniem - na przykład zamiast zwolnic jedna stronę pamięci Linux przebiega listę wszystkich stron i zwalnia strony, które może zwolnic.

Powtarzając: ogolnozadaniowe OSy i RTOSy maja często sprzeczne potrzeby, a efekt pożądany w jednym jest często szkodliwy w drugim.


Poprzednia - Linux jako RTOS - Następna