Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

1.NET CLR Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem 1.0.

Hasonló előadás


Az előadások a következő témára: "1.NET CLR Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem 1.0."— Előadás másolata:

1 1.NET CLR Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem 1.0

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

3 3 Fő feladata Függetlenül hardvertől, szoftvertől: 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 4 Segítségek Új technológiák Alkalmazás tartományok (Application Domain) processz – alprocessz lehetőségek ugyanazok, de az alprocessz (pl.: plugin): Alkalmazás tartományok (Application Domain) processz – alprocessz lehetőségek ugyanazok, de az alprocessz (pl.: plugin): –logikai processz, –alacsony költségek Szerelvények (assembly) dll, de kultúra, és több verzió Szerelvények (assembly) dll, de kultúra, és több verzió

5 5 Alkalmazás tartomány

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

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

8 8

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

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

11 11 JIT fordítás menete Mielőtt a Main lefutna a CLR az összes hivatkozást felderíti. 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. 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. Végül beállítja a struktúra elemeit egy CLR-en belüli fv-re, nevezzük JITCopile- nak.

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

13 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. 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. 2. alkalommal csak fv hívás, mert már lefordította.

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

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

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

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

18 18 Metadata Minden menedzselt modul tartalmaz metadata táblákat Minden menedzselt modul tartalmaz metadata táblákat 2 fajtája van: 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! A metadata csak a fájlban tárolódhat!

19 19 Assembly - szerelvény Lehet exe vagy dll Lehet exe vagy dll Logikai, fizikai egysége az: 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. Önleíró: minden információ tárol, ami szükséges a futásához. Semmilyen plusz info nem szükséges.

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

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

22 22 Több modult tartalmazó szerelvény Sajnos a VS.NET nem ismeri. (Kézzel kell) Sajnos a VS.NET nem ismeri. (Kézzel kell) A modulok PE-je nem tartalmaz manifest- et, ezeket a szerelvény tárolja! 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. 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 Egy szerelvényhez hozzá kell adni a modul(oka)t a /addmodule: kapcsolóval, vagy AssemblyLinker al.exe-vel

23 23 Assembly Linker al.exe Erőforrás hozzáillesztése a szerelvényhez: 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 erőforrás hozzáillesztése /win32res 32 bites ikon /win32icon 32 bites ikon /win32icon

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

25 25 Assembly telepítése Sima másolás 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. 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 Alkalmazás leszedése (uninstall) sima törlés Nem kell regisztry-t, ini fájlokat módosítani Nem kell regisztry-t, ini fájlokat módosítani

26 26 Szerelvények konfiguráció XML fájlok XML fájlok Futtatható szerelvény személyes konfigurációja, vele azonos jegyzékben: xxx.exe.config 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 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 HTML oldal link tag-je

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

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

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

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

31 31 Program kérések Egy program, dinamikus, osztott Hosztok futtatni szeretnének: 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) Szabad neki? (vírus, krekker, TU)

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

33 33 Szerelvény ellenőrzés A manifest integritásának ellenőrzésén alapul: 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: Ellenőrzés: –Amikor a GAC-ba betöltődik –Amikor a diszkről beolvassa a rendszer

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

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

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

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

38 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: 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 39 Profájlok Könyvtárak (library) készlete. Könyvtárak (library) készlete. Sztandard profájlok: Sztandard profájlok: –kernel – minimálisan ezt implementálni kell típusokat implementáló osztályok típusokat implementáló osztályok plusz osztályok a fordítóknak plusz osztályok a fordítóknak –compact – kiegészítő könyvtárak plusz funkciók

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

41 41 Irodalomjegyzék


Letölteni ppt "1.NET CLR Krizsán Zoltán Általános Informatikai Tanszék Miskolci Egyetem 1.0."

Hasonló előadás


Google Hirdetések