CLR na platformie .NET

Download Report

Transcript CLR na platformie .NET

Tomasz Kostarski
O czym będzie?
 Co to jest CLR?
 Obsługa typów danych (CTS i Pakowanie)
 Zarządzanie pamięcią (Odzyskiwanie i Finalizatory)
 Wspólna specyfikacja języka (CLS)
 Kod zarządzalny (MSIL, Metadane, Podzespoły,
Wykonywanie kodu)
Co to jest CLR?
 Wspólne środowisko uruchomieniowe
 (Common Language Runtime)
 Wybór kompilatora dla języka
 Kompilacja do MSIL
 Wykonanie kodu zarządzanego
Obsługa typów danych
 Różne języki, różna składnia
 Podobne podstawowe pojęcia:
 Liczba całkowita
 Napis
 Zbieranie kodu w metody
 Grupowanie danych i metod w klasy
CTS - Wspólny zestaw typów
danych
 Common Type System
 Zestaw typów, niezależny od składni języka
 Każdy język zgodny z CLR musi używać chociaż części




typów z CTS, ale może mieć dowolną składnię
W każdym języku można definiować własne typy danych
spoza CTS
Typy skalarne i referencyjne, wszystkie dziedziczą po
Object
Wszystkie typy skalarne to typy proste, na stosie
pamiętamy ich wartość
Typy referencyjne przechowują na stosie wskaźnik do
swych wartości umieszczonych gdzieś w pamięci
Najważniejsze typy danych w CTS
Pakowanie (boxing)
 Konwersja typów skalarnych na typy referencyjne
 Używane np. przy przekazywaniu wartości skalarnej
do metody oczekującej typu referencyjnego
 Możliwa powtórna konwersja przez rozpakowanie
 Większość języków z CLR wykonuje to automatycznie
 Oczywisty wpływ na wydajność
Zarządzanie pamięcią
 Pamięć dla danych przydzielana na stosie lub stercie –
zmienne skalarne lub referencyjne
 Pamięć ze stosu zwalniana jest automatycznie
 Pamięć ze sterty po zapełnieniu zwalnia odśmiecacz
(garbage collector)
 GC działa automatycznie, nie zaleca się jawnego
uruchamiania go w aplikacji
Odzyskiwanie pamięci
Tworzenie aktualnej listy „osiągalnych” obiektów
2. Usuwanie obiektów spoza listy
3. Porządkowanie sterty w spójny blok zajętej pamięci
4. Poprawianie istniejących odwołań
1.
 Najwięcej śmieci wśród najmłodszych obiektów
 Najstarsze obiekty przesuwane są ku końcowi sterty
 Odśmiecanie najmłodszych obiektów, a jeśli nadal
brakuje pamięci przeglądanie starszych
Przed:
Po:
Finalizatory
 Każdy obiekt na stercie posiada finalizator (domyślnie
pusty)
 Kiedy GC znajdzie obiekt do usunięcia umieszcza go
na liście oczekujących na finalizację
 Po przeszukaniu całej pamięci, dla każdego obiektu z
listy wykonuje się jego finalizator
 Finalizator to nie destruktor – nie wiadomo kiedy i czy
się wykona (aplikacja może zakończyć się wcześniej)
 Dla ważnych czynności sprzątających lepiej stworzyć
odpowiednią metodę
CLS - Wspólna specyfikacja języka
 Common Language Specification
 Wywołanie kodu napisanego w jednym języku, z kodu
napisanego w innym
 Wymaga to obsługi w różnych językach typów danych
w ten sam sposób
 Określa jak duży podzbiór CTS musi byś
zaimplementowany w języku, by osiągnąć zgodność
 Niektóre wymagania: obsługa większości typów
skalarnych, najniższy indeks w tablicy musi być zerem
Kod zarządzany
 Kompilatory zamieniają kod źródłowy napisany w
dowolnym języku na:
 Kod wykonywalny zapisany w MSIL
 Metadane, czyli informacje na temat kodu
wykonywalnego i danych przez niego używanych
 W czasie wykonania aplikacji, CLR tłumaczy kod MSIL
na kod natywny procesora
 Ta konwersja daje możliwość zarządzania wykonaniem
aplikacji, stąd nazwa
MSIL - standardowy język pośredni
 Microsoft Intermediate Language
 Kod podobny do zestawu instrukcji procesora
 Polecenia MSIL bazują bezpośrednio na pojęciach
zdefiniowanych w CTS
 Kod źródłowy z języków wyższego poziomu,
kompilowany jest do wspólnego kodu pośredniego
 Dodatkowa warstwa abstrakcji daje nam potencjalną
przenośność
 Możliwość sprawdzenia bezpieczeństwa typów przed
uruchomieniem
Metadane
 Szczegółowy opis typów zdefiniowanych w kodzie
zarządzanym, z którym są związane
 Przechowywane w tym samym pliku co kod MSIL
 Opisują między innymi: nazwy typów, zasięgi, po kim
dziedziczy, interfejsy, metody, obsługiwane zdarzenia
 Z metadanych korzysta funkcja IntelliSense w Visual
Studio .NET
 W metadanych opisane są też atrybuty
Podzespoły/Złożenia (assembly)
 Aplikacja składa się z różnych plików, kod/grafika/tekst
 Grupowanie plików stanowiących jeden logiczny moduł,
udostępniający określoną funkcjonalność
 Manifest – odpowiednik metadanych dla pojedynczego
podzespołu, zawiera:
 nazwę podzespołu (może to być nazwa silna),
 numer wersji podzespołu (wspólny i taki sam dla wszystkich
modułów, które stanowią podzespół),
 informacje na temat kultury (lub języka) obsługiwanej przez
podzespół,
 listę wszystkich plików, które stanowią podzespół, wraz z ich
sumami kontrolnymi,
 listę innych wymaganych do pracy podzespołów wraz z numerami
ich wersji.
Podzespoły c.d.
 Silna nazwa – unikatowa w całym systemie
 W CLR nazwa typu danych, to nazwa nadana + nazwa
podzespołu w którym został zdefiniowany
 Większość podzespołów to pojedynczy plik DLL
 Instalacja podzespołu to po prostu skopiowanie plików
nie wymaga dodania wpisów do rejestru
Wykonywanie kodu zarządzanego
 Przy uruchomieniu aplikacji, potrzebne podzespoły są
odnajdywane i ładowane do pamięci
 Jeśli aplikacja nie wywoła żadnej metody z
podzespołu, nie zostanie on w ogóle załadowany
 Podzespoły są najpierw szukane w GAC (Global
Assembly Cache) - globalna pamięć podręczna
podzespołów, dopiero później w innych miejscach
 Po załadowaniu podzespołów potrzebna jest jeszcze
ich kompilacja z MSIL na kod natywny
Dwie metody kompilacji
JIT (just-in-time compilation) - kompilacją w samą porę
1.


Każda metoda kompilowana jest dopiero w czasie
pierwszego uruchomienia
Kompilacja następuje przy każdym uruchomieniu aplikacji
Przy użyciu NGEN (Native Image Generator)
2.



Kompiluje kod całego podzespołu do kodu binarnego
Kod maszynowy umieszczany jest w pamięci podręcznej
obrazów kodu natywnego (Native Image Cache)
Pozwala to na szybsze uruchamianie aplikacji
Źródła
 www.microsoft.com
KONIEC