Sistemi Operativi: Trè Easy Pieces. Parte 1: Intro (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 pianificatori, 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ì:
- originale : pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- originale : github.com/remzi-arpacidusseau/ostep-code
- a mo adattazione persunale: github.com/bykvaadm/OS/tree/master/ostep

Pudete ancu verificà u mo canale à telegramma =)

U funziunamentu di u prugramma

Chì succede quandu un prugramma hè in esecuzione? Un prugramma in esecuzione faci una cosa simplice - esegue istruzioni. Ogni secondu, milioni è ancu possibbilmente miliardi d'istruzzioni sò ricuperati da u processatore da a RAM, à u turnu li decode (per esempiu, ricunnosce à quale tipu di sti struzzioni appartenenu) è eseguisce. Questu puderia esse aghjunghje dui numeri, accede à a memoria, cuntrollà una cundizione, saltà à una funzione, è cusì. Dopu l'esekzione di una struzzione, u processatore procede à l'esekzione di l'altru. È cusì struzzioni dopu struzzioni, sò eseguiti finu à a fine di u prugramma.
Stu esempiu hè naturalmente cunsideratu simplificatu - in fattu, per accelerà u processatore, l'hardware mudernu permette di eseguisce struzzioni fora di u turnu, calculà i risultati pussibuli, eseguisce struzzioni simultaneamente, è trucchi simili.

U mudellu di Von Neumann di calculu

A forma simplificata di u travagliu discritta da noi hè simile à u mudellu Von Neumann di calculu. Von Neumann hè unu di i pionieri di i sistemi informatici, hè ancu unu di l'autori di a teoria di u ghjocu.. Mentre u prugramma hè in esecuzione, una mansa d'altri avvenimenti sò accaduti, assai altri prucessi è u travagliu logicu di terzu, u scopu principale di quale hè di simplificà u lanciamentu, u funziunamentu è u mantenimentu di u sistema.
Ci hè un inseme di software chì hè rispunsevuli di fà i prugrammi faciuli di eseguisce (o ancu di permette à parechji prugrammi di eseguisce à u stessu tempu), chì permette à i prugrammi di sparte a listessa memoria, è di cumunicà cù diversi dispositi. Un tali inseme di software (software) hè essenzialmente chjamatu u sistema operatore è i so compiti includenu u monitoraghju chì u sistema funziona in modu correttu è efficace, è ancu per assicurà a facilità di gestione di stu sistema.

sistema upirativu

Un sistema operatore, abbreviatu cum'è OS, hè un inseme di prugrammi interrelati pensati per gestisce e risorse di l'informatica è urganizà l'interazzione di l'utilizatori cù un urdinatore..
U SO ghjunghje a so efficacità in u primu locu, per mezu di a tecnica più impurtante - a tecnica virtualizazione. U SO interagisce cù una risorsa fisica (processore, memoria, discu, etc.) è u trasforma in una forma più generale, più putente è più faciule d'utilizà di sè stessu. Dunque, per una cunniscenza generale, pudete assai apprussimatamente paragunà u sistema operatore cù una macchina virtuale.
Per permette à l'utilizatori di dà cumandamenti à u sistema operatore è cusì aduprà e capacità di a macchina virtuale (cum'è l'esecuzione di un prugramma, l'assignazione di memoria, l'accessu à un schedariu, etc.), u sistema operatore furnisce una interfaccia chjamata. API (interfaccia di prugrammazione di l'applicazione) è à quale pudete fà chjamate (chjama). Un sistema operatore tipicu permette di fà centinaie di chjamate di sistema.
Infine, postu chì a virtualizazione permette à parechji prugrammi di eseguisce (cumparendu cusì u CPU), è accede simultaneamente à e so struzzioni è dati (cusì sparte a memoria), è accede à i dischi (chì sparte i dispositi I/O). ), u sistema operatore hè ancu chjamatu gestore di risorse. Ogni processore, discu è memoria hè una risorsa di u sistema, è cusì unu di i roli di u sistema upirativu diventa u compitu di gestisce sti risorse, facendu in modu efficaci, onestamente, o vice versa, secondu u compitu per quale stu sistema upirativu. hè cuncepitu.

Virtualization CPU

Cunsiderate u prugramma seguente:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Sistemi Operativi: Trè Easy Pieces. Parte 1: Intro (traduzzione)

Ùn faci micca azzione speciale, in fattu, tuttu ciò chì faci hè chjamatu una funzione lingual mucosa(), chì u so compitu hè di ciclu u cuntrollu di u tempu è di vultà dopu chì una seconda hè passata. Cusì, ripete indefinitu a stringa chì l'utilizatore hà passatu cum'è argumentu.
Eseguimu stu prugramma è passemu u caratteru "A" cum'è argumentu. U risultatu ùn hè micca particularmente interessante - u sistema solu eseguisce un prugramma chì mostra periodicamente u caratteru "A".
Avà pruvemu l'opzione quandu parechji istanze di u stessu prugramma sò in esecuzione, ma emette diverse lettere per rende più chjaru. In questu casu, u risultatu serà un pocu sfarente. Malgradu u fattu chì avemu un processatore, u prugramma hè eseguitu simultaneamente. Cumu succede? Ma risulta chì u sistema upirativu, micca senza l'aiutu di capacità hardware, crea una illusione. L'illusione chì u sistema hà parechji prucessori virtuali, trasfurmendu un unicu processore fisicu in un numeru teoricamente infinitu è ​​permette cusì chì i prugrammi apparentemente funzionanu simultaneamente. Questa illusione hè chjamata Virtualization CPU.
Sta stampa suscita parechje dumande, per esempiu, se parechji prugrammi volenu eseguisce à u stessu tempu, quale serà lanciatu? E "pulitiche" di u SO sò rispunsevuli di sta quistione. I pulitichi sò usati in parechji lochi in u SO è risponde à e dumande cum'è questu, è sò i miccanismi basi chì u SO implementa. Da quì u rolu di l'OS cum'è gestore di risorse.

Virtualizazione di memoria

Avà fighjemu a memoria. U mudellu fisicu di memoria in i sistemi muderni hè rapprisintatu cum'è un array di bytes.. Per leghje da a memoria, avete bisognu di specificà indirizzu cellulaper accede à questu. Per scrive o aghjurnà e dati, deve ancu specificà i dati è l'indirizzu di a cellula induve scrive.
A memoria hè accessu constantemente durante l'esekzione di u prugramma. Un prugramma guarda tutta a so struttura di dati in memoria è accede à ellu eseguendu diverse istruzioni. L'istruzzioni, intantu, sò ancu guardati in memoria, per quessa hè ancu accessu per ogni dumanda per l'istruzzioni dopu.

malloc() chjama

Cunsiderate u seguente prugramma, chì attribuisce una regione di memoria cù a chjama malloc () (https://youtu.be/jnlKRnoT1m0):

Sistemi Operativi: Trè Easy Pieces. Parte 1: Intro (traduzzione)

U prugramma faci parechje cose. Prima, attribuisce una certa memoria (linea 7), poi stampa l'indirizzu di a cellula assignata (linea 9), scrive zero à u primu slot di a memoria assignata. In seguitu, u prugramma entre in un ciclu in u quale aumenta u valore guardatu in memoria à l'indirizzu in a variàbile "p". Stampa ancu l'ID di prucessu di sè stessu. L'ID di prucessu hè unicu per ogni prucessu in esecuzione. Dopu avè lanciatu parechje copie, sbatteremu nantu à un risultatu interessante: In u primu casu, se ùn fate nunda è solu eseguite parechje copie, allora l'indirizzi seranu diffirenti. Ma questu ùn hè micca sottumessu à a nostra teoria ! Currettu, postu chì e distribuzioni muderne anu a randomizazione di memoria attivata per automaticamente. S'ellu hè disattivatu, avemu u risultatu previstu - l'indirizzi di memoria di dui prugrammi in esecuzione simultaneamente currispondenu.

Sistemi Operativi: Trè Easy Pieces. Parte 1: Intro (traduzzione)

In u risultatu, si trova chì dui prugrammi indipendenti travaglianu cù i so spazii di indirizzu privatu, chì à u turnu sò mappati da u sistema operatore in memoria fisica.. Per quessa, l'usu di l'indirizzi di memoria in un prugramma ùn affetterà micca l'altri in ogni modu, è pare à ogni prugramma chì hà u so propiu pezzu di memoria fisica, interamente datu à ellu. A realità, però, hè chì a memoria fisica hè una risorsa cumuna gestita da u sistema operatore.

Cuerenza

Un altru di i temi impurtanti in i sistemi operativi hè - cuerenza. Stu terminu hè utilizatu quandu si parla di prublemi in u sistema chì ponu accade quandu u travagliu cù parechje cose à u stessu tempu in u stessu prugramma. I prublemi di coerenza sò ancu in u sistema operatore stessu. In l'esempii di virtualizazione di memoria è prucessore precedente, avemu capitu chì u SO gestisce parechje cose à u stessu tempu - principia u primu prucessu, dopu u sicondu, è cusì. Comu si girò fora, stu cumpurtamentu pò purtà à qualchi prublemi. Cusì, per esempiu, i prugrammi muderni multi-threaded sperimentanu tali difficultà.

Cunsiderate u prugramma seguente:

Sistemi Operativi: Trè Easy Pieces. Parte 1: Intro (traduzzione)

U prugramma in a funzione principale crea dui fili cù a chjama pthread_create(). In questu esempiu, un filu pò esse pensatu cum'è una funzione chì corre in u stessu spaziu di memoria cù altre funzioni, cù chjaramente più di una funzione chì funziona à u stessu tempu. In questu esempiu, ogni filu principia è eseguisce a funzione worker() chì à u turnu aumenta solu a variabile,.

Eseguisce stu prugramma cù un argumentu di 1000. Cum'è avete capitu, u risultatu deve esse 2000 perchè ogni filu hà incrementatu a variàbile 1000 volte. Tuttavia, tuttu ùn hè micca cusì simplice. Pruvemu di eseguisce u prugramma cù un ordine di grandezza più ripetizioni.

Sistemi Operativi: Trè Easy Pieces. Parte 1: Intro (traduzzione)

Inputting un numeru, per esempiu, 100000, avemu aspittatu à vede u risultatu cum'è u numeru 200000. In ogni casu, s'è no curremu u numeru 100000 parechje volte, ùn avemu micca solu ùn vede a risposta curretta, ma ancu ottene diverse risposte sbagliate. A risposta si trova in u fattu chì per aumentà u numeru, sò necessarii trè operazioni - estrazione di u numeru da a memoria, incrementing, è dopu scrive u numeru. Siccomu tutte queste struzzioni ùn sò micca eseguite atomicamente (tutti à u stessu tempu), cose strane cusì ponu accade. Stu prublema hè chjamatu in prugrammazione cundizione di corsa. Quandu e forze scunnisciute in un mumentu scunnisciutu ponu influenzà a prestazione di qualsiasi di e vostre operazioni.

Source: www.habr.com

Add a comment