{"id":30992,"date":"2019-10-31T21:38:47","date_gmt":"2019-10-31T18:38:47","guid":{"rendered":"https:\/\/prohoster.info\/blog\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod\/"},"modified":"2019-10-31T21:38:47","modified_gmt":"2019-10-31T18:38:47","slug":"operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","status":"publish","type":"post","link":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-perevod","title":{"rendered":"Sistemi Operativi: Tre Pezzi Facili. Parte 2: Astrazione: Processo (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 di traduzione su una letteratura che trovo interessante \u2014 OSTEP. In questo materiale vengono esaminati in profondit\u00e0 i funzionamenti dei sistemi operativi Unix-like, in particolare \u2014 il lavoro con i processi, diversi scheduler, memoria e altri componenti simili che costituiscono un moderno sistema operativo. Potete vedere 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 considerare che la traduzione \u00e8 stata eseguita non professionalmente (abbastanza liberamente), ma spero di aver mantenuto il significato generale.<\/p>\n<p>I lavori di laboratorio su questo argomento possono essere trovati qui:<\/p>\n<ul>\n<li>originale: <noindex><a rel=\"nofollow\" href=\"http:\/\/pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html\">pages.cs.wisc.edu\/~remzi\/OSTEP\/Homework\/homework.html<\/a><\/noindex><\/li>\n<li>originale: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/remzi-arpacidusseau\/ostep-code\">github.com\/remzi-arpacidusseau\/ostep-code<\/a><\/noindex><\/li>\n<li>la mia personale adattazione: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/bykvaadm\/OS\/tree\/master\/ostep\">github.com\/bykvaadm\/OS\/tree\/master\/ostep<\/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: Intro<\/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<p>Consideriamo l'astrazione pi\u00f9 fondamentale che il sistema operativo fornisce agli utenti: il processo. La definizione di processo \u00e8 piuttosto semplice: \u00e8 <b>un programma in esecuzione<\/b>. Un programma di per s\u00e9 \u00e8 una cosa inanimata, situata sul disco: un insieme di istruzioni e forse alcuni dati statici, in attesa del momento di avvio. \u00c8 il sistema operativo che prende questi byte e li esegue, trasformando il programma in qualcosa di utile.<br \/>\n Spesso gli utenti vogliono eseguire pi\u00f9 di un programma contemporaneamente; ad esempio, puoi avviare sul tuo laptop un browser, un gioco, un lettore multimediale, un editor di testo e cos\u00ec via. Infatti, un sistema tipico pu\u00f2 eseguire decine e centinaia di processi contemporaneamente. Questo fatto rende il sistema pi\u00f9 semplice da usare; non devi mai preoccuparti se la CPU \u00e8 libera, basta avviare i programmi.<\/p>\n<p><i>Da qui deriva il problema: come garantire l'illusione di molte CPU? Come pu\u00f2 il sistema operativo creare l'illusione di un numero praticamente infinito di CPU, anche se hai solo un CPU fisico?<\/i><\/p>\n<p>Il sistema operativo crea questa illusione attraverso la virtualizzazione della CPU. Eseguendo un processo, poi fermandolo, avviando un altro processo e cos\u00ec via, il sistema operativo pu\u00f2 mantenere l'illusione che esistano molte CPU virtuali, anche se in realt\u00e0 ci sar\u00e0 solo uno o pi\u00f9 processori fisici. Questa tecnica \u00e8 chiamata <b>divisione delle risorse CPU nel tempo<\/b>. Questa tecnica consente agli utenti di eseguire quanti pi\u00f9 processi contemporaneamente desiderano. Il prezzo per questa soluzione \u00e8 la performance: poich\u00e9 se pi\u00f9 processi condividono la CPU, ogni processo sar\u00e0 elaborato pi\u00f9 lentamente.<br \/>\n Per realizzare la virtualizzazione della CPU, e in particolare per farlo bene, il sistema operativo ha bisogno sia di supporto a basso livello che di supporto ad alto livello. Il supporto a basso livello si chiama <b>meccanismi<\/b> \u2014 sono metodi o protocolli a basso livello che implementano la funzionalit\u00e0 necessaria. Un esempio di tale funzionalit\u00e0 \u00e8 il cambio di contesto, che consente al sistema operativo di fermare un programma e avviarne un altro sul processore. Tale divisione per tempo \u00e8 implementata in tutti i moderni sistemi operativi.<br \/>\n Sopra questi meccanismi si trova una certa logica, incorporata nel sistema operativo, sotto forma di \u201cpolitiche\u201d. <b>Politica<\/b> \u2014 \u00e8 un algoritmo di decisione del sistema operativo. Queste politiche, ad esempio, decidono quale programma eseguire (dalla lista dei comandi) per primo. Cos\u00ec, ad esempio, questo compito verr\u00e0 risolto da una politica chiamata <b>pianificatore (scheduling policy)<\/b> e nella scelta della soluzione si baser\u00e0 su dati come: storia di esecuzione (quale programma \u00e8 stato eseguito pi\u00f9 a lungo nell'ultimo minuto), quale carico genera questo processo (quali tipi di programmi sono stati eseguiti), metriche di performance (se il sistema \u00e8 ottimizzato per l'interazione interattiva o per la larghezza di banda) e cos\u00ec via.<\/p>\n<h3>Astrazione: processo<\/h3>\n<p>\n L'astrazione di un programma in esecuzione, eseguito dal sistema operativo, \u00e8 ci\u00f2 che chiamiamo <b>processo<\/b>. Come gi\u00e0 accennato, un processo \u00e8 semplicemente un programma in esecuzione in un dato istante. Un programma attraverso il quale possiamo ottenere informazioni aggregate da varie risorse del sistema e a cui si accede o che il programma coinvolge durante la sua esecuzione.<br \/>\n Per capire i componenti di un processo, \u00e8 necessario comprendere gli stati del sistema: ci\u00f2 che il programma pu\u00f2 leggere o modificare durante il suo funzionamento. In qualsiasi momento, \u00e8 necessario capire quali elementi del sistema sono importanti per l'esecuzione del programma.<br \/>\n Uno degli elementi pi\u00f9 evidenti dello stato del sistema, che include il processo, \u00e8 <b>la memoria<\/b>. Le istruzioni sono memorizzate nella memoria. Anche i dati che il programma legge o scrive sono memorizzati nella memoria. Pertanto, la memoria a cui il processo pu\u00f2 indirizzare (il cosiddetto spazio degli indirizzi) \u00e8 parte del processo.<br \/>\n Anche i registri fanno parte dello stato del sistema. Molte istruzioni sono destinate a modificare il valore dei registri o a leggerne il valore e cos\u00ec i registri diventano anch'essi una parte importante del funzionamento del processo. <br \/>\nVale la pena notare che lo stato della macchina \u00e8 formato anche da alcuni registri speciali. Ad esempio,<b> IP \u2014 puntatore delle istruzioni<\/b> \u2014 \u00e8 il puntatore all'istruzione che il programma sta eseguendo in questo momento. Ci sono anche <b>stack pointer<\/b> e il relativo <b>frame pointer<\/b>, che vengono utilizzati per gestire: parametri delle funzioni, variabili locali e indirizzi di ritorno.<br \/>\nInfine, i programmi accedono spesso alla ROM (memoria di sola lettura). Tali informazioni sull'\u201cI\/O\u201d (input\/output) devono includere un elenco dei file aperti dal processo in quel momento.<\/p>\n<h3>Process API<\/h3>\n<p>\n Per migliorare la comprensione del funzionamento del processo, esaminiamo esempi di chiamate di sistema che dovrebbero essere incluse in ogni interfaccia di un sistema operativo. Queste API, in un modo o nell'altro, sono disponibili in ogni SO.<\/p>\n<p>\u25cf <b>Crea<\/b> (creazione): Il sistema operativo deve includere un metodo che consenta di creare nuovi processi. Quando inserisci un comando nel terminale o avvii un'applicazione con un doppio clic sull'icona, viene inviata una richiesta al SO per creare un nuovo processo e avviare il programma specificato.<br \/>\n\u25cf <b>Elimina<\/b>: Poich\u00e9 esiste un'interfaccia per la creazione di processi, il sistema operativo deve anche fornire la possibilit\u00e0 di terminare forzatamente un processo. La maggior parte dei programmi naturalmente verr\u00e0 avviata e terminata da sola durante la loro esecuzione. In caso contrario, l'utente vorrebbe avere la possibilit\u00e0 di terminarli e quindi un'interfaccia per fermare il processo non sarebbe superflua.<br \/>\n\u25cf <b>Aspetta <\/b>(attesa): A volte \u00e8 utile attendere il completamento di un processo, pertanto sono forniti alcuni interfacce che offrono la possibilit\u00e0 di attesa.<br \/>\n\u25cf <b>Controllo Vari<\/b> (varia gestione): Oltre all'uccisione e all'attesa del processo, esistono diversi altri metodi di controllo. Ad esempio, la maggior parte dei sistemi operativi offre la possibilit\u00e0 di mettere un processo in pausa (fermandone l'esecuzione per un certo periodo) e successivamente riprendere (continuare l'esecuzione)<br \/>\n\u25cf <b>Stato <\/b>(stato): Esistono varie interfacce per ottenere informazioni sullo stato di un processo, come la durata della sua esecuzione o in quale stato si trova attualmente.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi Operativi: Tre Pezzi Facili. Parte 2: Astrazione: Processo (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/eccf4ba3b12a60a54a62bb13986a7783.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Creazione del processo: dettagli<\/h3>\n<p>Una delle cose interessanti \u00e8 come i programmi si trasformano in processi. Soprattutto, come il sistema operativo avvia e mette in esecuzione un programma. Come si crea esattamente un processo.<br \/>\nIn primo luogo, il sistema operativo deve caricare il codice del programma e i dati statici nella memoria (nell'area di indirizzamento del processo). I programmi di solito si trovano su disco o in un'unit\u00e0 a stato solido in un certo formato eseguibile. Pertanto, il processo di caricamento del programma e dei dati statici in memoria richiede che il sistema operativo possa leggere questi byte dal disco e posizionarli da qualche parte nella memoria.<\/p>\n<p>Nei primi sistemi operativi, il processo di caricamento veniva eseguito in modo avido (eagerly), il che significa che il codice veniva caricato in memoria completamente prima che il programma venisse eseguito. I sistemi operativi moderni lo fanno in modo pigro (lazily), caricando pezzi di codice o dati solo quando necessari dal programma durante la sua esecuzione.<\/p>\n<p>Dopo che il codice e i dati statici sono stati caricati in memoria, il sistema operativo deve eseguire alcune altre operazioni prima di avviare il processo. Una certa quantit\u00e0 di memoria deve essere allocata per lo stack. <b>I programmi usano lo stack per variabili locali, parametri delle funzioni e indirizzi di ritorno<\/b>. Il sistema operativo alloca questa memoria e la assegna al processo. Lo stack pu\u00f2 anche essere allocato con alcuni argomenti, in particolare riempiendo i parametri della funzione main(), ad esempio l'array argc e argv.<\/p>\n<p>Il sistema operativo pu\u00f2 anche allocare una certa quantit\u00e0 di memoria per l'heap del programma. <b>L'heap \u00e8 utilizzato dai programmi per dati dinamicamente allocati richiesti esplicitamente<\/b>. I programmi richiedono questo spazio chiamando la funzione <b>malloc()<\/b> e lo liberano esplicitamente chiamando la funzione <b>free()<\/b>. La heap \u00e8 necessaria per strutture dati come: liste collegate, tabelle hash, alberi e altro. All'inizio, viene allocata una piccola quantit\u00e0 di memoria per la heap, ma nel corso del tempo, mentre il programma \u00e8 in esecuzione, la heap pu\u00f2 richiedere una maggiore quantit\u00e0 di memoria tramite la chiamata di API malloc(). Il sistema operativo \u00e8 coinvolto nel processo di allocazione di pi\u00f9 memoria per aiutare a soddisfare queste richieste.<\/p>\n<p>Il sistema operativo eseguir\u00e0 anche compiti di inizializzazione, in particolare quelli relativi all'input-output. Ad esempio, nei sistemi UNIX, ogni processo ha di default 3 descrittori di file aperti per il flusso standard di input, output e errori. Questi descrittori consentono ai programmi di leggere l'input dal terminale e di visualizzare informazioni sullo schermo. <\/p>\n<p>Cos\u00ec, caricando il codice e i dati statici in memoria, creando e inizializzando lo stack e svolgendo altri compiti relativi all'esecuzione delle operazioni di input-output, il sistema operativo prepara il terreno per l'esecuzione del processo. Alla fine, rimane l'ultimo compito: avviare l'esecuzione del programma attraverso il suo punto di ingresso, chiamato funzione main(). Procedendo all'esecuzione della funzione main(), il sistema operativo trasferisce il controllo della CPU al nuovo processo creato, e cos\u00ec il programma inizia a essere eseguito. <\/p>\n<h3>Stato del processo<\/h3>\n<p>\n Ora che abbiamo una comprensione di cosa sia un processo e come venga creato, elenchiamo gli stati del processo in cui pu\u00f2 trovarsi. Nella sua forma pi\u00f9 semplice, un processo pu\u00f2 trovarsi in uno di questi stati:<br \/>\n\u25cf <b>Esecuzione<\/b>. Nel stato di esecuzione, il processo \u00e8 in esecuzione sulla CPU. Ci\u00f2 significa che le istruzioni vengono eseguite.<br \/>\n\u25cf <b>Pronto<\/b>. Nel stato di attesa, il processo \u00e8 pronto ad avviarsi, ma per qualche motivo il sistema operativo non lo esegue in quel preciso momento.<br \/>\n\u25cf <b>Bloccato<\/b>. Nel stato bloccato, il processo sta eseguendo alcune operazioni che non gli consentono di essere pronto per l'esecuzione fino a quando non si verifica un certo evento. Un esempio comune \u00e8 quando un processo inizia un'operazione di IO, diventa bloccato e cos\u00ec un altro processo pu\u00f2 utilizzare la CPU.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi Operativi: Tre Pezzi Facili. Parte 2: Astrazione: Processo (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/d2c01bdb08e7b7aeea78edcbf6ce0250.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPossiamo immaginare questi stati come un grafo. Come possiamo vedere nell'immagine, lo stato del processo pu\u00f2 cambiare tra RUNNING e READY a discrezione del sistema operativo. Quando lo stato del processo cambia da READY a RUNNING, significa che il processo \u00e8 stato pianificato. Al contrario, viene rimosso dalla pianificazione. Nel momento in cui il processo diventa BLOCKED, ad esempio, inizializzando un'operazione IO, il sistema operativo lo terr\u00e0 in questo stato fino al verificarsi di un certo evento, come la conclusione dell'IO. In questo momento avviene il passaggio allo stato READY e possibilmente immediatamente allo stato RUNNING, se cos\u00ec decide il sistema operativo. <br \/>\nGuardiamo un esempio di come due processi attraversano questi stati. Per iniziare, immaginiamo che entrambi i processi siano in esecuzione e ognuno utilizzi solo la CPU. In questo caso, i loro stati appariranno come segue.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi Operativi: Tre Pezzi Facili. Parte 2: Astrazione: Processo (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/904cef8e04c2f0d8eaf4fdc5860f5bfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nNell'esempio seguente, il primo processo dopo un certo tempo di lavoro richiede IO e passa allo stato BLOCKED, dando l'opportunit\u00e0 di avviare un altro processo (FIG 1.4). Il sistema operativo vede che il processo 0 non utilizza la CPU e avvia il processo 1. Durante l'esecuzione del processo 1, l'IO termina e lo stato del processo 0 cambia in READY. Infine, il processo 1 termina, e al termine di questo, il processo 0 viene avviato, eseguito e completa il suo lavoro.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi Operativi: Tre Pezzi Facili. Parte 2: Astrazione: Processo (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/06f44895cc976e7755c1f7bf5afe466b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Struttura dei dati<\/h3>\n<p>\n Il sistema operativo \u00e8 esso stesso un programma e, come qualsiasi altro programma, ha alcune strutture dati chiave che tracciano vari pezzi di informazioni rilevanti. Per monitorare lo stato di ogni processo, il sistema operativo manterr\u00e0 una certa <b>process list<\/b> per tutti i processi nello stato READY e alcune informazioni aggiuntive per monitorare i processi che vengono eseguiti in quel momento. Inoltre, il sistema operativo deve monitorare i processi bloccati. Dopo la conclusione dell'IO, il sistema operativo deve risvegliare il processo necessario e portarlo in uno stato pronto per l'esecuzione.<\/p>\n<p>Ad esempio, il sistema operativo deve salvare lo stato dei registri della CPU. Nel momento in cui il processo viene arrestato, lo stato dei registri viene salvato nello spazio indirizzabile del processo, e nel momento in cui il suo lavoro riprende \u2014 ripristinare i valori dei registri e cos\u00ec proseguire nell'esecuzione di quel processo.<\/p>\n<p>Oltre agli stati di ready, blocked e running, esistono anche altri stati. A volte, al momento della creazione, un processo pu\u00f2 trovarsi nello stato INIT. Infine, un processo pu\u00f2 essere posto nello stato FINAL, quando \u00e8 gi\u00e0 terminato, ma le sue informazioni non sono ancora state rimosse. Nei sistemi UNIX, questo stato \u00e8 chiamato <b>processo-zombi<\/b>. Questo stato \u00e8 utile nei casi in cui il processo genitore desidera conoscere il codice di ritorno del figlio; ad esempio, di solito 0 segnala una conclusione riuscita, mentre 1 indica un errore, ma i programmatori possono utilizzare codici di uscita aggiuntivi segnalando vari problemi. Alla conclusione, il processo genitore effettua l'ultima chiamata di sistema, come wait(), per attendere la conclusione del lavoro del processo figlio e segnalare al sistema operativo che \u00e8 possibile ripulire qualsiasi dato associato al processo concluso.<\/p>\n<p><img decoding=\"async\" alt=\"Sistemi Operativi: Tre Pezzi Facili. Parte 2: Astrazione: Processo (traduzione)\" src=\"\/wp-content\/uploads\/2019\/04\/4756790c823a7e9ebbe26ff067ca00cc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Punti chiave della lezione:<\/h3>\n<p>\n\u25cf <b>Processo <\/b> \u00e8 l'astrazione principale di un programma in esecuzione in un sistema operativo. In qualsiasi momento, un processo pu\u00f2 essere descritto in base al suo stato: il contenuto della memoria nel suo spazio degli indirizzi, il contenuto dei registri del processore, compresi il puntatore delle istruzioni e il puntatore dello stack, cos\u00ec come informazioni sugli IO, come i file aperti che vengono letti o scritti.<br \/>\n\u25cf <b>Process API<\/b> \u00e8 composto da chiamate che i programmi possono effettuare riguardo ai processi. Di solito, queste sono chiamate di creazione, eliminazione o altre.<br \/>\n\u25cf Un processo si trova in uno dei tanti stati, inclusi running, ready, blocked. Diversi eventi, come la pianificazione, l'uscita dalla pianificazione o l'attesa, possono cambiare lo stato del processo da uno a un altro.<br \/>\n\u25cf <b>Elenco dei processi<\/b> contiene informazioni su tutti i processi nel sistema. Ogni voce in esso \u00e8 chiamata process control block, che \u00e8 in realt\u00e0 una struttura che contiene tutte le informazioni necessarie su un processo specifico.\u2003<br \/>\n<br \/>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/446866\/\">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":22968,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-30992","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - 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.\" \/>\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-2-abstraktsiya-protsess-perevod\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\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 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\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.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-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:38:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:38:47+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 2: Astrazione: Processo (traduzione) | ProHoster","description":"Introduzione ai sistemi operativi Ciao, Habr! Voglio presentarvi una serie di articoli tradotti che ritengo interessanti - OSTEP.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-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 2: \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u044f: \u041f\u0440\u043e\u0446\u0435\u0441\u0441 (\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.","og:url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/operating-systems-three-easy-pieces-part-2-abstraktsiya-protsess-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:38:47+00:00","article:modified_time":"2019-10-31T18:38:47+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"30992","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 03:59:23","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:26:04","updated":"2026-01-21 03:59:23","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30992","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=30992"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/30992\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/22968"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=30992"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=30992"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=30992"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}