Кіріспе

Нақты уақыт операциялық жүйе

RTLinux – Linux операциялық жүйесін толық алдын ала үзіліспен іске асыратын, нақты уақыт операциялық жүйесінің (RTOS) микроядросы. Нақты уақыттың жоғары дәлдігі RTLinux қолданбаларынан роботтарды, деректерді жинау жүйелерін, өндіріс орналастыруларын және уақытқа сезімтал басқа да құралдар мен машиналарды басқаруға мүмкіндік береді. Бұл әзірлеме патенттелген. Атауы ұқсас болғанымен, ол Linux Foundation-ның Real Time Linux жобасымен ешқандай қатысы жоқ. RTLinux-ты Виктор Йодайкен, Майкл Барабанов, Корт Дуган және тағы басқалар Нью-Мексико Тау-кен және технология институтында, кейін FSMLabs компаниясында коммерциялық өнім ретінде жасады. Wind River Systems 2007 жылдың ақпан айында FSMLabs компаниясының кіріктірілген технологиясын сатып алып, Wind River Linux үшін Wind River Real Time Core нұсқасын ұсынды. 2011 жылдың тамызынан бастап Wind River компаниясы Wind River Real Time Core өнімдерін шығаруды тоқтатты, нәтижесінде RTLinux өніміне коммерциялық қолдау көрсету тоқтатылды.

Өмірбаян

RTLinux-тың басты жобалау мақсаты – екі мүмкіндікті де қамтитын күрделі басқару бағдарламаларын жасауды жеңілдету үшін, қолжетімді операциялық жүйеге нақты уақыт қабілеттерін қосу болды. Мысалы, қолжетімді дерекқорды пайдаланатын және веб-оператор интерфейсін экспорттайтын нақты уақыт мотор контроллерін жасау қажет болуы мүмкін. Нақты уақыт және нақты емес уақыт қабілеттерін қолдайтын бір операциялық жүйені құруға тырысудың орнына, RTLinux нақты уақыт және нақты емес уақыт операциялық жүйелері арасында есептеу құрылғысын бөлісу үшін жасалды, сонда (1) нақты уақыт операциялық жүйені нақты емес уақыт операциялық жүйе орындаудан тоқтатуға болмайды және (2) екі түрлі ортада жұмыс істейтін компоненттер деректермен оңай бөлісе алады. Аты айтқандай, RTLinux бастапқыда Linux-ты нақты емес уақыт жүйесі ретінде пайдалануға арналған, бірақ ол RTCore нақты уақыт ядросы Linux немесе Berkeley Software Distribution (BSD) Unix-пен жұмыс істей алуы үшін дамыды. Көп орталы нақты уақыт (MERT) – Unix жүйесімен қатар жұмыс істейтін нақты уақыт операциялық жүйесінің алғашқы мысалы болды. MERT дәстүрлі виртуализациялау техникасына сүйенді: нақты уақыт ядросы хост операциялық жүйе (немесе гипервизор) болды, ал Bell Systems Unix – қонақ жүйе. RTLinux MERT тұжырымдамасын PC дәуіріне және қолжетімді аппараттық құралдарға бейімдеу әрекеті болды. Бұл сонымен қатар MERT-тің өнімділік шектеулерін, әсіресе виртуализацияның тудырған қосымша шығындарын жеңуге бағытталған әрекет болды. Қонақ операциялық жүйені виртуалды машинаға ендірудің орнына, RTLinux тек қонақ үзілістерін басқаруды виртуалды етті. Бұл әдіс нақты уақыт ядросына қонақ операциялық жүйені толықтай үзіліске келтіруге мүмкіндік берді, бірақ ол әлі де тікелей басқаруға болатын, мысалы, сақтау құрылғыларын. Әсіресе, қонақ жүйе үшін стандартты драйверлер бастапқы кодты өзгертпей жұмыс істеді, бірақ оларды виртуализацияның "крюктерін" пайдалану үшін қайта құрастыру қажет болды. Паравиртуализацияны да қараңыз. Unix құбыры нақты уақыт және нақты емес уақыт бағдарламаларының байланысуына мүмкіндік беру үшін бейімделді, бірақ ортақ жад сияқты басқа әдістер де қосылды. Бағдарламашының көзқарасы бойынша, RTLinux бастапқыда нақты уақыт тапсырмалары үшін кішкентай жиектелген ортаға және қалғандары үшін стандартты Linux ортасына ұқсады. Нақты уақыт операциялық жүйесі жүктелетін ядролық модуль ретінде іске асырылды, ол қонақ үзілістерін басқаруды виртуалды етуден басталып, содан кейін нақты уақыт жоспарлаушысын іске қосты. Тапсырмаларға статикалық басымдықтар берілді және жоспарлау бастапқыда тек басымдыққа негізделген. Қонақ операциялық жүйе ең төменгі басымдыққа ие тапсырма ретінде қосылды және нақты уақыт жүйесі үшін бос жүріс тапсырмасы ретінде әрекет етті. Нақты уақыт тапсырмалары ядролық режимде орындалды. Кейінірек RTLinux портативті операциялық жүйе интерфейсін (POSIX) POSIX жиектері қолданбалық бағдарламалау интерфейсін (API) қабылдады және содан кейін қонақ процестерінің ішінде жұмыс істейтін нақты уақыт жиектерін жасауға рұқсат берді. Көппроцессорлық ортада жиектер процессорлық ядроларға бекітілді және қонақ жиегінің белгіленген ядрода жұмыс істеуіне жол бермеуге болады (фактически, ядроларды тек нақты уақыт өңдеуі үшін резервтеу).

Іске асыру

RTLinux стандартты Linux-пен бірге бір машинада арнайы нақты уақыт тапсырмаларын орындау және үзілістерді басқару мүмкіндігін ұсынады. Бұл тапсырмалар мен басқарушылар Linux нені істеп жатқанына қарамастан, қажет болған кезде орындалады. RTLinux-та жалпы x86 (шамамен 2000 жылғы) аппараттық құрылымда процессор аппараттық үзілісті анықтаған сәттен бастап үзіліс басқарушысы орындала бастаған сәтке дейінгі ең нашар жағдай уақыты 15 микросекундтан кем. RTLinux-тың периодтық тапсырмасы сол аппараттық құрылымда жоспарланған уақытынан 35 микросекунд ішінде орындалады. Бұл уақыт аппараттық шектеулермен анықталады, ал аппараттық жақсарған сайын RTLinux та жақсарады. Стандартты Linux-тың орташа өнімділігі өте жақсы және POSIX жұмсақ нақты уақыт мүмкіндіктерін пайдалана отырып, тапсырмаларды жоспарлауда миллисекундтық дәлдікті қамтамасыз ете алады. Алайда, стандартты Linux миллисекундтық дәлдік пен сенімді уақыт кепілдіктерін беру үшін жасалмаған. RTLinux жеңіл виртуалды машина негізінде құрылған, онда Linux "қонаққа" виртуалды үзіліс контроллері мен таймер берілген, ал қалған барлық аппараттық қолжетімділік тікелей болды. Нақты уақыт "хостының" көзқарасынан Linux ядросы – бұл жіп. Детерминистік өңдеуге қажетті үзілістер нақты уақыт ядросымен өңделеді, ал қалған үзілістер Linux-қа жіберіледі, ол нақты уақыт жіптеріне қарағанда төменгі басымдықпен жұмыс істейді. Linux драйверлері I/O-ның көп бөлігін басқарады. Операциялық жүйе мен RTLinux арасында деректерді бөлісу үшін First In First Out (FIFO) құбырлары немесе ортақ жад пайдаланылуы мүмкін.

Мақсаты

RTLinux-тың басты жобалау мақсаты – жүйенің түсінікті, модульдік және кеңейтілмелі болуы. Түсініктілік дегеніміз, жабық жәшіктер болмайды және кез келген операцияның бағасы болжамды болуы керек. Модульділік – қажет болмаған жағдайда, функционалдық мүмкіндіктерді және оларға кеткен шығындарды жоюға болады. Ал кеңейтілмелілік дегеніміз, бағдарламашылар модульдерді қосып, жүйені өз қажеттіліктеріне бейімдей алады. Базалық RTLinux жүйесі жоғары жылдамдықты үзілістерді өңдеуді ғана қолдайды. Ол қарапайым басымдық кестесімен жабдықталған, оны белгілі бір қолданбалардың қажеттіліктеріне сәйкес келетін кестелермен оңай алмастыруға болады. RTLinux-ты жасау кезінде Linux-тың және оның қуатты мүмкіндіктерін пайдаланудың артықшылықтарын барынша арттыру мақсаты көзделген.

Негізгі компоненттері

RTLinux шағын негізгі компонент және қосымша компоненттер жиынтығы ретінде құрылған. Негізгі компонент Linux жүйесінің өзі кешіктіре алмайтын немесе тоқтатып тастамайтын өте төмен жауап уақыты бар үзіліс иеленушілерді орнатуға, сондай-ақ төмен деңгейдегі синхрондау және үзіліс басқару процедураларын жүзеге асыруға мүмкіндік береді. Бұл негізгі компонент SMP қолдауын қамтамасыз ету үшін кеңейтілді, сонымен қатар негізгі компоненттен тыс жерде жүзеге асырылатын кейбір мүмкіндіктерді алып тастау арқылы оңайлатылды.

Функциялар

RTLinux функцияларының көп бөлігі, қосымша қызметтер мен абстракция деңгейлерін ұсынатын жүктелетін ядро модульдері жиынтығында орналасқан. Бұл модульдерге мыналар кіреді: rtl sched – төменде сипатталған "жеңіл POSIX" интерфейсін және бастапқы V1 RTLinux API-ін қолдайтын басымдық шемалаушы. rtl time – процессор сағаттарын басқарады және басқарушыларды сағаттарға қосу үшін абстрактілі интерфейсті экспорттайды. rtl posixio – құрылғы драйверлеріне POSIX стиліндегі оқу/жазу/ашу интерфейсін қолдайды. rtl fifo – RT тапсырмаларын және үзіліс басқарушыларын Linux процестерімен құрылғы қабаты арқылы байланыстырады, соның арқасында Linux процестері RT компоненттеріне мәлімет жаза және оқи алады. Семафор – Джерри Эпплиннің үлесі, ол RT тапсырмаларына тоқтату семафорларын ұсынады. POSIX mutex қолдауы RTLinux-тың келесі шағын нұсқа жаңартуында қолжетімді болуы жоспарлануда. mbuff – RT компоненттері мен Linux процестері арасында ортақ жадты қамтамасыз ету үшін Томаш Мотылевски жазған үлестірілген пакет.

Нақты уақыт тапсырмалары

RTLinux нақты уақыт тапсырмалары Linux драйверлер, файлдық жүйелер және басқа да нәрселер үшін қолданатын модульдер сияқты өзек модульдері ретінде жүзеге асырылады. Нақты уақыт тапсырмалары аппараттық құралдарға тікелей қол жеткізеді және виртуалды жадты пайдаланбайды. Іске қосылғанда, нақты уақыт тапсырмасы (модулі) RTLinux ядросына өзінің мерзімі, периоды және босату уақыты шектеулері туралы хабарлайды.