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

Download Report

Transcript 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) –

Slide 1

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 2

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 3

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 4

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 5

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 6

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 7

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 8

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 9

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 10

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 11

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 12

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 13

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 14

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 15

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 16

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 17

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 18

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 19

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 20

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 21

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 22

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 23

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 24

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 25

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 26

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 27

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X


Slide 28

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)

net

Starpvaloda un izpildvide




net

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

net

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



Vai visas valodas kļūst “vienādas”?

Termins “.net”?






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”

Asambleja







net

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)

net

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

net

The Common Language Runtime

GAC

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


net

Asambleju ielāde






net

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:










net

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.


net

Tips IL valodā (3)




net

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.
3.

public class Baze{
public string x = `a`;
public Base() = {print `Baze`;}
}

2.

public class A1 : Baze{
public string y = `b`;
public A1() = {print `A1`;}
}

1.

public class A2 : A1{
public string z = `c`;
public A2() = {print `A2`;}
}

4.
5.
6.

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


net

Objekta dzīves cikls CLR (1)

net

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 kompilācija

net

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.


JIT kompilatora kods
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();
}
}

mscorwks.dll!Prestubworker

Matem
cMethods(9)
ToString
Equals
GetHashCode
Finalize
.ctor
a
b
c
f

call
call
call
call
call
call
call
call
jmp

call
jmp


Matem.c() kods IA-32 mašīnkodā
[adrese2]....asm...
Matem.f() kods IA-32 mašīnkodā
[adrese3] ....asm...

Kļūdu apstrāde







net

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

net

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

net

Termini

net

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

Enterprise
Mašīna
Lietotājs

net

Druka: pilna pieeja
DNS: nav pieejas
SQL: tikai caur ADO.NET
Failu sistēma: pilna
piekļuve

Koda grupa A
Nosacījums (Zone=...)

Tiesību kopa A

Koda grupa B
Nosacījums (Publisher=...)

Tiesību kopa B

Koda grupa C
Nosacījums (Site = ...)

Tiesību kopa C
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
_
Public Sub DaritKautKo()
'dara kaut ko
End Sub
=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.

net

Drošības sistēmas trūkumi

net

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




net

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:
[email protected]


net

Papildus slaidi...


net

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
FileIO
 FileDialog
 IsolatedStorage
 Environment
 Registry
 UI
 Printing
 Reflection
 Security
 Socket
 Web
 DNS


net

OleDb
SQLClient
 MessageQueue
 EventLog
 DirectoryServices
 ... var tikt paplašināts, bet tad
jāraksta savas aplikācijas,
kas to nodrošina



Tiesību pieprasījuma steks

net

A.Main
FileIO -

AsamblejaA.exe
A.InitB

AsamblejaB.dll

B.ReadIniFile

FileIO +
FileIO .Open

mscorlib.dll
FileIO +

FileIO .Demand

X