microsoft .net tehnoloģija

28
Microsoft .NET tehnoloģija The Common Lanugage runtime un drošības mehānisms Krišs Rauhvargers, 16.12.2003.

Upload: thina

Post on 11-Jan-2016

45 views

Category:

Documents


2 download

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 Presentation

TRANSCRIPT

Page 1: Microsoft .NET tehnoloģija

Microsoft .NET tehnoloģijaMicrosoft .NET tehnoloģija

The Common Lanugage runtimeun drošības mehānisms

Krišs Rauhvargers,16.12.2003.

Page 2: Microsoft .NET tehnoloģija

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)

Page 3: Microsoft .NET tehnoloģija

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

Page 4: Microsoft .NET tehnoloģija

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

Page 5: Microsoft .NET tehnoloģija

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”

Page 6: Microsoft .NET tehnoloģija

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.

Page 7: Microsoft .NET tehnoloģija

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.

Page 8: Microsoft .NET tehnoloģija

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

Page 9: Microsoft .NET tehnoloģija

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

Page 10: Microsoft .NET tehnoloģija

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

Page 11: Microsoft .NET tehnoloģija

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.

Page 12: Microsoft .NET tehnoloģija

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.

Page 13: Microsoft .NET tehnoloģija

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.

Page 14: Microsoft .NET tehnoloģija

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()

Page 15: Microsoft .NET tehnoloģija

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.

Page 16: Microsoft .NET tehnoloģija

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>

Page 17: Microsoft .NET tehnoloģija

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.

Page 18: Microsoft .NET tehnoloģija

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

Page 19: Microsoft .NET tehnoloģija

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

Page 20: Microsoft .NET tehnoloģija

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.

Page 21: Microsoft .NET tehnoloģija

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.

Page 22: Microsoft .NET tehnoloģija

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.

Page 23: Microsoft .NET tehnoloģija

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.

Page 24: Microsoft .NET tehnoloģija

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)

Page 25: Microsoft .NET tehnoloģija

net netPaldies!Paldies!

Tas arī viss! Ja rodas jautājumi, esmu atrodams:

[email protected]

Page 26: Microsoft .NET tehnoloģija

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.

Page 27: Microsoft .NET tehnoloģija

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

Page 28: Microsoft .NET tehnoloģija

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