Komponenttiteknologiat ja hajautettu ohjelmistokehitys. Asynkroniset kierrejärjestelmät

Prosessia ei keskeytetä, kun käytetään asynkronista (kutsutaan myös ei-estävää) primitiiviä.

Siten sen jälkeen, kun prosessi kutsuu Send-primitiiviä, käyttöjärjestelmä palauttaa prosessin ohjauksen välittömästi sen jälkeen, kun sanoma on asetettu lähetysjonoon tai kun viestistä on luotu kopio. Kun viesti lähetetään tai kopioidaan turvallinen paikka myöhempää lähetystä varten lähetysprosessi keskeytyy ja näin ilmoitetaan, että viestipuskuria voidaan käyttää uudelleen.

Jos viestistä ei luoda kopiota, kaikki muutokset, jotka lähetysprosessi tekee viestiin Send-primitiivin käynnistämisen jälkeen, mutta ennen viestin lähettämistä, ovat riskialttiita.

Vastaavasti asynkronisen vastaanottoprimitiivin käytön jälkeen prosessi jatkuu. Kun viesti saapuu, prosessi saa tiedon tästä tapahtumasta keskeyttämällä tai ajoittain pollamalla.

Asynkroniset primitiivit mahdollistavat prosessien pääsyn viestinvälitysjärjestelmiin tehokkaasti ja joustavasti.

Tämän lähestymistavan haittana on, että tällaisia ​​primitiivisiä käyttäviä ohjelmia on vaikea testata ja korjata.

Tapahtumat, jotka ovat riippuvaisia ​​ajasta ja joita ei voida toistaa, voivat aiheuttaa ongelmia, joita on vaikea ratkaista.

Vaihtoehtona on käyttää synkronisia tai, kuten niitä kutsutaan myös, estoprimitiivien käyttö.

Kun synkronista lähetysprimitiiviä kutsutaan, ohjaus ei palaa lähetysprosessiin ennen kuin viesti on lähetetty (epäluotettava palvelu) tai ennen kuin vastaanotetaan vahvistus viestin toimittamisesta (luotettava palvelu).

Vastaanoton estoprimitiivi ei palaa ennen kuin viesti on sille varatussa puskurissa.

Etämenettelypuhelut

Remote Procedure Call (RPC) on muunnelma perusviestinvälitysmallista.

Nykyään etäproseduurikutsut ovat yleinen ja laajalti käytetty menetelmä vuorovaikutuksen kapseloimiseksi hajautettu järjestelmä. Tämän tekniikan ydin on sallia ohjelmien erilaisia ​​autoja olla vuorovaikutuksessa keskenään yksinkertainen puhelu menettelyt ikään kuin ne olisivat käynnissä samassa koneessa.

Siten proseduurikutsumekanismia käytetään päästäkseen etäkoneen tarjoamiin palveluihin.

Tämän lähestymistavan suosio johtuu seuraavista eduista:

Proseduurikutsut ovat yleinen ja hyvin ymmärretty abstraktio.

Etäproseduurikutsujen avulla voit määrittää etäliittymän joukoksi nimettyjä toimintoja tietyn tyyppisille objekteille. Tällä tavoin käyttöliittymä voidaan dokumentoida selkeästi ja selkeästi ja staattinen tyyppitarkistus voidaan suorittaa hajautetussa ohjelmassa.

Koska käyttöliittymä on standardoitu ja tarkasti määritelty, sovellusviestintäohjelma voidaan luoda automaattisesti.

Koska käyttöliittymä on standardoitu ja hyvin määritelty, kehittäjät voivat kirjoittaa asiakas- ja palvelinmoduuleja, jotka voidaan siirtää muille alustoille ja OS vain pieniä muutoksia ohjelman lähdekoodiin vaaditaan.

Etäproseduurikutsumekanismia voidaan pitää kehittyneenä järjestelmänä luotettavaa synkronista sanomanvälitystä varten.

Yleinen arkkitehtuuri havainnollistettu kuvassa. 17.11, b, a kuvassa. Kuva 17.13 näyttää yksityiskohtaisemman kaavion. Soittaja suorittaa säännöllisen proseduurikutsun parametreilla koneessaan.

Esimerkki: SOITA P(X.Y)

Tässä ♦ P on menettelyn nimi;

♦ X - hyväksytyt argumentit;

♦ Y - palauttaa arvot. Se, että etäproseduurikutsu todella tapahtuu jollain toisella koneella, voi olla tai ei välttämättä läpinäkyvää käyttäjälle. Proseduurin P ns. executor P eli tynkä on sisällytettävä kutsuprosessin osoiteavaruuteen tai dynaamisesti linkitetty kutsun aikana.

Stub luo sanoman, joka tunnistaa kutsutun proseduurin ja sisältää sen parametrit. Sitten se lähettää tämän viestin etäjärjestelmään ja odottaa vastausta.

Kun vastaus vastaanotetaan, tynkä palauttaa ohjauksen sitä kutsuneelle ohjelmalle ja välittää palautusarvot sille. Etäkoneella toinen tynkä on liitetty kutsuttuun toimintosarjaan.

Kun viesti saapuu, tynkä tutkii sen ja muodostaa vastaanotetun proseduurinimen ja parametrien perusteella tavallisen paikallispuhelun CALL P(X, Y).

Toisin sanoen etäproseduuria kutsutaan paikallisesti vakioparametrin kulkeessa pinon läpi.

Riisi. 17.13. Etämenettelyn kutsumekanismi

Client-Server Binding Sidonta antaa sinun määrittää etäproseduurin ja sen kutsuvan ohjelman välisen suhteen. Sidos muodostetaan, kun kaksi sovellusta ovat muodostaneet loogisen yhteyden ja ovat valmiita vaihtamaan komentoja ja tietoja.

Sidos voi olla pysyvä tai pysyvä. Ei-pysyvällä sidoksella looginen yhteys muodostetaan kahden prosessin välille vain etäproseduurikutsun ajaksi.

Heti kun etätoiminto palauttaa arvot, yhteys suljetaan. Aktiivinen yhteys kuluttaa resursseja, koska molempien osapuolten on säilytettävä tiedot tilastaan.

Tilapäisten yhteyksien avulla voit säästää näitä resursseja. Toisaalta yhteyden muodostaminen ja palvelutietojen vaihtaminen verkon yli vie aikaa, joten tätä lähestymistapaa ei sovellu etätoimenpiteisiin, joita usein kutsutaan samalla prosessilla.

Pysyvässä sidonnassa etäproseduurikutsulle muodostettu yhteys säilyy etäproseduurin palaamisen jälkeen.

Tätä yhteyttä voidaan käyttää myöhempään käyttöön etäpuhelut menettelyt. Jos yhteyttä ei käytetä tiettyyn aikaan, se katkaistaan. Tämä malli on hyödyllinen sovelluksille, jotka soittavat paljon etäproseduurikutsuja.

Tässä tapauksessa pysyvä sidonta mahdollistaa kutsujen soittamisen ja niiden tulosten vastaanottamisen saman loogisen yhteyden kautta.

Ohjatut tasasuuntaajat yksivaiheinen virta

Siltaohjattu tasasuuntaaja kolmivaiheinen virta

Tyristoriryhmien /, // toiminnalle suunnanvaihtomuuntimessa on ominaista tasasuuntaus- ja inversiomoodien vuorotteleva käyttö. Tyristoriryhmien ohjaustapoja on kaksi - yhteinen ja erillinen.

Yhteisellä ohjauksella avauspulsseja syötetään sekä toisen että toisen ryhmän tyristoreille kaikissa käyttötavoissa, jolloin toinen ryhmä asetetaan tasasuuntaavaan ja toinen invertoivaan tilaan. Ryhmien I ja /I tyristoreiden ohjauskulmat u, ac, vastaavasti, on kytketty toisiinsa tasasuuntaajan ja sisääntulon jännitteen ja al:n keskiarvojen yhtäläisyyden ehdolla.


Synkroniset pulssivaiheohjausjärjestelmät

Muuntajien pulssivaiheohjauksen synkroninen periaate on yleisin. Sille on tunnusomaista sellainen ohjausjärjestelmäsolmujen toiminnallinen kytkentä, joka on suunniteltu vastaanottamaan ohjauspulsseja, jossa ohjauspulssien synkronointi tapahtuu verkkojännitteen avulla. vaihtovirta.

Essence synkroninen periaate Esittelemme ohjausjärjestelmän rakennetta ja sen komponenttien toiminnallista tarkoitusta käyttämällä esimerkkiä ohjauskanavasta muuntimen yhdelle tyristorille (kuva 6.36). Kanavapiiri sisältää generaattorin referenssijännite GON, NO nolla-elin ja vahvistin muodostavat UV-lukituspulssien.

Monivaihemuuntimien synkroniset ohjausjärjestelmät voidaan toteuttaa monikanava- ja yksikanavamenetelmillä.

Monikanavaisessa ohjausjärjestelmässä (kuva 6.37) kulmaa a säädetään yhteisestä ohjausjännitteestä, kun jokainen kanava suoritetaan kuvan 1 tyypin mukaan. 6.36.

Kanavien lukumäärä on yhtä suuri kuin muuttajapiirin tyristorien lukumäärä (esimerkiksi kolmivaiheisen siltaohjatun tasasuuntaajan ohjausjärjestelmässä kanavien lukumäärä on kuusi). Vaiheensiirtolaitteiden asianmukaisella synkronoinnilla vaihtovirtaverkosta (vaiheistus) järjestelmä tuottaa ohjauspulsseja vaiheissa a, b, c oleville tyristoreille, jotka ovat symmetrisiä luonnollisten liipaisupisteiden suhteen (katso kuva 6.15, c). jota tarvitaan piirin toimintaan.



Monikanavainen ohjausmenetelmä on yleistynyt ohjausjärjestelmän helppouden toteuttamisen, sen komponenttien yhtenäistymisen sekä sen soveltuvuuden vuoksi. erilaisia ​​tyyppejä muuntimet. Samanaikaisesti tällaisissa järjestelmissä on lisääntyneet vaatimukset yksittäisten kanavien vaiheensiirtolaitteiden a = / r (%a) säätöominaisuuksien tunnistamiselle koko ohjausjännitteen muutosalueella. Ohjausominaisuuksien ero johtaa tyristorin ohjauskanavien kulmien a eroihin ja ohjauspulssien epäsymmetriaan, mikä synnyttää esimerkiksi tasasuunnatun jännitteen ylimääräisiä matalataajuisia aaltoiluja ohjatuissa tasasuuntaajissa.

Yksikanavaisessa ohjausjärjestelmässä ohjauspulssien vaihesiirtoa säädetään yhtä kanavaa pitkin yhteisellä vaiheensiirtolaitteella, jonka pulssit jaetaan sitten piireihin liipaisupulssien generoimiseksi kullekin muuntimen tyristoreille. Yhteisen vaiheensiirtimen käytön ansiosta yksikanavainen järjestelmä pystyy täyttämään korkeimmatkin. Kuitenkin johtuen ohjausjärjestelmän lisääntyvästä monimutkaisuudesta, erityisesti käännettävien muuntimien ja NFC:iden osalta, yksikanavainen menetelmä ohjausjärjestelmän rakentamiseksi on vähemmän yleinen.

Asynkroniset pulssivaiheohjausjärjestelmät

Tarkastetuissa synkronisissa ohjausjärjestelmissä ohjauspulssin vastaanottohetki (eli ohjauskulma a) lasketaan tietystä pisteestä syöttöverkkojännitteessä (esimerkiksi hetkestä, jolloin se kulkee nollan läpi). Tällainen synkronointi syöttöjännitteestä suoritetaan käyttämällä referenssijännitegeneraattoria. Kulman a origo joko osuu yhteen tahdistushetken kanssa tai on siirtynyt sen suhteen jonkin vakiovaihekulman verran.

Asynkronisissa ohjausjärjestelmissä ohjauspulssien aikakytkennällä syöttöjännitteen vastaaviin jännitepisteisiin on apurooli, sillä se esimerkiksi rajoittaa minimi- ja enimmäisarvot ohjauskulmat a. Samat ohjauspulssit vastaanotetaan synkronoimatta AC-jännitteen ohjausjärjestelmää. Synkronisille järjestelmille pohjimmiltaan välttämätön vaiheensiirtolaite puuttuu täältä.


Askelsäätömenetelmä AC jännite. Askelohjausmenetelmälle on ominaista amplitudin vaiheittainen muutos ( tehokas arvo) kuormaan syötetty vaihtojännite muuttamatta sen käyrän muotoa. Tämä menetelmä suoritetaan käyttämällä muuntajaa, jonka toisiokäämin lähdöt on kytketty kuormaan peräkkäisten tyristorien kautta (kuva 6.55, a). Tyristorien lukituksen avautuminen tapahtuu, kun vaihtojännite kulkee nollan kautta (kuva 6.55, b, c). Kuorman tehon säätö (esimerkiksi uunin lämpötilan muuttamiseksi tietyllä alueella) suoritetaan ohjausjärjestelmällä, joka valikoivasti syöttää lukituksen avauspulsseja vastaavalle peräkkäin rinnakkain kytketylle tyristoriparille. Muuntajan monimutkainen rakenne, läsnäolo Suuri määrä tyristorit sekä kyvyttömyys ohjata tasaisesti kuorman tehoa ovat tämän ohjausmenetelmän haittoja. Menetelmän etuja ovat vääristymien puuttuminen verkosta kulutetun virran käyrästä sekä virran vaihesiirto suhteessa syöttöjännitteeseen (puhtaasti resistiivisellä kuormalla).

Vaiheaskel menetelmä vaihtojännitteen säätelyyn. Vaiheaskelohjausmenetelmä perustuu jakaminen astui ja vaihemenetelmiä säätö. Se on toteutettu piirin mukaisesti, jonka sisääntulossa on muuntaja, kuten kuva 1. 6,55, a. Muuntajan toisiojänniteportaiden lukumäärästä ja 2:sta (tyristoriparista) riippuen on olemassa kaksi-, kolmi-, neli- ja monivaiheinen vaihesäätö.

Vaihe-askelmenetelmän ydin tulee vaiheohjauksen käyttöön tasainen muutos tehollinen jännitearvo kuormalla kunkin lähtöjänniteaskeleen sisällä

Pulssinleveysmenetelmä vaihtojännitteen säätöön alennettu taajuus. Pulssinleveyden ohjausmenetelmä pienemmällä taajuudella perustuu kuormaan syötetyn vaihtojännitteen jaksojen lukumäärän muuttamiseen. Sen toteuttamiseksi tarvitaan kuvion kaltainen kaavio. 6.47, A tai b, V. Jännityskaaviot kuvassa. 6.58 havainnollistaa AC-jännitemuuntimen toimintaperiaatetta, kun tätä menetelmää säätö. Tämä menetelmä mahdollistaa kuorman tehon säätämisen välillä ja 2 Shn - nolla. Sen haittapuoli on yliaaltojen esiintyminen verkkovirrassa alle 50 Hz:n taajuuksilla, mikä johtuu verkon energiankulutuksen pulssiluonteesta. Tämä haitta heikkenee merkittävästi, kun sitä syötetään jaettu verkko Usean muuntimen AC-ryhmä, kun yhden muuntimen virrankulutuksen puute kompensoidaan muiden muuntajien virrankulutuksella.

Olen utelias, että async odottaa sisäänrakennettua suoratoistotoimintoa.

Kaikki sanovat, että async on paljon parempi suorituskyvyn suhteen, koska se vapauttaa säikeitä odottamassa pitkää vastausta asynkroninen puhelu. OK ymmärsin.

Mutta harkitse tätä skenaariota.

Minulla on asynkronointimenetelmäA, joka suorittaa async-toiminnon tietokannassa. Tietokantasovellusliittymä tarjoaa BeginQuery-funktion ja QueryCompleted-tapahtuman. Käärin ne tehtävään (käyttäen TaskCompletionSourcea).

Kysymykseni kuuluu, mitä tapahtuu konepellin alla BeginQuery-kutsun ja QueryCompleted-käynnistyksen välillä.

Tarkoitan - eikö olisi tarpeen luoda jonkinlainen työntekijä irtisanomaan tämän tapahtuman? Hyvin alhaisella tasolla täytyy olla jokin synkroninen silmukka, joka estää säikeen lukutuloksen db:sta.

Uskon, että jokaisen asynkronisen kutsun pitäisi synnyttää säie, joka käsittelee vastauksen (ehkä odottaa sitä silmukassa matala taso C++ ajurikoodissa).

Joten ainoa "voittomme" on se, että kutsuva säie voidaan vapauttaa, kun joku toinen säiettä tekee työtään.

Luoko asynkronisen menetelmän kutsuminen aina uuden työsäikeen?

Voiko joku vahvistaa ymmärrykseni?

4 vastausta

Kaikki sanovat, että asynkronointi on paljon parempi suorituskyvyn suhteen, koska se vapauttaa säikeitä odottamassa vastausta pitkään jatkuneeseen asynkroniseen puheluun.

Kyllä ja ei. Asyncin takana on kutsuvan säikeen vapauttaminen. Sovelluksissa käyttöliittymä Asyncin tärkein etu on reagointikyky käyttöliittymän säikeen vapautuessa. Palvelinsovelluksissa asyncin tärkein etu on skaalautuvuus, koska pyyntösäie vapautetaan käsittelemään muita pyyntöjä.

Joten ainoa "hyötymme" on virtaus soittaja voidaan vapauttaa, kun jokin muu lanka toimii. Aina soittaa asynkroninen menetelmä uuden työntekijäketjun luominen?

Ei. Käyttöjärjestelmätasolla kaikki I/O-toiminnot ovat asynkronisia. Nämä ovat synkronisia API:ita, jotka estävät säikeen, kun taustalla oleva asynkroninen I/O suoritetaan. Kirjoitin tämän äskettäin blogikirjoitukseen: .

Se luo I/O Completion Port (IOCP) -portin, joka edustaa ulkoisesti käsiteltävää tehtävää, ja säie jatkaa muiden asioiden kanssa. Sitten, kun IOCP ilmoittaa, että tehtävä on valmis, säie riippuu IOCP:n tilasta ja jatkaa tehtävän suorittamista.

I/O-portit tarjoavat tyylikkään ratkaisun skaalautuvan kirjoittamisen ongelmaan palvelinsovelluksia, käyttämällä monisäikeistä ja asynkronista I/O:ta.

Tarkoitan - eikö tapahtumaan ole tarpeen luoda jonkinlainen työntekijä? Hyvin alhaisella tasolla täytyy olla jokin synkroninen silmukka, joka estää säikeen lukemisen db:sta.

Vaikka sinun todellakin pitäisi odottaa ytimen objektia (kuten manuaalista palautustapahtumaa), voit silti muuttaa estävän synkronisen koodin asynkroniseksi ja vapauttaa säiettä estosta (päivitetty: tosielämän skenaario).

Esimerkiksi synkroninen koodi:

Void Consume() ( var completeMre = new ManualResetEvent(false); producer.StartOperation(completedMre); completeMre.WaitOne(); // esto odottaa Console.WriteLine(producer.DequeueResult()); )

Asynkroninen analogi:

Async Task ConsumeAsync() ( var completeMre = new ManualResetEvent(false); tuottaja.StartOperation(completedMre); var tcs = new TaskCompletionSource (); ThreadPool.RegisterWaitForSingleObject(completedMre, (s, t) => tcs.SetResult(producer.DequeueResult()), null, Timeout.Infinite, true); var tulos = odota tcs.Task; Console.WriteLine(tulos); )

Asynkroninen versio skaalautuu yli 64 kertaa (MAXIMUM_WAIT_OBJECTS), mikä enimmäismäärä ydinobjekteja, jotka voidaan koota RegisterWaitForSingleObject odottamaan yhdessä säikeessä). Voit siis kutsua Consume():ta 64 kertaa rinnakkain ja se estää 64 säiettä. Tai voit soittaa ConsumeAsyncille 64 kertaa ja estää vain yhden säikeen.

Tietokone ilman prosessoria - onko tämä mahdollista? Miksi ei! Loppujen lopuksi prosessori suorittaa monia erilaisia ​​toimintoja, joiden toteutus voidaan määrittää muille laitteille. Prosessorin laskenta-arkkitehtuuri on suunniteltu siten, että useimmat toiminnot suorittaa prosessori. Tämän seurauksena kaikki tietokoneen laskentateho on keskittynyt prosessoriin, mikä rajoittaa konfigurointivaihtoehtoja erityisiä tehtäviä. Lisäksi ratkaisut prosessorien laskennan kiihdyttämiseen ovat yhä monimutkaisempia - prosessorin suorittamien toimintojen määrä kasvaa. Tämän seurauksena nykyaikaisten prosessorien suunnittelusta on tullut niin monimutkaista, että se asettaa liian korkeat vaatimukset kehitystasolle.

1. Synkroninen laskenta

Kaikki mikrotietokoneet ovat alusta asti koostuneet prosessorista, muistista ja oheislaitteista. Lisäksi tietokoneen aktiivinen osa on prosessori, ja muisti ja oheislaitteet tottelevat vain sen komentoja. Ohjelmat ja tiedot tallennetaan muistiin. Oheislaitteet antaa prosessorin kommunikoida ulkopuolinen maailma- tässä tarkoitamme käyttäjiä, muita tietokoneita, kovalevyjä ja lisälaitteita. Lisäksi yhden tietokoneen aikajakson aikana prosessori voi käyttää vain yhtä muistisolua tai yhtä ulkoista laitetta. Prosessoria käyttävä laskentaprosessi järjestetään alla esitetyn kaavion mukaisesti.

  1. Prosessori sijoittaa tarvitsemansa muistisolun tai portin osoitteen osoiteväylään ulkoinen laite.
  2. Ulkoisen laitteen tai muistin on asetettava tietonsa dataväylään, jota prosessori pyysi.
  3. Prosessori, joka on lukenut tiedon tietoväylältä, käsittelee sen kirjoittamalla sen muistiin tai ulkoiseen laitteeseen. Tässä tapauksessa vastaavat signaalit asetetaan uudelleen ja prosessori synkronoidaan tietokoneen muiden osien kanssa.

Yhden komennon suorittaminen prosessorissa tai tiedonvaihto prosessorin ja muiden mikropiirien välillä on suoritettava yhdessä järjestelmän kellojaksossa - ennen seuraavaa kellogeneraattoripulssia. Näin ollen koko levy tai sen erillinen osa, erityisesti lähellä prosessoria, siirtyy synkronisesti ja samanaikaisesti stabiilista tilasta toiseen. Näin tietokone toimii. Koska siinä olevat laskelmat synkronoidaan signaaleilla kellotaajuus, kutsumme tällaisia ​​laskelmia synkronisiksi.

Synkronisen laskennan suurin haitta on, että monien aktiivisten elementtien on toimittava yhdessä kellogeneraattorin signaalien tottelemalla. Kellotaajuuden kasvaessa prosessorin ja sen ympäristön toiminnan koordinointi on yhä vaikeampaa. Itse asiassa siksi nykyaikaiset prosessorit Ne valmistetaan yhdellä sirulla tai erityisten prosessorilevyjen muodossa, mutta jopa päämuisti toimii pienemmällä taajuudella. Tätä varten sinun on käytettävä monimutkaisia ​​järjestelmiä siirtymien ennustamiseen, tietojen tallentamiseen välimuistiin ja muiden teknisten temppujen keksimiseen. Entä jos prosessoreita on useita ja ne käyttävät samaa muistia?

Tällaisella laskelmien järjestämisellä on yksinkertaisesti välttämätöntä integroida kaikki prosessoriin tarvittavat toiminnot, mikä vaikeuttaa entisestään seuraavan sukupolven sirujen kehittämistä. Prosessorin synkronointi on yksinkertaisesti välttämätöntä muistin osoiteorganisaation vuoksi, jossa jokaisen tietyn tavun hakemiseksi muistista on määritettävä sen osoite.

2. Osoitteeton asynkroninen laskenta

Tietojen hakemiseksi muistista voidaan kuitenkin välttää osoitus kokonaan. Tätä varten riittää, että käytät toista tapaa järjestää tietoja, suunnilleen samaa kuin kohdassa Kovalevyt, kun tiedot ja ohjelmat ovat tavujonoja, joissa on otsikko, jota suostumme kutsumaan paketiksi. Tietojenkäsittelyjärjestelmän, joka pystyy käsittelemään paketteja, on koostuttava vähintään neljästä pääelementistä:

  • kytkimet, jotka toimittavat paketteja vastaanottajalle;
  • laskennalliset elementit, jotka muuntavat paketteja tiettyjen sääntöjen mukaisesti;
  • muistielementit, jotka tallentavat paketteja ja antavat niitä pyynnöstä;
  • oheislaitteet, jotka tarjoavat tietokonejärjestelmälle rajapinnan ulkomaailmaan.

Kytkimet kommunikoivat kaikkien järjestelmän osien välillä. Ne toimittavat paketteja otsikossa määritettyyn kohteeseen. Itse asiassa kytkimet muodostavat verkon - kytketyn ympäristön, joka yhdistää kaikki järjestelmän elementit yhdeksi kokonaisuudeksi. Lisäksi fyysinen yhteys Kytkimien ja elementtien välissä voi olla mitä tahansa - laskentajärjestelmä voi sijaita useissa tapauksissa ja toimia yhtenä laitteena. Tämä ei vaadi lisäparannuksia.

Laskentaelementit jäsentävät paketteja, käsittelevät niiden sisältämää dataa ja tulostavat tuloksen kytkettyyn ympäristöön muiden pakettien muodossa. Muistiyksikkö ohjaa pakettien prosessointia: lähettää sen pyydettäessä kytkettyyn ympäristöön, tallentaa tietoa saapuvista paketeista ja suorittaa muita toimintoja tiedon tallentamiseksi ja luovuttamiseksi. Voit lisätä vielä yhden asian lisälaite, joka tallentaa tietyt tiedot ja lisää ne pakkaukseen. Tällaisessa laitteessa on samanaikaisesti muistiyksikön ja tietokoneen ominaisuudet. Itse asiassa I/O-portit, joihin ulkoiset laitteet on kytketty, on järjestetty samalla tavalla kuin muistilohkot ja eroavat toisistaan ​​vain komentojen ja osoitteiden osalta.

Tällainen järjestelmä ei vaadi kaikkien järjestelmän elementtien synkronointia ja jakaa prosessoritoiminnot useiden kesken tietokonelaitteet ja muistilohkot. Siksi kutsumme tällaista järjestelmää asynkroniseksi laskentajärjestelmäksi. Jokainen yksittäinen lohko siinä suorittaa omanlaisensa rajoitettu sarja toimintoja ja siksi sillä voi olla yksinkertainen sisäinen rakenne ja se voi toimia melko nopeasti ilman synkronointia kaikkien muiden lohkojen kanssa (itse synkronointi suoritetaan kytketyn välineen kautta). Katsotaan nyt jokaista asynkronisen elementtiä laskentajärjestelmä yksityiskohdissa.

2.1 Kytkimet

Kytkimien päätehtävä on toimittaa paketti vastaanottajalle. Lisäksi, jos vastaanottajia on useita, kytkimien on toimitettava paketti lähimmälle. Mekanismit optimaalisen reitin löytämiseksi on tunnettu ja kehitetty jo pitkään Tietokoneverkot. Jokaisen lohkon, joka syöttää paketin kytkettyyn ympäristöön, on määritettävä vain yksi parametri - vastaanottajan osoite. Ei lisäinformaatio ei vaadittu.

Periaatteessa kytkimien väliset viestintäkanavat voivat olla mitä tahansa, mukaan lukien ne, jotka ulottuvat yhden tietokoneen rajojen ulkopuolelle. Tämän seurauksena tietokoneen käsite "hämärtyy", koska kaksi erillistä laskentayksikköä voidaan yhdistää yhdeksi kokonaisuudeksi käyttämällä helppo yhteys yhden laitteen kytkimet toisen kytkimiin. Totta, tämä on mahdollista vain, jos yhtenäinen järjestelmä järjestelmän yksittäisten lohkojen käsitteleminen.

On huomattava, että jos tietokonejärjestelmään on asennettu useita identtisiä laskentayksiköitä, paketti voidaan käsitellä missä tahansa niistä. Siten kytkimen on toimitettava paketti lähimpään vapaaseen lohkoon. Tämän seurauksena kaikilla identtisillä laskentayksiköillä voi olla sama osoite.

Tämä temppu ei kuitenkaan toimi muistielementtien ja porttien kanssa - jopa identtiset muistielementit voivat sisältää erilaisia ​​tietoja ja siksi vaihtelevat. Sama koskee ulkoisten laitteiden portteja. Itse asiassa, jos porttien ja muistin osoitteita voidaan muuttaa dynaamisesti kytketyn median avulla, uuden muistilohkon tai ulkoisen laitteen lisäämisen ongelma poistuu. Siten asynkronisesta laskentajärjestelmästä tulee erittäin skaalautuva, ja rajana on vain osoitebitin koko. Tämän seurauksena, jos valitset yhden tavun osoitteen, kytkettyjen laitteiden määrä rajoitetaan 256:een, mutta myös tässä tapauksessa on mahdollista lisätä ne laskentayksiköt, joiden osoitteet ovat jo järjestelmässä.

Huomaa, että on parempi yhdistää kaikki aktiiviset lohkot - tietokoneet, muistit ja ulkoiset laitteet - yksisuuntaisten kanavien kautta. Tämä sekä yksinkertaistaa itse lohkojen toteutusta että vähentää konfliktien todennäköisyyttä tietoliikenneväylällä lohkon ja kytketyn välineen välillä. Osoitteilla on vain uloskäynnit ympäristöstä. Valitettavasti tulon ja lähdön erottaminen lisää lohkojen pintojen määrää, mikä vaikeuttaa koko järjestelmän fyysistä johdotusta, mutta lisää sen nopeutta - kaksisuuntainen I/O voi merkittävästi hidastaa pakettien siirtoa tällaisten rajapintojen kautta.

2.2 Muisti

Jotta muistilohkot voisivat suorittaa tehtävänsä, niiden on tuettava kahta perustoimintoa:

  • pyydetyn paketin syöttäminen kytkettyyn ympäristöön, mahdollisesti argumenttikorvauksella;
  • kytketystä ympäristöstä tulevan paketin tallentaminen muistilohkoon.

Paketin syöttäminen kytkettyyn ympäristöön on välttämätöntä ohjelmapaketin käynnistämiseksi. Ohjelmien kutsuminen näyttää suunnilleen tältä: muistilohkoon lähetetään paketti, joka ilmoittaa kutsuttavan paketin nimen ja joukon argumentteja. Muistiyksikkö etsii määritetyn paketin, korvaa siihen argumentteja ja lähettää muokatun paketin kytkettyyn ympäristöön. Lisäksi yksi paketti voi käynnistää useita eri paketteja. On huomattava, että yksi argumenteista voi olla vastaanottajan osoite. Tämän seurauksena muistilohko ei tiedä, onko aloitettava paketti ohjelma vai data.

Paketin aloitusproseduurin aikana muistilohko voi suorittaa argumentin korvausoperaation. Tämä toimenpide on tarpeen pakettien muokkaamiseksi muistilohkoissa pakettien joustavamman koostumuksen ja tiedonsiirron eri pakettien välillä. Aloituspaketti sisältää joukon argumentteja heti nimensä jälkeen. Argumentit lisätään merkittyihin paikkoihin erityinen joukkue, joka koostuu kahdesta osasta: itse korvauskäskystä ja argumentin numerosta, joka korvataan koko konstruktion sijaan. Argumentin korvauskomento on samanlainen kuin epäsuora osoite. Argumentin korvausfunktio voidaan kuitenkin poistaa muistilohkosta ja käyttää lisälohkoa - prosessikäsittelijää, joka tallentaa vain dataa ja sisällyttää sen vastaanottamiinsa paketteihin.

Muistilohkoon kirjoittaminen on melko ilmeistä - koko paketti nimellään kirjoitetaan muistiin. Kirjoittamisen lisäksi muistilohko voi suorittaa muita toimintoja, kuten pakettien yhdistämisen, poistamisen tai liittämisen; mutta on parempi siirtää nämä toiminnot prosessikäsittelijään. On huomattava, että asynkroninen laskenta on suuntautunut monisäikeisiin operaatioihin, joten on tarpeen määritellä sopiva lukitusmekanismi, joka ohjaa konfliktitilanteita, kun kaksi eri säiettä yrittää muokata identtiset solut muisti. Siksi on ilmeisesti välttämätöntä järjestää asianmukaiset lukitusmekanismit muistilohkoihin ja kierteenkäsittelijään.

Kun muistilohkoja on useita, syntyy ongelma paketin etsimisestä useista muistilohkoista. Tämä ongelma voidaan ratkaista erityisesti seuraavasti: kaikki muistilohkot tietävät toisistaan ​​ja välittävät paketin aloituspyynnöt toiseen muistilohkoon. Jos kuitenkin yrität käynnistää olematon paketti, voi tapahtua syklinen hakuprosessi kaikista muistilohkoista, mikä voi ylikuormittaa tietokonejärjestelmää. Mutta on mahdollista toteuttaa toinen tapa etsiä tietoja: rekisteröimällä kaikki järjestelmäpaketit yhteen paikkaan - nimikirjaan. Kaikki erätoiminnot suoritetaan tämän kirjan kautta ja siirretään sitten tiettyyn muistilohkoon. Siten kytketyssä ympäristössä ilmestyy enemmän paketteja, mutta keskitetty pääsy informaatioon on taattu.

2.3 Oheislaitteet

Oheislaitteet: näyttö, näppäimistö, hiiri ja HDD- ovat saatavilla lähes kaikissa nykyaikaisissa tietokoneissa. Vain syöttötoimintoja suorittavilla laitteilla ei välttämättä ole omaa osoitetta - niiden ei pitäisi vastaanottaa paketteja. Siten I/O-laitteet jaetaan kahteen tyyppiin - niihin, joilla on oma osoite, ja niihin, joilla ei ole. Tämän seurauksena laajennuskorteissa, jotka kytketään suoraan kytkentävälineeseen, ei voi olla yksi, vaan kaksi tai jopa useampia nastaliittimiä.

Itse asiassa kaikki ulkoiset laitteet moderni tietokone voidaan myös sovittaa asynkroniseen laskentaan. Lisäksi lisäkytkintä voidaan pitää ulkoisena laitteena, jonka kautta muodostat yhteyden lisälohkoja ja periferia. Siten tietokoneen tehoa voidaan lisätä lähes loputtomiin (ainoa rajoitus on pakettien vastaanottajien osoiteavaruus).

Esimerkkinä tietokonejärjestelmän ja oheislaitteiden toiminnasta voidaan harkita näppäimistön kyselyä. Oletetaan, että se on järjestetty niin, että näppäimistön ohjain tietää vain sen muistilohkon osoitteen, jossa ajuri sijaitsee. Kun käyttäjä kirjoittaa komennon ja painaa Enter-näppäintä, näppäimistöohjain lähettää kytkettyyn muistiympäristöön paketin, joka on osoitettu asianmukaiselle muistilohkolle ja sisältää ohjaimen nimen ja komennon. Muistilohko käynnistää ohjaimen ja välittää sen asianmukaiselle prosessorille lisäämällä komennon argumenttina pakettiin. On huomattava, että komento voidaan käsitellä useissa tietokonetyypeissä, mutta komennon ensimmäinen jäsennys kuvatussa skenaariossa suoritetaan vain yhdellä tietyllä laitteella.

2.4 Laskentalohkot

Laskentayksiköissä on yleensä yksi tulo ja yksi lähtö. Itse asiassa laskentayksikkö toimii suodattimena, joka muuntaa paketteja tiettyjen sääntöjen mukaan. Tietokoneen komentojen joukkoa voidaan rajoittaa, mikä takaa yksinkertaisen sisäisen rakenteen ja riittävän suurempi nopeus tehdä työtä. Yleensä jokainen operaatio voidaan toteuttaa muodossa erillinen laite, mikä voi nopeuttaa laskelmia merkittävästi, mutta jos tietokoneita on liikaa, kytketyssä ympäristössä voi syntyä ristiriitatilanteita. Tämän seurauksena laskentajärjestelmä voi osoittautua huonosti hallituksi.

Ilmeisesti on järkevintä tehdä yksi yleinen laskentayksikkö, joka suorittaa pääasiallisen aritmeettiset operaatiot kokonaisluvuilla, jopa loogisilla, ja pakettien ehdollinen alustus. Luo lisäksi erillinen lohko reaalilukujen laskutoimituksia varten. Erityisen työvoimavaltaiset toiminnot on mahdollista sijoittaa erillisiin lohkoihin, joita voidaan nopeuttaa laitteistototeutuksen avulla. Tällaisia ​​operaatioita ovat esimerkiksi spektrianalyysi (Fourier-sarjan laajennus), kolmiulotteinen renderöinti, kryptografia ja muut lisälaskentayksiköt. Kaikki edellä mainitut toiminnot voidaan toteuttaa käyttämällä yleistä kokonaislukutietokonetta, mutta erityinen tietokone voi merkittävästi nopeuttaa koko järjestelmän toimintaa. Lisätietokoneiden avulla voit hienosäätää tietokonettasi niin, että sen ominaisuudet vastaavat tiettyä tehtävää.

On huomattava, että eri tietokoneiden komentojärjestelmät voidaan valita optimaalisesti ratkaisemaan niille osoitetut tehtävät. Tämä yksinkertaistaa sekä tällaisten laitteiden ohjelmaa että itse tietokoneen sisäistä rakennetta. Tämän seurauksena ohjelmat ja laitteet suorittavat tehtävänsä tehokkaammin. Lisäksi uutta tietokonetta lisättäessä ohjelmistoa ei tarvitse muuttaa - kytkimet voivat itse määrittää järjestelmän toimimaan uuden laitteen kanssa. Siten asynkroninen laskenta mahdollistaa erittäin skaalautuvien laskentajärjestelmien rakentamisen.

Johtopäätös

Asynkronisella tietojenkäsittelyllä on hyvät ja huonot puolensa. Niiden tärkein etu on tuloksena olevan laskentajärjestelmän modulaarisuus, joka mahdollistaa laitteistojen ja laitteiden ominaisuuksien tarkemman koordinoinnin. ohjelmisto. Lisäksi keskittyminen monisäikeiseen tietojenkäsittelyyn antaa meille mahdollisuuden saavuttaa ennennäkemättömän suorituskyvyn synkronisessa laskennassa.

Synkronisten laskelmien tapauksessa käyttämätön tietokone tekee silti joitain asioita minimaaliset toimet. Asynkronisilla laskelmilla tietokonejärjestelmässä ei tapahdu prosesseja, jos todellisia paketteja ei käsitellä. Jos siis suunnittelet jokaisen yksittäisen lohkon asynkronisessa tietokoneessa sammumaan, kun sille ei ole tarkoitettuja paketteja, ja kytkeytymään päälle, kun ensimmäinen paketti vastaanotetaan, voit vähentää käyttämättömän tietokoneen virrankulutusta.

Asynkroninen laskenta on helpompi toteuttaa - kaikkia laskentajärjestelmän osia ei tarvitse synkronoida, vaan riittää, että synkronoidaan vain viestintäkanava laitteen ja lähimmän kytkimen välillä. Siten ne voidaan toteuttaa yksinkertaisesti jopa Venäjän olosuhteissa. Tätä varten on tarpeen kehittää komentomäärittely kaikille päälohkoille ja vastaava järjestelmä modulaaristen prosessorien kääntämiseksi sekä toteuttaa kaikki ratkaisut laitteistossa.