logo

.NET Common Language Runtime (CLR)

.NET CLR on ajonaikainen ympäristö, joka hallitsee ja suorittaa millä tahansa .NET-ohjelmointikielellä kirjoitettua koodia. CLR on .NET-kehyksen virtuaalikonekomponentti. Kyseisen kielen kääntäjä kokoaa .NET-yhteensopivilla kielillä kehitettyjen sovellusten lähdekoodin CLR:n välikieleksi nimeltä MSIL, eli Microsoftin välikielikoodiksi. Tämä koodi on alustasta riippumaton. Se on verrattavissa javan tavukoodiin. Metadata luodaan myös kääntämisen ja MSIL-koodin aikana ja tallennetaan tiedostoon, joka tunnetaan nimellä Manifest-tiedosto. Nämä metatiedot koskevat yleensä jäseniä ja tyyppejä, joita CLR vaatii MSIL-koodin suorittamiseen. CLR:n juuri-in-time-kääntäjäkomponentti muuntaa MSIL-koodin koneen alkuperäiseksi koodiksi. Tämä koodi on alustariippuvainen. CLR hallitsee muistia, säikeitä, poikkeuksia, koodin suorittamista, koodin turvallisuutta, todentamista ja kääntämistä.

joukko objekteja java

Seuraava kuva näyttää lähdekoodin muuntamisen alkuperäiseksi koodiksi.

Net Common Language Runtime

Yllä oleva kuva muuntaa koodin alkuperäiseksi koodiksi, jonka suoritin voi suorittaa.

CLR:n pääkomponentit ovat:

  • Yleinen tyyppijärjestelmä
  • Yleinen kielimääritelmä
  • Roskankerääjä
  • Just in Time Compiler
  • Metadata ja kokoonpanot
Net Common Language Runtime

1. Yleinen tyyppijärjestelmä:

CTS tarjoaa ohjeita tietotyyppien ilmoittamiseen, käyttöön ja hallintaan suorituksen aikana. Se tarjoaa monikielistä viestintää. Esimerkiksi VB.NET:ssä on kokonaislukutietotyyppi ja C#:ssa on int-tietotyyppi kokonaislukujen hallintaa varten. Kääntämisen jälkeen molemmat tietotyypit käyttävät Int32:ta. Joten CTS tarjoaa tietotyypit hallitun koodin avulla. Yleinen tyyppijärjestelmä auttaa kieliriippumattoman koodin kirjoittamisessa.

Se tarjoaa kaksi tyyppiä.

    Arvon tyyppi:Arvotyyppi tallentaa tiedot muistiin, joka on varattu pinossa tai rakenteessa. Tämä tyyppiluokka sisältää tietohakemiston. Jos yhden muuttujan arvo kopioidaan toiseen, molemmat muuttujat tallentavat tiedot itsenäisesti. Se voi olla sisäänrakennettua tyyppiä, käyttäjän määrittämää tai luettelointityyppiä. Sisäänrakennetut tyypit ovat primitiivisiä tietotyyppejä, kuten numeerinen, Boolean, char ja päivämäärä. Lähdekoodin käyttäjät luovat käyttäjän määrittämiä tyyppejä. Luettelo viittaa joukkoon lueteltuja arvoja, joita edustavat tunnisteet, mutta jotka on tallennettu numeerisena tyyppinä.
    Net Common Language Runtime Viitetyyppi:Viitetyyppi tallentaa viittauksen muistiosoitteen arvoon ja se on varattu kasaan. Kasamuistia käytetään dynaamiseen muistin varaamiseen. Viitetyyppi ei sisällä todellisia tietoja suoraan, mutta sisältää datan osoitteen. Aina kun viitetyyppinen objekti tehdään, se kopioi osoitteen, ei todellista dataa. Siksi kaksi muuttujaa viittaa samaan dataan. Jos yhden Reference Type -objektin tietoja muutetaan, sama heijastuu myös toiseen kohteeseen. Viitetyypit voivat olla itsekuvaavia tyyppejä, osoitintyyppejä tai häiriötyyppejä. Itsekuvaavat tyypit voivat olla merkkijono-, taulukko- ja luokkatyyppejä, jotka tallentavat metatietoja itsestään.

2. Common Language Specification (CLS):

Common Language Specification (CLS) sisältää joukon sääntöjä, joita kaikkien NETin tukemien kielten on noudatettava. Yhteiset säännöt helpottavat kieliintegraation toteuttamista ja auttavat kieltenvälisessä periytymisessä ja virheenkorjauksessa. Jokaisella NET Frameworkin tukemalla kielellä on omat syntaksisäännöt. Mutta CLS varmistaa yhteentoimivuuden NET-kielillä kehitettyjen sovellusten välillä.

3. Roskakeräys:

Garbage Collector on CLR:n komponentti, joka toimii automaattisena muistinhallintaohjelmana. Se auttaa hallitsemaan muistia varaamalla muistia automaattisesti tarpeen mukaan. Se varaa objekteille kasamuistin. Kun esineet eivät ole käytössä, se ottaa niille varatun muistin takaisin tulevaa käyttöä varten. Se myös varmistaa esineiden turvallisuuden, kun se ei anna yhden objektin käyttää toisen esineen sisältöä.

4. Just in Time (JIT) -kääntäjä:

JIT Compiler on tärkeä osa CLR:tä. Se muuntaa MSIL-koodin alkuperäiseksi koodiksi (eli konekohtaiseksi koodiksi). .NET-ohjelma on käännetty joko eksplisiittisesti tai implisiittisesti. Kehittäjä tai ohjelmoija kutsuu tietyn kääntäjän kääntämään ohjelman eksplisiittisessä käännöksessä. Implisiittisessä kääntämisessä ohjelma käännetään kahdesti. Lähdekoodi käännetään Microsoft Intermediate Language (MSIL) -kieleksi ensimmäisen käännösprosessin aikana. MSIL-koodi muunnetaan alkuperäiseksi koodiksi toisessa käännösprosessissa. Tätä prosessia kutsutaan JIT-kokoelmaksi. JIT-kääntäjiä on kolmenlaisia ​​- Pre, Econo ja Normal. Pre JIT Compiler kokoaa koko MSIL-koodin alkuperäiseksi koodiksi ennen suorittamista. Econo JIT Compiler kääntää vain ne osat MSIL-koodista, joita tarvitaan suorituksen aikana ja poistaa osat, joita ei enää tarvita. Normaali JIT Compiler myös kääntää vain ne MSIL-koodin osat, joita tarvitaan suorituksen aikana, mutta sijoittaa ne välimuistiin tulevaa käyttöä varten. Se ei vaadi jo käytettyjen osien uudelleenkääntämistä, koska ne on sijoitettu välimuistiin.

5. Metatiedot:

Metadata on binääritietoa ohjelmasta, joka on tallennettu CLR Portable Executable -tiedostoon (PE) yhdessä MSIL-koodin kanssa tai muistiin. MSIL:n suorituksen aikana myös metatiedot ladataan muistiin luokkien ja niihin liittyvien tulkinnan varmistamiseksi. Koodissa käytetyt tiedot. Joten metatiedot auttavat toteuttamaan koodia kielineutraalilla tavalla tai saavuttamaan kielten yhteentoimivuuden.

6. Kokoonpanot:

Kokoonpano on fyysisen koodin ryhmittelyn perusyksikkö. Se koostuu kokoonpanoluettelosta, metatiedoista, MSIL-koodista ja joukosta resursseja, kuten kuvatiedostoja. Sitä pidetään myös peruskäyttöönottoyksikkönä, versionhallintana, uudelleenkäytönä, suojausoikeuksina jne.

.NET CLR -toiminnot

Seuraavassa on CLR:n toiminnot.

  • Se muuntaa ohjelman alkuperäiseksi koodiksi.
  • Käsittelee poikkeuksia
  • Tarjoaa tyyppiturvan
  • Muistin hallinta
  • Tarjoaa turvallisuutta
  • Parannettu suorituskyky
  • Kielestä riippumaton
  • Alustasta riippumaton
  • Roskakokoelma
  • Tarjoaa olioohjelmille kieliominaisuuksia, kuten periytymisen, rajapinnat ja ylikuormituksen.

CLR:n kanssa toimivaa koodia kutsutaan hallitukseksi koodiksi, kun taas CLR:n ulkopuolella olevaa koodia kutsutaan hallitsemattomaksi koodiksi. CLR tarjoaa myös yhteentoimivuuskerroksen, joka mahdollistaa sekä hallittujen että hallitsemattomien koodien yhteistoiminnan.

1. Hallittu koodi:

Mikä tahansa .NET-kehykseen kirjoitettu kieli on hallittua koodia. Hallittu koodi käyttää CLR:ää, joka huolehtii sovelluksistasi hallitsemalla muistia, käsittelemällä suojausta, sallimalla kielten välisen virheenkorjauksen jne. Hallitun koodin prosessi on esitetty kuvassa:

Net Common Language Runtime

2. Hallitsematon koodi:

NET-kehyksen ulkopuolella kehitetty koodi tunnetaan hallitsemattomana koodina. Sovellusten, jotka eivät toimi CLR:n hallinnassa, sanotaan olevan hallitsemattomia. Tiettyjä kieliä, kuten C++, voidaan käyttää tällaisten sovellusten, kuten käyttöjärjestelmän matalan tason pääsytoimintojen, kirjoittamiseen. Taustayhteensopivuus VB:n, ASP:n ja COM:n kanssa ovat esimerkkejä hallitsemattomasta koodista. Tämä koodi suoritetaan kääreluokkien avulla. Hallitsematon koodiprosessi näkyy alla:

Net Common Language Runtime

.NET CLR -versiot

CLR päivittää itsensä aika ajoin parantaakseen suorituskykyä.

.NET-versio CLR versio
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

.NET CLR -rakenne

Seuraava on Common Language Runtime -ohjelman komponenttirakenne.

Net Common Language Runtime

Perusluokan kirjastotuki

Se on luokkakirjasto, joka tukee .NET-sovelluksen luokkia.

Säikeen tuki

Se hallitsee monisäikeisen sovelluksen rinnakkaista suoritusta.

COM Marshaler

Se tarjoaa yhteyden COM-objektien ja sovelluksen välillä.

Turvamoottori

Se valvoo turvallisuusrajoituksia.

Debug Engine

Sen avulla voit korjata erilaisia ​​sovelluksia.

Tyyppitarkistus

Se tarkistaa sovelluksessa käytetyt tyypit ja varmistaa, että ne vastaavat CLR:n antamia standardeja.

Code Manager

Se hallitsee koodia suorituksen aikana.

Roskankerääjä

Se vapauttaa käyttämättömän muistin ja varaa sen uudelle sovellukselle.

Poikkeuskäsittelijä

Se käsittelee poikkeuksen ajon aikana välttääkseen sovelluksen epäonnistumisen.

ClassLoader

Sitä käytetään lataamaan kaikki luokat ajon aikana.