{"id":32158,"date":"2019-10-31T21:45:27","date_gmt":"2019-10-31T18:45:27","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod\/"},"modified":"2019-10-31T21:45:27","modified_gmt":"2019-10-31T18:45:27","slug":"operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","title":{"rendered":"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<h1>Introduzione ai sistemi operativi<\/h1>\n<p>\nCiao, Habr! Vorrei presentarvi una serie di articoli tradotti su una libreria che trovo interessante: OSTEP. In questo materiale si analizza in profondit\u00e0 il funzionamento dei sistemi operativi simili a Unix, in particolare la gestione dei processi, vari pianificatori, la memoria e altri componenti simili che costituiscono un moderno sistema operativo. Potete visualizzare l'originale di tutti i materiali qui <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/\">qui<\/a><\/noindex>. Si prega di notare che la traduzione non \u00e8 stata eseguita da un professionista (\u00e8 abbastanza libera), ma spero di aver mantenuto il significato generale.<\/p>\n<p>Le esercitazioni su questo argomento possono essere trovate qui:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">originale<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">originale<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">la mia personale adattamento<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nAltre parti:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446340\/\">Parte 1: Introduzione<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/446866\/\">Parte 2: Astrazione: processo<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/447182\/\">Parte 3: Introduzione all'API dei processi<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/en\/post\/449026\/\">Parte 4: Introduzione al pianificatore<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nE potete anche dare un'occhiata al mio canale su <noindex><a rel=\"nofollow\" href=\"https:\/\/t.me\/bykvaadm\">Telegram<\/a><\/noindex> =)<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Introduzione al pianificatore<\/h2>\n<p>\n<u>La questione fondamentale: come sviluppare una politica del pianificatore<br \/>\nCome dovrebbero essere sviluppati i framework di base delle politiche del pianificatore? Quali devono essere le assunzioni chiave? Quali metriche sono importanti? Quali tecniche di base sono state utilizzate nei primi sistemi di calcolo?<\/u><\/p>\n<h3>Assunzioni del carico di lavoro<\/h3>\n<p>\n Prima di discutere le possibili politiche, iniziamo con alcune semplificazioni sui processi in esecuzione nel sistema, che insieme vengono chiamati <b>carico di lavoro<\/b>. Definendo il carico di lavoro come parte critica nella definizione delle politiche, pi\u00f9 conoscenze hai sul carico, pi\u00f9 qualitativa sar\u00e0 la politica che potrai redigere.<\/p>\n<p>Faremo le seguenti assunzioni sui processi in esecuzione nel sistema, a volte chiamati <b>jobs<\/b> (compiti). Queste assunzioni sono quasi tutte irrealistiche, ma necessarie per sviluppare il pensiero.<\/p>\n<ol>\n<li> Ogni compito \u00e8 in esecuzione per lo stesso intervallo di tempo,<\/li>\n<li> Tutti i compiti vengono avviati simultaneamente,<\/li>\n<li> Il compito avviato continua fino al suo completamento,<\/li>\n<li> Tutti i compiti utilizzano solo la CPU,<\/li>\n<li> Il tempo di esecuzione di ogni compito \u00e8 noto.<\/li>\n<\/ol>\n<h3>Metriche del Pianificatore<\/h3>\n<p>\n Oltre ad alcune assunzioni sul carico, \u00e8 necessario avere anche uno strumento per confrontare diverse politiche di pianificazione: le metriche del pianificatore. Una metrica \u00e8 semplicemente una misura di qualcosa. Ci sono diverse metriche che possono essere utilizzate per confrontare i pianificatori.<\/p>\n<p>Per esempio, utilizzeremo una metrica chiamata <b>tempo di turnaround<\/b> (turnaround time). Il tempo di turnaround di un compito \u00e8 definito come la differenza tra il tempo di completamento del compito e il tempo di arrivo del compito nel sistema.<\/p>\n<p><u>Tempo di completamento = Tempo di arrivo<\/u><\/p>\n<p>Poich\u00e9 abbiamo ipotizzato che tutte le attivit\u00e0 siano arrivate contemporaneamente, Ta = 0 e dunque Tt = Tc. Questo valore cambier\u00e0 naturalmente quando modificheremo le ipotesi sopra elencate.<\/p>\n<p>Un'altra metrica \u00e8 <b>equit\u00e0<\/b> (equit\u00e0, giustizia). Le performance e l\u2019equit\u00e0 sono spesso caratteristiche contrastanti nella pianificazione. Ad esempio, un pianificatore pu\u00f2 ottimizzare le performance, ma a scapito dell'attesa dell'avvio di altre attivit\u00e0, riducendo cos\u00ec l'equit\u00e0.<\/p>\n<h3>PRIMO ARRIVATO, PRIMO SERVITO (FIFO)<\/h3>\n<p>\n L'algoritmo pi\u00f9 semplice che possiamo implementare si chiama FIFO o <b>primo arrivato (in), primo servito (fuori)<\/b>. Questo algoritmo ha diversi vantaggi: \u00e8 molto semplice da implementare e si adatta a tutte le nostre ipotesi, svolgendo il lavoro piuttosto bene.<\/p>\n<p>Consideriamo un semplice esempio. Supponiamo che 3 compiti siano stati assegnati contemporaneamente. Ma supponiamo che il compito A sia arrivato leggermente prima degli altri, quindi sar\u00e0 prima nella lista di esecuzione, proprio come B rispetto a C. Supponiamo che ciascuno di essi richieda 10 secondi per essere completato. Quale sar\u00e0 quindi il tempo medio di esecuzione di questi compiti?<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/8c17c29e10ac8c2e15f5f9d865922e49.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCalcolando i valori \u2014 10+20+30 e dividendo per 3, otteniamo un tempo medio di esecuzione del programma pari a 20 secondi.<br \/>\n Ora proviamo a modificare le nostre ipotesi. In particolare, l'ipotesi 1, e quindi non presumeremo pi\u00f9 che ciascun compito richieda lo stesso tempo di esecuzione. Come si comporter\u00e0 FIFO questa volta?<\/p>\n<p>Si rivela che tempi di esecuzione diversi per i compiti hanno un impatto estremamente negativo sulla produttivit\u00e0 dell'algoritmo FIFO. Supponiamo che il compito A richieda 100 secondi, mentre B e C continuano a richiedere 10 secondi ciascuno.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/a375f3d1571f24df30f446b9bc7a9a9e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n Come si pu\u00f2 vedere dall'immagine, il tempo medio per il sistema sar\u00e0 (100+110+120)\/3=110. Questo effetto \u00e8 chiamato <b>effetto convoglio<\/b>, quando alcuni utenti temporanei di una risorsa si trovano in fila dietro a un utente pesante. \u00c8 simile a una coda in un supermercato, in cui davanti a te c'\u00e8 un cliente con un carrello pieno. La soluzione migliore a questo problema \u00e8 cercare di cambiare cassa o rilassarsi e respirare profondamente.<\/p>\n<h3>Shortest Job First<\/h3>\n<p>\n \u00c8 possibile risolvere situazioni simili con processi pesanti? Certamente. Un altro tipo di pianificazione \u00e8 chiamato<b>Shortest Job First<\/b> (SJF). Il suo algoritmo \u00e8 piuttosto semplice: come suggerisce il nome, verranno eseguiti per primi i compiti pi\u00f9 brevi uno dopo l'altro.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/d0723e313adc9ce7367da611216bf3ee.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn questo esempio, il risultato dell'esecuzione degli stessi processi sar\u00e0 un miglioramento della media del tempo di turnaround dei programmi, che sar\u00e0 pari a <b>50 invece di 110<\/b>, che \u00e8 praticamente il doppio migliore.<\/p>\n<p>In questo modo, data l'assunzione che tutti i compiti arrivino contemporaneamente, l'algoritmo SJF sembra essere il pi\u00f9 ottimale. Tuttavia, le nostre assunzioni non sembrano ancora realistiche. Questa volta modificheremo l'assunzione 2 e presumeremo che i compiti possano arrivare in qualsiasi momento, e non tutti insieme. A quali problemi potrebbe portare ci\u00f2?<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/2f0145551779f2733281d12bffad3a45.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nImmaginiamo che il compito A (100s) arrivi per primo e inizi a essere eseguito. Al momento t=10 arrivano i compiti B e C, ognuno dei quali richieder\u00e0 10 secondi. Pertanto, il tempo medio di esecuzione \u00e8 (100 + (110 - 10) + (120 - 10))3 = 103. Cosa potrebbe fare il pianificatore per migliorare la situazione?<\/p>\n<h3>Shortest Time-to-Completion First (STCF)<\/h3>\n<p>\n Per migliorare la situazione, elimineremo l'assunzione 3 che prevede che il programma sia avviato e funzionante fino al completamento. Inoltre, avremo bisogno di supporto hardware e, come potreste immaginare, utilizzeremo <b>un timer<\/b> per interrompere il compito in esecuzione e <b>cambiare i contesti<\/b>. In questo modo, il pianificatore pu\u00f2 adottare delle misure non appena arrivano i task B e C \u2014 interrompere l'esecuzione del task A e iniziare a elaborare i task B e C, per poi continuare l'esecuzione del task A una volta completati. Tale pianificatore \u00e8 chiamato <b>STCF<\/b>o <b>Preemptive Job First<\/b>.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/81644f82b7b1489f239ebbdc5d78000b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIl risultato del funzionamento di questo pianificatore sar\u00e0 il seguente: ((120-0)+(20-10)+(30-10))\/3=50. Cos\u00ec, questo pianificatore diventa ancora pi\u00f9 ottimale per i nostri compiti.<\/p>\n<h3>Metrica Tempo di risposta (Response Time)<\/h3>\n<p>\n Pertanto, se conosciamo i tempi di esecuzione dei task e sappiamo che questi task utilizzano solo la CPU, STCF sar\u00e0 la soluzione migliore. In tempi passati, questi algoritmi funzionavano piuttosto bene. Tuttavia, ora l'utente trascorre la maggior parte del suo tempo al terminale e si aspetta un'interazione interattiva performante. Cos\u00ec \u00e8 nata una nuova metrica \u2014 <b>tempo di risposta<\/b> (response).<\/p>\n<p>Il tempo di risposta si calcola nel seguente modo:<\/p>\n<p><u>Tresponse=Tfirstrun\u2212Tarrival<\/u><\/p>\n<p>Cos\u00ec, per l'esempio precedente, il tempo di risposta sar\u00e0: A=0, B=0, C=10 (abg=3,33).<\/p>\n<p>E si scopre che l'algoritmo STCF non \u00e8 cos\u00ec efficace quando 3 compiti arrivano contemporaneamente: dovr\u00e0 attendere che i compiti pi\u00f9 piccoli siano completati. Pertanto, l'algoritmo \u00e8 buono per la metrica del tempo di rotazione, ma scarso per la metrica dell'interattivit\u00e0. Immaginate di essere al terminale e di dover aspettare pi\u00f9 di 10 secondi per digitare caratteri in un editor, perch\u00e9 un'altra attivit\u00e0 occupa la CPU. Non \u00e8 affatto piacevole.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/f1412665826f845fdc685ec3c1a5bdad.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPertanto, ci troviamo di fronte a un'altra problematica: come possiamo costruire un pianificatore sensibile al tempo di risposta?<\/p>\n<h3>Round Robin<\/h3>\n<p>\n Per risolvere questo problema \u00e8 stato sviluppato un algoritmo <b>Round Robin<\/b> (RR). L'idea principale \u00e8 piuttosto semplice: invece di avviare i compiti fino al loro completamento, avvieremo il compito per un certo intervallo di tempo (chiamato quantum di tempo) e poi passeremo a un altro compito in coda. L'algoritmo ripete il suo lavoro finch\u00e9 tutti i compiti non sono completati. Nel frattempo, il tempo di esecuzione del programma deve essere un multiplo del tempo dopo il quale il timer interromper\u00e0 il processo. Ad esempio, se il timer interrompe il processo ogni x=10ms, allora la dimensione della finestra di esecuzione del processo deve essere un multiplo di 10 e pu\u00f2 essere 10, 20 o x*10.<\/p>\n<p>Consideriamo un esempio: i compiti A, B e C arrivano contemporaneamente nel sistema e ciascuno di essi desidera funzionare per 5 secondi. L'algoritmo SJF eseguir\u00e0 ciascun compito fino alla fine prima di avviarne un altro. In contrasto, l'algoritmo RR con finestra di avvio=1s si occuper\u00e0 dei compiti nel seguente modo (fig. 4.3):<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/a7790cb63c880b286db2a2e3782d59b2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(SJF Ancora (Cattivo per il Tempo di Risposta)<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/f7e82d68a6118828ea4561a4911744e2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n(Round Robin (Buono per il Tempo di Risposta)<\/p>\n<p>Il tempo medio di risposta per l'algoritmo RR (0+1+2)\/3=1, mentre per SJF (0+5+10)\/3=5.<\/p>\n<p>\u00c8 logico supporre che la finestra temporale sia un parametro molto importante per il RR; pi\u00f9 \u00e8 piccola, pi\u00f9 veloce sar\u00e0 il tempo di risposta. Tuttavia, non pu\u00f2 essere troppo ridotta, poich\u00e9 il tempo di switching del contesto gioca anch'esso un ruolo nelle prestazioni generali. Pertanto, la scelta del tempo della finestra di esecuzione \u00e8 determinata dall'architetto del sistema operativo e dipende dalle attivit\u00e0 che si intendono eseguire. Il switching del contesto non \u00e8 l'unica operazione di servizio che richiede tempo; un programma in esecuzione gestisce anche vari cache, e ad ogni switching \u00e8 necessario salvare e ripristinare questo ambiente, il che pu\u00f2 richiedere molto tempo.<\/p>\n<p>Il RR \u00e8 un ottimo pianificatore, se consideriamo solo la metrica del tempo di risposta. Ma come si comporter\u00e0 la metrica del tempo di turnaround con questo algoritmo? Consideriamo l'esempio sopra, dove i tempi di esecuzione per A, B e C sono di 5 secondi e arrivano contemporaneamente. Il compito A si concluder\u00e0 a 13 secondi, B a 14 secondi, e C a 15 secondi, con una media di turnaround di 14 secondi. Cos\u00ec, il RR \u00e8 il peggior algoritmo per la metrica di turnaround.<\/p>\n<p>In altre parole, qualsiasi algoritmo del tipo RR \u00e8 equo, poich\u00e9 suddivide il tempo di utilizzo della CPU equamente tra tutti i processi. In questo modo, queste metriche confliggono costantemente tra loro.<\/p>\n<p>Pertanto, abbiamo diversi algoritmi contrapposti e rimangono alcune ipotesi \u2014 che il tempo di esecuzione sia noto e che il processo utilizzi esclusivamente la CPU.<\/p>\n<h3>Integrazione con I\/O<\/h3>\n<p>\n Innanzitutto, eliminiamo l'ipotesi 4, secondo cui il processo utilizza solo la CPU; naturalmente, non \u00e8 cos\u00ec e i processi possono accedere anche ad altre risorse hardware.<\/p>\n<p>Quando un processo richiede un'operazione di input-output, il processo passa allo stato di bloccato, in attesa che l'I\/O venga completato. Se l'I\/O \u00e8 diretto a un disco rigido, tale operazione pu\u00f2 richiedere anche diversi millisecondi o pi\u00f9 a lungo, e in quel momento la CPU rester\u00e0 inattiva. Durante questo tempo, il pianificatore pu\u00f2 assegnare la CPU a un altro processo. La prossima decisione che dovr\u00e0 prendere il pianificatore \u00e8 quando il processo completer\u00e0 il suo I\/O. Quando ci\u00f2 accade, si verifica un'interruzione e il sistema operativo ripristina il processo che ha richiesto l'I\/O nello stato di pronto.<\/p>\n<p>Consideriamo un esempio composto da pi\u00f9 compiti. Ognuno di essi necessita di 50 ms di tempo di CPU. Tuttavia, il primo acceder\u00e0 all'I\/O ogni 10 ms (che sar\u00e0 anch'esso eseguito ogni 10 ms). Il processo B, invece, utilizza semplicemente 50 ms di CPU senza I\/O.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/a32f5346eda86042c18d6424c19ad6b9.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIn questo esempio utilizzeremo il pianificatore STCF. Come si comporter\u00e0 il pianificatore se avviamo un processo come A? Agir\u00e0 nel modo seguente: prima completer\u00e0 interamente il processo A e poi il processo B.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi operativi: Tre semplici pezzi. Parte 4: Introduzione al pianificatore (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/9fb709a822b9fc35871b8a342ac38c7e.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nL'approccio tradizionale per risolvere questo problema \u00e8 interpretare ogni sotto-compito di 10 ms del processo A come un compito separato. In questo modo, all'avvio con l'algoritmo STJF, la scelta tra il compito di 50 ms e quello di 10 ms \u00e8 evidente. Poi, quando il sotto-compito A \u00e8 completato, verr\u00e0 avviato il processo B e l'I\/O. Dopo il completamento dell'I\/O, verr\u00e0 deciso di riavviare il processo A da 10 ms invece del processo B. In questo modo \u00e8 possibile realizzare sovrapposizioni, in cui la CPU \u00e8 utilizzata da un altro processo mentre il primo attende l'I\/O. Di conseguenza, il sistema \u00e8 meglio utilizzato: nel momento in cui i processi interattivi attendono l'I\/O, possono essere eseguiti altri processi sulla CPU.<\/p>\n<h3>L'oracolo non c'\u00e8 pi\u00f9.<\/h3>\n<p>\n Adesso proviamo a liberarci dell'ipotesi che il tempo di esecuzione di un compito sia noto. In generale, questa \u00e8 l'ipotesi pi\u00f9 pessima e irreale dell'intero elenco. Infatti, nei sistemi operativi mediamente comuni, il sistema operativo stesso conosce molto poco sul tempo di esecuzione dei compiti; come possiamo quindi costruire un pianificatore senza sapere quanto tempo impiegher\u00e0 un compito? Forse potremmo utilizzare alcuni principi del RR per risolvere questo problema?<\/p>\n<h3>Risultato<\/h3>\n<p>\n Abbiamo esaminato le idee di base della pianificazione dei compiti e considerato due famiglie di pianificatori. Il primo avvia il compito pi\u00f9 breve per primo, migliorando cos\u00ec il tempo di turnaround; il secondo, invece, suddivide equamente il tempo tra tutti i compiti, migliorando il tempo di risposta. Entrali algoritmi sono inefficaci nelle situazioni in cui le prestazioni degli altri algoritmi eccellono. Abbiamo anche esaminato come l'uso parallelo della CPU e dell'I\/O possa migliorare le prestazioni, ma non abbiamo risolto il problema della chiarezza da parte del sistema operativo. Nella prossima lezione, esamineremo un pianificatore che guarda al passato recente e cerca di prevedere il futuro, e si chiama multi-level feedback queue.<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/449026\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23990,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-32158","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.10 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 4: \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:45:27+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:45:27+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Sistemi Operativi: Tre pezzi facili. Parte 4: Introduzione al pianificatore (traduzione) | ProHoster","description":"Introduzione ai sistemi operativi Ciao, Habr! Vorrei presentarvi una serie di articoli-traduzioni di una letteratura che trovo interessante \u2014 OSTEP. In questo materiale viene esaminato in profondit\u00e0 il funzionamento dei sistemi operativi unix-like, in particolare \u2014 la gestione dei processi, dei vari pianificatori, della memoria e di altri componenti simili che compongono un sistema operativo moderno. Puoi visualizzare l'originale di tutti i materiali qui.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Operating Systems: Three Easy Pieces. Part 4: \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a (\u043f\u0435\u0440\u0435\u0432\u043e\u0434) | ProHoster","og:description":"\u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0425\u043e\u0447\u0443 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432\u0430\u0448\u0435\u043c\u0443 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044e \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439-\u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u043b\u0438\u0442\u0435\u0440\u0430\u0442\u0443\u0440\u044b \u2014 OSTEP. \u0412 \u044d\u0442\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0440\u0430\u0431\u043e\u0442\u0430 unix-\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u2014 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438, \u043f\u0430\u043c\u044f\u0442\u044c\u044e \u0438 \u043f\u0440\u043e\u0447\u0438\u0438\u043c\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u041e\u0421. \u041e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0432\u0441\u0435\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u043e\u0442 \u0442\u0443\u0442.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-4-vvedenie-v-planirovshhik-perevod","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:45:27+00:00","article:modified_time":"2019-10-31T18:45:27+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"32158","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 09:34:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:03:25","updated":"2026-01-21 09:34:19"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32158","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=32158"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/32158\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/23990"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=32158"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=32158"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=32158"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}