 |
от DeepUltramarine(28-04-2026)
Започвайки от Linux 7.1 (в момента е в rc1 към април 2026г.), вече ще може да се компилира реално-времево ядро за класическия 32 битов ARM директно от основния източник на Linux, без да са нужни никакви външни кръпки (patches).
PREEMPT_RT е голям набор от промени в Linux ядрото, който го превръща в операционна система с работа в реално време (Real-Time Operating System – RTOS).
В обикновеното Linux ядро има много процеси (като обработка на прекъсвания, заключвания и дълги операции в ядрото), които забраняват прекъсването на задачите. Това води до непредвидими закъснения при изпълнението на по-важните задачи.
С PREEMPT_RT почти цялото ядро става прекъсваемо (preemptible).
Заключванията (spinlocks) се превръщат в нормални mutex-и, които позволяват на високоприоритетни реално-времеви задачи да прекъсват ядрото много по-надеждно.
В обикновеното Linux ядро се използва механизъм, наречен spinlock.
Той е много бърз, но си има недостатък - докато един процес държи spinlock, другите задачи чакат и се въртят в празен цикъл, а често не могат да обработват и прекъсвания, ако са използвани spin_lock_irq() или spin_lock_irqsave().
Това прави spinlock-а много бърз за кратки критични секции, но лош вариант за обработна на задачи в "реално" време, защото създава непредвидими и често, дълги закъснения.
С PREEMPT_RT ядро нещата се променят значително.
Обикновените spinlock_t се превръщат в rt_mutex (т.е. работят като mutex). Прекъсванията не се забраняват докато се държи такъв lock.
Mutex-a е механизъм (инструмент) в програмирането и операционните системи, който служи да предпази споделен ресурс (например променлива, масив, файл или част от паметта), така че само една задача (нишка или процес) да може да го използва в даден момент.
Това предпазва данните от промени по време на изпълнението на един процес, от друг, като по този начин се предотвратяват нежелани и непредвидими резултати.
Ако друга задача иска да работи с данните, тя подава заявка за това до ядрото и се нарежда на опашката, като задачите могат да бъдат прекъснати от по-високоприоритетни реално-времеви такива, след като завършат критичната си част и освободят сами "ключалката".
Такава е и целта на PREEMPT_RT - да направи ядрото по- "прекъсваемо" и предвидимо. Синхронизация на процесите според приоритета им. Механизмът е малко по-сложен, не тук няма да навлизаме в такива детайли - preemption, priority inheritance, Threaded interrupts, Preemptible RCU, премахване или намаляване на дълги участъци, в които се забраняват прекъсванията (irq disable), както и по-добро управление на приоритетите в scheduler-а за реално-времеви задачи (SCHED_FIFO, SCHED_RR, SCHED_DEADLINE).
С това не претендирам, че самият аз разбирам как се случва всичко това. :)
Линковете са за заинтересованите.
Вградената поддръжка на "реалновремеви" процеси в 7.1 ще е много важна за системи, които изискват гарантирано и предвидимо време за реакция.
При индустриалния контрол (PLC, автоматизация), в роботиката, при професионална обработка на звук (иска се ниска латентност), при автомобилите, в CNC машини, в медицината, както и в огромното множество от embedded устройства с изисквания за работа в реално време.
Последната голяма пречка при 32-битовия ARM беше свързана с обработката на грешки в ARM архитектурата. Тя беше поправена точно преди излизането на Linux 7.1-rc1. След това RT екипът обяви, че всички специфични кръпки за ARM вече са ненужни и всичко необходимо вече е в основното ядро.
Така 32-битовият ARM се нарежда до останалите архитектури, които вече имаха тази поддръжка - x86 / x86_64, ARM64, RISC-V.
Вече няма да е нужно да се поддържат и пренасят външни кръпки при всяка нова версия на ядрото. Просто включвате една опция в конфигурацията.
Това осигурява и по-добра дългосрочна поддръжка и сигурност. Можете да използвате най-новото основно ядро с всички поправки и подобрения, вместо да стоите на стари версии с кръпки.
Ще бъде по-лесно и за дистрибуциите.
Разпространители като Yocto, Debian, Ubuntu и други могат по-лесно да предлагат официални реално-времеви ядра за стари и нови ARM платки (BeagleBone, Raspberry Pi в 32-битов режим, индустриални контролери и т.н.).
И докато се говори за реално време, следва да се уточни, защо поставях този израз в кавички.
Дори с RT ядро, реалното време за обработка зависи много от хардуера. Колко бързо се обработват прекъсванията, кеш паметта, скоростта на трансфер на данните, драйверите и т.н..
То не превръща обикновен процесор в твърдо реално-времев микроконтролер. Някои драйвери все още трябва да се настройват внимателно за критични приложения.
С две думи, това е поредната важна крачка (след почти 20 години работа) към превръщането на основното Linux ядро в добра платформа за работа в реално време на почти всички популярни архитектури. За хората, които работят с реално-времеви системи на по-стари ARM платки, новината е наистина добра.
Излизането на Linux kernel 7.1 се очаква да е някъде през юни.
Източник: https://www.phoronix.com/news/Linux-7.1-ARM-RT
Използвани са и други източници, за допълнителна техническа информация.
<< Изненадващо развитие на пазара за лаптопи | Canonical ще интегрира ИИ в Ubuntu >>
|
 |