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