logo

.NET Common Language Runtime (CLR)

.NET CLR is een runtime-omgeving die de code beheert en uitvoert die in elke .NET-programmeertaal is geschreven. CLR is de virtuele machinecomponent van het .NET-framework. De compiler van die taal compileert de broncode van applicaties die zijn ontwikkeld met behulp van .NET-compatibele talen in de tussentaal van CLR genaamd MSIL, dat wil zeggen de tussentaalcode van Microsoft. Deze code is platformonafhankelijk. Het is vergelijkbaar met bytecode in Java. Metagegevens worden ook gegenereerd tijdens het compileren en MSIL-code en opgeslagen in een bestand dat bekend staat als het Manifest-bestand. Deze metagegevens gaan over het algemeen over leden en typen die CLR nodig heeft om MSIL-code uit te voeren. Een just-in-time compilercomponent van CLR converteert MSIL-code naar native code van de machine. Deze code is platformafhankelijk. CLR beheert geheugen, threads, uitzonderingen, code-uitvoering, codeveiligheid, verificatie en compilatie.

np.uniek

De volgende afbeelding toont de conversie van broncode naar native code.

Net Common Language-runtime

De bovenstaande figuur converteert code naar native code, die de CPU kan uitvoeren.

De belangrijkste componenten van CLR zijn:

  • Gemeenschappelijk type systeem
  • Gemeenschappelijke taalspeciatie
  • Vuilnisman
  • Just in Time-compiler
  • Metagegevens en samenstellingen
Net Common Language-runtime

1. Gemeenschappelijk typesysteem:

CTS biedt richtlijnen voor het declareren, gebruiken en beheren van gegevenstypen tijdens runtime. Het biedt communicatie in meerdere talen. VB.NET heeft bijvoorbeeld een gegevenstype geheel getal, en C# heeft een gegevenstype int voor het beheren van gehele getallen. Na compilatie wordt Int32 door beide gegevenstypen gebruikt. CTS levert dus de gegevenstypen met behulp van beheerde code. Een gemeenschappelijk typesysteem helpt bij het schrijven van taalonafhankelijke code.

Het biedt twee categorieën typen.

    Waarde type:Een waardetype slaat de gegevens op in het geheugen dat is toegewezen op de stapel of inline in een structuur. Deze categorie Type bevat de gegevensmap. Als de waarde van de ene variabele naar een andere wordt gekopieerd, slaan beide variabelen onafhankelijk van elkaar gegevens op. Dit kunnen ingebouwde typen, door de gebruiker gedefinieerde typen of opsommingstypen zijn. Ingebouwde typen zijn primitieve gegevenstypen zoals numeriek, Booleaans, char en datum. Gebruikers in de broncode maken door de gebruiker gedefinieerde typen. Een opsomming verwijst naar een reeks opgesomde waarden die worden weergegeven door labels, maar opgeslagen als een numeriek type.
    Net Common Language-runtime Referentietype:Een referentietype slaat een verwijzing op naar de waarde van een geheugenadres en wordt toegewezen aan de heap. Heap-geheugen wordt gebruikt voor dynamische geheugentoewijzing. Referentietype bevat niet rechtstreeks de werkelijke gegevens, maar bevat het adres van de gegevens. Telkens wanneer een referentietypeobject wordt gemaakt, kopieert het het adres en niet de feitelijke gegevens. Daarom verwijzen twee variabelen naar dezelfde gegevens. Als gegevens van het ene Referentietype-object worden gewijzigd, wordt hetzelfde weerspiegeld voor het andere object. Referentietypen kunnen zelfbeschrijvende typen, aanwijzertypen of interferentietypen zijn. De zelfbeschrijvende typen kunnen string-, array- en klassetypen zijn die metagegevens over zichzelf opslaan.

2. Gemeenschappelijke taalspecificatie (CLS):

Common Language Specification (CLS) bevat een reeks regels die door alle NET-ondersteunde talen moeten worden gevolgd. De gemeenschappelijke regels maken het eenvoudig om taalintegratie te implementeren en helpen bij het overerven en debuggen van meerdere talen. Elke taal die door NET Framework wordt ondersteund, heeft zijn eigen syntaxisregels. Maar CLS zorgt voor interoperabiliteit tussen applicaties die zijn ontwikkeld met behulp van NET-talen.

3. Afvalinzameling:

Garbage Collector is een onderdeel van CLR dat werkt als een automatische geheugenbeheerder. Het helpt bij het beheren van het geheugen door automatisch geheugen toe te wijzen op basis van de vereisten. Het wijst heap-geheugen toe aan objecten. Wanneer objecten niet in gebruik zijn, wordt het toegewezen geheugen teruggevorderd voor toekomstig gebruik. Het garandeert ook de veiligheid van objecten door het ene object niet toe te staan ​​de inhoud van een ander object te gebruiken.

4. Just in Time (JIT)-compiler:

JIT Compiler is een belangrijk onderdeel van CLR. Het converteert de MSIL-code naar native code (dat wil zeggen machinespecifieke code). Het .NET-programma wordt expliciet of impliciet gecompileerd. De ontwikkelaar of programmeur roept een bepaalde compiler aan om het programma in de expliciete compilatie te compileren. Bij impliciete compilatie wordt het programma tweemaal gecompileerd. De broncode wordt tijdens het eerste compilatieproces gecompileerd in Microsoft Intermediate Language (MSIL). De MSIL-code wordt tijdens het tweede compilatieproces omgezet in native code. Dit proces wordt JIT-compilatie genoemd. Er zijn drie soorten JIT-compilers: Pre, Econo en Normal. Pre JIT Compiler compileert volledige MSIL-code naar native code voordat deze wordt uitgevoerd. Econo JIT Compiler compileert alleen die delen van MSIL-code die nodig zijn tijdens de uitvoering en verwijdert die delen die niet meer nodig zijn. Normale JIT Compiler compileert ook alleen die delen van MSIL-code die nodig zijn tijdens de uitvoering, maar plaatst deze in de cache voor toekomstig gebruik. Het vereist geen hercompilatie van reeds gebruikte onderdelen, aangezien deze in het cachegeheugen zijn geplaatst.

5. Metagegevens:

Metagegevens zijn binaire informatie over het programma, opgeslagen in een CLR Portable Executable-bestand (PE) samen met MSIL-code of in het geheugen. Tijdens de uitvoering van MSIL worden ook metadata in het geheugen geladen voor een juiste interpretatie van klassen en aanverwante zaken. Informatie gebruikt in code. Metagegevens helpen dus om code op een taalneutrale manier te implementeren of taalinteroperabiliteit te bereiken.

6. Assemblages:

Een assembly is een fundamentele eenheid voor het groeperen van fysieke code. Het bestaat uit het assemblagemanifest, metadata, MSIL-code en een reeks bronnen zoals afbeeldingsbestanden. Het wordt ook beschouwd als een basisimplementatie-eenheid, versiebeheer, hergebruik, beveiligingsmachtigingen, enz.

.NET CLR-functies

Hieronder volgen de functies van de CLR.

  • Het converteert het programma naar native code.
  • Verwerkt uitzonderingen
  • Biedt typeveiligheid
  • Geheugen management
  • Biedt veiligheid
  • Verbeterde prestatie
  • Taalonafhankelijk
  • Platformonafhankelijk
  • Afvalinzameling
  • Biedt taalfuncties zoals overerving, interfaces en overbelasting voor objectgeoriënteerde programma's.

De code die met CLR wordt uitgevoerd, wordt beheerde code genoemd, terwijl de code buiten de CLR onbeheerde code wordt genoemd. De CLR biedt ook een interoperabiliteitslaag, waardoor zowel de beheerde als de onbeheerde codes kunnen samenwerken.

1. Beheerde code:

Elke taal die in het .NET-framework is geschreven, is beheerde code. Beheerde code maakt gebruik van CLR, dat voor uw toepassingen zorgt door het geheugen te beheren, de beveiliging af te handelen, foutopsporing in meerdere talen mogelijk te maken, enz. Het proces van beheerde code wordt weergegeven in de afbeelding:

Net Common Language-runtime

2. Onbeheerde code:

De code die buiten het .NET-framework is ontwikkeld, staat bekend als onbeheerde code. Applicaties die niet onder controle van de CLR draaien, worden onbeheerd genoemd. Bepaalde talen zoals C++ kunnen worden gebruikt om dergelijke toepassingen te schrijven, zoals toegangsfuncties op laag niveau van het besturingssysteem. Achtergrondcompatibiliteit met VB, ASP en COM zijn voorbeelden van onbeheerde code. Deze code wordt uitgevoerd met behulp van wrapper-klassen. Het onbeheerde codeproces wordt hieronder weergegeven:

Net Common Language-runtime

.NET CLR-versies

De CLR wordt van tijd tot tijd bijgewerkt om betere prestaties te leveren.

.NET-versie CLR-versie
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-structuur

Hieronder volgt de componentenstructuur van Common Language Runtime.

Net Common Language-runtime

Ondersteuning voor basisklassebibliotheek

Het is een klassenbibliotheek die klassen voor de .NET-applicatie ondersteunt.

Draadondersteuning

Het beheert de parallelle uitvoering van de multi-threaded applicatie.

COM-maarschalk

Het zorgt voor communicatie tussen de COM-objecten en de applicatie.

Beveiligingsmotor

Het dwingt veiligheidsbeperkingen af.

Debug-engine

Hiermee kunt u verschillende soorten toepassingen debuggen.

Type controleur

Het controleert de typen die in de applicatie worden gebruikt en verifieert dat ze overeenkomen met de normen van de CLR.

Codebeheerder

Het beheert code tijdens uitvoeringsruntime.

Vuilnisman

Het geeft het ongebruikte geheugen vrij en wijst het toe aan een nieuwe applicatie.

Uitzonderingsbehandelaar

Het verwerkt de uitzondering tijdens runtime om applicatiefouten te voorkomen.

Klasselader

Het wordt gebruikt om alle klassen tijdens runtime te laden.