CLR na platformie .NET

Post on 30-Jan-2016

61 views 0 download

description

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?. - PowerPoint PPT Presentation

Transcript of 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ęzykaKompilacja do MSILWykonanie kodu zarządzanego

Obsługa typów danychRóżne języki, różna składniaPodobne podstawowe pojęcia:

Liczba całkowitaNapisZbieranie kodu w metodyGrupowanie danych i metod w klasy

CTS - Wspólny zestaw typów danychCommon Type SystemZestaw typów, niezależny od składni językaKaż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 referencyjneUż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 referencyjnePamięć ze stosu zwalniana jest automatyczniePamięć ze sterty po zapełnieniu zwalnia

odśmiecacz (garbage collector)GC działa automatycznie, nie zaleca się

jawnego uruchamiania go w aplikacji

Odzyskiwanie pamięci1. Tworzenie aktualnej listy „osiągalnych” obiektów2. Usuwanie obiektów spoza listy3. Porządkowanie sterty w spójny blok zajętej

pamięci4. Poprawianie istniejących odwołań

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:

FinalizatoryKaż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 finalizatorFinalizator 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ęzykaCommon Language SpecificationWywołanie kodu napisanego w jednym języku, z

kodu napisanego w innymWymaga to obsługi w różnych językach typów

danych w ten sam sposóbOkreś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ądzanyKompilatory zamieniają kod źródłowy

napisany w dowolnym języku na:Kod wykonywalny zapisany w MSILMetadane, 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średniMicrosoft Intermediate LanguageKod podobny do zestawu instrukcji procesoraPolecenia MSIL bazują bezpośrednio na

pojęciach zdefiniowanych w CTSKod ź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

MetadaneSzczegółowy opis typów zdefiniowanych w

kodzie zarządzanym, z którym są związanePrzechowywane w tym samym pliku co kod

MSILOpisują 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/tekstGrupowanie 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 systemieW 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ądzanegoPrzy uruchomieniu aplikacji, potrzebne podzespoły

są odnajdywane i ładowane do pamięciJeśli aplikacja nie wywoła żadnej metody z

podzespołu, nie zostanie on w ogóle załadowanyPodzespoł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 kompilacji1. JIT (just-in-time compilation) - kompilacją w samą

porę Każda metoda kompilowana jest dopiero w czasie

pierwszego uruchomienia Kompilacja następuje przy każdym uruchomieniu

aplikacji

2. Przy użyciu NGEN (Native Image Generator) 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

KONIEC

www.microsoft.comŹródła