O documento descreve a arquitetura da plataforma .NET Framework. Em três frases ou menos:
A plataforma .NET Framework possui como elementos centrais o Common Language Runtime (CLR), que executa o código de forma gerenciada, o Intermediate Language (IL) que é o código de nível intermediário independente de CPU, e os metadados que fornecem informações sobre os tipos e membros dos assemblies.
1. Dev Arquitetura da
2011
in Plataforma
.Net Framework
Cachu
CLR, CLS, CTS, IL, J#,
Metadados, Windows, DLL,
Console, JIT , MSCorEE,
_CorExeMain, JMP, idasm,
WebService, ECMA, SSCLI,
PE, Assembly, VES, Thread,
Exeção, Gabage Collector,
SO, CPU, ilasm, csc,
module, member, public,
COM, linkeditor, AL.exe,
C#, VB,Fortran
andre.lopes@studentpartners.com.br
2. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
2002
Serviços Web Baseados
em XML
.Net Framework
1996 1998
Internet Internet
1ª Geração 2ª Geração
IE/IIS WinDNA
1992
Cliente/Servidor
Win32
andre.lopes@studentpartners.com.br
3. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
Web Service
Aplicação programável, acessada como um
componente via protocolos Web padrões
Um consumidor do Web Service pode ser
qualquer dispositivo
Protocolos abertos de internet
Descrição
dos
Serviços
Documento
Aplicação WSDL Web
Cliente Invoca o Serviço Service
Resposta
andre.lopes@studentpartners.com.br
4. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
Web Service - Benefícios
Escolha entre fazer ou comprar
Minimiza tempo de desenvolvimento e custo
Permite integração entre aplicações, plataformas
e negócios
andre.lopes@studentpartners.com.br
5. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
.Net é um framework para desenvolvimento de aplicações
baseadas em janelas e internet
Coleção de tecnologias (Web Pages, Web Services, WPF,
WCF, ...)
Independente de SO (IL)
Interação entre diferentes linguagens
Interoperabilidade com componentes já existentes
andre.lopes@studentpartners.com.br
6. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
ModuloA.cs ModuloB.vb
Representação Intermédia
Interoperabilidade
ModuloA.dll ModuloB.dll
entre linguagens
Windows Windows Portabilidade
XP CE
andre.lopes@studentpartners.com.br
7. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
Web Services XML
Web Forms
GUI Win32
CUI Win32
Serviços
Utilitários
Componentes Isolados
andre.lopes@studentpartners.com.br
8. Arquitetura da plataforma .Net
Framework
Iniciativa .NET
NormalizaçãoPadronização
ECMA 335 ISO/IEC 23271:2003
SSCLI
andre.lopes@studentpartners.com.br
9. Arquitetura da plataforma .Net
Framework
Conceitos Importantes
CLR
IL
Metadados
PE
Assembly
andre.lopes@studentpartners.com.br
10. Arquitetura da plataforma .Net
Framework
Common Language Runtime
Gerencia o código em execução
• Gerenciamento de Threads
• Gerenciamento de Memória
Máquina Virtual .NET (VES)
Multi Linguagem
• O CLR não sabe em qual linguagem o código foi escrito
• IL
Provedor de recursos
• Tratamento de Erros
• Threads
• Exceções
andre.lopes@studentpartners.com.br
11. Arquitetura da plataforma .Net
Framework
Common Language Runtime
.Net Framework (1.0, 2.0, 3.0, 3.5, 4.0)
Classes Fundamentais
Common Language Runtime
Código Nativo
Gerenciador
Compilador
de Código
Coletor de
de IL em
Lixo
Carregador de Classes
andre.lopes@studentpartners.com.br
12. Arquitetura da plataforma .Net
Framework
Common Language Runtime
Código Gerenciado (.NET)
Common Language Runtime
Solicita um recurso existente
Win 32/64 SO
andre.lopes@studentpartners.com.br
13. Arquitetura da plataforma .Net
Framework
Demonstração
Classesdo .Net Framework que acessam
diretamente recursos da CLR
andre.lopes@studentpartners.com.br
14. Arquitetura da plataforma .Net
Framework
Intermediate Language
Nível intermediário
• Manipula Arrays diretamente
• Manipula objetos e seus métodos
• Não existe conceito de registrador
Independente de CPU
Código gerenciado pelo CLR
ilasm.exe
ildasm.exe
Dispõe de TODOS os recursos do CLR
andre.lopes@studentpartners.com.br
15. Arquitetura da plataforma .Net
Framework
Intermediate Language
Trabalha com o conceito de pilhas
Hello.il
.assembly extern mscorlib {}
.assembly HelloWord
{
.ver 1:0:1:1
}
.module HelloWord.exe
.method static void Main() cil managed
{
.maxstack 1
.entrypoint
ldstr “Hello World”
call void [mscorlib]System.Console::WriteLine(string)
ret
}
andre.lopes@studentpartners.com.br
16. Arquitetura da plataforma .Net
Framework
Intermediate Language
Para compilar um código em IL
C:>ilasm.exe Hello.il
Para verifica o código fonte em IL de qualquer aplicação
em .Net
C:>ildasm.exe Hello.exe /out=HelloInfo.txt
Ambas ferramentas estão disponíveis no SDK do .Net
Framework
andre.lopes@studentpartners.com.br
17. Arquitetura da plataforma .Net
Framework
Metadata
Informação sobre os tipos, vinculados a um EXE ou DLL
Conjunto de tabelas de dados que descrevem o que está
definido no módulo, seus tipos e membros
Conjunto de tabelas que descrevem oque esta sendo
usado pelo módulo - tipo externos, importados.
Pessoa.dll
Membro Tipo Acesso Tipo Assembly
Nome string publico string mscorlib.dll
DataNasc DateTime privado DateTime System.dll
Idade Int32 publico Int32 mscorlib.dll
... ... ... ... ...
andre.lopes@studentpartners.com.br
18. Arquitetura da plataforma .Net
Framework
Metadata
Utilidades
• Eliminam a necessidade de arquivos de cabeçalho
• IntelliSense
• Código Seguro
• Serialização
• Coletor de Lixo
andre.lopes@studentpartners.com.br
19. Arquitetura da plataforma .Net
Framework
Metadata
Obtendo metadados com C#
using System;
using System.Reflection;
static void Main(string[] args)
{
Assembly mscorlib = Assembly.Load(“mscorlib.dll”);
foreach(Type tipo in mscorlib.GetTypes())
{
Console.WriteLine(tipo.Name);
foreach(MemberInfo membro in tipo.GetMembers())
{
Console.WriteLine(membro.Name);
}
}
}
andre.lopes@studentpartners.com.br
20. Arquitetura da plataforma .Net
Framework
PE
Portable Executable
Formato de arquivo executável, objeto e DLL
Desenvolvido pela Microsoft e padronizado em 1993
Padrão do Windows
Portável – não está vinculado a nenhum sistema
específico, embora seja somente usado no Windows
Dividido em seções
- Código - Recursos
- Dados - Exportação
- Importação - etc
andre.lopes@studentpartners.com.br
21. Arquitetura da plataforma .Net
Framework
PE
Partes de um módulo gerenciado
Parte Descrição
Cabeçalho PE Identifica se é um arquivo CUI, GUI ou DLL.
Tem também a Data/Hora de Criação
Cabeçalho CLR Contém informações (interpretadas pelo CLR e
por utilitários) que fazem dele um módulo
gerenciado
Metadados Tabelas de metadados. Tabelas de tipos
definidos e Tabelas de tipos referenciados.
Código em IL Código que o compilador produziu quando
compilou o código fonte.
andre.lopes@studentpartners.com.br
22. Arquitetura da plataforma .Net
Framework
Assembly
Agrupamento lógico de um ou mais módulos gerenciados
ou arquivos de recursos
Menor unidade de reutilização, segurança e controle de
versão
Pode conter um ou mais arquivos (linkeditor do
assembly, AL.exe)
Arquivo EXE ou Dll. Projeto.
andre.lopes@studentpartners.com.br
23. Arquitetura da plataforma .Net
Framework
Assembly
Módulo gerenciado Assembly
(IL e metadados) Ferramenta que
combina múltiplos
Módulo gerenciado módulos gerenciados
(IL e metadados) e arquivos de
recursos em um
Manifesto:
. assembly
. descreve o
. conjunto de
Compilador C#
arquivos no
(csc.exe)
assembly
Arquivos de recursos Compilado VB
(jpeg, .gif, .html, etc) (vbc.exe)
Assembly Linker
Arquivos de recursos
(al.exe)
(jpeg, .gif, .html, etc)
.
.
.
andre.lopes@studentpartners.com.br
24. Arquitetura da plataforma .Net
Framework
Funcionamento
Compilação
Carregamento
Execução
andre.lopes@studentpartners.com.br
25. Arquitetura da plataforma .Net
Framework
Compilação
Arquivo de Arquivo de Arquivo de
Código Fonte C# Código Fonte VB Código Fonte J#
Compilador Compilador Compilador
C# VB J#
Metadata
IL Arquivo
PE
Recursos
andre.lopes@studentpartners.com.br
26. Arquitetura da plataforma .Net
Framework
Compilação
MSCorEE.dll
Uma referência é feita na seção .idata do arquivo para
MSCorEE.dll
O Compilador automaticamente insere uma chamada
para função _CorExeMain, na seção .text, para o CLR ser
inicializado quando executarmos o assembly
andre.lopes@studentpartners.com.br
27. Arquitetura da plataforma .Net
Framework
Carregamento
Passos, arquivo exe
1. O arquivo .exe é chamado
2. O Windows carrega o arquivo normalmente, como um
não gerenciado.
3. Ao encontrar a chamada para MSCorEE.dll, a função
_CorExeMain chama o CLR
4. Caso o CLR já esteja em execução ( alguma outra
aplicação gerenciada já está aberta ) o processo atual é
adicionado ao CLR, caso contrário o CLR é iniciado
5. O CLR toma conta do processo daqui em diante
6. O CLR localiza o ponto de entrada da aplicação – método
Main – e inicia sua execução.
andre.lopes@studentpartners.com.br
28. Arquitetura da plataforma .Net
Framework
Carregamento
A thread primária do
Processo é inicializada
EXE gerenciado Espaço de
Cabeçalho PE endereçamento
JMP _CorExeMain
Seção .text
EXE gerenciado
Seção .idata
DLL: MSCorLib.dll
Cabeçalho CLR Função: _CorExeMain
IL MSCorEE.dll
Metadados
1. O MSCorEE examina o cabeçalho CLR para obter o token de metadados do método
Main.
2. O MSCorEE examina os metadados de Main para obter a localização da IL dentro do
arquivo EXE.
3. O MSCorEE compila a IL de Main para código nativo de CPU.
4. O MSCorEE desvia para o código nativo de CPU de Main ( utilizando a thread principal
) – a aplicação é executada.
andre.lopes@studentpartners.com.br
29. Arquitetura da plataforma .Net
Framework
Carregamento
Passos, arquivo dll
• O processo é o mesmo usado no arquivos .exe, com
algumas diferenças sutis
• _CorDllMain, ao invéz de _CorExeMain
• Inicializa a CLR
• Volta para a aplicação que referenciou a Dll (Essa
aplicação pode ser gerenciada ou não)
andre.lopes@studentpartners.com.br
30. Arquitetura da plataforma .Net
Framework
Execução
1. Verificação de tipo
2. Cria uma entrada (endereço fictício de memória) para
cada tipo.
3. JITCompiler pega a IL do método com base nos
metadados
4. JITCompiler compila a instrução para código nátivo de
CPU (código otimizado)
5. JITCompiler grava a instrução em um endereço de
memória
andre.lopes@studentpartners.com.br
31. Arquitetura da plataforma .Net
Framework
Execução
6. JITCompiler retorna o endereço para o CLR, que
substitui o endereço fictício criado no passo 2.
7. CLR manda executar o código que está na área de
memória especificada
8. CLR obtém a próxima instrução
9. CLR verifica se a instrução já foi compilada pelo JIT
9-1. Caso tenha sido, volta para 7.
9-2. Caso não tenha sido, volta para - JITCompiler.
andre.lopes@studentpartners.com.br
32. Arquitetura da plataforma .Net
Framework
Execução
EXE gerenciado
Console
static void Main(){
Console.WriteLine(“Olá”);
Console.WriteLine(“Tchau”); static void WriteLine(string);
}
JITCompiler
MSCorEE.dll
1. No Assembly que implementa o tipo (Console), procure nos metadados o método
(WriteLine) que está sendo chamado.
2. A partir dos metadados, obtenha o código IL para esse método
3. Aloque um bloco de memória
4. Compile a IL em instruções nativas de CPU;
5. Modifique a entrada do método na tabela, de modo que agora ele aponte para o
bloco de memória alocado em 3
6. Desvie para o código nativo contido no bloco de memória
andre.lopes@studentpartners.com.br
33. Arquitetura da plataforma .Net
Framework
Execução
EXE gerenciado
Console
static void Main(){
Console.WriteLine(“Olá”);
Console.WriteLine(“Tchau”); static void WriteLine(string);
}
JITCompiler
MSCorEE.dll
1. No Assembly que implementa o tipo (Console), procure nos metadados o método
(WriteLine) que está sendo chamado.
2. A partir dos metadados, obtenha o código IL para esse método
3. Aloque um bloco de memória
4. Compile a IL em instruções nativas de CPU; o código nativo é salvo no bloco
alocado em 3
5. Modifique a entrada do método na tabela, de modo que agora ele aponte para o
bloco de memória alocado em 3
6. Desvie para o código nativo contido no bloco de memória
andre.lopes@studentpartners.com.br
34. Arquitetura da plataforma .Net
Framework
Execução
Perca de desempenho com o JITCompiler
Código nativo gerado para uma arquitetura específica,
processado onde o código está sendo executado
• Se for um Pentium 4, por exemplo, o JIT vai poder usar
recursos específicos dessa arquitetura
• Otimização de código
If(numeroDeCPUs > 1)
{
…
}
• Em um computador com somente uma CPU o código acima
não séria nem compilado
andre.lopes@studentpartners.com.br
35. Arquitetura da plataforma .Net
Framework
Solicitações ASP.NET
Servidor
IIS
andre.lopes@studentpartners.com.br
36. Arquitetura da plataforma .Net
Framework
Solicitações ASP.NET
Após a solicitação chegar no servidor IIS ela é mapeada, dependendo
do seu tipo
aspx
asmx
asax
etc
Cada tipo de solicitação tem um DLL ISAPI apropriada
O IIS examina a solicitação e cria um bloco de informações do tipo
EXTENSION_CONTROL_BLOCK
O IIS chama a função HttpExtensionProc da dll ISAPI atual e passa
a estrutura mencionada acima
andre.lopes@studentpartners.com.br
37. Arquitetura da plataforma .Net
Framework
Solicitações ASP.NET
A dll ISAPI compila a página solicitada e devolve o resultado para o
IIS
Por sua vez o IIS retorna o código HTML para o browser
Do mesmo modo que o CLR compila dll’s e exe’s a dll ISAPI faz com
as páginas aspx
Caso a mesma página seja chamada novamente, a compilação
não acontece, no ASP clássico isso acontecia
andre.lopes@studentpartners.com.br
38. Arquitetura da plataforma .Net
Framework
Interoperabilidade
Linguagens diferentes
• C# é case sensitive
• VB é case insensitive
• C# tem inteiro sem sinal
• VB não tem inteiro sem sinal
• etc
Para linguagens diferentes poderem interoperar só
podem ser usados os recursos comuns
CLS
andre.lopes@studentpartners.com.br
39. Arquitetura da plataforma .Net
Framework
Interoperabilidade
CLRCTS
C# VB
CLS
Fortran
andre.lopes@studentpartners.com.br
40. Arquitetura da plataforma .Net
Framework
Interoperabilidade
[assembly: CLSCompliant(true)]
public class Pessoa
{
public Pessoa() { }
public UInt32 Idade {get; set;}
public string Nome {get; set;}
private UInt64 ObtemClassificacao(){
return 1; }
public void Verifica() { }
public void verifica() { }
}
andre.lopes@studentpartners.com.br
41. Arquitetura da plataforma .Net
Framework
Interoperabilidade
[assembly: ComVisible(true)]
Exporta a biblioteca em um formato COM
• VB
• MSAccess (VBA)
• Qualquer outra linguagem não gerenciada que suporte
COM
.Net aceita qualquer Dll ou componente COM
andre.lopes@studentpartners.com.br