1 / 41

.NET CLR

.NET CLR. Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem 1.0. Common Language Runtime. Közös nyelvi futtató rendszer A Microsoft üzleti implementációja Common Language Infrastruture (specifikáció), környezetek Létrehozó Fejlesztő futtató SSCLI (Rotor). Fő feladata.

kineks
Download Presentation

.NET CLR

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. .NET CLR Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem 1.0

  2. Common Language Runtime • Közös nyelvi futtató rendszer • A Microsoft üzleti implementációja • Common Language Infrastruture (specifikáció), környezetek • Létrehozó • Fejlesztő • futtató • SSCLI (Rotor)

  3. Fő feladata • Függetlenül hardvertől, szoftvertől: • Felügyelt futtatása a menedzselt kódnak • JIT fordítás • Biztonsági ellenőrzés

  4. SegítségekÚj technológiák • Alkalmazás tartományok (Application Domain)processz – alprocesszlehetőségek ugyanazok, de azalprocessz (pl.: plugin): • logikai processz, • alacsony költségek • Szerelvények (assembly) dll, dekultúra, és több verzió

  5. Alkalmazás tartomány

  6. Virtuális futtató környezetek • 1960 alakult ki az elv • Lassú hardverek • kezdetleges rendszer • 1990-es évek Java Virtual Machine (JVM) • „Eléggé” gyors hardverek, • jól szervezett technológiák, • osztott rendszerek, • népszerű, • interpretált

  7. Virtuális futtató környezetek II • 2000 .NET • Absztrakt futtató környezet • Nem interpretált • JIT fordítás • Telepítéskor fordítás (NGEN.exe) • Nyelv független • Osztott rendszerek

  8. Menedzselt alkalmazás élete 1. Forráskód (20 nyelv valamelyike) 2. MSIL kód + metadata 3.a Telepítéskor NGEN.exe 3.b Közvetlen használat előtt JIT fordító 4. CLR betölti, futtatja az alkalmazást

  9. JIT fordítás • Metódusonként fordít • Ha nem hívunk meg egy fv.-t, akkor nem is fordítja le • 32 byte-ig inline fv., felette fv. hívás

  10. Egyszerű példa static void Main() { Console.WriteLine(”Hello”); Console.WriteLine(”Bello”); }

  11. JIT fordítás menete • Mielőtt a Main lefutna a CLR az összes hivatkozást felderíti. • A felderített hivatkozásokból egy belső struktúrát épít fel. • Minden fv-hez egy bejegyzés. • Ez a bejegyzés tartalmazza majd a fv. kezdőcímét. • Végül beállítja a struktúra elemeit egy CLR-en belüli fv-re, nevezzük JITCopile-nak.

  12. JIT fordítás menete II • Amikor a WriteLine fv. először meghívódika JITCompile hívódik meg helyette! • JITCompile átnézi a metadatákat a fv. IL kódját keresve. • JITCompile ellenőrzi, majd lefordítja az IL-t nativ-ra. • Dinamikusan lefoglal memóriát, majd rámásolja a lefordított nativ kódot.

  13. JIT fordítás menete III • Visszatér, és átírja a struktúra megfelelő elemének tartalmát, hogy az a lefordított natív kódra mutasson. • 2. alkalommal csak fv hívás, mert már lefordította.

  14. Köztes kódMIL, MSIL, CIL • 1-4 byte-os utasítások • kb 260 db utasítás • Objektum orientált (newobj, callvirt) • Assembly (load, push, pop, call) • Absztrakt • Stack alapú (box, unbox) • Kivétel kezelést használ • A CLR minden funkciója elérhető segítségével!

  15. CLR menedzselt modul tartalma PE fej CLR fej METADATA IL kód Natív kód erőforrások

  16. PE (portable executable) fej • Hasonlít a COFF-ra • Tartalmazza a fájl típusát: • GUI • CUI • DLL • Időpecsétet • Csak natív CPU kódot tartalmazó modul esetén plusz információk a kódról

  17. CLR fej • Szükséges CLR verziószáma • Flegek • MetodDef metadata token a belépési ponthoz (Main fv.) • Helye, mérete, a modul: • METADATA-jának • erőforrásoknak • erős névnek • egyébb flegeknek • ...

  18. Metadata • Minden menedzselt modul tartalmaz metadata táblákat • 2 fajtája van: • leírják a típusokat, tagokat, amelyeket ugyanezen forráskód tartalmaz. • leírják azokat a típusokat, tagokat, amelyekre ez a forráskód referál, hivatkozik. • A metadata csak a fájlban tárolódhat!

  19. Assembly - szerelvény • Lehet exe vagy dll • Logikai, fizikai egysége az: • újrahasznosítható • telepíthető • verzionálható komponens. • Önleíró: minden információ tárol, ami szükséges a futásához. Semmilyen plusz info nem szükséges.

  20. Szerelvény II • Több modult is tartalmazhat. • Önálló biztonsági egység • Önálló típus egység • Legkisebb verzionálható egység • Fej-fej melletti futást támogató egység • Kódban import • Referencia hatáskör

  21. Több modul – egy szerelvényMikor szükséges, érdemes? • Típusokat tudjuk szétválasztaniÍgy a felhasználó lépésenként le tudja tölteni. • Erőforrásokat, adatokat mellékelünk a szerelvényhez. • Több programozási nyelven készül az alkalmazás.

  22. Több modult tartalmazó szerelvény • Sajnos a VS.NET nem ismeri. (Kézzel kell) • A modulok PE-je nem tartalmaz manifest-et, ezeket a szerelvény tárolja! • A modult csc esetén /t[arget]:module paraméterrel kell fordítani!Az eredménye xxx.netmodule lesz. • Egy szerelvényhez hozzá kell adni a modul(oka)t a /addmodule: kapcsolóval,vagy AssemblyLinker al.exe-vel

  23. Assembly Linker al.exe • Erőforrás hozzáillesztése a szerelvényhez: • beágyazás /embed[resource] • linkelés /link[resource] • 32 bites erőforrás hozzáillesztése/win32res • 32 bites ikon/win32icon

  24. AssemblyInfo.cs • A VS.NET automatikusan létrehozza • Attribútumokat lehet benne definiálni, melyek a szerelvényre vonatkoznak. • Némelyiket lehet a al.exe-ből állítani • Pl.:[assembly:AssemblyVersion(”3.0.0.0”)]al.exe - /version paraméter

  25. Assembly telepítése • Sima másolás • Privát telepítés, ha a szerelvény bárhová felmásoljuk, a használó másik szerelvény mellé., ilyenkor más szerelvények nem érik el. • Alkalmazás leszedése (uninstall) sima törlés • Nem kell regisztry-t, ini fájlokat módosítani

  26. Szerelvények konfiguráció • XML fájlok • Futtatható szerelvény személyes konfigurációja, vele azonos jegyzékben: xxx.exe.config • ASP.NET Web Forms, XML Web szervízek esetén a virtuális gyökerében Web.config, lehet sajátja is mellette Web.config • HTML oldal link tag-je <LINK REL=”Configuration” HREF=url>

  27. Globális konfiguráció • Felülírja az alkalmazás beállításait • Helye: %SystemRoot%\Microsoft.NET\Framework\vXXX\CONFIG\machine.config, ahol XXX a runtime verziója, pl.: 1.1.4322 • Grafikusan a Controll Panel alól.

  28. .NET Framework • %windir%\system32 jegyzékben kell lennie egy MSCorEE.dll fájlnak. • Több verzió is fent lehet egyidejűleg. • Melyik a beállított?HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\policy

  29. Menedzselt exe .text JMP _CorExeMain .idata DLL: MSCorLib.dll Function: _CorExeMain START Menedzselt exe betölti és inicializálja a CLR-t PE fej • Címtartomány Menedzselt exe CLR fej MSCorEE.dll

  30. Folytatás • MSCorEE megvizsgálja CLR fejet, a Main metódus token lekérdezi. • Megvizsgálja Main metadata-ját, lekérdezi az IL helyét az EXE-ben. • Lefordítja IL kódot natív CPU kódra. • A Main fv. kezdő címére ugrik.

  31. Program kérések Egy program, dinamikus, osztott • Hosztok futtatni szeretnének: • Távoli • Éppen letöltött, nem ellenőrzött, helyi • Helyi • Mobil kódot. • Szabad neki? (vírus, krekker, TU)

  32. Megoldások • Egyszerű: engedélyezett a kód, vagy nem (egész kód) • Java: homokzsákba (sandbox) letölthetjük a távoli kódokat, de nincs interakció a helyi erőforrásokkal. • .NET típus biztos • Szerelvény ellenőrzése (manifest) • Típusok ellenőrzése a szerelvényben

  33. Szerelvény ellenőrzés • A manifest integritásának ellenőrzésén alapul: • Tokenek hivatkozásának ellenőrzése (használt táblák) • Token sztring tábla hivatkozások ellenőrzése. • Ellenőrzés: • Amikor a GAC-ba betöltődik • Amikor a diszkről beolvassa a rendszer

  34. Típus ellenőrzés • Ha az előző ellenőrzés sikeres volt, akkor következik • Óvatos • Nem menedzselt kód teljesen megbízott, nem ellenőrzi!

  35. CIL kód kategóriák • IllegálisA JIT nem tudja natív kódra fordítani, érvénytelen utasítás(oka)t tartalmaz. Pl.: ugró utasítások rossz helyre • LegálisA JIT lefordítja nat. Kódra, de használ nem típus biztos lehetőségeket. Pl.: pointer aritmetikák adattagokra • Típus biztos • Ellenőrizhető

  36. CTS CLR/CTS Visual basic C# CLS JAVA

  37. CLS • CLS kompatibilitás az [assembly:CLSCompliant(true)]attribútummal kapcsolható be. public UInt32 ABC() {return 0;} public void abc(){}

  38. CLS II • Az előző kód a CLS kompatibilitás bekapcsolása nélkül hibajelzés nélkül fut,de ha bekapcsoljuk, akkor: • hiba1 : előjel nélküli egész integer nem kompatibilis • hiba2 : a CLS nem case sensitive, így az ABC és az abc ugyanaz!

  39. Profájlok • Könyvtárak (library) készlete. • Sztandard profájlok: • kernel – minimálisan ezt implementálni kell • típusokat implementáló osztályok • plusz osztályok a fordítóknak • compact – kiegészítő könyvtárakplusz funkciók

  40. Sztenderd CLI struktúra E x t e n d e d N u m e r i c Lib Compact profile E x t e n d e d A r r a y Lib Kernel profájl Base Class Library Runtime Infrastructure Library XML Library Reflection Library Network Library

  41. Irodalomjegyzék • http://msdn.microsoft.com/net

More Related