logo

Tiempo de ejecución de lenguaje común (CLR) de .NET

.NET CLR es un entorno de ejecución que gestiona y ejecuta el código escrito en cualquier lenguaje de programación .NET. CLR es el componente de máquina virtual del marco .NET. El compilador de ese lenguaje compila el código fuente de las aplicaciones desarrolladas utilizando lenguajes compatibles con .NET en el lenguaje intermedio de CLR llamado MSIL, es decir, el código del lenguaje intermedio de Microsoft. Este código es independiente de la plataforma. Es comparable al código de bytes en Java. Los metadatos también se generan durante la compilación y el código MSIL y se almacenan en un archivo conocido como archivo de manifiesto. Estos metadatos generalmente tratan sobre los miembros y tipos requeridos por CLR para ejecutar código MSIL. Un componente compilador justo a tiempo de CLR convierte el código MSIL en código nativo de la máquina. Este código depende de la plataforma. CLR gestiona la memoria, subprocesos, excepciones, ejecución de código, seguridad del código, verificación y compilación.

algoritmo para rsa

La siguiente figura muestra la conversión del código fuente en código nativo.

Tiempo de ejecución de lenguaje común neto

La figura de arriba convierte el código en código nativo, que la CPU puede ejecutar.

Los principales componentes de CLR son:

  • Sistema de tipo común
  • Especiación del lenguaje común
  • Recolector de basura
  • Compilador justo a tiempo
  • Metadatos y ensamblajes
Tiempo de ejecución de lenguaje común neto

1. Sistema de tipos común:

CTS proporciona pautas para declarar, usar y administrar tipos de datos en tiempo de ejecución. Ofrece comunicación en varios idiomas. Por ejemplo, VB.NET tiene un tipo de datos entero y C# tiene un tipo de datos int para administrar números enteros. Después de la compilación, ambos tipos de datos utilizan Int32. Entonces, CTS proporciona los tipos de datos mediante código administrado. Un sistema de tipos común ayuda a escribir código independiente del lenguaje.

Proporciona dos categorías de tipos.

    Tipo de valor:Un tipo de valor almacena los datos en la memoria asignada en la pila o en línea en una estructura. Esta categoría de Tipo contiene el directorio de datos. Si el valor de una variable se copia a otra, ambas variables almacenan datos de forma independiente. Puede ser de tipos incorporados, definidos por el usuario o de enumeraciones. Los tipos integrados son tipos de datos primitivos como numérico, booleano, char y fecha. Los usuarios en el código fuente crean tipos definidos por el usuario. Una enumeración se refiere a un conjunto de valores enumerados representados por etiquetas pero almacenados como un tipo numérico.
    Tiempo de ejecución de lenguaje común neto Tipo de referencia:Un tipo de referencia almacena una referencia al valor de una dirección de memoria y se asigna en el montón. La memoria de montón se utiliza para la asignación de memoria dinámica. El tipo de referencia no contiene datos reales directamente, pero contiene la dirección de los datos. Siempre que se crea un objeto de tipo referencia, copia la dirección y no los datos reales. Por tanto dos variables se referirán a los mismos datos. Si se cambian los datos de un objeto de tipo de referencia, lo mismo se refleja para el otro objeto. Los tipos de referencia pueden ser tipos autodescriptivos, tipos de puntero o tipos de interferencia. Los tipos que se describen a sí mismos pueden ser tipos de cadena, matriz y clase que almacenan metadatos sobre sí mismos.

2. Especificación del lenguaje común (CLS):

La Especificación de lenguaje común (CLS) contiene un conjunto de reglas que deben seguir todos los lenguajes compatibles con NET. Las reglas comunes facilitan la implementación de la integración de idiomas y ayudan en la herencia y depuración entre idiomas. Cada lenguaje admitido por NET Framework tiene sus propias reglas de sintaxis. Pero CLS garantiza la interoperabilidad entre aplicaciones desarrolladas utilizando lenguajes NET.

3. Recolección de basura:

Garbage Collector es un componente de CLR que funciona como un administrador de memoria automático. Ayuda a administrar la memoria al asignarla automáticamente según los requisitos. Asigna memoria de montón a objetos. Cuando los objetos no están en uso, recupera la memoria que se les ha asignado para uso futuro. También garantiza la seguridad de los objetos al no permitir que un objeto utilice el contenido de otro objeto.

4. Compilador Justo a Tiempo (JIT):

El compilador JIT es un componente importante de CLR. Convierte el código MSIL en código nativo (es decir, código específico de la máquina). El programa .NET se compila explícita o implícitamente. El desarrollador o programador llama a un compilador particular para compilar el programa en la compilación explícita. En la compilación implícita, el programa se compila dos veces. El código fuente se compila en el lenguaje intermedio de Microsoft (MSIL) durante el primer proceso de compilación. El código MSIL se convierte en código nativo en el segundo proceso de compilación. Este proceso se llama compilación JIT. Hay tres tipos de compiladores JIT: Pre, Econo y Normal. Pre JIT Compiler compila el código MSIL completo en código nativo antes de la ejecución. Econo JIT Compiler compila solo aquellas partes del código MSIL necesarias durante la ejecución y elimina aquellas partes que ya no son necesarias. El compilador JIT normal también compila solo aquellas partes del código MSIL necesarias durante la ejecución, pero las coloca en caché para uso futuro. No requiere recompilaciones de partes ya utilizadas ya que se han colocado en la memoria caché.

5. Metadatos:

Un metadato es una información binaria sobre el programa, ya sea almacenada en un archivo ejecutable portátil (PE) CLR junto con el código MSIL o en la memoria. Durante la ejecución de MSIL, los metadatos también se cargan en la memoria para una interpretación adecuada de las clases y sus relacionados. Información utilizada en el código. Por lo tanto, los metadatos ayudan a implementar el código de manera neutral en cuanto al lenguaje o lograr la interoperabilidad del lenguaje.

6. Asambleas:

Un ensamblaje es una unidad fundamental de agrupación de códigos físicos. Consiste en el manifiesto ensamblador, metadatos, código MSIL y un conjunto de recursos como archivos de imagen. También se considera una unidad básica de implementación, control de versiones, reutilización, permisos de seguridad, etc.

Funciones .NET CLR

Las siguientes son las funciones del CLR.

  • Convierte el programa en código nativo.
  • Maneja excepciones
  • Proporciona seguridad de tipo
  • Gestión de la memoria
  • Proporciona seguridad
  • Desempeño mejorado
  • Idioma independiente
  • Plataforma independiente
  • Recolección de basura
  • Proporciona características de lenguaje como herencia, interfaces y sobrecarga para programas orientados a objetos.

El código que se ejecuta con CLR se denomina código administrado, mientras que el código fuera de CLR se denomina código no administrado. El CLR también proporciona una capa de interoperabilidad, que permite que interoperen tanto los códigos administrados como los no administrados.

1. Código administrado:

Cualquier lenguaje escrito en .NET framework es código administrado. El código administrado utiliza CLR, que cuida sus aplicaciones administrando la memoria, manejando la seguridad, permitiendo la depuración entre idiomas, etc. El proceso del código administrado se muestra en la figura:

Tiempo de ejecución de lenguaje común neto

2. Código no administrado:

El código desarrollado fuera del marco .NET se conoce como código no administrado. Se dice que las aplicaciones que no se ejecutan bajo el control de CLR no están administradas. Ciertos lenguajes como C++ se pueden utilizar para escribir dichas aplicaciones, como funciones de acceso de bajo nivel del sistema operativo. La compatibilidad en segundo plano con VB, ASP y COM son ejemplos de código no administrado. Este código se ejecuta con la ayuda de clases contenedoras. El proceso de código no administrado se muestra a continuación:

Tiempo de ejecución de lenguaje común neto

Versiones de .NET CLR

El CLR se actualiza periódicamente para proporcionar un mejor rendimiento.

Versión .NET versión CLR
1.0 1.0
1.1 1.1
2.0 2.0
3.0 2.0
3.5 2.0
4 4
4.5 4
4.6 4
4.6 4

Estructura .NET CLR

A continuación se muestra la estructura de componentes de Common Language Runtime.

Tiempo de ejecución de lenguaje común neto

Soporte de biblioteca de clases base

Es una biblioteca de clases que admite clases para la aplicación .NET.

Soporte de hilo

Gestiona la ejecución paralela de la aplicación multiproceso.

Mariscal COM

Proporciona comunicación entre los objetos COM y la aplicación.

Motor de seguridad

Hace cumplir restricciones de seguridad.

Motor de depuración

Le permite depurar diferentes tipos de aplicaciones.

Tipo Comprobador

Comprueba los tipos utilizados en la aplicación y verifica que coincidan con los estándares proporcionados por el CLR.

Administrador de código

Gestiona el código en tiempo de ejecución.

Recolector de basura

Libera la memoria no utilizada y la asigna a una nueva aplicación.

Controlador de excepciones

Maneja la excepción en tiempo de ejecución para evitar fallas en la aplicación.

Cargador de clases

Se utiliza para cargar todas las clases en tiempo de ejecución.