logo

Środowisko uruchomieniowe języka wspólnego platformy .NET (CLR)

.NET CLR to środowisko uruchomieniowe, które zarządza i wykonuje kod napisany w dowolnym języku programowania .NET. CLR to komponent maszyny wirtualnej platformy .NET. Kompilator tego języka kompiluje kod źródłowy aplikacji opracowanych przy użyciu języków zgodnych z platformą .NET do języka pośredniego CLR zwanego MSIL, tj. kodu języka pośredniego firmy Microsoft. Ten kod jest niezależny od platformy. Jest porównywalny z kodem bajtowym w Javie. Metadane są również generowane podczas kompilacji i kodu MSIL i przechowywane w pliku znanym jako plik manifestu. Te metadane dotyczą ogólnie elementów członkowskich i typów wymaganych przez środowisko CLR do wykonania kodu MSIL. Komponent kompilatora just-in-time CLR konwertuje kod MSIL na kod natywny maszyny. Ten kod jest zależny od platformy. CLR zarządza pamięcią, wątkami, wyjątkami, wykonywaniem kodu, bezpieczeństwem kodu, weryfikacją i kompilacją.

dfs kontra bfs

Poniższy rysunek przedstawia konwersję kodu źródłowego na kod natywny.

Środowisko wykonawcze języka wspólnego Net

Powyższy rysunek konwertuje kod na kod natywny, który procesor może wykonać.

Główne elementy CLR to:

  • Wspólny system typów
  • Specjacja języka wspólnego
  • Śmieciarz
  • Kompilator Just in Time
  • Metadane i zespoły
Środowisko wykonawcze języka wspólnego Net

1. Wspólny system typów:

CTS zapewnia wytyczne dotyczące deklarowania, używania i zarządzania typami danych w czasie wykonywania. Oferuje komunikację międzyjęzykową. Na przykład VB.NET ma typ danych integer, a C# ma typ danych int do zarządzania liczbami całkowitymi. Po kompilacji Int32 jest używany przez oba typy danych. Zatem CTS udostępnia typy danych przy użyciu kodu zarządzanego. Wspólny system typów pomaga w pisaniu kodu niezależnego od języka.

Zapewnia dwie kategorie typów.

    Typ wartości:Typ wartości przechowuje dane w pamięci przydzielonej na stosie lub wbudowanej w strukturę. Ta kategoria Typu przechowuje katalog danych. Jeśli wartość jednej zmiennej zostanie skopiowana do drugiej, obie zmienne przechowują dane niezależnie. Może to być typ wbudowany, zdefiniowany przez użytkownika lub typ wyliczeniowy. Typy wbudowane to prymitywne typy danych, takie jak numeryczne, logiczne, char i date. Użytkownicy w kodzie źródłowym tworzą typy zdefiniowane przez użytkownika. Wyliczenie odnosi się do zestawu wyliczeniowych wartości reprezentowanych przez etykiety, ale przechowywanych jako typ liczbowy.
    Środowisko wykonawcze języka wspólnego Net Typ odniesienia:Typ referencyjny przechowuje odniesienie do wartości adresu pamięci i jest alokowany na stercie. Pamięć sterty służy do dynamicznej alokacji pamięci. Typ odniesienia nie przechowuje bezpośrednio rzeczywistych danych, ale przechowuje adres danych. Za każdym razem, gdy tworzony jest obiekt typu referencyjnego, kopiowany jest adres, a nie rzeczywiste dane. Dlatego dwie zmienne będą odnosić się do tych samych danych. Jeśli dane jednego obiektu typu odniesienia ulegną zmianie, to samo zostanie odzwierciedlone w przypadku drugiego obiektu. Typy odwołań mogą być typami samoopisującymi, typami wskaźników lub typami interferencji. Typy samoopisujące mogą być typami łańcuchowymi, tablicowymi i klasowymi, które przechowują metadane o sobie.

2. Specyfikacja języka wspólnego (CLS):

Specyfikacja języka wspólnego (CLS) zawiera zestaw reguł, których muszą przestrzegać wszystkie języki obsługiwane przez sieć NET. Wspólne zasady ułatwiają wdrożenie integracji języków oraz pomagają w dziedziczeniu i debugowaniu między językami. Każdy język obsługiwany przez NET Framework ma swoje własne reguły składni. Ale CLS zapewnia interoperacyjność między aplikacjami opracowanymi przy użyciu języków NET.

3. Zbiórka śmieci:

Garbage Collector to komponent CLR, który działa jako automatyczny menedżer pamięci. Pomaga zarządzać pamięcią poprzez automatyczne przydzielanie pamięci zgodnie z wymaganiami. Przydziela pamięć sterty obiektom. Kiedy obiekty nie są używane, odzyskuje przydzieloną im pamięć do wykorzystania w przyszłości. Zapewnia także bezpieczeństwo obiektów poprzez niedopuszczenie, aby jeden obiekt korzystał z zawartości innego obiektu.

4. Kompilator Just in Time (JIT):

Kompilator JIT jest ważnym składnikiem CLR. Konwertuje kod MSIL na kod natywny (tj. kod specyficzny dla maszyny). Program .NET jest kompilowany jawnie lub niejawnie. Deweloper lub programista wywołuje konkretny kompilator, aby skompilować program w kompilacji jawnej. W przypadku kompilacji niejawnej program jest kompilowany dwukrotnie. Kod źródłowy jest kompilowany do języka pośredniego firmy Microsoft (MSIL) podczas pierwszego procesu kompilacji. Kod MSIL jest konwertowany na kod natywny w drugim procesie kompilacji. Proces ten nazywa się kompilacją JIT. Istnieją trzy typy kompilatorów JIT — Pre, Econo i Normal. Kompilator Pre JIT kompiluje cały kod MSIL do kodu natywnego przed wykonaniem. Econo JIT Compiler kompiluje tylko te części kodu MSIL, które są wymagane podczas wykonywania i usuwa te części, które nie są już potrzebne. Normalny kompilator JIT również kompiluje tylko te części kodu MSIL, które są wymagane podczas wykonywania, ale umieszcza je w pamięci podręcznej do wykorzystania w przyszłości. Nie wymaga rekompilacji już używanych części, ponieważ zostały one umieszczone w pamięci podręcznej.

5. Metadane:

Metadane to binarna informacja o programie, przechowywana w przenośnym pliku wykonywalnym CLR (PE) wraz z kodem MSIL lub w pamięci. Podczas wykonywania MSIL metadane są również ładowane do pamięci w celu właściwej interpretacji klas i pokrewnych. Informacje użyte w kodzie. Zatem metadane pomagają wdrożyć kod w sposób neutralny językowo lub osiągnąć interoperacyjność językową.

6. Zespoły:

Zespół jest podstawową jednostką fizycznego grupowania kodu. Składa się z manifestu zestawu, metadanych, kodu MSIL i zestawu zasobów, takich jak pliki obrazów. Jest również uważany za podstawową jednostkę wdrażania, kontrolę wersji, ponowne wykorzystanie, uprawnienia bezpieczeństwa itp.

Funkcje .NET CLR

Poniżej przedstawiono funkcje środowiska CLR.

  • Konwertuje program na kod natywny.
  • Obsługuje wyjątki
  • Zapewnia bezpieczeństwo typów
  • Zarządzanie pamięcią
  • Zapewnia bezpieczeństwo
  • Poprawiona wydajność
  • Niezależny od języka
  • Niezależny od platformy
  • Zbieranie śmieci
  • Zapewnia funkcje językowe, takie jak dziedziczenie, interfejsy i przeciążenie, dla programów obiektowych.

Kod działający w środowisku CLR nazywany jest kodem zarządzanym, natomiast kod poza środowiskiem CLR nazywany jest kodem niezarządzanym. Środowisko CLR zapewnia również warstwę interoperacyjności, która umożliwia współpracę zarówno kodów zarządzanych, jak i niezarządzanych.

1. Kod zarządzany:

Każdy język napisany w środowisku .NET jest kodem zarządzanym. Kod zarządzany korzysta z CLR, który opiekuje się aplikacjami poprzez zarządzanie pamięcią, obsługę bezpieczeństwa, umożliwianie debugowania w różnych językach itp. Proces zarządzanego kodu pokazano na rysunku:

Środowisko wykonawcze języka wspólnego Net

2. Kod niezarządzany:

Kod opracowany poza platformą .NET jest nazywany kodem niezarządzanym. Aplikacje, które nie działają pod kontrolą środowiska CLR, nazywane są niezarządzanymi. Do pisania takich aplikacji można używać niektórych języków, takich jak C++, na przykład funkcji dostępu niskiego poziomu do systemu operacyjnego. Zgodność w tle z VB, ASP i COM to przykłady kodu niezarządzanego. Kod ten jest wykonywany za pomocą klas opakowania. Poniżej przedstawiono proces kodu niezarządzanego:

Środowisko wykonawcze języka wspólnego Net

Wersje .NET CLR

Środowisko CLR aktualizuje się od czasu do czasu, aby zapewnić lepszą wydajność.

Wersja .NET Wersja 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

Struktura .NET CLR

Poniżej znajduje się struktura komponentów środowiska uruchomieniowego języka wspólnego.

Środowisko wykonawcze języka wspólnego Net

Obsługa bibliotek klas podstawowych

Jest to biblioteka klas obsługująca klasy dla aplikacji .NET.

Wsparcie wątków

Zarządza równoległym wykonywaniem aplikacji wielowątkowej.

Marszałek COM

Zapewnia komunikację pomiędzy obiektami COM a aplikacją.

Silnik bezpieczeństwa

Egzekwuje ograniczenia bezpieczeństwa.

Silnik debugowania

Umożliwia debugowanie różnego rodzaju aplikacji.

Kontroler typu

Sprawdza typy użyte w aplikacji i weryfikuje ich zgodność ze standardami dostarczonymi przez CLR.

Menedżer kodu

Zarządza kodem w czasie wykonywania.

Śmieciarz

Zwalnia nieużywaną pamięć i przydziela ją nowej aplikacji.

Obsługa wyjątków

Obsługuje wyjątek w czasie wykonywania, aby uniknąć awarii aplikacji.

Moduł ładujący klasy

Służy do ładowania wszystkich klas w czasie wykonywania.