Betribssystemer: Dräi einfach Stécker. Deel 1: Intro (Iwwersetzung)

Aféierung fir Betribssystemer

Moien, Habr! Ech wéilt Iech eng Serie vun Artikelen ze presentéieren - Iwwersetzunge vun enger Literatur, déi menger Meenung no interessant ass - OSTEP. Dëst Material ënnersicht zimmlech déif d'Aarbecht vun Unix-ähnlechen Betribssystemer, nämlech d'Aarbecht mat Prozesser, verschidde Scheduler, Erënnerung an aner ähnlech Komponenten, déi e modernen OS ausmaachen. Dir kënnt d'Original vun all Material hei gesinn hei. Maacht weg datt d'Iwwersetzung onprofessionell (zimlech fräi) gemaach gouf, awer ech hoffen, datt ech déi allgemeng Bedeitung behalen hunn.

Labo Aarbecht zu dësem Thema kann hei fonnt ginn:
- original: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- original: github.com/remzi-arpacidusseau/ostep-code
- meng perséinlech Adaptatioun: github.com/bykvaadm/OS/tree/master/ostep

Dir kënnt och mäi Kanal kucken op Telegramm =)

Programm Operatioun

Wat geschitt wann e Programm leeft? E lafende Programm mécht eng einfach Saach - et féiert Instruktiounen aus. All Sekonn ginn Millioune a souguer Milliarden Uweisungen vum Prozessor vum RAM zréckgezunn, am Tour decodéiert se (zum Beispill, et erkennt zu wéi engem Typ dës Instruktioune gehéieren) an ausféiert se. Dëst kéint zwou Zuelen derbäi ginn, Zougang zu Erënnerung, Iwwerpréiwung vun enger Konditioun, Sprangen op eng Funktioun, asw. No der Ausféierung vun enger Instruktioun geet de Prozessor op d'Ausféierung vun enger anerer weider. An esou Uweisunge no Uweisunge gi se ausgefouert bis de Programm eriwwer ass.
Dëst Beispill gëtt natierlech als vereinfacht ugesinn - tatsächlech, fir de Prozessor ze beschleunegen, modern Hardware erlaabt Iech Instruktiounen ausserhalb auszeféieren, méiglech Resultater ze berechnen, Instruktioune gläichzäiteg auszeféieren an ähnlech Tricken.

Von Neumann Berechnungsmodell

Déi vereinfacht Form vun der Aarbecht, déi vun eis beschriwwe gëtt, ass ähnlech wéi de Von Neumann Berechnungsmodell. De Von Neumann ass ee vun de Pionéier vun de Computersystemer, hien ass och ee vun den Auteure vun der Spilltheorie. Wärend de Programm leeft, ginn eng Rëtsch aner Eventer stattfonnt, vill aner Prozesser an Drëtt-Partei-Logikaarbecht, den Haaptziel vun deem ass de Start, Operatioun an Ënnerhalt vum System ze vereinfachen.
Et gëtt eng Rei vu Software déi verantwortlech ass fir Programmer einfach ze lafen (oder souguer datt verschidde Programmer zur selwechter Zäit lafen), et erlaabt Programmer déiselwecht Erënnerung ze deelen, souwéi mat verschiddenen Apparater ze kommunizéieren. Esou e Set vu Software (Software) gëtt am Wesentlechen e Betribssystem genannt a seng Aufgaben enthalen d'Iwwerwaachung datt de System korrekt an effizient funktionnéiert, souwéi d'Liichtegkeet vun der Gestioun vun dësem System ze garantéieren.

Betribssystem

En Betribssystem, ofgekierzt als OS, ass eng Rei vun interrelated Programmer entwéckelt fir Computerressourcen ze managen an d'Benotzerinteraktioun mat engem Computer ze organiséieren..
D'OS erreecht seng Effizienz an der éischter Plaz, duerch déi wichtegst Technik - d'Technik Virtualiséierung. D'OS interagéiert mat enger kierperlecher Ressource (Prozessor, Gedächtnis, Disk, etc.) a transforméiert et an eng méi allgemeng, méi mächteg a méi einfach ze benotzen Form vu sech selwer. Dofir, fir allgemeng Verständnis, kënnt Dir de Betribssystem mat enger virtueller Maschinn ganz ongeféier vergläichen.
Fir datt d'Benotzer d'Befehle vum Betribssystem erlaben an domat d'Fäegkeete vun der virtueller Maschinn benotzen (wéi e Programm lafen, Erënnerung unzedeelen, Zougang zu enger Datei, asw.), bitt de Betribssystem e puer Interface genannt API (Applikatiounsprogramméierungs-Interface) an op déi Dir kënnt Uruff maachen (Uruff). En typesche Betribssystem erlaabt Honnerte vu System Uriff ze maachen.
Schlussendlech, well d'Virtualiséierung et erlaabt datt verschidde Programmer lafen (also d'CPU deelen), a gläichzäiteg Zougang zu hiren Instruktiounen an Daten (also d'Erënnerung deelen), an Zougang zu Disken (also I/O Geräter deelen). ), gëtt de Betribssystem och als Ressource Manager. All Prozessor, Scheif a Gedächtnis ass eng Ressource vum System, an dofir gëtt eng vun de Rollen vum Betribssystem d'Aufgab fir dës Ressourcen ze managen, et effizient, éierlech ze maachen, oder vice-versa, ofhängeg vun der Aufgab fir déi dëse Betribssystem entworf ass.

CPU Virtualiséierung

Bedenkt de folgende Programm:
(https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be)

Betribssystemer: Dräi einfach Stécker. Deel 1: Intro (Iwwersetzung)

Et mécht keng speziell Aktiounen, tatsächlech, alles wat et mécht ass eng Funktioun ze ruffen Spin(), deem seng Aufgab ass, duerch d'Zäitkontroll ze fueren an no enger Sekonn zréckzekommen. Also widderhëlt et onbestëmmt d'String déi de Benotzer als Argument weiderginn huet.
Loosst eis dëse Programm lafen a gitt et de Charakter "A" als Argument. D'Resultat ass net besonnesch interessant - de System leeft einfach e Programm aus, deen periodesch de Charakter "A" weist.
Loosst eis elo d'Optioun probéieren wann vill Instanzen vum selwechte Programm lafen, awer verschidde Bréiwer ausginn fir et méi kloer ze maachen. An dësem Fall wäert d'Resultat e bëssen anescht sinn. Trotz der Tatsaach, datt mir ee Prozessor hunn, gëtt de Programm gläichzäiteg ausgefouert. Wéi geschitt et? Awer et stellt sech eraus datt de Betribssystem, net ouni d'Hëllef vun Hardwarefäegkeeten, eng Illusioun erstellt. D'Illusioun datt de System verschidde virtuelle Prozessoren huet, en eenzege kierperleche Prozessor an eng theoretesch onendlech Zuel verwandelt an doduerch scheinbar Programmer erlaabt gläichzäiteg ze lafen. Dës Illusioun gëtt genannt CPU Virtualiséierung.
Dëst Bild stellt vill Froen op, zum Beispill, wa verschidde Programmer gläichzäiteg lafen wëllen, wéi eng gëtt lancéiert? D'"Politik" vum OS si verantwortlech fir dës Fro. D'Politik ginn op ville Plazen am OS benotzt an beäntwert Froen wéi dëst, a sinn d'Basismechanismen déi d'OS implementéiert. Dofir ass d'Roll vum OS als Ressourcemanager.

Erënnerung virtualization

Loosst eis elo d'Erënnerung kucken. De physikalesche Modell vun der Erënnerung a modernen Systemer gëtt als eng Array vu Bytes duergestallt.. Fir aus Erënnerung ze liesen, musst Dir spezifizéieren Zell Adresset zouzegräifen. Fir Daten ze schreiwen oder ze aktualiséieren, musst Dir och d'Donnéeën an d'Adress vun der Zell spezifizéieren wou se schreiwen.
D'Erënnerung gëtt stänneg zougänglech wärend der Ausféierung vum Programm. E Programm späichert seng ganz Datestruktur a Gedächtnis an Zougang et andeems Dir verschidden Instruktiounen ausféiert. D'Instruktioune sinn mëttlerweil och an der Erënnerung gespäichert, sou datt se och fir all Ufro fir déi nächst Instruktioun zougänglech sinn.

malloc() ruffen

Bedenkt de folgende Programm, deen eng Gedächtnisregioun allocéiert mam Uruff malloc () (https://youtu.be/jnlKRnoT1m0):

Betribssystemer: Dräi einfach Stécker. Deel 1: Intro (Iwwersetzung)

De Programm mécht verschidde Saachen. Éischten allocates e puer Erënnerung (Linn 7), dann Drécken d'Adress vun der zougewisen Zell (Linn 9), schreift null op déi éischt Plaz vun der zougewisen Erënnerung. Als nächst geet de Programm an eng Loop an där et de Wäert eropgeet, deen an der Erënnerung op der Adress an der "p" Variabel gespäichert ass. Et dréckt och de Prozess ID vu sech selwer. D'Prozess ID ass eenzegaarteg fir all Lafen Prozess. Nodeems Dir e puer Exemplare lancéiert hutt, stéisse mir op en interessant Resultat: Am éischte Fall, wann Dir näischt maacht a just e puer Exemplare leeft, da wäerten d'Adressen anescht sinn. Mee dat fält net ënnert eis Theorie! Korrekt, well modern Distributiounen hunn Erënnerung Randomization als Standard aktivéiert. Wann et behënnert ass, kréie mir dat erwaart Resultat - d'Erënnerungsadressen vun zwee gläichzäiteg lafende Programmer passen.

Betribssystemer: Dräi einfach Stécker. Deel 1: Intro (Iwwersetzung)

Als Resultat stellt sech eraus datt zwee onofhängeg Programmer mat hiren eegene privaten Adressplazen funktionnéieren, déi am Géigendeel vum Betribssystem a kierperlecht Gedächtnis mapéiert ginn. Dofir wäert d'Benotzung vun Erënnerung Adressen bannent engem Programm net Afloss op anerer an all Manéier, an et schéngt fir all Programm, datt et säin eegent Stéck kierperlech Erënnerung huet, ganz derfir. D'Realitéit ass awer datt kierperlech Erënnerung eng gemeinsam Ressource ass, déi vum Betribssystem geréiert gëtt.

Konsistenz

En anert vun de wichtegen Themen bannent Betribssystemer ass - Konsequenz. Dëse Begrëff gëtt benotzt wann Dir iwwer Probleemer am System schwätzt, déi kënne geschéien wann Dir mat ville Saachen zur selwechter Zäit am selwechte Programm schafft. Konsistenzprobleemer entstoen och am Betribssystem selwer. An de fréiere Gedächtnis- a Prozessorvirtualiséierungsbeispiller hu mir gemierkt datt den OS vill Saachen zur selwechter Zäit geréiert - et fänkt den éischte Prozess un, dann den zweeten, a sou weider. Wéi et sech erausstellt, kann dëst Verhalen zu e puer Probleemer féieren. Also, zum Beispill, modern Multi-threaded Programmer erliewen esou Schwieregkeeten.

Bedenkt de folgende Programm:

Betribssystemer: Dräi einfach Stécker. Deel 1: Intro (Iwwersetzung)

De Programm an der Haaptfunktioun erstellt zwee Threads mam Uruff pthread_create(). An dësem Beispill kann e Fuedem geduecht ginn als eng Funktioun déi am selwechte Memory Memory niewent anere Funktiounen leeft, mat kloer méi wéi eng Funktioun zur selwechter Zäit. An dësem Beispill fänkt all Thread un a féiert d'Funktioun aus worker () déi am Tour einfach d'Variabel erhéicht,.

Loosst eis dëse Programm mat engem Argument vun 1000 ausféieren. Wéi Dir vläicht scho scho scho geduecht hutt, sollt d'Resultat 2000 sinn, well all thread d'Variabel 1000 Mol erhéicht huet. Allerdéngs ass net alles sou einfach. Loosst eis probéieren de Programm mat enger Uerdnung vun der Gréisst méi Wiederholungen ze lafen.

Betribssystemer: Dräi einfach Stécker. Deel 1: Intro (Iwwersetzung)

Andeems mir eng Nummer aginn, zum Beispill 100000, erwaarden mir den Ausgang als Nummer 200000 ze gesinn. Wa mir awer d'Nummer 100000 e puer Mol lafen, wäerte mir net nëmmen déi richteg Äntwert net gesinn, awer och verschidde falsch Äntwerten kréien. D'Äntwert läit an der Tatsaach datt fir d'Zuel ze erhéijen, dräi Operatiounen erfuerderlech sinn - d'Zuel aus der Erënnerung extrahéieren, eropgoen, an dann d'Zuel zréck schreiwen. Well all dës Instruktiounen net atomesch ausgefouert ginn (all gläichzäiteg), kënne komesch Saache wéi dëst geschéien. Dëse Problem gëtt an der Programméierung genannt Rennen Zoustand. Wann onbekannt Kräften op engem onbekannte Moment kann d'Leeschtung vun all Är Operatiounen Afloss.

Source: will.com

Setzt e Commentaire