logo

.NET Common Language Runtime (CLR)

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.

Net Common Language Runtime

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
Net Common Language Runtime

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.

    Érték tipusa:Az értéktípus a veremben vagy egy struktúrában soron belüli memóriában tárolja az adatokat. Ez a típuskategória tartalmazza az adatkönyvtárat. Ha az egyik változó értékét a másikba másoljuk, mindkét változó egymástól függetlenül tárol adatokat. Lehet beépített típusú, felhasználó által definiált vagy felsorolás típusú. A beépített típusok primitív adattípusok, például numerikus, logikai, char és dátum. A forráskódban lévő felhasználók felhasználó által definiált típusokat hoznak létre. A felsorolás címkékkel ábrázolt, de numerikus típusként tárolt felsorolt ​​értékek halmazára utal.
    Net Common Language Runtime Referencia típusa:A referenciatípus a memóriacím értékére mutató hivatkozást tárol, és a kupacban van lefoglalva. A kupacmemóriát dinamikus memóriafoglaláshoz használják. A referenciatípus nem tartalmazza közvetlenül a tényleges adatokat, hanem az adatok címét. Amikor referencia típusú objektumot készítenek, az a címet másolja, nem pedig a tényleges adatokat. Ezért két változó ugyanarra az adatra hivatkozik. Ha az egyik Referencia típusú objektum adatai megváltoznak, akkor ez a másik objektumra is érvényesül. A referenciatípusok lehetnek önleíró típusok, mutatótípusok vagy interferenciatípusok. Az önleíró típusok lehetnek karakterlánc-, tömb- és osztálytípusok, amelyek magukról metaadatokat tárolnak.

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ó:

Net Common Language Runtime

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 Common Language Runtime

.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ó.

Net Common Language Runtime

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.