Você está na página 1de 7

Arquitetura .NET (MSIL, CLR, CTS, CLS, BLC, JIT...

)
MSIL (Microsoft Intermediate Language), CLR (Common Language Runtime), CTS (Common Type System), CLS (Common Language Specification), BCL (Base Class Library), Metadados ou METADATAS, Assembly, PE (Portable Executable), Compilao JIT (Just in Time), VES (Virtual Execution System), GC (Garbage Collector) Antes de comearmos com um mundo de siglas e nomes muito importante entendermos que a plataforma .NET tem sua complexidade. Mas quando entendida fica fcil de partir para outros assuntos relacionados.

A plataforma .NET tem independncia na linguagem de programao: com ela possvel trabalhar com vrias linguagens diferentes no mesmo projeto e interagir entre elas. Isso possvel por termos uma IL (Intermediate Language), ou seja, linguagem intermediria onde todos os fontes compilados pelo CLR (comentado mais a frente) resultam em uma s linguagem. No h linguagem melhor ou pior. H linguagem que voc melhor se adapta ou prefere. Os sistemas desenvolvidos em .NET so auto-explicativos: cada programa compilado contm em si informaes necessrias em METATAGS que faz com que o runtime no precise procurar as informaes no registro do Windows. Por exemplo quando criamos um sistema, o mesmo pode ser executado em qualquer mquina (que suporte a .NET) sem necessidade da instalao. Todas as informaes necessrias para que o sistema seja executado so encontrados dentro nas METATAGS dentro dele mesmo. Com isso temos um sistema auto-explicativo, pois as informaes necessrias esto armazenadas dentro dele e no no registro do sistema operacional. MSIL (Microsoft Intermediate Language) MSIL ou IL a linguagem intermediria dita at agora. Independentemente da linguagem que voc escrever seu programa quando

compilado ser gerado a IL. Mas repare que no qualquer linguagem que pode ser compilada em .NET. Ela deve aderir as especificaes da CLS e CTS (comentadas mais a frente) e s ento e linguagem pode ser "nomeada" como XYZ.NET, assim como Python.NET, Cobol.NET etc. CLR (Common Language Runtime) o ambiente de execuo das aplicaes .NET. O CLR cuidar do gerenciamento de memria atravs do GC (visto mais a frente). Este gerenciamento de memria torna o programa menos propcio a erros. Outro item muito interessantes da .NET a converso da sua linguagem, por exemplo COBOL, para IL e neste estgio entra o compilador JIT (Just-in-Timer) um componente da CLR que interpreta a IL e gera a linguagem de mquina na arquitetura do processador. CTS (Common Type System) a definio de tipos de dados onde tudo um objeto e deriva da classe System.Object, que o ncleo do sistema de tipos. Pensando que tudo um objeto, logo tudo deriva da classe System.Object e, por isso, os projetistas da .NET organizaram o sistema de tipos de dados de duas formas: Tipos Valor: variveis deste tipo so alocadas na pilha e tm como classe base System.ValueType, que por sua vez deriva da System.Object. Tipos Referncia: variveis deste tipo so alocadas na memria heap e tm a classe System.Object como classe base. Veja melhor como fica a estrutura de tipos com esta separao: -- System.Object ---- Tipos valor ------ Estruturas ------ Tipos Enumerados ---- Tipo Referncia ------ Objeto ------ Interface ------ Ponteiros

CLS (Common Language Specification - Especificao de Linguagem Comum) Define um conjunto de regras que as linguagens que implementam a .NET devem seguir para que a CLR possa entender a IL. Esse um dos motivos de podermos criar sistemas em diferentes linguagens e interagir entre elas dentro da .NET. No momento da compilao gerado um cdigo nico intermedirio (IL) e todas essas linguagens suportadas pela .NET seguem as regras da CLS, para que depois de gerado a IL, ela seja interpretada corretamente pela CLR, como j dito acima. BCL (Base Classe Library - Biblioteca de Classe Base) Como o prprio nome diz, na biblioteca de classe base voc encontra sistema de janelas, biblioteca de entrada/sada de dados, sockets, gerenciamento de memria, etc. Esta biblioteca organizada em uma estrutura conhecida como namespace, ou seja, imagine que voc precise atribuir um nome ao seu componente para que o mesmo possa ser referenciado a partir de outro programa. Abaixo seguem alguns namespaces da .NET System: Contm algumas classes de baixo nvel usadas para trabalhar com tipos primitivos,

operaes matemticas, gerenciamento de memria etc. System.Collections: Contm pilhas, filhas e listas encadeadas. System.Data, System.Data.Common, System.Data.OleDb, System.Data.SqlClient: Acesso a base de dados. Aqui tambm se encontra o ADO.NET System.Diagnostics: Log de Event, medio de performance, gerenciamento de processos, depurao etc. System.Drawing e namespace derivados: A .NET oferece uma biblioteca de componentes para trabalhar com grficos, chamadas GDI+, que se encontra neste namespace. System.IO: Biblioteca para lidar com entrada e sada, gerenciamento de arquivos etc. System.NET: Bibliotecas para programao de redes, sockets etc. System.Reflection: Biblioteca necessria para gerar cdigo em tempo de execuo, descobrir tipo de variveis etc. System.RuntimeInteropServices e System.Runtime.Remoting: Fornece bibliotecas para interagir com cdigo no-gerenciado. System.Security: Criptografia, permisso e todo o suporte referente segurana. System.Threading: Biblioteca para aplicaes multithread System.Web: Biblioteca sobre tudo relacionado a Web, como Webservices, ASP.NET etc. System.Windows.Forms: Bibliotecas para o desenvolvimento de aplicaes Windows tradicionais. System.XML: Biblioteca que permite a interao com documentos XML. Estrutura da arquitetura .NET em camadas: Primeira: Linguagem de programao preferida e aceita pela especificao da CLS e CTS. Segunda: BCL (Base Class Library) Terceira: CLR (Common Language Runtime) Quarta: CTS (Common Type System) e CLS (Common Language Specification) Explicando melhor as camadas e para que servem, ficaria da seguinte forma: Voc usar sua linguagem de programao preferida e que seja suportada pela .NET (primeira camada) e ento criar seus sistemas. E, para cri-los, voc acessar as classes da BCL, j que tudo objeto em .NET. (segunda camada) Feito isso, seu programa dever ser compilado e ento gerado a IL que, por sua vez, ser interpretada pela CLR (terceira camada), que dever passar pelas especificaes da CTS e CLS (quarta camada). Metadados ou METADATA Seu programa feito na plataforma .NET, como j dito, no utiliza o registro do Windows por ser auto-explicativo. As informaes so armazenadas em METADATA dentro de cada programa no momento da compilao. Que informaes so essas? Descrio dos tipos (classes, estruturas, tipos enumerados etc) usado na aplicao, podendo esta ter sido gerada em forma de DLL ou executvel. Descrio dos membros (propriedades, mtodos, eventos etc.) Descrio de cada unidade de cdigo externo (assembly) usada na aplicao e que requerida para que esta execute adequadamente. Resoluo de chamada de mtodo.

Resoluo de verses diferentes de uma aplicao. Outra coisa muito importante nas aplicaes .NET que mesmo duas aplicaes sendo homnimas, elas convivem normalmente no mesmo ambiente. Isto acontece porque na METADATA contem a verso de cada um, evitando o conflito entre as aplicaes. A CLR procura na METADATA a verso correta da aplicao a ser executada. Assembly Toda aplicao .NET, quando compilada, armazenada fisicamente numa unidades de cdigo denominada assembly. Uma aplicao pode ser composta de um ou mais assemblies, os quais so representados no sistema de arquivos de sistema operacional host na forma de arquivos executveis, de extenso .EXE, ou de uma biblioteca de ligao dinmica melhor conhecida como DLL, de extenso .DLL. PE (Portable Executable - Executvel Portvel) Isto significa que o fonte gerado poder ser interpretado (executado) em qualquer plataforma que tenha suporte .NET, sem necessidade de recompilao do fonte. Compilao JIT (Just in Time) O compilador JIT, tambm conhecido como JITTER, converte as instrues da IL para instrues especficas da arquitetura do processador onde a aplicao .NET esta sendo executada. Temos trs tipos de JITTER: Pre-JIT: Compila de uma s vez todo o cdigo da aplicao .NET que esta sendo executada e o armazena no cache para uso posterior. Econo-JIT: Utilizado em Hand-Helds onde a memria um recurso precioso. Sendo assim, o cdigo compilado sob demanda e a memria alocada que no esta em uso liberada quando o dispositivo assim o requer. Normal-JIT: Compila o cdigo sob demanda e joga o cdigo resultante em cache, de forma que esse cdigo no precise ser recompilado quando houver uma nova invocao do mesmo mtodo. VES (Virtual Execution System - Sistema de execuo virtual) um processo de compilao e aqui onde o JITTER ativado quando uma aplicao .NET chamada. O windows identifica que esta uma aplicao .NET e uma runtime Win32 passa o controle para a runtime do .NET. Neste momento a compilao do PE efetuada e s ento o cdigo assembly prprio da arquitetura do processador gerado para que a aplicao possa ser executada. Vamos ver todos os processos em camadas: Primeira: Sua linguagem de programao Segunda: IL Terceira: CLR (Compilador JIT - Cdigo nativo gerenciado - Execuo do cdigo) Quarto: Dispositivo de sada: PentiumX, Mobile etc. Em outras palavras as camadas e para que servem ficaria da seguinte forma: Voc desenvolve seu aplicativo (primeira camada) e compila gerando a IL (segunda camada). Aps isto a CLR interpreta (quando o aplicativo for executado) e compila com o JIT, gerando o cdigo nativo da arquitetura do processador e o executa (terceira camada). De acordo com o dispositivo de sada gerado um cdigo nativo da arquitetura do processador diferente (quarta camada). GC (Garbage Collector - Coletor de Lixo) Gerenciar memria no deve ser uma preocupao de quem desenvolve sistemas para tratar sobre regras de negcio e com .NET voc no precisa se preocupar com o gerenciamento de memria porque o GC faz isso pra voc. Quando uma rea de memria no esta mais em uso, o GC trata de liber-la. E quando necessrio a

utilizao de um novo espao o GC tambm faz isso pra voc. No por isso que voc deixar de finalizar seus objetos, mas caso isso acontea (esta a pior das hipteses) o GC tratar este caso. Apesar de que mesmo voc no trabalhando com C/C++, em .NET voc tambm poder gerenciar memria o que torna o desempenho maior. Em contrapartida considerado um mtodo inseguro, conhecido como "unsafe code".

Um pouco de prtica:

Vamos verificar um pouco do que foi dito acima. Primeiro vamos nos familiarizar com o compilador C# de linha de comando o csc.exe. Adicione ao path do sistema algo como: C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 [verifique na sua mquina]

Agora com um prompt de comando do DOS execute: csc.exe

Vamos criar um programa console. Digite o programa abaixo, pode ser no Editplus mesmo:

using System;

public class Primeiro { private static String msg = "Ol Mundo"; public static void Main(String[] args) { Console.WriteLine(msg); } }

Salve com o nome Primeiro.cs (o nome no uma obrigatoriedade, somente uma boa prtica) Aps execuo do comando csc Primeiro.cs temos o programa Primeiro.exe que somente executa em uma mquina com o framework .NET instalado. Agora vamos inspecionar o cdigo gerado (Primeiro.exe) com a ferramenta ILDASM. Esse utilitrio se encontra em D:\Soft\Microsoft Visual Studio 8\SDK\v2.0\Bin Digite: Ildasm Primeiro.exe

Podemos ver todas as informaes do programa executvel .NET que permite que ele execute no framework e seja independente de informaes de registro de S.O.

Inspecione a vontade!!! Por hoje s pessoal!

Você também pode gostar