logo

.NET Common Language Runtime (CLR)

.NET CLR är en runtime-miljö som hanterar och exekverar koden skriven i alla .NET-programmeringsspråk. CLR är den virtuella maskinkomponenten i .NET-ramverket. Det språkets kompilator kompilerar källkoden för applikationer som utvecklats med .NET-kompatibla språk till CLR:s mellanspråk som kallas MSIL, dvs Microsofts mellanspråkskod. Denna kod är plattformsoberoende. Det är jämförbart med byte-kod i java. Metadata genereras också under kompilering och MSIL-kod och lagras i en fil som kallas Manifest-filen. Denna metadata handlar i allmänhet om medlemmar och typer som krävs av CLR för att exekvera MSIL-kod. En just-in-time kompilatorkomponent av CLR konverterar MSIL-kod till maskinens inbyggda kod. Denna kod är plattformsberoende. CLR hanterar minne, trådar, undantag, kodexekvering, kodsäkerhet, verifiering och kompilering.

odefinierad lutning

Följande figur visar omvandlingen av källkod till inbyggd kod.

Net Common Language Runtime

Ovanstående figur konverterar kod till inbyggd kod, som CPU:n kan köra.

Huvudkomponenterna i CLR är:

  • Vanligt typsystem
  • Vanlig språkspeciering
  • Skräp samlare
  • Just in Time Compiler
  • Metadata och sammanställningar
Net Common Language Runtime

1. Vanligt system:

CTS tillhandahåller riktlinjer för att deklarera, använda och hantera datatyper vid körning. Den erbjuder kommunikation över flera språk. Till exempel har VB.NET en heltalsdatatyp och C# har en int-datatyp för att hantera heltal. Efter kompilering används Int32 av båda datatyperna. Så CTS tillhandahåller datatyperna med hjälp av hanterad kod. Ett vanligt typsystem hjälper till att skriva språkoberoende kod.

Den tillhandahåller två kategorier av typer.

    Värde typ:En värdetyp lagrar data i minnet som är allokerat på stacken eller inline i en struktur. Denna kategori av Typ innehåller datakatalogen. Om en variabels värde kopieras till en annan lagrar båda variablerna data oberoende av varandra. Det kan vara av inbyggda typer, användardefinierade eller uppräkningstyper. Inbyggda typer är primitiva datatyper som numerisk, boolesk, char och datum. Användare i källkoden skapar användardefinierade typer. En uppräkning hänvisar till en uppsättning uppräknade värden representerade av etiketter men lagrade som en numerisk typ.
    Net Common Language Runtime Referenstyp:En referenstyp lagrar en referens till värdet på en minnesadress och allokeras på högen. Högminne används för dynamisk minnesallokering. Referenstyp innehåller inte faktiska data direkt utan innehåller dataadressen. Närhelst ett objekt av referenstyp görs, kopierar det adressen och inte faktiska data. Därför kommer två variabler att referera till samma data. Om data för ett referenstypobjekt ändras, återspeglas samma för det andra objektet. Referenstyper kan vara självbeskrivande typer, pekartyper eller interferenstyper. De självbeskrivande typerna kan vara sträng-, array- och klasstyper som lagrar metadata om sig själva.

2. Common Language Specification (CLS):

Common Language Specification (CLS) innehåller en uppsättning regler som ska följas av alla NET-stödda språk. De gemensamma reglerna gör det enkelt att implementera språkintegration och hjälper till med arv och felsökning på flera språk. Varje språk som stöds av NET Framework har sina egna syntaxregler. Men CLS säkerställer interoperabilitet mellan applikationer som utvecklats med NET-språk.

3. Sophämtning:

Garbage Collector är en komponent i CLR som fungerar som en automatisk minneshanterare. Det hjälper till att hantera minnet genom att automatiskt allokera minne enligt kraven. Den allokerar högminne till objekt. När objekt inte används tar det tillbaka minnet som tilldelats dem för framtida användning. Det säkerställer också säkerheten för objekt genom att inte tillåta ett objekt att använda innehållet i ett annat objekt.

4. Just in Time (JIT) kompilator:

JIT Compiler är en viktig komponent i CLR. Den konverterar MSIL-koden till inbyggd kod (dvs maskinspecifik kod). .NET-programmet kompileras antingen explicit eller implicit. Utvecklaren eller programmeraren anropar en viss kompilator för att kompilera programmet i den explicita kompileringen. I implicit kompilering kompileras programmet två gånger. Källkoden kompileras till Microsoft Intermediate Language (MSIL) under den första kompileringsprocessen. MSIL-koden konverteras till inbyggd kod i den andra kompileringsprocessen. Denna process kallas JIT-kompilering. Det finns tre typer av JIT-kompilatorer - Pre, Econo och Normal. Pre JIT Compiler kompilerar hela MSIL-koden till inbyggd kod innan exekvering. Econo JIT Compiler kompilerar endast de delar av MSIL-koden som krävs under exekvering och tar bort de delar som inte längre behövs. Normal JIT Compiler kompilerar också bara de delar av MSIL-koden som krävs under körning men placerar dem i cache för framtida användning. Det kräver inte omkompilering av redan använda delar eftersom de har placerats i cacheminnet.

5. Metadata:

En metadata är en binär information om programmet, antingen lagrad i en CLR Portable Executable-fil (PE) tillsammans med MSIL-kod eller i minnet. Under körningen av MSIL laddas även metadata in i minnet för korrekt tolkning av klasser och relaterade. Information som används i kod. Så, metadata hjälper till att implementera kod på ett språkneutralt sätt eller uppnå språkinteroperabilitet.

6. Sammansättningar:

En sammansättning är en grundläggande enhet för fysisk kodgruppering. Den består av monteringsmanifestet, metadata, MSIL-kod och en uppsättning resurser som bildfiler. Det anses också vara en grundläggande distributionsenhet, versionskontroll, återanvändning, säkerhetsbehörigheter, etc.

.NET CLR-funktioner

Följande är funktionerna i CLR.

  • Det konverterar programmet till inbyggd kod.
  • Hanterar undantag
  • Ger typsäkerhet
  • Minneshantering
  • Ger trygghet
  • Förbättrad prestanda
  • Språkoberoende
  • Plattformsoberoende
  • Skräp samling
  • Tillhandahåller språkfunktioner som arv, gränssnitt och överbelastning för objektorienterade program.

Koden som körs med CLR kallas hanterad kod, medan koden utanför CLR kallas ohanterad kod. CLR tillhandahåller också ett interoperabilitetsskikt, som gör att både hanterade och ohanterade koder kan samverka.

1. Hanterad kod:

Alla språk som skrivs i .NET-ramverket är hanterad kod. Hanterad kod använder CLR, som tar hand om dina applikationer genom att hantera minne, hantera säkerhet, tillåta felsökning på flera språk, etc. Processen för hanterad kod visas i figuren:

Net Common Language Runtime

2. Ohanterad kod:

Koden som utvecklats utanför .NET-ramverket kallas ohanterad kod. Applikationer som inte körs under kontroll av CLR sägs vara ohanterade. Vissa språk som C++ kan användas för att skriva sådana applikationer, till exempel lågnivåaccessfunktioner i operativsystemet. Bakgrundskompatibilitet med VB, ASP och COM är exempel på ohanterad kod. Denna kod exekveras med hjälp av wrapper-klasser. Den ohanterade kodprocessen visas nedan:

Net Common Language Runtime

.NET CLR-versioner

CLR uppdaterar sig själv då och då för att ge bättre prestanda.

.NET-version CLR-version
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-struktur

Följande är komponentstrukturen för Common Language Runtime.

Net Common Language Runtime

Stöd för basklassbibliotek

Det är ett klassbibliotek som stöder klasser för .NET-applikationen.

Trådstöd

Den hanterar parallellkörningen av den flertrådade applikationen.

COM Marshaler

Den tillhandahåller kommunikation mellan COM-objekten och applikationen.

Säkerhetsmotor

Den upprätthåller säkerhetsrestriktioner.

Felsökningsmotor

Det låter dig felsöka olika typer av applikationer.

Skriv Checker

Den kontrollerar de typer som används i applikationen och verifierar att de matchar standarderna som tillhandahålls av CLR.

Kodhanterare

Den hanterar kod vid körning.

Skräp samlare

Det frigör det oanvända minnet och allokerar det till en ny applikation.

Undantagshanterare

Den hanterar undantaget vid körning för att undvika programfel.

ClassLoader

Den används för att ladda alla klasser vid körning.