280 likes | 536 Views
Microsoft .NET tehnoloģija. The Common Lanugage runtime un drošības mehānisms. Krišs Rauhvargers, 16.12.2003. Termini. CIL – (Common Intermediate Language) – starpvaloda
E N D
Microsoft .NET tehnoloģija The Common Lanugage runtime un drošības mehānisms Krišs Rauhvargers, 16.12.2003.
Termini • CIL – (Common Intermediate Language) – starpvaloda • CLI – (Common Language Infrastructure) – ECMA ratificēts specifikāciju kopums (ECMA-335), kas attiecināms uz CIL izpildes vidēm • CLR – (Common Language Runtime) – Microsoft implementācija CLI, kas paredzēta Windows operētājsistēmai (Tiek atbalstīti Windows XP/2000/NT4(Ar SP 6), Windows 98/ME, bet ne Windows 95)
Starpvaloda un izpildvide • CLI ir vide, kurā iespējams izpildīt augsta līmeņa programmēšanas valodās rakstītas aplikācijas (pēc kompilācijas uz CIL) neatkarīgi no operētājsistēmas. • Starpvaloda ir bināra valoda, uz kuru tiek kompilēts augsta līmeņa valodas kods. • C++, C#, VB.NET, JScript > CIL kompilatori no Microsoft • >30 valodu kompilatori no 3. puses izstrādātājiem
Kompilācija uz CIL • Vai visas valodas kļūst “vienādas”? C++ kods C# kods VB.net kods citas .net valodas kods C++ kompilators C# kompilators VB.net kompilators Atbilstošs kompilators IL kods JIT mašīnkoda izpilde CLI
.net aplikācija .net framework operētājsistēma un “dzelži” Termins “.net”? • .net nav programmēšanas valoda, • .net ir tehnoloģijas nosaukums un mārketinga apzīmējums, • .net ir valodas neatkarīga programmatūras platforma, • .net ir vairāku eksistējošu tehnoloģiju apvienojums, • .net framework starpslānis starp aplikāciju un operētājsistēmu.
Asambleja • Asambleja ir uzturēšanas vienība – izpildāma aplikācija vai bibliotēka. • Asambleju definē tās pilnais “vārds” (fully qualified reference): īsais nosaukums, lokalizācija, izstrādātāja paraksts un versija. • Asambleja satur resursus, tipu definīcijas un implementācijas, references uz citām asamblejām un asamblejas manifestu. • Manifestā ir aprakstīti asamblejas moduļi, resursi, tipi un references, asamblejas izpildei nepieciešamās tiesības.
Asambleja (2) • Asambleja sastāv no viena vai vairākiem moduļiem. • Modulis ir mazākā vienība, kas var saturēt manifestu. • Asambleja var saturēt moduļus, kas rakstīti dažādās .net valodās. • Asamblejas tiek pierakstītas bināros failos, kas ir izpildāmi Win32 EXE faili vai Win32 DLL faili.
CLR izpildes modelis GAC The Common Language Runtime JIT kompilators Asamblejas IL kods Nemenedžēts mašīnkods Mašīnkods Operētājsistēmas servisi
CLR servisi • IL koda kompilācija uz mašīnkodu • Objektorientētas programmēšanas iespēja (mantošana, polimorfisms) • Izņēmumsituāciju apstrādes mehānisms • Atmiņas pārvaldība (garbage collection) • Tipu ielāde • .NET bāzes klases + .NET framework klases (API) • Atkļūdošanas iespējas • Izpildes un koda pārvaldīšana
Asambleju ielāde • Asambleju iespējams ielādēt: • ja JIT kompilācijas laikā tiek atrasta reference uz citu asambleju, • Programmatiski izsaucot – Assembly.Load() vai Assembly.LoadFrom() • Windows reģistrs nesatur informāciju par asambleju atrašanās vietām. • Tiek izmantota CLR sastāvdaļa - assembly resolver • Ielādējot: • Tiek meklēta aktuālā asamblejas versija, noskaidrojot versiju pāradresācijas • Tiek meklēts asamblejas fails • GAC, • “Codebase”, • “Probing” metode
Tips IL valodā • Tips ir: • Abstrakcijas vienība ar nosaukumu. • Pamattipi (int32, double, character) • Lietotāja definēti datu tipi un to operācijas • Interfeisi • Lai .net valodas būtu bināri savietojamas, tajās jālieto unificēta tipu sistēma. • CTS (Common Type System) ir CLI sastāvdaļa, kas deklarē .net lietojamos datu tipus. • CLS (Common Language Specification) deklarē tipus, kurus jāatbalsta visām .net valodām. • Ja asambleja A1 eksportē tipu B un asasmbleja A2 eksportē tipu B, tad tie tiek uzskatīti par dažādiem tipiem.
Tips IL valodā (2) • Tiek izšķirti divu veidu tipi – vērtību tipi un referenču tipi. • Tips var aprakstīt • statiskas, virtuālas vai instances metodes (t.sk. atribūti un notikumi); • statiskus un instanču vērtību laukus; • iekšējus tipus. • CLR atbalsta tipu vienkārtēju mantošanu. • CLR atbalsta metožu pārlādēšanu.
public class Baze{ public string x = `a`; public Base() = {print `Baze`;} } 3. 4. public class A1 : Baze{ public string y = `b`; public A1() = {print `A1`;} } 2. 5. public class A2 : A1{ public string z = `c`; public A2() = {print `A2`;} } 1. 6. Tips IL valodā (3) • Tipa inicializēšana • .cctor – statiskais konstruktors (bez parametriem) • .ctor – instances konstruktors (iespējams pārlādēt) • Mantotiem tipiem konstruktors tiek izsaukts visvairāk atvasinātajam tipam. new A2();
Objekta dzīves cikls CLR • CLR pārvalda objekta dzīves ciklu: • meklē atmiņu objekta izveidei • skaita references uz objektu • “izmet” nereferencētos objektus no atmiņas • CLR izmanto garbage collector (GC), lai atbrīvotu atmiņu. • GC arī pārkārto “izdzīvojušos” objektus atmiņā. (NB! – piesaiste pie atmiņas tiešām adresēm var novest pie kļūdas!) • GC iespējams izsaukt programmatiski - GC.Collect()
Objekta dzīves cikls CLR (1) • Iznīcinot objekta instanci, nav nepieciešams iznīcināt izveidotos objektus – to dara GC. • CLR pieļauj arī destruktorus, bet tie izpildās brīdī, kad GC tīra atmiņu. • Deficītu resursu (piemēram, ADO konekcijas) atbrīvošanai izmanto Dispose() metodi.
JIT kompilatora kods Matem cMethods(9) ToString Equals GetHashCode Finalize .ctor a b c f mscorwks.dll!Prestubworker call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> Matem.c() kods IA-32 mašīnkodā [adrese2]....asm... Matem.f() kods IA-32 mašīnkodā jmp <adrese2> [adrese3] ....asm... jmp <adrese3> JIT kompilācija • Aplikāciju ātrai ielādei tās iespējams glabāt iekš GAC mašīnkodā (ngen.exe). • Izpildot IL kodu, metodes ķermenis tiek kompilēts tieši pirms pirmās izpildes. To sauc par JIT kompilāciju. Class Matem{ static int i; static void a(){i += 1}; static void b(){i += 2}; static void c(){i += 3}; static void f() { c(); b() a(); } }
Kļūdu apstrāde • Metode beidzas vai nu ar ret instrukciju, vai ar kļūdu. • Kļūdas gadījumā tiek veidota jauna kļūdas klases instance. Kļūdu klasēm jābūt atvasinātām no System.Exception. • Catch bloki tiek izpildīti koda secības kārtībā. • Finally bloks izpildās vienmēr – arī pēc kļūdas mešanas vai return izsaukuma. • Iespējams veidot neapstrādāto kļūdu ķērāju aplikācijas līmenī. Ja tāda nav, kļūdas pārķer CLR.
Remoting • Metožu izsaukumi tiek translēti par ziņojumiem, kuri tiek caur kanālu transportēti uz attālinātu mašīnu. • TCP un HTTP kanāli datu transportēšanai. • Ziņojumu serializācija izmantojot SOAP vai bināro ‘formatētāju’ • Apkalpošanas veidi: • singleton – viena instance katram tipam • singlecall – viena instance katram izsaukumam • client-activated – klients saņem objekta referenci
.net drošības modelis • CLR aizsargā nevis kodu no lietotājiem, bet lietotājus no koda. • Asamblejas tiesības noskaidro pēc tās identitātes: • Site, URL, Zone, Application Directory – no kurienes kods ir nācis • StrongName – nosaukums, versija, publiskā atslēga • Publisher – koda autora sertifikāts • Hash – konsistences pārbaude
Termini • CLR ierobežo piekļuves tiesības resursam (Failu sistēma, Windows reģistrs, piekļuve clipboard, piekļuve DNS) • Tiesības iespējams apvienot tiesību kopās (named permission set). Tiek uzturētas iebūvētās tiesību grupas kā Full trust, Nothing, Everything u.c. • Koda grupa nodrošina saviem dalībniekiem pieeju kādai tiesību kopai. • Ielādējot asambleju tiek meklētas visas koda grupas, kurās tā ir dalībnieks.
Drošības nosacījumu piemērošana Asambleja Site, Zone, Url, ApplicationDir. StrongName Publisher Hash Druka: pilna pieeja DNS: nav pieejas SQL: tikai caur ADO.NET Failu sistēma: pilna piekļuve Enterprise Koda grupa A Nosacījums (Zone=...) Tiesību kopa A Koda grupa B Nosacījums (Publisher=...) Tiesību kopa B Mašīna Koda grupa C Nosacījums (Site = ...) Tiesību kopa C Lietotājs Koda grupa C’1 Nosacījums (Publisher = ...) Tiesību kopa 4C’1 Koda grupa C’2 Nosacījums (Publisher = ...) Tiesību kopa 5C’2 Asamblejas instances tiesības: visu atrasto tiesību apvienojums, piemērojot atrasto tiesību apvienojumu.
Tiesību deklaratīvie pieprasījumi • Deklarē metodei (un tās izsauktajam kodam) potenciāli nepieciešamās tiesības. • Pieprasa, lai izsaucējam(iem) būtu prasītās tiesības. • Aizliedz apakšprocedūrām izmantot kādas tiesības <FileIOPermission((SecurityAction.Demand))> _ Public Sub DaritKautKo() 'dara kaut ko End Sub <SecurityPermission(SecurityAction.Deny, Flags =SecurityPermissionFlag.UnmanagedCode)> _ Function DariKautKoCitu() ‘.... mēģina izsaukt kaut ko no ārējas bibliotēkas End Function • Problēma - nav iespējams kompilācijas laikā “uzminēt” nepieciešamās atribūtu vērtības.
Drošības sistēmas trūkumi • Aamblejas tiesības kā atļauju apvienojums no visām koda grupām. • Lokālās mašīnas “Full Trust” panāk to, ka kodam uz lokālās mašīnas nav iespējams aizliegt izpildīties. • Vajadzīgi patiesi talantīgi un strādātgriboši administratori drošības sistēmas uzturēšanai.
Ieteicamā literatūra • Don Box, Chris Sells – Essential .NET Volume 1 – The Common Language Runtime (Addison – Wesley, 2003., 405 lpp.) • David S. Platt – Introducing Microsoft .NET (Microsoft press, 2001., 216 lpp.) • http://www.andymcm.com/dotnetfaq.htm • MSDN bibliotēka (http://msdn.microsoft.com)
Paldies! • Tas arī viss! • Ja rodas jautājumi, esmu atrodams: kriss@asdf.lv
Papildus slaidi... • Daži slaidi, kuri nav svarīgi stāstījumā, bet var izrādīties interesanti tiem, kam interesē smalkākas detaļas.
Iebūvētie tiesību objekti • OleDb • SQLClient • MessageQueue • EventLog • DirectoryServices • ... var tikt paplašināts, bet tad jāraksta savas aplikācijas, kas to nodrošina • FileIO • FileDialog • IsolatedStorage • Environment • Registry • UI • Printing • Reflection • Security • Socket • Web • DNS
A.Main AsamblejaA.exe FileIO - A.InitB AsamblejaB.dll B.ReadIniFile FileIO + FileIO .Open mscorlib.dll FileIO .Demand FileIO + Tiesību pieprasījuma steks X