OS в реално време QNX
Този преглед се фокусира върху операционната система в реално време (RTOS), наречена QNX. Коя ОС може да работи правилно 20 години без рестартиране? QNX може да представлява интерес не само за специалисти по вградени и високонадеждни системи, но и за широк кръг от "обикновени" потребители. Именно на базата на тази RTOS работи популярният таблет BlackBerry PlayBook от RIM.
Обща информация за QNX.
Операционната система в реално време QNX не е разклонение на която и да е UNIX-подобна система, като Linux дистрибуция или клонинг. Да, тази система е UNIX-подобна, но е независима. Този RTOS е базиран на неговото "микроядро", има поддръжка за POSIX стандарти (последни версии). През 1981 г. е пусната първата версия на QNX, последвана от QNX2, QNX4 и QNX 6 (QNX Neutrino). QNX2 беше широко използван през 80-те години, но все още се среща на някои места. Разцветът на версията QNX4 дойде през 90-те години, по това време тя доста успешно се конкурира с Windows. В началото на века започна разработването на нов клон на QNX RTOS: QNX6 (QNX Neutrino). Последната версия е доста модерна - пусната е в началото на 2000-те. В сравнение със своите предшественици, той предоставя много нови функции: поддръжка на споделени библиотеки, поддръжка на многопроцесорна обработка, поддръжка на хардуерни архитектури, различни от x86, например SH4, ARM, PowerPC, MIPS и др. Мрежовата подсистема, графичната система Photon и други RTOS подсистеми са претърпели сериозна обработка. Тази версия въвежда възможност за лесно пренасяне на мрежови драйвери на NetBSD към QNX6.
QNX RTOS има много положителни аспекти, като отлична вградена помощ, лекота на разработка за тази операционна система, висока надеждност, модулна структура и т.н. Да спрем до тук, за да не преувеличаваме.
Бих искал да се спра по-подробно на най-новата версия на QNX RTOS - QNX6, която поддържа повечето от необходимите съвременни технологии и на която се основават всички нови проекти. Предишната версия - QNX4 - вече не се разработва, а се поддържа само от производителя, няма некомерсиални или пробни лицензи за нея. Поддръжката за тази версия се проявява в коригиране на грешки и актуализиране на драйвери. Затова по-нататък ще говорим за новата версия на QNX6.
Къде се използва QNX.
QNX е операционната система, необходима за изграждане на вградени системи. Основните му характерни черти са модулността и произтичащата от това мащабируемост. Това позволява на QNX да намери своето място както в персонални компютри, така и в миниатюрни контролери. Освен това е възможно да се изградят продуктивни мрежови клъстери с помощта на прозрачната QNX мрежа.
Обхватът на QNX се дължи на високата надеждност на системата и включва: металургичната и петролна и газова промишленост, както и военно и медицинско оборудване. В края на миналото десетилетие QNX RTOS започна да набляга на поддръжката на мултимедийни технологии. Появиха се базираният на QNX таблетен компютър BlackBerry PlayBook и проектът QNX Car.
От какво е направен QNX6. Компонентите и съставът на QNX6 често са объркващи за по-малко напреднали потребители. Ще се опитаме да изясним ситуацията, за да избегнем объркване. Опциите за доставка за QNX6 са използвани по различни начини през 10-те години на неговото съществуване. Сега се използва най-успешната опростена схема QNX 6.5.0. По-долу са двата му основни компонента:
- QNX SDP (платформа за разработка на софтуер). Състои се от QNX Neutrino, библиотеки за разработка и хедъри, компилатори и базираната на Eclipse Momentics IDE.
- QNX неутрино. Състои се от графична среда, помощни програми, драйвери, набор от микроядра и др. за SH4, ARM, PowerPC, MIPS и x86 хардуерни платформи.
Имайте предвид, че QNX SDP е наличен за Linux и Windows платформи.
Официално има поддръжка само за няколко дистрибуции на Linux, но на практика се изисква само модерна Java. Много разработчици изпълняват QNX на 64-битова система за разработка, базирана на ArchLinux.
Бих искал да поясня, че QNX SDP е набор от инструменти за разработка на различни платформи за операционната система QNX Neutrino.
Софтуер за QNX Neutrino RTOS.
Дистрибуцията на QNX6 включва не само драйвери и микроядро, но и редица конзолни помощни програми (общи за всички UNIX-подобни системи и специфични за QNX). Освен това има независима графична среда, която не е съвместима с X-Window и Windows - графична подсистема, базирана на Photon 2.0. Системната услуга XPhoton ще ви помогне да стартирате графични приложения, които използват протокола X.
Също така налични за QNX6 са Adobe Flash Lite 3 и Qt/Embedded (сега в Foundry27 версия 4.7.1) графични среди.
Освен това QNX поддържа pkgsrc (система за управление на пакети, която има много програми с отворен код, налични под формата на скриптове за изграждане и изградени двоични пакети). Лесно е да се сглоби добре написан C код в QNX, благодарение на поддръжката му за POSIX спецификацията. QNX6: типове лицензи. QNX е търговска операционна система, така че ще ви трябва лиценз, за да я инсталирате. Следват видовете лицензи за QNX6:
- Некомерсиален. Позволява некомерсиална разработка и работа с QNX.
- Пробен период. Издава се за месец (30 дни). Дава възможност за запознаванесъс среда за разработка и пълнофункционална версия на QNX, за да оцени осъществимостта на последващо закупуване на RTOS.
- Академичен. Издава се на висши учебни заведения за обучение и обучение на студенти.
- Реклама. Изисква се за комерсиално разработване на софтуер или устройства, базирани на QNX. В този случай QNX6 RTOS се закупува от дистрибутор.
Некомерсиалната версия на лиценза е най-подходяща за преглед, която не струва нищо и няма ограничения за срока на валидност.
Необходима е регистрация за достъп до общността на Foundry27 и много области на qnx.com. Тази процедура е доста проста и няма да отнеме много време. Отидете на www.qnx.com и щракнете върху връзката Вход, разположена в горния десен ъгъл. След това изберете елемента от менюто Нов член. След това в долната част на екрана ще се отвори форма за регистрация. В него ще трябва да въведете своя имейл и парола (с потвърждение). След като приключите, щракнете върху бутона Създаване на акаунт. След това ще трябва да попълните въпросник, след което ще бъде изпратен код за потвърждение на посочената по-рано пощенска кутия, която трябва да бъде посочена на следващата страница в специален формуляр. Това е всичко - регистрирани сте и можете да изтеглите дистрибуцията на QNX.
Как да регистрирам нетърговски лиценз.
Процеси, нишки и QNX RTOS микроядро.
В тази глава ще се докоснем до определението за микроядро и какво прави то, ще говорим за системната архитектура на QNX и (като хубав бонус) ще разбием два мита, свързани с QNX.
Относно стандартите POSIX. Първата версия на операционната система в реално време QNX е пусната през 1981 г. Оттогава, когато създават по-нови версии, разработчиците използват натрупания опит и правят системата по-съвършена и по-удобна заразработчици. В резултат на това QNX Neutrino поддържа профили на среда на приложения (AEP), допълнителни разширения в реално време, разширения в реално време, нишки и други стандарти POSIX 1003.1.
Смята се, че всяка POSIX платформа е базирана на UNIX, което означава, че е твърде голяма и голяма за вградени решения. За QNX RTOS обаче това твърдение е погрешно. В нейния случай стандартът POSIX не описва имплементация, а интерфейс. В същото време дори микроядрото може да бъде скрито под POSIX.
След това бих искал да очертая предимствата на POSIX в QNX:
- Удобство за разработчиците. Разработчиците, които познават POSIX и UNIX, могат лесно да навигират и да разработват под QNX - те ще бъдат запознати с повечето от ОС.
- Възможност за повторно използване на код. Добре тестван и отстранен грешки в една от POSIX системите, кодът може лесно да се използва в друга, например QNX.
По този начин предимствата на POSIX в QNX са очевидни.
Истинско ядро. QNX RTOS е базирана на микроядрена архитектура. Преди да продължа статията, бих искал да дефинирам микроядро в терминологията на QNX. Напоследък популярността на този термин нараства бързо. По-голямата част от системите с малки ядра се наричат микроядрени. За много малки ядра се използва терминът наноядро. За QNX обаче този подход не е напълно правилен. В този случай малкият размер на ядрото не е самоцел. В QNX много функции на ОС са преместени извън ядрото в областта на потребителските приложения. Това се отнася например за поддръжка на файлова система. В същото време функционалността на микроядрото е ограничена, тя е предимно заетаосигуряване на взаимодействие между задачите:
- Управление на таймера;
- управление на сигнали;
- Синхронизиране на нишки;
- График на потока;
- Контрол на потока;
- Съобщения (основната функция на микроядрото).
Бих искал да отбележа, че управлението на процесите не е поверено на микроядрото, а на така наречения мениджър на процеси. Последният е подреден в един модул с микроядро и може да се каже, че е истинското ядро на цялата система.
Микроядрото на система QNX изпълнява всички горепосочени функции. Дискова поддръжка, мрежови драйвери и т.н. са преместени в отделни модули. Стартирането и работата на модулите наподобява обикновени потребителски процеси. Това предполага очевидните предимства на QNX пред системите, базирани на монолитно ядро:
- Микроядрото осигурява повишена надеждност на системата. Например грешка в драйвер няма да срине системата и микроядрото. Рестартирането на системата също не е необходимо - просто рестартирайте драйвера по всяко време.
- Микроядрото осигурява повишена модулност. Просто трябва да стартирате необходимите мениджъри, така че крайната целева система да бъде конфигурирана според изискванията.
- Микроядрото е много по-лесно за тестване и отстраняване на грешки, защото изходният му код е значително по-малък от този на монолитното ядро.
Микроядрото QNX не е написано на асемблер. Някои разработчици смятат, че микроядрото QNX Neutrino е написано на асемблер и това обяснява неговата компактност и производителност. Това обаче не е вярно. Езикът, на който е написано ядрото на QNX Neutrino, е C. А компактността и производителността се дължат на използването на добре установени структури и алгоритми.
Нишки и процеси в QNX. QNX RTOS поддържа нишки, oкоето можете да разберете, като прочетете спецификациите на POSIX. Освен това само нишките в QNX се считат за минималната "единица за изпълнение", само микроядрото на системата ги управлява. Всеки процес в QNX има една или повече нишки, т.е. може да се разглежда като един вид "контейнер за нишки".
Най-простият процес съдържа само една нишка, но често може да е необходимо да се изпълнят няколко алгоритъма в един процес паралелно. Помислете за малък пример от QNX RTOS. Мениджърът на файловата система в паралелен режим може да получава и обработва заявки от няколко процеса (клиенти) наведнъж. Мениджър, работещ в една нишка, би бил неудобен, тъй като когато дори втори клиент има достъп до него, той ще трябва да изчака, докато операцията, заявена по-рано, бъде завършена. Мениджърът на файловата система в QNX може да обслужва множество приложения паралелно и едновременно поради факта, че работи в множество нишки.
QNX коригира проблема с твърде бавното превключване на контекста между процесите. За да се елиминира твърде бавното превключване на контекста между процесите, в UNIX системите се появиха нишки. В резултат на това много хора смятат, че превключването на контекста между процесите по принцип е много бавно. Оказва се, че ако системата използва микроядро и предаване на съобщения, тогава в сравнение с използването на монолитно ядро, тя има повече контекстни превключватели. От това те заключават, че такива системи (включително QNX) са по-бавни. Въпреки това, в архитектурата QNX Neutrino, проблемът с производителността на превключването на контекста е успешно решен. В този RTOS практически няма разлика в скоростта на превключване на контекста между нишки и процеси.
Една работеща нишка може да има две състояния:
- Блокиран - блокиран
- Готово - готово
Една нишка може да бъде блокирана поради много различни причини. Ако въведете командата pidin, която е специфичен за QNX вариант на помощната програма ps, можете да видите много различни състояния, сред които: