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 ReportTranscript 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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