Sinhronizācijas mērķi un līdzekļi

SATURS

IEVADS

1. Sinhronizācijas mērķi un līdzekļi

2. Sinhronizācijas nepieciešamība un sacīkstes

IZMANTOTĀ LITERATŪRA

IEVADS

Operētājsistēmas vissvarīgākā funkcija ir racionāli organizēt visu tās aparāt un informācijas resursu izmantošanu. Pie pamatresursiem ir pieskaitāmi procesori, atmiņas, ārējie rīki, dotie un programmas. Izskaitļojoša sistēma var darboties ar atšķirīgu efektivitātes pakāpi, jo tai piemīt vieni un tie paši aparātresursi, kurus vada dažādas OS. Tāpēc operētājsistēmas iekšējo mehānismu pārzināšana ļauj nepamatoti spriest par tās ekspluatācijas iespējām un raksturojumiem. Kaut gan arī OS ar vienu programmu ir nepieciešams risināt resursu vadības uzdevumus (piemēram, atmiņas sadalījums starp OS un pielikumu), lielākās grūtības te rodas ar OS multiprogrammās, kurās par resursiem sacenšas uzreiz vairāki pielikumi.

1. Sinhronizācijas mērķi un līdzekļi

Eksistē diezgan apjomīga operētājsistēmas līdzekļu klase, ar kuras palīdzību tiek nodrošināta savstarpēja procesu un plūsmu sinhronizācija. Nepieciešamība plūsmu sinhronizācijā rodas tikai multiprogrammas operētājsistēmā un ir saistīta ar savstarpēju izskaitļošanas sistēmas aparāt un informācijas resursu izmantošanu. Sinhronizācija nepieciešama, lai izvairītos no sacīkstēm un strupceļiem, kad notiek doto apmaiņa starp plūsmām, kad ir doto sadale un kad tiek nodrošināta pieeja pie procesora un ievad / izvadierīcēm.
Daudzās operētājsistēmās šie līdzekļi tiek saukti par savstarpējās darbības starpprocesu līdzekļiem – Inter Process Communications (IPC), kas atspoguļo vārda „process” pirmatnējo vēsturisko izpratni attiecībā pret „plūsma” izpratni. Parasti pie IPC līdzekļiem pieskaita ne tikai starpprocesu sinhronizāciju, bet arī starpprocesu apmaiņu ar dotiem.
Plūsmas izpildei multiprogrammas vidē vienmēr ir asinhronisks raksturs. Ir ļoti grūti ar pilnīgu pārliecību teikt, kurā izpildes pakāpē process būs noteiktā brīdī. Pat vienprogrammas režīmā ne vienmēr var precīzi noteikt uzdevuma izpildes laiku. Šis laiks daudzos gadījumos ir būtiski atkarīgs no doto nozīmes, kas, savukārt, ietekmē ciklu skaitu, programmas sazarošanas virzienu, ievad / izvadoperāciju laiku utt. Tā kā sākumdotie atšķirīgos uzdevuma ievadīšanas momentos var būt dažādi, atsevišķu soļu izpildīšanas laiks un uzdevumi kopumā ir visai nenoteikts lielums.
Vēl nenoteiktāks ir programmas izpildes laiks multiprogrammas sistēmā. Plūsmu pārtraukšanas momenti, to atrašanās laiks rindās uz sadalāmajiem resursiem, plūsmu izvēles kārtība izpildei – visi šie notikumi ir dažādu apstākļu savienošanas rezultāts un var būt interpretēti kā nejauši. Labākā gadījumā var novērtēt izskaitļošanas procesa visticamākos raksturojumus, piemēram, tā izbeigšanas varbūtību par doto laika periodu.
Tādā veidā plūsmas vispārīgā gadījumā (kad programmētājs neveica speciālus mērus pēc to sinhronizācijas) plūst neatkarīgi, nesinhroni vienam pret otru. Tas ir taisnīgi attiecībā pret viena procesa plūsmām, kas veic vispārīgas programmas kodu, kā arī attiecībā pret dažādu procesu plūsmām, kurās katra veic savu programmu. Jebkura procesu savstarpējā darbība, kas saistās ar to sinhronizāciju, ir domāta procesu saskaņošanas ātrumiem, kas notiek šādā ceļā: plūsma līdz kādam notikumam tiek apturēta un tad secīgi aktivizāta, līdz ko iestājas nākamais notikums. Sinhronizācija ir jebkuras savstarpējās darbības pamats. Vai šī savstarpējā darbība ir saistīta ar resursu sadali vai apmaiņu ar dotiem? Piemēram, plūsma – saņēmējs ir spiests vērsties uz dotiem tikai pēc tam, kad tie ir ievietoti buferī ar plūsmas – sūtītāja palīdzību. Gadījumā, ja plūsma – 1 saņēmējs vērsās pie dotiem līdz brīdim, kad tie nonāca buferī, tai ir jābūt apturētai.
Izmantojot savstarpējus aparātresursus sinhronizācija arī ir noteikti nepieciešama. Kad, piemēram, aktīvajai plūsmai ir nepieciešama pieeja portam, bet ar šo portu monopolistiskajā režīmā stādā cita plūsma, dotajā brīdī esošā aktīvā plūsma, kas ir gaidīšanas režīmā, tiek apturēta ar OS palīdzību, un OS to neaktivizē līdz brīdim, kad tai vajadzīgais ports tiek atbrīvots. Bieži sinhronizācija ir nepieciešama gadījumos, kas ir ārēji attiecībā pret izskaitļošanas sistēmu, piemēram, reakcijas uz taustiņu kombinācijas nospiešanu Ctrl+C.
Katru sekundi sistēmā notiek simtiem notikumu, kas saistīti ar resursu sadalīšanu un atbrīvošanu, un OS ir nepieciešami noturīgi ražotājlīdzekļi, kuri ļautu tai sinhronizēt plūsmas ar sistēmā notiekošajiem notikumiem.
Pieliekamprogrammu plūsmu sinhronizācijai programmētājs var izmantot kā paša līdzekļus un sinhronizācijas paņēmienus, tā operētājsistēmas līdzekļus. Piemēram, divas plūsmas no viena pieliekamprocesa var koordinēt savu darbu ar tai pieejamām abām plūsmām un globālo loģisko pārmaiņu, kas tiek uzstādīta vienībā, īstenojot kādu notikumu, piemēram, vienas doto izstrāde ar vienu plūsmu, kas, savukārt, vajadzīgi citai plūsmai, lai sekmīgi turpinātu darbu. Tomēr daudzos gadījumos daudz efektīvāki un arī tikai vienīgi iespējami ir sinhronizācijas līdzekļi, kurus piegādā operētājsistēma sistematizētu izsaukumu formā. Tā plūsmām, kas pieder atšķirīgiem procesiem, nav iespēju iejaukties jebkādā veidā viena otra darbā. Bez operētājsistēmas palīdzības tās nevar apturēt viena otru vai paziņot par notikušo notikumu. Sinhronizācijas līdzekļus operētājsistēma izmanto ne tikai pieliekamprocesu sinhronizācijai, bet arī tās iekšējām vajadzībām. Parasti operētājsistēmu izveidotāji sniedz sistematizētajiem programmētajiem plašu līdzekļu sinhronizācijas spektru. Šie līdzekļi var veidot hierarhiju, kad, uz nedaudz vienkāršāku līdzekļu pamata, tiek būvēti daudz sarežģītāki, kā arī būt sinhronizēti specializēti, piemēram, līdzekļi vienas plūsmas sinhronizēšanai, dažādu procesu plūsmu sinhronizācija, kad noteik apmaiņa ar dotajiem utt. Bieži vien dažādu sistēmu izsaukumu funkcionālās iespējas tiek pārtvertas, tad viena uzdevuma atrisināšanai programmētājs var izmantot dažus izsaukumus, atkarībā no paša izvēles.

2. Sinhronizācijas nepieciešamība un sacīkstes

Nevērība sinhronizācijas jautājumos daudzplūsmu sistēmāvar novest pie uzdevuma nepareizas atrisināšanas vai pat pie sistēmas iziršanas. Piemēram, apskatīsim zīmējumu 1, kurā tiek attēlota kāda uzņēmuma klientu datu bāze. Katram klientam ir iedalīts atsevišķs ieraksts datu bāzē, kurā, citu laukumu starpā, ir laukumi Pasūtījums un Samaksa. Programma, kas vada datu bāzes, tiek noformēta kā vienots process ar dažām plūsmām, tai skaitā, ar plūsmu A, kas ievada datu bāzē informāciju par pasūtījumiem no klientiem, un plūsma B, kas datu bāzē fiksē ziņas par izstādīto rēķinu samaksām no klientiem. Šīs abas plūsmas savstarpēji strādā ar kopīgu datu bāzes failu, izmantojot vientipa algoritmus, kas ietver sevī trīs soļus:
1. Skaitīt no datu bāzes faila uz buferi ierakstu par klientu ar doto identifikatoru;
2. Ievadīt jaunu nozīmi laukumā Pasūtījums (A plūsmai) vai Samaksa (B plūsma);
3. Atgriezt modificēto ierakstu datu bāzes failā.

1. Zīmējums. Sacīkšu rašanās pie sadalāmo doto pieejas

IZMANTOTĀ LITERATŪRA

http://www.rus-lib.ru/book/28/prog/10/087-161.htm