1 / 20

CLR na platformie .NET

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

nelia
Download Presentation

CLR na platformie .NET

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. CLR na platformie .NET Tomasz Kostarski

  2. 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)

  3. Co to jest CLR? • Wspólne środowisko uruchomieniowe • (Common Language Runtime) • Wybór kompilatora dla języka • Kompilacja do MSIL • Wykonanie kodu zarządzanego

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

  5. CTS - Wspólny zestaw typów danych • CommonType 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

  6. Najważniejsze typy danych w CTS

  7. 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ść

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

  9. Odzyskiwanie pamięci • Tworzenie aktualnej listy „osiągalnych” obiektów • Usuwanie obiektów spoza listy • Porządkowanie sterty w spójny blok zajętej pamięci • 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

  10. Przed: Po:

  11. 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ę

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

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

  14. MSIL - standardowy język pośredni • Microsoft IntermediateLanguage • 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

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

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

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

  18. 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, dopieropóźniej w innych miejscach • Po załadowaniu podzespołów potrzebna jest jeszcze ich kompilacja z MSIL na kod natywny

  19. Dwie metody kompilacji • JIT (just-in-timecompilation) - kompilacją w samą porę • Każda metoda kompilowana jest dopiero w czasie pierwszego uruchomienia • Kompilacja następuje przy każdym uruchomieniu aplikacji • Przy użyciu NGEN (NativeImage Generator) • Kompiluje kod całego podzespołu do kodu binarnego • Kod maszynowy umieszczany jest w pamięci podręcznej obrazów kodu natywnego (NativeImageCache) • Pozwala to na szybsze uruchamianie aplikacji

  20. KONIEC Źródła • www.microsoft.com

More Related