microsoft .net tehnoloģija
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
Microsoft .NET tehnoloģijaMicrosoft .NET tehnoloģija
The Common Lanugage runtimeun drošības mehānisms
Krišs Rauhvargers,16.12.2003.
net netTerminiTermini
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)
net netStarpvaloda un izpildvideStarpvaloda 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
net netKompilācija uz CILKompilācija uz CIL
Vai visas valodas kļūst “vienādas”?
C++ kodsC++ kods C# kodsC# kods VB.net kodsVB.net kods citas .net valodas kods
citas .net valodas kods
C++ kompilators C# kompilatorsVB.net
kompilatorsAtbilstošs kompilators
IL kodsIL kods
JIT mašīnkoda izpilde CLIJIT mašīnkoda izpilde CLI
net netTermins “.net”?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.
.net aplikācija
.net framework
operētājsistēma un “dzelži”
net netAsamblejaAsambleja
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.
net netAsambleja (2)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.
net netCLR izpildes modelisCLR izpildes modelis
Asamblejas IL kodsAsamblejas IL kods
The Common Language Runtime
JIT kompilators
Mašīnkods
Operētājsistēmas servisi
GAC
Nemenedžētsmašīnkods
net netCLR servisiCLR 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
net netAsambleju ielādeAsambleju 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
net netTips IL valodā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.
net netTips IL valodā (2)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.
net netTips IL valodā (3)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.
public class Baze{ public string x = `a`; public Base() = {print `Baze`;}}
public class A1 : Baze{ public string y = `b`; public A1() = {print `A1`;}}
public class A2 : A1{ public string z = `c`; public A2() = {print `A2`;}}
new A2();1.
2.
3. 4.
5.
6.
net netObjekta dzīves cikls CLRObjekta 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()
net netObjekta dzīves cikls CLR (1)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.
net netJIT kompilācijaJIT 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(); }}
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(); }}
Matem
cMethods(9)ToStringEqualsGetHashCodeFinalize.ctorabcf
call <adrese1>call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1> call <adrese1>call <adrese1>
[adrese2]....asm...
mscorwks.dll!Prestubworker
[adrese3] ....asm...
JIT kompilatora kods
Matem.c() kods IA-32 mašīnkodā
Matem.f() kods IA-32 mašīnkodā
jmp <adrese2>jmp <adrese3>
net netKļūdu apstrādeKļū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.
net netRemotingRemoting
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 net.net drošības modelis.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
net netTerminiTermini
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.
net net
LietotājsLietotājs
Enterprise Enterprise
MašīnaMašīna
Drošības nosacījumu piemērošanaDrošības nosacījumu piemērošana
AsamblejaAsambleja Site, Zone, Url, ApplicationDir.Site, Zone, Url, ApplicationDir. StrongNameStrongName PublisherPublisher HashHash
Koda grupa ANosacījums (Zone=...)
Koda grupa BNosacījums (Publisher=...)
Koda grupa CNosacījums (Site = ...)
Tiesību kopa A
Tiesību kopa B
Tiesību kopa C
Koda grupa C’1Nosacījums (Publisher = ...)
Koda grupa C’2Nosacījums (Publisher = ...)
Tiesību kopa 4C’1
Tiesību kopa 5C’2
Druka: pilna pieejaDruka: pilna pieejaDNS: nav pieejasDNS: nav pieejasSQL: tikai caur ADO.NETSQL: tikai caur ADO.NETFailu sistēma: pilna Failu sistēma: pilna piekļuvepiekļuve
Asamblejas instances tiesības:visu atrasto tiesību apvienojums, piemērojot atrasto tiesību apvienojumu.
net netTiesību deklaratīvie pieprasījumiTiesī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 SecurityPermission(SecurityAction.Deny, Flags =SecurityPermissionFlag.UnmanagedCode)> _=SecurityPermissionFlag.UnmanagedCode)> _
Function Function DariKautKoCituDariKautKoCitu()()
‘‘.... mēģina izsaukt kaut ko no ārējas bibliotēkas.... mēģina izsaukt kaut ko no ārējas bibliotēkas
End FunctionEnd Function
Problēma - nav iespējams kompilācijas laikā “uzminēt” nepieciešamās atribūtu vērtības.
net netDrošības sistēmas trūkumiDrošī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.
net netIeteicamā literatūraIeteicamā 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)
net netPapildus slaidi...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.
net netIebūvētie tiesību objektiIebūvētie tiesību objekti
FileIO FileDialog IsolatedStorage Environment Registry UI Printing Reflection Security Socket Web DNS
OleDb SQLClient MessageQueue EventLog DirectoryServices ... var tikt paplašināts, bet
tad jāraksta savas aplikācijas, kas to nodrošina
net netTiesību pieprasījuma steksTiesību pieprasījuma steks
mscorlib.dllmscorlib.dll
AsamblejaB.dllAsamblejaB.dll
AsamblejaA.exeAsamblejaA.exe
FileIO +FileIO +
FileIO +FileIO +
FileIO -FileIO -
FileIO .DemandFileIO .Demand
FileIO .OpenFileIO .Open
B.ReadIniFileB.ReadIniFile
A.InitBA.InitB
A.MainA.Main
XX