logo

.NET Common Language Runtime (CLR)

.NET CLR este un mediu de rulare care gestionează și execută codul scris în orice limbaj de programare .NET. CLR este componenta mașinii virtuale a cadrului .NET. Compilatorul acelui limbaj compilează codul sursă al aplicațiilor dezvoltate folosind limbaje compatibile .NET în limbajul intermediar CLR numit MSIL, adică codul de limbaj intermediar Microsoft. Acest cod este independent de platformă. Este comparabil cu codul de octeți din Java. Metadatele sunt, de asemenea, generate în timpul compilării și codul MSIL și stocate într-un fișier cunoscut sub numele de fișier Manifest. Aceste metadate sunt, în general, despre membrii și tipurile cerute de CLR pentru a executa codul MSIL. O componentă de compilare just-in-time a CLR convertește codul MSIL în codul nativ al mașinii. Acest cod depinde de platformă. CLR gestionează memoria, firele de execuție, excepțiile, execuția codului, siguranța codului, verificarea și compilarea.

mysql update join

Figura următoare arată conversia codului sursă în cod nativ.

Net Common Language Runtime

Figura de mai sus convertește codul în cod nativ, pe care CPU-ul îl poate executa.

Principalele componente ale CLR sunt:

  • Sistem de tip comun
  • Speciația limbajului comun
  • Colector de gunoi
  • Just in Time Compiler
  • Metadate și ansambluri
Net Common Language Runtime

1. Sistem de tip comun:

CTS oferă instrucțiuni pentru declararea, utilizarea și gestionarea tipurilor de date în timpul execuției. Oferă comunicare în mai multe limbi. De exemplu, VB.NET are un tip de date întreg, iar C# are un tip de date int pentru gestionarea numerelor întregi. După compilare, Int32 este utilizat de ambele tipuri de date. Deci, CTS furnizează tipurile de date folosind cod gestionat. Un sistem de tip comun ajută la scrierea codului independent de limbă.

Acesta oferă două categorii de tipuri.

    Tipul valorii:Un tip de valoare stochează datele în memorie alocată pe stivă sau inline într-o structură. Această categorie de tip deține directorul de date. Dacă valoarea unei variabile este copiată în alta, ambele variabile stochează datele în mod independent. Poate fi de tipuri încorporate, definite de utilizator sau tipuri de enumerare. Tipurile încorporate sunt tipuri de date primitive, cum ar fi numeric, boolean, char și data. Utilizatorii din codul sursă creează tipuri definite de utilizator. O enumerare se referă la un set de valori enumerate reprezentate prin etichete, dar stocate ca tip numeric.
    Net Common Language Runtime Tip de referință:Un tip de referință stochează o referință la valoarea unei adrese de memorie și este alocat pe heap. Memoria heap este utilizată pentru alocarea dinamică a memoriei. Tipul de referință nu deține datele reale în mod direct, ci deține adresa datelor. Ori de câte ori este creat un obiect de tip referință, acesta copiază adresa și nu datele reale. Prin urmare, două variabile se vor referi la aceleași date. Dacă datele unui obiect tip de referință sunt modificate, același lucru se reflectă și pentru celălalt obiect. Tipurile de referință pot fi tipuri de auto-descriere, tipuri de indicatori sau tipuri de interferență. Tipurile de auto-descriere pot fi tipuri de șir, matrice și clase care stochează metadate despre ele însele.

2. Common Language Specification (CLS):

Common Language Specification (CLS) conține un set de reguli care trebuie urmate de toate limbile acceptate de NET. Regulile comune facilitează implementarea integrării lingvistice și ajută la moștenirea și depanarea în mai multe limbi. Fiecare limbaj acceptat de NET Framework are propriile reguli de sintaxă. Dar CLS asigură interoperabilitatea între aplicațiile dezvoltate folosind limbaje NET.

3. Colectarea gunoiului:

Garbage Collector este o componentă a CLR care funcționează ca un manager automat de memorie. Ajută la gestionarea memoriei prin alocarea automată a memoriei conform cerințelor. Alocă memorie heap obiectelor. Când obiectele nu sunt în uz, acesta recuperează memoria alocată acestora pentru utilizare ulterioară. De asemenea, asigură siguranța obiectelor prin faptul că nu permite unui obiect să folosească conținutul altui obiect.

4. Compilatorul Just in Time (JIT):

JIT Compiler este o componentă importantă a CLR. Acesta convertește codul MSIL în cod nativ (adică, cod specific mașinii). Programul .NET este compilat fie explicit, fie implicit. Dezvoltatorul sau programatorul apelează un anumit compilator pentru a compila programul în compilarea explicită. În compilarea implicită, programul este compilat de două ori. Codul sursă este compilat în Microsoft Intermediate Language (MSIL) în timpul primului proces de compilare. Codul MSIL este convertit în cod nativ în al doilea proces de compilare. Acest proces se numește compilare JIT. Există trei tipuri de compilatoare JIT - Pre, Econo și Normal. Pre JIT Compiler compilează întregul cod MSIL în cod nativ înainte de execuție. Econo JIT Compiler compilează numai acele părți ale codului MSIL necesare în timpul execuției și elimină acele părți care nu mai sunt necesare. Compilatorul JIT normal compilează, de asemenea, numai acele părți ale codului MSIL necesare în timpul execuției, dar le plasează în cache pentru utilizare ulterioară. Nu necesită recompilări ale pieselor deja utilizate, deoarece acestea au fost plasate în memoria cache.

5. Metadate:

O metadate este o informație binară despre program, fie stocată într-un fișier CLR Portable Executable (PE) împreună cu codul MSIL, fie în memorie. În timpul execuției MSIL, metadatele sunt, de asemenea, încărcate în memorie pentru interpretarea corectă a claselor și a celor aferente. Informații utilizate în cod. Așadar, metadatele ajută la implementarea codului într-o manieră neutră din punct de vedere al limbii sau la realizarea interoperabilității lingvistice.

6. Ansambluri:

Un ansamblu este o unitate fundamentală a grupării codurilor fizice. Constă din manifestul de asamblare, metadate, codul MSIL și un set de resurse, cum ar fi fișierele imagine. De asemenea, este considerată o unitate de implementare de bază, control al versiunilor, reutilizare, permisiuni de securitate etc.

Funcții .NET CLR

Următoarele sunt funcțiile CLR.

  • Acesta convertește programul în cod nativ.
  • Se ocupă de excepții
  • Oferă siguranță de tip
  • Gestionarea memoriei
  • Oferă securitate
  • Performanta imbunatatita
  • Independent de limbaj
  • Platforma independenta
  • Colectarea gunoiului
  • Oferă caracteristici de limbaj, cum ar fi moștenirea, interfețele și supraîncărcarea pentru programele orientate pe obiecte.

Codul care rulează cu CLR se numește cod gestionat, în timp ce codul din afara CLR se numește cod negestionat. CLR oferă, de asemenea, un strat de interoperabilitate, care permite interoperarea atât a codurilor gestionate, cât și a celor neadministrate.

1. Cod gestionat:

Orice limbaj care este scris în cadrul .NET este cod gestionat. Codul gestionat folosește CLR, care are grijă de aplicațiile dvs. prin gestionarea memoriei, gestionarea securității, permițând depanarea în mai multe limbi etc. Procesul codului gestionat este prezentat în figură:

Net Common Language Runtime

2. Cod negestionat:

Codul dezvoltat în afara cadrului .NET este cunoscut sub numele de cod negestionat. Se spune că aplicațiile care nu rulează sub controlul CLR sunt negestionate. Anumite limbaje precum C++ pot fi folosite pentru a scrie astfel de aplicații, cum ar fi funcțiile de acces la nivel scăzut ale sistemului de operare. Compatibilitatea de fundal cu VB, ASP și COM sunt exemple de cod negestionat. Acest cod este executat cu ajutorul claselor wrapper. Procesul de cod negestionat este prezentat mai jos:

Net Common Language Runtime

Versiuni .NET CLR

CLR se actualizează din când în când pentru a oferi performanțe mai bune.

Versiunea .NET Versiunea CLR
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

Structura .NET CLR

Mai jos este structura componentelor Common Language Runtime.

Net Common Language Runtime

Suport bibliotecă de clasă de bază

Este o bibliotecă de clase care acceptă clase pentru aplicația .NET.

Suport pentru fire

Gestionează execuția paralelă a aplicației multi-threaded.

COM Marshaler

Oferă comunicarea între obiectele COM și aplicație.

Motor de securitate

Implementează restricții de securitate.

Motor de depanare

Vă permite să depanați diferite tipuri de aplicații.

Verificator de tip

Verifică tipurile utilizate în aplicație și verifică dacă se potrivesc cu standardele furnizate de CLR.

Manager de cod

Gestionează codul în timpul execuției.

Colector de gunoi

Eliberează memoria nefolosită și o alocă unei noi aplicații.

Handler de excepții

Se ocupă de excepția în timpul execuției pentru a evita eșecul aplicației.

ClassLoader

Este folosit pentru a încărca toate clasele în timpul rulării.