{"id":20794,"date":"2022-08-09T09:32:44","date_gmt":"2022-08-09T07:32:44","guid":{"rendered":"https:\/\/arkosoft.it\/blog\/?p=20794"},"modified":"2022-08-09T09:33:10","modified_gmt":"2022-08-09T07:33:10","slug":"rtos-sistema-operativo-in-tempo-reale","status":"publish","type":"post","link":"https:\/\/arkosoft.it\/blog\/rtos-sistema-operativo-in-tempo-reale\/","title":{"rendered":"RTOS Sistema operativo in tempo reale"},"content":{"rendered":"\n<p>Un sistema operativo in real-time \u00e8 un sistema operativo che funziona da supporto <strong>per applicazioni su sistemi real-time<\/strong>. Generalmente tali sistemi vengono utilizzati a scopo industriale, come ad esempio nel caso in cui si debbano trasferire dei dati durante alcuni processi  di telecomunicazione. Tale sistema operativo non \u00e8 noto per la sua velocit\u00e0 d&#8217;azione, quando per la capacit\u00e0 di restituire una risposta entro un tempo pre-determinato. I processi d&#8217;azione di un RTOS sono generalmente tre: periodici, aperiodici, sporadici. Nel primo caso le attivit\u00e0 vengono compiute con una frequenza regolare, nel secondo caso invece avvengono con intervalli irregolari, mentre infine vengono compiuti raramente. Ci sono per\u00f2 altre casistiche: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><em>soft real-time<\/em>: un processo che non rispetta una scadenza pre-determinata. In questo modo provoca un danno reparabile al sistema in questione. <\/li><li><em>hard real-time<\/em>: un task che qualora superi, in termini di tempo la sua deadline, provoca un danno irreparabile. <\/li><li><em>&#8220;anytime&#8221;<\/em>\u00a0:I  tasks anytime elaborano dei dati che rispondono a requisiti di qualit\u00e0 minima e qualit\u00e0 massima. <\/li><\/ul>\n\n\n\n<p>Prima di procedere \u00e8 bene fornire una pi\u00f9 specifica definizione di cosa si un sistema RTOS. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">RTOS: cos&#8217;\u00e8?<\/h2>\n\n\n\n<p>Per identificare cosa sia un RTOS \u00e8 necessario partire da una differenza tra <strong>Time Sharing vs Real<\/strong>\u00a0<strong>Time<\/strong>. Nel caso di classici sistemi operativi il tempo \u00e8 condiviso. Ci\u00f2 significa che diversi utenti possono connettersi nello stesso momento ed utilizzare il sistema operativo con ubicazioni differenti. Il sistema operativo RTOS invece svolge le attivit\u00e0 in un determinato range di tempo. <\/p>\n\n\n\n<p>Ma cerchiamo di approfondire ulteriormente: un sistema operativo \u00e8 un interfaccia tra un software e una componente hardware. Esso svolge compiti come: gestione della memoria, gestione dei processi, gestione dei file. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Differenza tra sistemi <strong>Time Sharing vs Real<\/strong>\u00a0<strong>Time<\/strong><\/h3>\n\n\n\n<p>Per comprendere con maggiore chiarezza cosa si intenda con il termine RTOS \u00e8 possibile iniziare da una distinzione gi\u00e0 precedentemente annunciata, quella tra sistema <strong>Time Sharing vs Real<\/strong>\u00a0<strong>Time<\/strong>. Nel primo caso tanti utenti possono utilizzare contemporaneamente un determinato sistema informatico. Come avviene ci\u00f2? In una situazione simile il tempo del processore viene condiviso temporaneamente tra diversi utenti. L&#8217;attivit\u00e0 del processore avviene in tempi super veloci in modo che, quando l&#8217;utente fornire un input viene restituito un output immediatamente. <\/p>\n\n\n\n<p>Quando parliamo di Sistema Real time ci riferiamo invece ad un sistema operativo che svolge una determinata attivit\u00e0 in un tempo prestabilito. Quest&#8217;ultimo funziona in base ad alcuni vincoli temporali. In questo sistema operativo non \u00e8 prevista alcuna condivisione di risorse, o meglio: queste restano fisse per un determinato periodo dopo di ch\u00e9 possono essere riassegnate. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Migliori RTOS <\/h2>\n\n\n\n<p>Ora che abbiamo compreso quali siano le caratteristiche di un simile sistema operativo cerchiamo di comprendere quali sono i migliori. Potremmo parlare di <a href=\"https:\/\/en.wikipedia.org\/wiki\/FreeRTOS\" target=\"_blank\" rel=\"noreferrer noopener\">FreeRTOS<\/a>, oppure di VxWorks, QNX e Linux. <\/p>\n\n\n\n<p>FreeRTOS \u00e8 un core del sistema operativo in tempo reale. La caratteristica principale di questo kernel sta nel fatto che \u00e8 costituito da soli 3 file, per questo motivo risulta piccolo e leggero. FreeRTOS implementa pi\u00f9 thread  in modo che il programma host chiami un metodo tick thread a brevi intervalli regolari. A seconda delle esigenze di un singolo progetto, si pu\u00f2 scegliere tra una serie di metodi di allocazione dinamica, oppure consentire solo l&#8217;allocazione statica.<\/p>\n\n\n\n<p>Nel caso di di VxWorks, QNX e Linux ci riferiamo invece a sistemi operativi certificati POSIX. In altri casi si tratta invece di sistemi compatibili. <\/p>\n\n\n\n<p>A tal punto risulta chiaro che, esistendo diversi tipi di sistemi operativi RTOS ciascuno di essi si adatti in modo pi\u00f9 o meno funzionale ad un diverso progetto. Alcuni sistemi operativi sono in grado di eseguire hard real-time, ma non tutti possono farlo.\u00a0Questo dipende dallo scheduler, come detto in precedenza, o per essere pi\u00f9 chiari dal tipo di design di base. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quando usare un RTOS?<\/h2>\n\n\n\n<p>Ora che abbiamo parlato in termini teorici di questo tipo di sistema operativo cerchiamo di andare pi\u00f9 affondo alla questione. Quando usare un RTOS? La risposta, come si potrebbe immaginare, non \u00e8 universale. Bisogna valutare diversi fattori prima di prendere una simile decisione. Ciascun progetto differisce da un altro e per questo motivo le nostre esigenze potrebbero differire di volta in volta. Il consiglio in ogni caso \u00e8 quello di trovare un equilibrio tra le prestazioni in tempo reale richieste e il tempo e il budget che si ha a disposizione.<\/p>\n\n\n\n<p>Fattori da considerare: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>presenza di scadenze rigide per il progetto<\/li><li>necessit\u00e0 di una pianificazione specifica del lavoro <\/li><\/ul>\n\n\n\n<p>Proponiamo di seguito un esempio di RTOS cercando di capire ancor pi\u00f9 nello specifico quali siano i suoi compiti: <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Aspetti fondamentali kernelFreeRTOS<\/h2>\n\n\n\n<p>Poco fa avevamo introddotto il kernelFreeRTOS, ora entriamo pi\u00f9 nello specifico. Da questa spiegazione sar\u00e0 possibile capire quando e perch\u00e9 utilizzare un RTOS. <\/p>\n\n\n\n<p>Caratteristiche: <\/p>\n\n\n\n<p>KernelFreeRTOS propone: <\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Un pianificatore multitasking.<\/li><li>Diverse opzioni di allocazione di memoria <\/li><li>Operazioni di coordinamento tra task, come notifiche di task, code di messaggi<\/li><\/ul>\n\n\n\n<p>Esso esegue esclusivamente operazioni deterministiche e ci\u00f2 dipende dal pianificatore di task FreeRTOS, che consente di assegnare a ciascun task priorit\u00e0 rigorose.<\/p>\n\n\n\n<p>Ogni volta che viene creato un nuovo task \u00e8 richiesta RAM che pu\u00f2 essere allocata dinamicamente oppure staticamente.<\/p>\n\n\n\n<p><strong>Il kernel FreeRTOS include cinque implementazioni heap:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code class=\"\"><code>heap_1<\/code>\nNon consente che venga liberata memoria.\n<code>heap_2<\/code>\nConsente che venga liberata memoria, ma non unisce i blocchi liberi adiacenti.\n<code>heap_3<\/code>\nRacchiude i valori\u00a0<code>malloc()<\/code>\u00a0e\u00a0<code>free()<\/code>\u00a0standard per la sicurezza per i thread.\n<code>heap_4<\/code>\nUnisce i blocchi adiacenti per evitare la frammentazione. Include un'opzione di posizionamento dell'indirizzo assoluto.\n<code>heap_5<\/code>\n\u00c8 simile a heap_4. Pu\u00f2 distribuire l'heap su pi\u00f9 aree di memoria non adiacenti.<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Come comunicano i task? <\/h3>\n\n\n\n<p>Il coordinamento tra task avviene tramite le code, che rappresentano il principale modus comunicativo tra task. Queste possono essere usate per lo scambio di messaggi ma in altri casi servono anche da buffer FIFO. I messaggi vengono inviati tramite copia e quindi i dati stessi vengono copiati e non semplicemente memorizzati. \u00a0Quando un task cerca di leggere una coda vuota, viene visualizzato e inserito uno stato di blocco. In questo modo nessun tempo di CPU verr\u00e0 sprecato; cos\u00ec verr\u00e0 fornita la possibilit\u00e0 di eseguire altri task. Lo stesso processo si verifica qualora si provi a scrivere in una coda piena, il task viene inserito in uno stato di blocco fin quando non si libera spazio.<\/p>\n\n\n\n<p>Ora dovreste riuscire a comprendere quando utilizzare un RTOS sia conveniente. Analizzate il vostro progetto e cercate di fornirgli la miglior soluzione possibile. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un sistema operativo in real-time \u00e8 un sistema operativo che funziona da supporto per applicazioni su sistemi real-time. Generalmente tali sistemi vengono utilizzati a scopo<\/p>\n","protected":false},"author":17,"featured_media":20795,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"rop_custom_images_group":[],"rop_custom_messages_group":[],"rop_publish_now":"initial","rop_publish_now_accounts":{"twitter_3289630113_3289630113":"","facebook_10221729481456259_775370489244865":""},"rop_publish_now_history":[],"rop_publish_now_status":"pending","footnotes":""},"categories":[198],"tags":[],"class_list":["post-20794","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-guide"],"_links":{"self":[{"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/posts\/20794","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/comments?post=20794"}],"version-history":[{"count":1,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/posts\/20794\/revisions"}],"predecessor-version":[{"id":20796,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/posts\/20794\/revisions\/20796"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/media\/20795"}],"wp:attachment":[{"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/media?parent=20794"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/categories?post=20794"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/arkosoft.it\/blog\/wp-json\/wp\/v2\/tags?post=20794"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}