A .NET CLR egy futási környezet, amely bármely .NET programozási nyelven írt kódot kezel és végrehajt. A CLR a .NET keretrendszer virtuális gép összetevője. Az adott nyelv fordítója a .NET-kompatibilis nyelvekkel fejlesztett alkalmazások forráskódját a CLR MSIL nevű köztes nyelvére, azaz a Microsoft köztes nyelvi kódjára fordítja. Ez a kód platformfüggetlen. A java bájtos kódjához hasonlítható. A metaadatok a fordítás és az MSIL-kód során is generálódnak, és a Manifest fájlként ismert fájlban tárolódnak. Ezek a metaadatok általában a CLR által az MSIL kód végrehajtásához szükséges tagokról és típusokról szólnak. A CLR „just-in-time” fordítókomponense az MSIL kódot a gép natív kódjává alakítja. Ez a kód platformfüggő. A CLR kezeli a memóriát, a szálakat, a kivételeket, a kódvégrehajtást, a kódbiztonságot, az ellenőrzést és a fordítást.
hármas tél
A következő ábra a forráskód natív kódká való átalakítását mutatja be.
A fenti ábra kódot natív kóddá alakítja, amelyet a CPU végrehajthat.
A CLR fő összetevői a következők:
- Közös típusú rendszer
- Közös nyelvi specifikáció
- Szemetes
- Just in Time Compiler
- Metaadatok és összeállítások
1. Általános típusú rendszer:
A CTS útmutatást ad az adattípusok futásidejű deklarálásához, használatához és kezeléséhez. Nyelveken átívelő kommunikációt kínál. Például a VB.NET integer adattípussal, a C# pedig int adattípussal rendelkezik az egész számok kezelésére. A fordítás után mindkét adattípus használja az Int32-t. Tehát a CTS kezelt kóddal biztosítja az adattípusokat. Egy elterjedt típusrendszer segíti a nyelvfüggetlen kód írását.
Két típuskategóriát biztosít.
2. Közös nyelvi specifikáció (CLS):
A Common Language Specification (CLS) olyan szabályokat tartalmaz, amelyeket az összes NET által támogatott nyelvnek követnie kell. A közös szabályok megkönnyítik a nyelvi integráció megvalósítását, és segítenek a nyelvek közötti öröklődésben és hibakeresésben. A NET-keretrendszer által támogatott minden nyelvnek saját szintaktikai szabályai vannak. A CLS azonban biztosítja az együttműködést a NET nyelveken fejlesztett alkalmazások között.
3. Szemétgyűjtés:
A Garbage Collector a CLR egyik összetevője, amely automatikus memóriakezelőként működik. Segít a memória kezelésében azáltal, hogy automatikusan lefoglalja a memóriát a követelményeknek megfelelően. Halommemóriát foglal le az objektumokhoz. Amikor az objektumok nincsenek használatban, visszakéri a hozzájuk rendelt memóriát későbbi felhasználás céljából. Ezenkívül biztosítja az objektumok biztonságát azáltal, hogy nem engedi, hogy egy objektum egy másik objektum tartalmát használja.
4. Just in Time (JIT) fordító:
A JIT Compiler a CLR fontos összetevője. Az MSIL kódot natív kóddá (azaz gépspecifikus kóddá) alakítja át. A .NET program vagy explicit módon, vagy implicit módon van lefordítva. A fejlesztő vagy programozó meghív egy adott fordítót, hogy lefordítsa a programot az explicit fordításban. Az implicit fordítás során a programot kétszer fordítják le. A forráskód az első fordítási folyamat során Microsoft Intermediate Language (MSIL) nyelvre kerül lefordításra. Az MSIL kódot a második fordítási folyamatban natív kóddá alakítják. Ezt a folyamatot JIT-összeállításnak nevezik. Háromféle JIT fordító létezik – Pre, Econo és Normal. A Pre JIT Compiler a teljes MSIL kódot natív kódba fordítja a végrehajtás előtt. Az Econo JIT Compiler az MSIL kódnak csak a végrehajtás során szükséges részeit fordítja le, és eltávolítja azokat, amelyekre már nincs szükség. A normál JIT Compiler az MSIL-kódnak csak azokat a részeit fordítja le, amelyek a végrehajtás során szükségesek, de a gyorsítótárba helyezi őket későbbi felhasználás céljából. Nem igényli a már használt részek újrafordítását, mivel azok a cache memóriába kerültek.
5. Metaadatok:
A metaadat egy bináris információ a programról, amelyet egy CLR Portable Executable fájlban (PE) tárolnak az MSIL kóddal együtt, vagy a memóriában. Az MSIL végrehajtása során a metaadatok is betöltődnek a memóriába az osztályok és a kapcsolódó megfelelő értelmezéséhez. A kódban használt információ. Tehát a metaadatok segítenek a kód nyelvsemleges megvalósításában vagy a nyelvi interoperabilitás elérésében.
6. Összeállítások:
Az összeállítás a fizikai kódcsoportosítás alapvető egysége. Ez az összeállítási jegyzékből, metaadatokból, MSIL-kódból és erőforrás-készletből, például képfájlokból áll. Alapvető telepítési egységnek, verziókezelésnek, újrahasználatnak, biztonsági engedélyeknek stb.
.NET CLR funkciók
Az alábbiakban a CLR funkciói láthatók.
- A programot natív kódká alakítja.
- Kezeli a kivételeket
- Típusbiztonságot nyújt
- Memóriakezelés
- Biztonságot nyújt
- Jobb teljesítmény
- Nyelvfüggetlen
- Platformfüggetlen
- Szemétgyüjtés
- Nyelvi funkciókat biztosít, például öröklődést, interfészt és túlterhelést az objektumorientált programok számára.
A CLR-rel futó kódot kezelt kódnak, míg a CLR-n kívüli kódot nem menedzselt kódnak nevezzük. A CLR egy interoperabilitási réteget is biztosít, amely lehetővé teszi mind a felügyelt, mind a nem felügyelt kódok együttműködését.
1. Kezelt kód:
A .NET-keretrendszerben írt bármely nyelv felügyelt kód. A felügyelt kód CLR-t használ, amely a memória kezelésével, a biztonság kezelésével, a nyelvek közötti hibakeresés lehetőségével stb. gondoskodik az alkalmazásairól. A felügyelt kód folyamata az ábrán látható:
2. Nem kezelt kód:
A .NET keretrendszeren kívül kifejlesztett kódot nem menedzselt kódnak nevezik. Azokról az alkalmazásokról, amelyek nem a CLR irányítása alatt futnak, azt mondják, hogy nem menedzseltek. Bizonyos nyelvek, például a C++ használható ilyen alkalmazások írásához, például az operációs rendszer alacsony szintű hozzáférési funkcióihoz. A VB-vel, ASP-vel és COM-mal való háttérkompatibilitás példák a nem felügyelt kódra. Ez a kód wrapper osztályok segítségével fut le. A nem felügyelt kódfolyamat az alábbiakban látható:
.NET CLR verziók
A CLR időről időre frissíti magát a jobb teljesítmény érdekében.
.NET verzió | CLR verzió |
---|---|
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 szerkezet
Az alábbiakban a Common Language Runtime összetevő szerkezete látható.
Alaposztályú könyvtári támogatás
Ez egy osztálykönyvtár, amely támogatja a .NET alkalmazás osztályait.
Szál támogatása
Kezeli a többszálú alkalmazás párhuzamos végrehajtását.
COM marshaler
Kommunikációt biztosít a COM objektumok és az alkalmazás között.
Biztonsági motor
Biztonsági korlátozásokat hajt végre.
Debug Engine
Lehetővé teszi különféle alkalmazások hibakeresését.
Típusellenőrző
Ellenőrzi az alkalmazásban használt típusokat, és ellenőrzi, hogy megfelelnek-e a CLR által biztosított szabványoknak.
Kódkezelő
Futás közben kezeli a kódot.
Szemetes
Felszabadítja a fel nem használt memóriát, és lefoglalja egy új alkalmazáshoz.
Kivételkezelő
Futás közben kezeli a kivételt, hogy elkerülje az alkalmazás meghibásodását.
ClassLoader
Az összes osztály betöltésére szolgál futási időben.