Bestjoeringssystemen: Trije Easy Pieces. Diel 1: Yntro (oersetting)

Yntroduksje ta bestjoeringssystemen

Привет, Хабр! Хочу представить вашему вниманию серию статей-переводов одной интересный на мой взгляд литературы — OSTEP. В этом материале рассматривается достаточно глубоко работа unix-подобных операционных систем, а именно — работа с процессами, различными планировщиками, памятью и прочиними подобными компонентами, которые составляют современную ОС. Оригинал всех материалов вы можете посмотреть вот hjir. Tink derom dat de oersetting ûnprofesjoneel makke is (hiel frij), mar ik hoopje dat ik de algemiene betsjutting behâlden haw.

Labwurk oer dit ûnderwerp is hjir te finen:
— оригинал: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
— оригинал: github.com/remzi-arpacidusseau/ostep-code
— моя личная адаптация: github.com/bykvaadm/OS/tree/master/ostep

Jo kinne ek kontrolearje út myn kanaal op telegram =)

Programma operaasje

Wat bart der as in programma rint? In rinnend programma docht ien ienfâldich ding - it útfiert ynstruksjes. Elke sekonde wurde miljoenen en sels mooglik miljarden ynstruksjes ophelle troch de prosessor fan RAM, op ​​syn beurt dekodearret it se (bygelyks erkent it hokker type dizze ynstruksjes hearre) en útfiert se. Dit kin twa nûmers tafoegje, tagong krije ta ûnthâld, in betingst kontrolearje, nei in funksje springe, ensfh. Nei it útfieren fan ien ynstruksje giet de prosessor troch nei it útfieren fan in oare. En sa ynstruksje nei ynstruksje, se wurde útfierd oant it programma einiget.
Dit foarbyld wurdt natuerlik beskôge as ferienfâldige - yn feite, om de prosessor te fersnellen, kinne jo moderne hardware jo ynstruksjes bûten beurt útfiere, mooglike resultaten berekkenje, ynstruksjes tagelyk útfiere, en ferlykbere trúkjes.

Von Neumann model fan berekkening

De ferienfâldige foarm fan wurk beskreaun troch ús is gelyk oan it Von Neumann model fan berekkening. Von Neumann is ien fan 'e pioniers fan kompjûtersystemen, hy is ek ien fan' e auteurs fan spultsje teory. Wylst it programma rint, fynt in bosk oare eveneminten plak, in protte oare prosessen en logika fan tredden, wêrfan it haaddoel is om de lansearring, operaasje en ûnderhâld fan it systeem te ferienfâldigjen.
Существует набор программного обеспечения, который ответственен за простоту запуска программ (или даже позволяющий запускать несколько программ одновременно), он позволяет программам разделять одну и ту же память, а так же взаимодействовать с различными устройствами. Такой набор ПО (программного обеспечения) по сути и называют операционной системой и в его задачи входия отслеживание того чтобы система работала корректно и эффективно, а также обеспечение простоты управления этой системой.

bestjoeringssysteem

In bestjoeringssysteem, ôfkoarte as in OS, is in set fan ûnderling besibbe programma's ûntworpen om kompjûterboarnen te behearjen en brûkersynteraksje mei in kompjûter te organisearjen..
It OS berikt syn effektiviteit op it earste plak, troch de wichtichste technyk - de technyk virtualisaasje. It OS ynteraksje mei in fysike boarne (prosessor, ûnthâld, skiif, ensfh.) En feroaret it yn in mear algemiene, machtiger en makliker te brûken foarm fan himsels. Dêrom kinne jo foar in algemien begryp it bestjoeringssysteem heul rûch fergelykje mei in firtuele masine.
Om brûkers te tastean om kommando's oan it bestjoeringssysteem te jaan en sa de mooglikheden fan 'e firtuele masine te brûken (lykas it útfieren fan in programma, it tawizen fan ûnthâld, tagong krije ta in bestân, ensafuorthinne), leveret it bestjoeringssysteem wat ynterface neamd API (applikaasje programmearring ynterface) en dêr't jo kinne skilje (oprop). In typysk bestjoeringssysteem lit hûnderten systeemoproppen dien wurde.
Uteinlik, om't virtualisaasje meardere programma's kin útfiere (dus de CPU diele), en tagelyk tagong krije ta har ynstruksjes en gegevens (sadwaande dielen fan ûnthâld), en tagong ta disken (sadwaande dielen fan I/O-apparaten). ), wurdt it bestjoeringssysteem ek wol in resource manager. Elke prosessor, skiif en ûnthâld is in boarne fan it systeem, en sadwaande wurdt ien fan 'e rollen fan it bestjoeringssysteem de taak om dizze boarnen te behearjen, it effisjint, earlik te dwaan, of oarsom, ôfhinklik fan de taak wêrfoar dit bestjoeringssysteem is ûntwurpen.

CPU-virtualisaasje

Tink oan it folgjende programma:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Bestjoeringssystemen: Trije Easy Pieces. Diel 1: Yntro (oersetting)

It docht gjin spesjale aksjes, yn feite, alles wat it docht is in funksje neame spinne(), waans taak is in fyts troch de tiid kontrôle en werom nei ien sekonde is foarby. Sa werhellet it foar ûnbepaalde tiid de tekenrige dy't de brûker trochjûn as argumint.
Litte wy dit programma útfiere en it karakter "A" trochjaan as argumint. It resultaat is net bysûnder ynteressant - it systeem útfiert gewoan in programma dat periodyk it karakter "A" werjaan.
Litte wy no de opsje besykje as in protte eksimplaren fan itselde programma rinne, mar ferskate letters útfiere om it dúdliker te meitsjen. Yn dit gefal sil it resultaat wat oars wêze. Nettsjinsteande it feit dat wy ien prosessor hawwe, wurdt it programma tagelyk útfierd. Hoe komt it? Mar it docht bliken dat it bestjoeringssysteem, net sûnder de help fan hardware-mooglikheden, in yllúzje makket. De yllúzje dat d'r meardere firtuele processors yn it systeem binne, dy't ien fysike prosessor yn in teoretysk ûneinich getal meitsje en dêrmei skynber programma's tagelyk rinne kinne. Dizze yllúzje wurdt neamd CPU-virtualisaasje.
Dizze foto ropt in protte fragen op, bygelyks as ferskate programma's tagelyk rinne wolle, hokker sil dan lansearre wurde? De "belied" fan it OS binne ferantwurdlik foar dizze fraach. Belied wurdt brûkt op in protte plakken yn it OS en beantwurdzje fragen lykas dit, en binne de basismeganismen dy't it OS ymplementearret. Dêrfandinne de rol fan it OS as boarnebehearder.

Unthâld virtualization

Litte wy no nei it ûnthâld sjen. It fysike model fan ûnthâld yn moderne systemen wurdt fertsjintwurdige as in array fan bytes.. Om út it ûnthâld te lêzen, moatte jo spesifisearje sel adrestagong ta it. Om gegevens te skriuwen of te aktualisearjen, moatte jo ek de gegevens en it adres fan 'e sel opjaan wêr't it skriuwe moat.
Unthâld wurdt konstant tagong ta de útfiering fan it programma. In programma bewarret syn hiele gegevensstruktuer yn it ûnthâld en makket tagong ta it troch ferskate ynstruksjes út te fieren. De ynstruksjes wurde yntusken ek opslein yn it ûnthâld, sadat it ek tagonklik is foar elk fersyk foar de folgjende ynstruksje.

malloc() call

Tink oan it folgjende programma, dat in regio fan ûnthâld tawiist mei de oprop malloc () (https://youtu.be/jnlKRnoT1m0):

Bestjoeringssystemen: Trije Easy Pieces. Diel 1: Yntro (oersetting)

It programma docht ferskate dingen. Earst, it allocates wat ûnthâld (rigel 7), dan printsje it adres fan de tawiisd sel (rigel 9), skriuwt nul oan it earste slot fan it tawiisd ûnthâld. Dêrnei komt it programma in lus yn wêryn it de yn it ûnthâld opsleine wearde ferheget op it adres yn 'e fariabele "p". It printet ek de proses-ID fan himsels. De proses-ID is unyk foar elk rinnende proses. Nei it lansearjen fan ferskate kopyen, sille wy in nijsgjirrich resultaat stroffelje: yn it earste gefal, as jo neat dogge en gewoan ferskate kopyen útfiere, dan sille de adressen oars wêze. Mar dit falt net ûnder ús teory! Korrekt, sûnt moderne distribúsjes hawwe ûnthâld randomisaasje standert ynskeakele. As it is útskeakele, krije wy it ferwachte resultaat - de ûnthâldadressen fan twa tagelyk rinnende programma's sille oerienkomme.

Bestjoeringssystemen: Trije Easy Pieces. Diel 1: Yntro (oersetting)

Dêrtroch docht bliken dat twa ûnôfhinklike programma's wurkje mei har eigen privee adresromten, dy't op har beurt yn kaart brocht wurde troch it bestjoeringssysteem yn fysyk ûnthâld. Dêrom, it brûken fan ûnthâld adressen binnen ien programma sil gjin ynfloed op oaren op hokker wize, en it liket foar elk programma dat it hat in eigen stik fan fysyk ûnthâld, hielendal jûn oan it. De realiteit is lykwols dat fysyk ûnthâld in dielde boarne is dy't beheard wurdt troch it bestjoeringssysteem.

Konsistinsje

In oar fan 'e wichtige ûnderwerpen binnen bestjoeringssystemen is - gearhing. Dizze term wurdt brûkt as it praat oer problemen yn it systeem dy't kinne foarkomme as jo wurkje mei in protte dingen tagelyk binnen itselde programma. Konsistinsjeproblemen ûntsteane sels binnen it bestjoeringssysteem sels. Yn 'e foarige foarbylden fan ûnthâld- en prosessorvirtualisaasje realisearren wy dat it OS in protte dingen tagelyk beheart - it begjint it earste proses, dan it twadde, ensafuorthinne. As it die bliken, kin dit gedrach liede ta guon problemen. Sa, bygelyks, moderne multi-threaded programma ûnderfine sokke swierrichheden.

Tink oan it folgjende programma:

Bestjoeringssystemen: Trije Easy Pieces. Diel 1: Yntro (oersetting)

It programma yn 'e haadfunksje makket twa triedden mei de oprop pthread_create(). Yn dit foarbyld kin in tried tocht wurde as in funksje dy't rint yn deselde ûnthâldromte neist oare funksjes, mei dúdlik mear as ien funksje dy't tagelyk rint. Yn dit foarbyld begjint elke thread en fiert de funksje út worker () dy't op syn beurt gewoan de fariabele fergruttet,.

Litte wy dit programma útfiere mei in argumint fan 1000. Sa't jo miskien hawwe rieden, soe it resultaat 2000 wêze moatte, om't elke thread de fariabele 1000 kear ferhege hat. Lykwols, alles is net sa ienfâldich. Litte wy besykje it programma út te fieren mei in folchoarder fan mear werhellingen.

Bestjoeringssystemen: Trije Easy Pieces. Diel 1: Yntro (oersetting)

Troch it ynfieren fan in getal, bygelyks 100000, ferwachtsje wy de útfier te sjen as it nûmer 200000. As wy lykwols it getal 100000 ferskate kearen útfiere, sille wy net allinich it goede antwurd net sjen, mar krije ek ferskate ferkearde antwurden. It antwurd leit yn it feit dat trije operaasjes nedich binne om it oantal te ferheegjen - it nûmer út it ûnthâld te heljen, te ferheegjen en dan it nûmer werom te skriuwen. Om't al dizze ynstruksjes net atomysk (allegear tagelyk) wurde útfierd, kinne frjemde dingen lykas dit barre. Dit probleem wurdt neamd yn programmearring ras betingst. As ûnbekende krêften op in ûnbekend momint de prestaasjes fan ien fan jo operaasjes kinne beynfloedzje.

Boarne: www.habr.com

Add a comment