Systemau Gweithredu: Tri Darn Hawdd. Rhan 1: Cyflwyniad (cyfieithiad)

Cyflwyniad i Systemau Gweithredu

Hei Habr! Hoffwn dynnu eich sylw at gyfres o erthyglau-cyfieithiadau o un llenyddiaeth ddiddorol yn fy marn i - OSTEP. Mae'r deunydd hwn yn trafod yn eithaf dwfn waith systemau gweithredu tebyg i unix, sef, gwaith gyda phrosesau, amserlenwyr amrywiol, cof a chydrannau tebyg eraill sy'n ffurfio OS modern. Gallwch weld y gwreiddiol o'r holl ddeunyddiau yma yma. Sylwch fod y cyfieithiad wedi'i wneud yn amhroffesiynol (yn eithaf rhydd), ond gobeithio i mi gadw'r ystyr cyffredinol.

Gellir dod o hyd i waith labordy ar y pwnc hwn yma:
- gwreiddiol: pages.cs.wisc.edu/~remzi/OSTEP/Homework/homework.html
- gwreiddiol: github.com/remzi-arpacidusseau/ostep-code
- fy addasiad personol: github.com/bykvaadm/OS/tree/master/ostep

Gallwch hefyd edrych ar fy sianel yn telegram =)

Gweithrediad rhaglen

Beth sy'n digwydd pan fydd rhaglen yn rhedeg? Mae rhaglen redeg yn gwneud un peth syml - mae'n gweithredu cyfarwyddiadau. Bob eiliad, mae miliynau a hyd yn oed o bosibl biliynau o gyfarwyddiadau yn cael eu hadalw gan y prosesydd o RAM, yn ei dro mae'n eu dadgodio (er enghraifft, mae'n cydnabod i ba fath y mae'r cyfarwyddiadau hyn yn perthyn) ac yn eu gweithredu. Gallai hyn fod yn adio dau rif, cyrchu cof, gwirio cyflwr, neidio i swyddogaeth, ac ati. Ar ôl gweithredu un cyfarwyddyd, mae'r prosesydd yn symud ymlaen i gyflawni un arall. Ac felly cyfarwyddyd ar ôl cyfarwyddyd, cânt eu gweithredu nes bod y rhaglen yn dod i ben.
Ystyrir yn naturiol fod yr enghraifft hon wedi'i symleiddio - mewn gwirionedd, er mwyn cyflymu'r prosesydd, mae caledwedd modern yn caniatáu ichi weithredu cyfarwyddiadau allan o'u tro, cyfrifo canlyniadau posibl, gweithredu cyfarwyddiadau ar yr un pryd, a thriciau tebyg.

Model cyfrifiant Von Neumann

Mae'r ffurf symlach o waith a ddisgrifir gennym ni yn debyg i fodel cyfrifiant Von Neumann. Mae Von Neumann yn un o arloeswyr systemau cyfrifiadurol, mae hefyd yn un o awduron theori gêm. Tra bod y rhaglen yn rhedeg, mae criw o ddigwyddiadau eraill yn digwydd, llawer o brosesau eraill a gwaith rhesymeg trydydd parti, a'u prif bwrpas yw symleiddio lansio, gweithredu a chynnal a chadw'r system.
Mae yna set o feddalwedd sy'n gyfrifol am wneud rhaglenni'n hawdd i'w rhedeg (neu hyd yn oed ganiatáu i raglenni lluosog redeg ar yr un pryd), sy'n caniatáu i raglenni rannu'r un cof, a chyfathrebu â dyfeisiau gwahanol. Yn y bôn, gelwir set o feddalwedd o'r fath (meddalwedd) yn system weithredu ac mae ei thasgau'n cynnwys monitro bod y system yn gweithio'n gywir ac yn effeithlon, yn ogystal â sicrhau rhwyddineb rheoli'r system hon.

System weithredu

Mae system weithredu, a dalfyrrir fel OS, yn set o raglenni cydgysylltiedig sydd wedi'u cynllunio i reoli adnoddau cyfrifiadurol a threfnu rhyngweithio defnyddwyr â chyfrifiadur..
Mae'r OS yn cyflawni ei effeithiolrwydd yn y lle cyntaf, trwy'r dechneg bwysicaf - y dechneg rhithwiroli. Mae'r OS yn rhyngweithio ag adnodd ffisegol (prosesydd, cof, disg, ac ati) ac yn ei drawsnewid yn ffurf fwy cyffredinol, mwy pwerus, a haws ei ddefnyddio ohono'i hun. Felly, ar gyfer dealltwriaeth gyffredinol, gallwch yn fras iawn gymharu'r system weithredu gyda pheiriant rhithwir.
Er mwyn caniatáu i ddefnyddwyr roi gorchmynion i'r system weithredu a thrwy hynny ddefnyddio galluoedd y peiriant rhithwir (fel rhedeg rhaglen, dyrannu cof, cyrchu ffeil, ac ati), mae'r system weithredu yn darparu rhywfaint o ryngwyneb o'r enw API (rhyngwyneb rhaglennu cais) ac y gallwch chi wneud galwadau iddo (galwad). Mae system weithredu nodweddiadol yn caniatáu i gannoedd o alwadau system gael eu gwneud.
Yn olaf, gan fod rhithwiroli yn caniatáu i raglenni lluosog redeg (a thrwy hynny rannu'r CPU), a chael mynediad at eu cyfarwyddiadau a'u data ar yr un pryd (a thrwy hynny rannu cof), a disgiau mynediad (a thrwy hynny rannu dyfeisiau I / O). ), gelwir y system weithredu hefyd yn a rheolwr adnoddau. Mae pob prosesydd, disg a chof yn adnodd y system, ac felly un o rolau'r system weithredu yw'r dasg o reoli'r adnoddau hyn, gan ei wneud yn effeithlon, yn onest, neu i'r gwrthwyneb, yn dibynnu ar y dasg y mae'r system weithredu hon ar ei chyfer. yn cael ei gynllunio.

rhithwiroli CPU

Ystyriwch y rhaglen ganlynol:
( https://www.youtube.com/watch?v=zDwT5fUcki4&feature=youtu.be )

Systemau Gweithredu: Tri Darn Hawdd. Rhan 1: Cyflwyniad (cyfieithiad)

Nid yw'n perfformio unrhyw gamau arbennig, mewn gwirionedd, y cyfan y mae'n ei wneud yw galw swyddogaeth troelli(), ei dasg yw beicio trwy'r gwiriad amser a dychwelyd ar ôl i un eiliad fynd heibio. Felly, mae'n ailadrodd am gyfnod amhenodol y llinyn a basiodd y defnyddiwr fel dadl.
Gadewch i ni redeg y rhaglen hon a throsglwyddo'r cymeriad "A" fel dadl. Nid yw'r canlyniad yn arbennig o ddiddorol - yn syml, mae'r system yn gweithredu rhaglen sy'n dangos y cymeriad "A" o bryd i'w gilydd.
Nawr, gadewch i ni roi cynnig ar yr opsiwn pan fydd llawer o achosion o'r un rhaglen yn rhedeg, ond yn allbynnu gwahanol lythrennau i'w gwneud yn gliriach. Yn yr achos hwn, bydd y canlyniad ychydig yn wahanol. Er gwaethaf y ffaith bod gennym un prosesydd, mae'r rhaglen yn cael ei gweithredu ar yr un pryd. Sut mae'n digwydd? Ond mae'n ymddangos bod y system weithredu, nid heb gymorth galluoedd caledwedd, yn creu rhith. Y rhith bod gan y system sawl prosesydd rhithwir, sy'n troi un prosesydd ffisegol yn nifer anfeidrol yn ddamcaniaethol a thrwy hynny ganiatáu i raglenni sy'n ymddangos i redeg ar yr un pryd. Gelwir y rhith hwn rhithwiroli CPU.
Mae’r darlun hwn yn codi llawer o gwestiynau, er enghraifft, os yw sawl rhaglen am redeg ar yr un pryd, pa un fydd yn cael ei lansio? “polisïau” yr AO sy’n gyfrifol am y cwestiwn hwn. Defnyddir polisïau mewn sawl man yn yr AO ac maent yn ateb cwestiynau fel hyn, a dyma'r mecanweithiau sylfaenol y mae'r OS yn eu gweithredu. Felly rôl yr OS fel rheolwr adnoddau.

Rhithwiroli cof

Nawr gadewch i ni edrych ar y cof. Mae'r model corfforol o gof mewn systemau modern yn cael ei gynrychioli fel amrywiaeth o beit.. I ddarllen o'r cof, mae angen i chi nodi cyfeiriad celli gael mynediad iddo. I ysgrifennu neu ddiweddaru data, rhaid i chi hefyd nodi'r data a chyfeiriad y gell lle i'w ysgrifennu.
Ceir mynediad at y cof yn gyson wrth weithredu'r rhaglen. Mae rhaglen yn storio ei strwythur data cyfan yn y cof ac yn cael mynediad ato trwy weithredu cyfarwyddiadau amrywiol. Yn y cyfamser, mae'r cyfarwyddiadau hefyd yn cael eu storio yn y cof, felly gellir ei gyrchu hefyd ar gyfer pob cais am y cyfarwyddyd nesaf.

malloc() galwad

Ystyriwch y rhaglen ganlynol, sy'n dyrannu rhan o gof gan ddefnyddio'r alwad malloc () ( https://youtu.be/jnlKRnoT1m0 ):

Systemau Gweithredu: Tri Darn Hawdd. Rhan 1: Cyflwyniad (cyfieithiad)

Mae'r rhaglen yn gwneud sawl peth. Yn gyntaf, mae'n dyrannu rhywfaint o gof (llinell 7), yna'n argraffu cyfeiriad y gell a neilltuwyd (llinell 9), yn ysgrifennu sero i slot cyntaf y cof a neilltuwyd. Nesaf, mae'r rhaglen yn mynd i mewn i ddolen lle mae'n cynyddu'r gwerth sydd wedi'i storio yn y cof yn y cyfeiriad yn y newidyn “p”. Mae hefyd yn argraffu ID y broses ohono'i hun. Mae ID y broses yn unigryw ar gyfer pob proses redeg. Ar ôl lansio sawl copi, byddwn yn baglu ar ganlyniad diddorol: Yn yr achos cyntaf, os na wnewch unrhyw beth a rhedeg sawl copi yn unig, yna bydd y cyfeiriadau yn wahanol. Ond nid yw hyn yn dod o dan ein damcaniaeth! Yn gywir, gan fod dosbarthiadau modern wedi galluogi hapnodi cof yn ddiofyn. Os yw'n anabl, rydym yn cael y canlyniad disgwyliedig - bydd cyfeiriadau cof dwy raglen sy'n rhedeg ar yr un pryd yn cyfateb.

Systemau Gweithredu: Tri Darn Hawdd. Rhan 1: Cyflwyniad (cyfieithiad)

O ganlyniad, mae'n ymddangos bod dwy raglen annibynnol yn gweithio gyda'u mannau cyfeiriad preifat eu hunain, sydd yn eu tro yn cael eu mapio gan y system weithredu mewn cof corfforol.. Felly, ni fydd y defnydd o gyfeiriadau cof o fewn un rhaglen yn effeithio ar eraill mewn unrhyw ffordd, ac mae’n ymddangos i bob rhaglen fod ganddi ei darn ei hun o gof corfforol, wedi’i roi’n gyfan gwbl iddi. Y gwir amdani, fodd bynnag, yw bod cof corfforol yn adnodd a rennir a reolir gan y system weithredu.

Cysondeb

Un arall o'r pynciau pwysig o fewn systemau gweithredu yw − cysondeb. Defnyddir y term hwn wrth sôn am broblemau yn y system a all ddigwydd wrth weithio gyda llawer o bethau ar yr un pryd o fewn yr un rhaglen. Mae materion cysondeb yn codi hyd yn oed o fewn y system weithredu ei hun. Yn yr enghreifftiau rhithwiroli cof a phrosesydd blaenorol, sylweddolom fod yr OS yn rheoli llawer o bethau ar yr un pryd - mae'n dechrau'r broses gyntaf, yna'r ail, ac yn y blaen. Fel y digwyddodd, gall yr ymddygiad hwn arwain at rai problemau. Felly, er enghraifft, mae rhaglenni modern aml-edau yn profi anawsterau o'r fath.

Ystyriwch y rhaglen ganlynol:

Systemau Gweithredu: Tri Darn Hawdd. Rhan 1: Cyflwyniad (cyfieithiad)

Mae'r rhaglen yn y brif swyddogaeth yn creu dwy edefyn gan ddefnyddio'r alwad pthread_create(). Yn yr enghraifft hon, gellir meddwl am edefyn fel swyddogaeth sy'n rhedeg yn yr un gofod cof ochr yn ochr â swyddogaethau eraill, gyda mwy nag un swyddogaeth yn amlwg yn rhedeg ar yr un pryd. Yn yr enghraifft hon, mae pob edefyn yn cychwyn ac yn gweithredu'r swyddogaeth gweithiwr() sydd yn ei dro yn cynyddu'r newidyn yn syml,.

Gadewch i ni redeg y rhaglen hon gyda dadl o 1000. Fel y gallech fod wedi dyfalu, dylai'r canlyniad fod yn 2000 oherwydd bod pob edefyn wedi cynyddu'r newidyn 1000 o weithiau. Fodd bynnag, nid yw popeth mor syml. Gadewch i ni geisio rhedeg y rhaglen gyda threfn maint mwy o ailadroddiadau.

Systemau Gweithredu: Tri Darn Hawdd. Rhan 1: Cyflwyniad (cyfieithiad)

Trwy fewnbynnu rhif, er enghraifft, 100000, disgwyliwn weld yr allbwn fel y rhif 200000. Fodd bynnag, os ydym yn rhedeg y rhif 100000 sawl gwaith, ni fyddwn nid yn unig yn gweld yr ateb cywir, ond hefyd yn cael atebion anghywir gwahanol. Mae'r ateb yn gorwedd yn y ffaith bod angen tair llawdriniaeth i gynyddu'r nifer - tynnu'r rhif o'r cof, cynyddu, ac yna ysgrifennu'r rhif yn ôl. Gan nad yw'r holl gyfarwyddiadau hyn yn cael eu gweithredu'n atomig (i gyd ar yr un pryd), gall pethau rhyfedd fel hyn ddigwydd. Gelwir y broblem hon yn rhaglennu cyflwr hil. Pan fydd grymoedd anhysbys ar eiliad anhysbys yn gallu effeithio ar berfformiad unrhyw un o'ch gweithrediadau.

Ffynhonnell: hab.com

Ychwanegu sylw