.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ą.
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
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.
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:
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 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.
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.