logo

.NET bendrosios kalbos vykdymo laikas (CLR)

.NET CLR yra vykdymo aplinka, kuri valdo ir vykdo kodą, parašytą bet kuria .NET programavimo kalba. CLR yra virtualios mašinos .NET sistemos komponentas. Šios kalbos kompiliatorius sukompiliuoja programų, sukurtų naudojant .NET suderinamas kalbas, šaltinio kodą į CLR tarpinę kalbą, vadinamą MSIL, t. y. Microsoft tarpinės kalbos kodą. Šis kodas nepriklauso nuo platformos. Jis panašus į baitų kodą Java. Metaduomenys taip pat generuojami kompiliavimo metu ir MSIL kodas bei saugomi faile, vadinamame manifesto failu. Šie metaduomenys paprastai yra apie narius ir tipus, kurių CLR reikalauja MSIL kodui vykdyti. Tiesiogiai laiku veikiantis CLR kompiliatoriaus komponentas konvertuoja MSIL kodą į savąjį mašinos kodą. Šis kodas priklauso nuo platformos. CLR valdo atmintį, gijas, išimtis, kodo vykdymą, kodo saugumą, tikrinimą ir kompiliavimą.

Armstrongo numeris

Toliau pateiktame paveikslėlyje parodytas šaltinio kodo konvertavimas į vietinį kodą.

Net Common Language Runtime

Aukščiau pateikta figūra konvertuoja kodą į vietinį kodą, kurį CPU gali vykdyti.

Pagrindiniai CLR komponentai yra šie:

  • Įprasto tipo sistema
  • Bendros kalbos specifikacija
  • Šiukšlių surinkėjas
  • Tiesiog laiko kompiliatorius
  • Metaduomenys ir mazgai
Net Common Language Runtime

1. Įprasto tipo sistema:

CTS pateikia gaires, kaip deklaruoti, naudoti ir valdyti duomenų tipus vykdymo metu. Ji siūlo bendravimą keliomis kalbomis. Pavyzdžiui, VB.NET turi sveikųjų skaičių duomenų tipą, o C# turi int duomenų tipą sveikiesiems skaičiams tvarkyti. Po kompiliavimo Int32 naudoja abu duomenų tipai. Taigi, CTS pateikia duomenų tipus naudodama valdomą kodą. Įprasto tipo sistema padeda rašyti nuo kalbos nepriklausomą kodą.

Jame pateikiamos dvi tipų rūšys.

    Vertės tipas:Vertės tipas saugo duomenis atmintyje, priskirtą dėtuvėje arba struktūroje. Šioje tipo kategorijoje yra duomenų katalogas. Jei vieno kintamojo reikšmė nukopijuojama į kitą, abu kintamieji duomenis saugo atskirai. Jis gali būti integruotų tipų, vartotojo apibrėžtų arba sąrašų tipų. Integruoti tipai yra primityvūs duomenų tipai, pvz., skaitiniai, Būlio, char ir data. Vartotojai šaltinio kode sukuria vartotojo apibrėžtus tipus. Sąrašas reiškia išvardintų reikšmių rinkinį, pavaizduotą etiketėmis, bet išsaugomą kaip skaitinį tipą.
    Net Common Language Runtime Nuorodos tipas:Nuorodos tipas saugo nuorodą į atminties adreso reikšmę ir yra priskiriamas krūvai. Krūvos atmintis naudojama dinaminiam atminties paskirstymui. Nuorodos tipas tiesiogiai nelaiko faktinių duomenų, bet turi duomenų adresą. Kai sukuriamas nuorodos tipo objektas, jis nukopijuoja adresą, o ne tikrus duomenis. Todėl du kintamieji nurodo tuos pačius duomenis. Pakeitus vieno nuorodos tipo objekto duomenis, tai atsispindi ir kitam objektui. Nuorodų tipai gali būti save apibūdinantys tipai, rodyklės tipai arba trukdžių tipai. Savarankiškai apibūdinantys tipai gali būti eilutės, masyvo ir klasių tipai, kuriuose saugomi metaduomenys apie save.

2. Bendrosios kalbos specifikacija (CLS):

Bendrosios kalbos specifikacijose (CLS) yra taisyklių rinkinys, kurio turi laikytis visos NET palaikomos kalbos. Bendrosios taisyklės palengvina kalbos integravimą ir padeda paveldėti kelias kalbas bei derinti. Kiekviena NET Framework palaikoma kalba turi savo sintaksės taisykles. Tačiau CLS užtikrina programų, sukurtų naudojant NET kalbas, sąveikumą.

3. Šiukšlių surinkimas:

Šiukšlių surinkėjas yra CLR komponentas, veikiantis kaip automatinė atminties tvarkyklė. Jis padeda valdyti atmintį automatiškai paskirstydamas atmintį pagal poreikį. Jis objektams priskiria krūvos atmintį. Kai objektai nenaudojami, jis atgauna jiems skirtą atmintį naudoti ateityje. Taip pat užtikrinamas objektų saugumas, neleidžiant vienam objektui naudotis kito objekto turiniu.

4. Tiesiog laiku (JIT) kompiliatorius:

JIT kompiliatorius yra svarbus CLR komponentas. Jis konvertuoja MSIL kodą į vietinį kodą (ty mašinos specifinį kodą). .NET programa yra sudaryta tiesiogiai arba netiesiogiai. Kūrėjas arba programuotojas iškviečia konkretų kompiliatorių, kad sukompiliuotų programą aiškioje kompiliacijoje. Netiesioginio kompiliavimo metu programa sukompiliuojama du kartus. Pirmojo kompiliavimo proceso metu šaltinio kodas sukompiliuojamas į „Microsoft Intermediate Language“ (MSIL). Antrojo kompiliavimo procese MSIL kodas konvertuojamas į vietinį kodą. Šis procesas vadinamas JIT kompiliavimu. Yra trijų tipų JIT kompiliatoriai - Pre, Econo ir Normal. „Pre JIT Compiler“ prieš vykdydamas visą MSIL kodą sukompiliuoja į vietinį kodą. Econo JIT Compiler sukompiliuoja tik tas MSIL kodo dalis, kurių reikia vykdymo metu, ir pašalina tas dalis, kurių nebereikia. Įprastas JIT kompiliatorius taip pat sukompiliuoja tik tas MSIL kodo dalis, kurių reikia vykdant, bet įdeda jas į talpyklą, kad būtų galima naudoti ateityje. Tam nereikia perkompiliuoti jau naudotų dalių, nes jos buvo patalpintos talpykloje.

5. Metaduomenys:

Metaduomenys yra dvejetainė informacija apie programą, saugoma CLR nešiojamame vykdomajame faile (PE) kartu su MSIL kodu arba atmintyje. Vykdant MSIL, metaduomenys taip pat įkeliami į atmintį, kad būtų galima tinkamai interpretuoti klases ir susijusius dalykus. Kode naudojama informacija. Taigi metaduomenys padeda įdiegti kodą neutraliai kalbai arba pasiekti kalbos sąveikumą.

6. Surinkimai:

Agregatas yra pagrindinis fizinio kodo grupavimo vienetas. Jį sudaro surinkimo aprašas, metaduomenys, MSIL kodas ir išteklių, pvz., vaizdo failų, rinkinys. Jis taip pat laikomas pagrindiniu diegimo vienetu, versijų valdymu, pakartotiniu naudojimu, saugos leidimais ir kt.

.NET CLR funkcijos

Toliau pateikiamos CLR funkcijos.

  • Jis konvertuoja programą į vietinį kodą.
  • Rankenos Išimtys
  • Užtikrina tipo saugumą
  • Atminties valdymas
  • Suteikia saugumą
  • Patobulintas našumas
  • Nepriklausoma nuo kalbos
  • Nepriklausoma nuo platformos
  • Šiukšlių kolekcija
  • Teikia kalbos funkcijas, tokias kaip paveldėjimas, sąsajos ir objektinių programų perkrovimas.

Kodas, kuris veikia su CLR, vadinamas valdomu kodu, o kodas, esantis už CLR ribų, vadinamas nevaldomu kodu. CLR taip pat suteikia sąveikumo lygmenį, leidžiantį sąveikauti ir valdomiems, ir nevaldomiems kodams.

1. Valdomas kodas:

Bet kuri kalba, parašyta .NET sistemoje, yra valdomas kodas. Valdomas kodas naudoja CLR, kuris prižiūri jūsų programas tvarkydamas atmintį, tvarkydamas saugą, leisdamas derinti keliomis kalbomis ir tt Valdomo kodo procesas parodytas paveikslėlyje:

Net Common Language Runtime

2. Nevaldomas kodas:

Kodas, sukurtas už .NET sistemos ribų, yra žinomas kaip nevaldomas kodas. Teigiama, kad programos, kurių CLR nekontroliuoja, yra nevaldomos. Tam tikromis kalbomis, pvz., C++, galima rašyti tokias programas, pavyzdžiui, operacinės sistemos žemo lygio prieigos funkcijas. Fono suderinamumas su VB, ASP ir COM yra nevaldomo kodo pavyzdžiai. Šis kodas vykdomas naudojant įvyniojimo klases. Žemiau parodytas nevaldomas kodo procesas:

Net Common Language Runtime

.NET CLR versijos

CLR laikas nuo laiko atnaujina save, kad užtikrintų geresnį našumą.

.NET versija CLR versija
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 struktūra

Toliau pateikiama Common Language Runtime komponentų struktūra.

Net Common Language Runtime

Bazinės klasės bibliotekos palaikymas

Tai klasių biblioteka, kuri palaiko .NET programos klases.

Siūlų palaikymas

Jis valdo lygiagretų kelių gijų programos vykdymą.

COM Marshaler

Tai užtikrina ryšį tarp COM objektų ir programos.

Apsaugos variklis

Tai užtikrina saugumo apribojimus.

Derinimo variklis

Tai leidžia derinti įvairių tipų programas.

Tipo tikrintuvas

Ji patikrina programoje naudojamus tipus ir patikrina, ar jie atitinka CLR pateiktus standartus.

Kodo valdytojas

Jis valdo kodą vykdymo metu.

Šiukšlių surinkėjas

Jis atlaisvina nepanaudotą atmintį ir paskiria ją naujai programai.

Išimčių tvarkytojas

Jis apdoroja išimtį vykdymo metu, kad išvengtų programos gedimo.

Classloader

Jis naudojamas visoms klasėms įkelti vykdymo metu.