Sistemi Operativi: Trè Easy Pieces. Parte 2: Astrazione: Prucessu (traduzzione)

Introduzione à i Sistemi Operativi

Ehi Habr! Vogliu portà à a vostra attenzione una seria di articuli-traduzioni di una literatura interessante in u mo parè - OSTEP. Stu materiale discute assai prufonda u travagliu di i sistemi operativi Unix-like, vale à dì, u travagliu cù prucessi, diversi schedulers, memoria, è altri cumpunenti simili chì custituiscenu un OS mudernu. Pudete vede l'uriginale di tutti i materiali quì ccà. Per piacè nutate chì a traduzzione hè stata fatta senza prufessiunali (abbastanza liberamente), ma spergu chì aghju conservatu u significatu generale.

U travagliu di laboratoriu nantu à questu sughjettu pò esse truvatu quì:

Altre parti:

Pudete ancu verificà u mo canale à telegramma =)

Fighjemu l'astrazione più fundamentale chì u SO furnisce à l'utilizatori: u prucessu. A definizione di u prucessu hè abbastanza sèmplice - hè prugramma in esecuzione. U prugramma stessu hè una cosa senza vita situata nantu à u discu - hè un inseme di struzzioni è possibbilmente qualchi dati statichi chì aspettanu per esse lanciati. Hè u SO chì piglia quelli byte è li corre, trasfurmendu u prugramma in qualcosa d'utile.
A maiò spessu, l'utilizatori volenu eseguisce più di un prugramma à u stessu tempu, per esempiu, pudete eseguisce un navigatore, un ghjocu, un lettore media, un editore di testu è simili in u vostru laptop. In fatti, un sistema tipicu pò eseguisce decine o centinaie di prucessi simultaneamente. Stu fattu rende u sistema più faciule d'utilizà, ùn avete mai à preoccupassi se u CPU hè liberu, solu eseguite prugrammi.

Questu pone u prublema: cumu furnisce l'illusione di parechji CPU? Cumu l'OS pò creà l'illusione di un numeru quasi infinitu di CPU, ancu s'ellu avete solu un CPU fisicu?

U SO crea questa illusione per via di a virtualizazione di CPU. Accuminciandu un prucessu, poi piantà, principiendu un altru prucessu, è cusì, u SO pò mantene l'illusione chì ci sò parechje CPU virtuale, quandu in fattu ci saranu unu o più processori fisici. Sta tecnica hè chjamata divisione di risorse CPU per u tempu. Sta tecnica permette à l'utilizatori di eseguisce quanti prucessi simultanee volenu. U costu di sta suluzione hè u rendiment - postu chì se u CPU hè spartutu da parechji prucessi, ogni prucessu serà processatu più lentamente.
Per implementà a virtualizazione di CPU, è sopratuttu per fà bè, u SO hà bisognu di supportu à livellu bassu è altu. U sustegnu di livellu bassu hè chjamatu miccanismi sò metudi o protokolli di livellu bassu chì implementanu a parte necessaria di a funziunalità. Un esempiu di tali funziunalità hè a cunversione di u cuntestu, chì dà à u SO a capacità di piantà un prugramma è eseguisce un altru prugramma nantu à u processatore. Questa divisione di u tempu hè implementata in tutti i sistemi operativi muderni.
In cima di sti miccanismi hè una certa logica integrata in u SO, in forma di "pulitiche". pulitica hè un certu algoritmu di decisione per u sistema upirativu. Tali pulitiche, per esempiu, decide quale prugramma deve esse lanciatu (da una lista di cumandamenti) prima. Cusì, per esempiu, stu prublema serà risolta da una pulitica chjamata pianificatore (pulitica di pianificazione) è quandu sceglite una suluzione, serà guidata da tali dati cum'è: a storia di l'iniziu (quale prugramma hè stata lanciata u più longu in l'ultimi minuti), chì carica porta stu prucessu (chì tippi di prugrammi sò stati lanciati), metrica di rendiment (sì u sistema). hè ottimizatu per l'interazione interattiva o per u throughput ) è cusì.

Astrazzioni : prucessu

L'astrazione di un prugramma in esecuzione eseguita da u sistema operatore hè ciò chì chjamemu prucessu. Comu diciatu prima, un prucessu hè solu un prugramma in esecuzione, in ogni periodu di tempu istantaneu. Un prugramma cù quale pudemu ottene infurmazioni riassuntu da diverse risorse di u sistema chì stu prugramma accede o affetta durante a so esicuzzioni.
Per capiscenu i cumpunenti di u prucessu, avete bisognu di capiscenu i stati di u sistema: ciò chì u prugramma pò leghje o cambià durante u so funziunamentu. In ogni mumentu, avete bisognu di capisce quale elementi di u sistema sò impurtanti per l'esekzione di u prugramma.
Unu di l'elementi evidenti di u sistema statu chì u prucessu include hè память. Istruzzioni sò situati in memoria. I dati chì u prugramma leghje o scrive sò ancu situati in memoria. Cusì, a memoria chì un prucessu pò indirizzà (chjamatu spaziu di indirizzu) hè parti di u prucessu.
Ancu parte di u statu di u sistema sò registri. Parechji struzzioni sò destinati à cambià u valore di i registri o à leghje u so valore, è cusì i registri diventanu ancu una parte impurtante di u funziunamentu di u prucessu.
Semu devi esse nutatu chì u statu di a macchina hè ancu furmatu da certi registri speciali. Per esempiu, IP - puntatore d'istruzzioni - un punteru à l'istruzzioni chì u prugramma hè attualmente in esecuzione. Ci hè ancu puntatore di stack è in relazione cù questu puntatore di quadru, chì sò usati per gestisce: paràmetri di funzione, variabili lucali è indirizzi di ritornu.
Infine, i prugrammi spessu accede à ROM (memoria di sola lettura). Questa infurmazione "I / O" (input / output) deve include una lista di i schedari attualmente aperti da u prucessu.

Process API

Per migliurà a nostra cunniscenza di u funziunamentu di u prucessu, studiemu esempi di chjama di u sistema chì deve esse inclusu in ogni interfaccia di u sistema operatore. Queste API sò dispunibuli in una forma o l'altru in qualsiasi OS.

creà (creazione): U SO deve include qualchì metudu chì permette di creà novi prucessi. Quandu inserite un cumandamentu in u terminal o lanciate una applicazione clicchendu doppiu nantu à una icona, una chjama hè mandata à u SO per creà un novu prucessu è poi lanciate u prugramma specificatu.
Delete: Siccomu ci hè una interfaccia per creà un prucessu, u SO deve ancu furnisce a capacità di furzà a rimuzione di un prucessu. A maiò parte di i prugrammi accuminciaranu naturalmente è finiscinu per sè stessu mentre correnu. Altrimenti, l'utilizatore piacerebbe esse capaci di tumbà elli è cusì una interfaccia per piantà u prucessu seria utile.
Aspettate (attesa): A volte hè utile per aspittà chì un prucessu per finisce, cusì alcune interfacce sò furnite chì furnisce a capacità di aspittà.
Misc Control (vari cuntrolli): In più di tumbà è aspittendu u prucessu, ci sò ancu altri metudi di cuntrollu. Per esempiu, a maiò parte di i sistemi operativi furniscenu l'abilità di congelare un prucessu (piantà a so esecuzione per un certu periodu) è poi ripiglià (cuntinuà l'esecuzione)
Status (statu): Ci sò diverse interfacce per ottene qualchì infurmazione nantu à u statutu di un prucessu, cum'è quantu tempu hè stata in esecuzione o in quale statu hè attualmente.

Sistemi Operativi: Trè Easy Pieces. Parte 2: Astrazione: Prucessu (traduzzione)

Creazione di prucessu: Dettagli

Una di e cose interessanti hè cumu esattamente i prugrammi sò trasfurmati in prucessi. Soprattuttu cumu u sistema operativu ripiglia è corre u prugramma. Cumu esattamente u prucessu hè creatu.
Prima di tuttu, u SO deve carricà u codice di u prugramma è e dati statichi in memoria (in u spaziu di indirizzu di u prucessu). I prugrammi sò generalmente situati nantu à un discu o unità di stati solidi in qualchì formatu eseguibile. Cusì, u prucessu di carica di u prugramma è di dati statichi in memoria richiede chì u SO sia capace di leghje quelli bytes da u discu è di mette in un locu in memoria.

In i primi sistemi operativi, u prucessu di carica hè stata fatta cun ansietà, chì significa chì u codice tutale hè stata caricata in memoria prima chì u prugramma hè stata lanciata. I sistemi operativi muderni facenu questu lazily, vale à dì, caricate pezzi di codice o dati solu quandu u prugramma ne richiede durante a so esecuzione.

Una volta chì u codice è i dati statici sò caricati in a memoria di u SO, ci sò uni pochi di più cose chì deve esse fattu prima chì u prucessu pò eseguisce. Una certa quantità di memoria deve esse attribuita per a pila. I prugrammi utilizanu a pila per variabili lucali, paràmetri di funzione è indirizzi di ritornu. U SO allocate sta memoria è dà à u prucessu. U stack pò ancu esse attribuitu cù certi argumenti, specificamente riempie i paràmetri di a funzione main(), per esempiu cun un array di argc è argv.

U sistema operatore pò ancu attribuisce una certa memoria à u munzeddu di u prugramma. U munzeddu hè utilizatu da i prugrammi per dumandà esplicitamente dati attribuiti dinamicamente. I prugrammi dumandanu stu spaziu chjamendu a funzione malloc () è sguassate esplicitamente chjamendu a funzione liberu (). U munzeddu hè necessariu per e strutture di dati cum'è fogli cunnessi, tavule hash, arburi è altri. À u principiu, una piccula quantità di memoria hè attribuita à u munzeddu, ma cù u tempu, cum'è u prugramma scorri, u munzeddu pò dumandà più memoria per mezu di l'API di a biblioteca chjama malloc(). U sistema upirativu hè implicatu in u prucessu di assignà più memoria per aiutà à suddisfà sti chjamati.

U sistema upirativu hà ancu eseguisce attività di inizializazione, in particulare quelli chì sò ligati à l'I/O. Per esempiu, in i sistemi UNIX, ogni prucessu per difettu hà 3 descriptori di file aperti, per input standard, output, è errore. Questi manichi permettenu à i prugrammi di leghje l'input da u terminal, è ancu di vede l'infurmazioni nantu à u screnu.

Cusì, carghjendu u codice è e dati statichi in memoria, creendu è inizializendu a pila, è facendu altre travagliu in relazione à eseguisce e funzioni I / O, u SO prepara u stadiu per u prucessu per eseguisce. Infine, ci hè un ultimu compitu restatu: eseguisce u prugramma attraversu u so puntu di entrata, chjamatu a funzione main(). Eseguendu a funzione main(), u SO trasferisce u cuntrollu di CPU à u prucessu novu creatu, cusì u prugramma principia à eseguisce.

Statu di prucessu

Avà chì avemu un pocu di capiscitura di ciò chì hè un prucessu è cumu hè creatu, elenchemu i stati di prucessu chì pò esse. In a so forma più simplice, un prucessu pò esse in unu di sti stati:
corsa. Quandu eseguisce, u prucessu corre nantu à u processatore. Questu significa chì l'istruzzioni sò eseguite.
Animu. In u statu prontu, u prucessu hè prontu à eseguisce, ma per qualchi ragiuni u SO ùn eseguisce micca à u tempu specificatu.
bluccatu. In u statu bluccatu, un prucessu eseguisce alcune operazioni chì impediscenu di esse prontu à eseguisce finu à qualchì avvenimentu. Un esempiu cumuni hè quandu un prucessu inizia una operazione IO, diventa bluccatu in modu chì un altru prucessu pò aduprà u processatore.

Sistemi Operativi: Trè Easy Pieces. Parte 2: Astrazione: Prucessu (traduzzione)

Pudete imaginà sti stati in forma di graficu. Comu pudemu vede in a stampa, u statu di prucessu pò cambià trà RUNNING è READY à a discrezione di u SO. Quandu u statu di un prucessu cambia da READY à RUNNING, significa chì u prucessu hè statu pianificatu. In a direzzione opposta - eliminata da u layout. À u mumentu chì un prucessu diventa BLOCKED, per esempiu, aghju iniziatu una operazione IO, l'OS a mantene in questu statu finu à chì qualchì avvenimentu accade, per esempiu, a cumpiimentu di IO. in questu mumentu a transizione à u statu READY è possibbilmente immediatamente à u statu RUNNING se u OS decide cusì.
Fighjemu un esempiu di cumu dui prucessi si movenu attraversu questi stati. Per cumincià, imaginemu chì i dui prucessi sò in esecuzione, è ognunu usa solu u CPU. In questu casu, i so stati pareranu cusì.

Sistemi Operativi: Trè Easy Pieces. Parte 2: Astrazione: Prucessu (traduzzione)

In l'esempiu seguitu, u primu prucessu, dopu à qualchì tempu in esecuzione, dumanda IO è entra in u statu BLOCKED, chì permette à un altru prucessu di eseguisce (FIG 1.4). L'OS vede chì u prucessu 0 ùn hè micca usu di u CPU è principia u prucessu 1. Mentre u prucessu 1 hè in esecuzione, IO hè cumpletu è u statutu di u prucessu 0 cambia à READY. Infine, u prucessu 1 hà finitu, è dopu à a fine, u prucessu 0 principia, eseguisce è finisce u so travagliu.

Sistemi Operativi: Trè Easy Pieces. Parte 2: Astrazione: Prucessu (traduzzione)

Struttura di dati

U SO stessu hè un prugramma, è cum'è qualsiasi altru prugramma, hà alcune strutture di dati chjave chì mantenenu traccia di diversi pezzi d'infurmazioni pertinenti. Per seguità u statu di ogni prucessu, u SO supporterà alcuni lista di prucessu per tutti i prucessi in u statu READY è qualchì infurmazione supplementaria per seguità i prucessi chì sò attualmente in esecuzione. Inoltre, u SO deve monitorà i prucessi bluccati. Dopu chì IO hè cumpletu, u SO deve svegliate u prucessu necessariu è mette in un statu prontu à eseguisce.

Per esempiu, u SO deve priservà u statu di i registri di u processatore. À u mumentu chì u prucessu si ferma, u statu di i registri hè guardatu in u spaziu di l'indirizzu di u prucessu, è à u mumentu chì u so funziunamentu cuntinueghja, i valori di i registri sò restaurati è cusì cuntinueghjanu l'esekzione di stu prucessu.

In più di stati pronti, bluccati, in esecuzione, ci sò altri stati. A volte, à u mumentu di a creazione, un prucessu pò esse in u statu INIT. Infine, un prucessu pò esse piazzatu in u statu FINAL quandu hà digià finitu, ma a so infurmazione ùn hè ancu stata sbulicata. In i sistemi UNIX stu statu hè chjamatu prucessu zombie. Stu statu hè utile per i casi induve un prucessu parenti vole sapè u codice di ritornu di un zitellu, per esempiu, di solitu 0 signala un successu è 1 un errore, ma i programatori ponu emette codici di output supplementari per signalà diversi prublemi. Quandu u prucessu parente finisce, face una chjama di u sistema finali, cum'è wait (), per aspittà chì u prucessu di u zitellu finisce è signalà à u SO chì pò sguassà qualsiasi dati assuciati cù u prucessu terminatu.

Sistemi Operativi: Trè Easy Pieces. Parte 2: Astrazione: Prucessu (traduzzione)

Punti chjave di a cunferenza:

prucessu - l'astrazione principale di un prugramma in esecuzione in u SO. In ogni mumentu, un prucessu pò esse discrittu da u so statu: u cuntenutu di a memoria in u so spaziu di indirizzu, u cuntenutu di i registri di u processatore, cumpresu l'indicatore d'istruzzioni è l'indicatore di stack, è l'infurmazioni IO, cum'è i schedari aperti chì sò leghjite o scritte.
Process API custituitu di chjamate chì i prugrammi ponu fà à i prucessi. Di genere, queste sò creanu, sguassate o altre chjama.
● U prucessu hè in unu di parechji stati, cumpresi corsa, prontu, bluccatu. Diversi avvenimenti cum'è scheduling, eccezzioni da scheduling, o attese ponu cambià u statu di un prucessu da unu à l'altru.
Lista di prucessi cuntene infurmazione nantu à tutti i prucessi in u sistema. Ogni entrata in questu hè chjamatu un bloccu di cuntrollu di prucessu, chì in realtà hè una struttura chì cuntene tutte l'infurmazioni necessarii nantu à un prucessu specificu. 

Source: www.habr.com

Add a comment