300 likes | 460 Views
Platformy technologiczne Platforma .net . mgr inż. Tomasz Gawron. Czym jest .NET. Platforma nie związana z językiem programowania Środowisko uruchomieniowe (CLR) Biblioteka klas (BCL) Jezyk pośredni (MSIL) Automatyczne zarządzanie: Kodem Pamięcią Wyjątkami
E N D
Platformy technologicznePlatforma .net mgr inż. Tomasz Gawron
Czym jest .NET • Platforma nie związana z językiem programowania • Środowisko uruchomieniowe (CLR) • Biblioteka klas (BCL) • Jezyk pośredni (MSIL) • Automatyczne zarządzanie: • Kodem • Pamięcią • Wyjątkami • Implementacje OpenSource (Mono, Rotor) Platformy Technologiczne 2014
Cele i charakterystyka • Trzy główne elementy: • Framewerk • Produkty (MS Windows, MS Office, Visual Studio, …) • Usługi • Unifikacja API • Zabezpieczenia unikalną częścią platformy • Uproszczone wytwarzanie i instalowanie aplikacji • XML jako metajęzyk Platformy Technologiczne 2014
Zadada działania Platformy Technologiczne 2014
Stos platformy Platformy Technologiczne 2014
Windows 8 Platformy Technologiczne 2014
Historia platformy Platformy Technologiczne 2014
C# - ewolucja Platformy Technologiczne 2014
Elementy platformy .NET • Common Language Runtime • środowisko wykonawcze odpowiedzialne za lokalizowanie, wczytywanie oraz zarządzanie typami .NET. • Common Language Infrastructure • Common Type System (CTS) - standard obejmujący sposób reprezentacji typów danych w pamięci komputera • Common Language Specification (CLS) - zbiór zasad i reguł, które musi spełnić język programowania aby współpracować z CLI • Common Intermediate Language • język pośredni (MSIL) składający się z niezależnego od procesora zestawu rozkazów, do którego kompilowane są wszystkie programy korzystające ze środowiska .NET • Metadane Platformy Technologiczne 2014
Common Language Runtime • Zarządzanie kodem (uruchamianie i nadzór nad jego wykonywaniem) • Izolowanie obszarów pamięci przydzielonych poszczególnym aplikacjom • Konwersja języka pośredniego IL do kodu maszynowego • Zarządzanie pamięcią (w przypadku obiektów zarządzanych) • Dostęp do metadanych (rozszerzonej informacji o typach) • Stosowanie zabezpieczeń dostępu kodu do zasobów, • Weryfikacja zgodności typów, • Obsługa wyjątków i przekazywanie ich pomiędzy różnymi językami programowania, • Obsługa współpracy pomiędzy kodem zarządzanym, obiektami COM i starszymi bibliotekami DLL, • Automatyzacja tworzenia obiektów, • Usługi związane z tworzeniem oprogramowania (debugowanie, profilowanie itp.) Platformy Technologiczne 2014
CLI – standard ECMA • Zgłoszony wspólnie przez Micosoft, Intel i HP w 2000 roku Platformy Technologiczne 2014
CLI – Common Type System • Zarządzanie typami danych • Podział na dwie grupy: • Typy wartościowe (value type): • Prymitywy (bool, char, int, float…), struktury (struct), emumeratory (enum) • umieszczane na stosie • bezpośrednio zawierają dane • każda zmienna ma swoją kopię • nie mogą zawierać null-i • Typy referencyjne (reference type) • klasy, tablice, delegaty, interfejsy • umieszczane na stercie • zmienna zawiera referencję do danych • wiele zmiennych może odnosić się do jednego obiektu – operacje na jednej zmiennej mogą mieć wpływ na drugą • cykl życia zarządzany przez Garbage Collector Platformy Technologiczne 2014
CLI – Common Language Specification • Zestaw zasad umożliwiających współpracę pomiędzy językami • Trzy główne elementy: • Framework • Biblioteka zawierająca kod zgodny z specyfikacją CLS • Consumer • Język programowania lub narzędzie zaprojektowane aby dać dostęp do cech dostarczonych przez Framework zgodny z CLS • Extender • Język programowania lub narzędzie zaprojektowane, aby umożliwić wykorzystanie i rozszerzanie Frameworku zgodnego z specyfikacją CLS Platformy Technologiczne 2014
Common Intermediate Language • Język pośredni (CIL) jest niezależnym od procesora zestawem rozkazów, do którego kompilowane są wszystkie programy korzystające ze środowiska .NET. • Zawiera instrukcje niezbędne do ładowania, przechowywania i inicjalizowania obiektów oraz do wywoływania ich metod. Wraz z metadanymi i wspólnym systemem typów, MSIL pozwala na pełną integrację pomiędzy różnymi językami programowania. • Kod skompilowany do języka IL jest wejściem do kompilatora JIT (Just-In-Time Compilation) przekształcającego go w kod maszynowy. • Kod jest kodem zarządzanym Platformy Technologiczne 2014
CIL – kompilacja JIT • CIL jest kompilowany do kodu procesora podczas wykonywania programu IL // Point pt = new Point(); .locals init ([0] class Point pt) newobj instance void Point::.ctor() stloc.0 // pt.x = 200; ldloc.0 ldc.i4 0xc8 stfld int32 Point::x // pt.y = 300; ldloc.0 ldc.i4 0x12c stfld int32 Point::y C# Point pt; pt = new Point(); pt.x = 200; pt.y = 300; CIL dev-time compile Intel x86 run-time compile call FD5B0AD8 ; allocate mov ecx, eax ; ecx == pt call dword ptr ds:[003E5144h] ; pt.ctor mov dword ptr [ecx+4], 0C8h ; pt.x = 200 mov dword ptr [ecx+8], 12Ch ; pt.y = 300 Platformy Technologiczne 2014
CIL - przykład IL_006e: ldloc.s V_4 IL_0070: ldloc.1 IL_0071: ldelema [System.Drawing]System.Drawing.Color IL_0076: ldloc.0 IL_0077: ldloc.1 IL_0078: ldarg.1 IL_0079: sub IL_007a: ldloc.2 IL_007b: callvirt instance valuetype [System.Drawing]System.Drawing.Color [System.Drawing]System.Drawing.Bitmap::GetPixel(int32,int32) IL_0080: stobj [System.Drawing]System.Drawing.Color IL_0085: ldloc.1 IL_0086: ldc.i4.1 IL_0087: sub IL_0088: stloc.1 IL_0089: ldloc.1 IL_008a: ldarg.1 IL_008b: bge.s IL_006e Platformy Technologiczne 2014
Podzespoły - Assemblies • Logiczne bloki, skompilowane do kodu pośredniego IL, z których buduje się aplikacje .NET • Zawierają kod w języku IL oraz metadane • Wersjonowane • Opisywane przez 2 rodzaje metadanych: • manifest • Nazwa podzespołu • Numer wersji • Podpis cyfrowy • Lista uprawnień • metadane indywidualne Platformy Technologiczne 2014
Prog.cs Lib.cs class A { ... } class B { ... } class C { ... } csc Prog.cs,Lib.cs Prog.exe manifest metadata CIL code of A CIL code of B CIL code of C loader Assemblies - metadane • Metadane typów - szczegółowy opis typów zdefiniowanych w kodzie zarządzanym, z którym są związane. Opis ten przechowywany jest w tym samym pliku, w którym znajduje się kod CIL. Informacje zawierają: • Opis typów • nazwę typu • zasięg typu (publiczny lub w granicach podzespołu) • nazwę typu, po którym dziedziczy opisywany typ • implementowane interfejsy • implementowane metody • udostępniane właściwości • obsługiwane zdarzenia • Atrybuty – dodatkowe informacje o elementach kodu • atrybuty mają określone nazwy i funkcje, definiowane przez różne części środowiska .NET Framework • mogą one służyć do sterowania sposobem wykonywania kodu, opisać wymagania bezpieczeństwa Platformy Technologiczne 2014
Assemblies • Po skompilowaniu do kodu IL, zarządzany kod jest częścią podzespołu • podzespół zawiera jedną lub wiele DLLs or EXEs • Podzespoły mogą być używane jako prywatne albo współdzielone • Podzespół prywatny jest instalowany poprzez kopiowanie do folderu • nie wymagane jest umieszczenie w rejestrze • Są podstawą bezpieczeństwa kodu • Pobierany kod może mieć przydzielone uprawnienia Platformy Technologiczne 2014
Strong-Named Assemblies • Składają się z: • Nazwy • Wersji • Klucza i podpisu • Pozwalają na zapewnienie unikalności w obrębie maszyny poprzez podpis • Gwarantują liniowość wytwarzania – tylko właściciel klucza może opublikować kolejną wersję • Wspomagają bezpieczeństwo – poprzez niezmienność podpisu Platformy Technologiczne 2014
Global Assembly Cache • Umożliwia globalne rejestrowanie i zarządzanie bibliotekami dll • C:\Windows\assembly • gacutil.exe • Różne aplikacje mogą korzystać z tej samej biblioteki • GAC przechowuje różne wersje biblioteki (32-bit, 64-bit) • Rozwiązuje problem dll hell • Różne wersje tej samej biblioteki • Problem w dostępie do właściwej wersji Platformy Technologiczne 2014
Bezpieczeństwo w .NET • Role Based Security • Identity (tożsamość użytkownika) • Principal (role użytkownika) • Code Access Security • Ograniczanie funkcjonalności kodu • Ograniczanie wywołania kodu • Identyfikacja kodu Platformy Technologiczne 2014
Role Based Security • Identity • WindowsIdentity, GenericIdentity, IIdentity • Principals • WindowsPrincipal, GenericPrincipal, IPrincipal • Możemy uzależnić wykonanie kodu od posiadanych przez użytkownika uprawnień Platformy Technologiczne 2014
Code Access Security • Operuje na uprawnieniach do kodu (FileIOPermission, UIPermission...) • Można tworzyć własne zestawy uprawnień • Na poziomie CLR tworzone są grupy kodu o identycznych uprawnieniach • 4 poziomy uprawnień: • Enterprise (cały kod zarządzany) • Machine (cały kod zarządzany na komputerze) • User (cały kod zarządzany powiązany z użytkownikiem) • Application Domain (kod zarządzany w aplikacji hosta) Platformy Technologiczne 2014
Biblioteki klas • Elementy biblioteki klas .NET Framework, pogrupowane są za pomocą hierarchicznej struktury przestrzeni nazw (namespace) • ok. 100 namespaces z około 2000 typów • Umożliwiają dostęp do usług systemowych i zostały zaprojektowane tak, aby stanowiły podstawę do tworzenia aplikacji, komponentów i kontrolek .NET Platformy Technologiczne 2014
Użyteczne namespaces Platformy Technologiczne 2014
Użyteczne namespaces Platformy Technologiczne 2014
Visual Studio Platformy Technologiczne 2014
Visual Studio Platformy Technologiczne 2014
Dostępność narzędzi • MSDNAA • Bezpłatne wersje Express • MS BizSpark (http://www.microsoft.com/bizspark/) • Implementacje OpenSource (http://www.mono-project.com) Platformy Technologiczne 2014