website analysis

sábado, 3 de octubre de 2009

Windows está construido por componentes DLL, como un juego de bloques

El Sistema Microsoft Windows ha sido construido en base a un modelo de componentes enlazables y mecanismos de comunicación entre estos, si realizaramos un diagrama completo del sistema operativo veriamos que todo esta construido en base a bloques, cada bloque ha sido construido para realizar tareas muy especificas y estos bloques van siendo llamados conforme son necesarios.

Por ejemplo el sistema operativo primeramente carga los bloques controladores del sistema, despues las interfaces de Usuario, a continuacion se carga el Explorador de Windows y finalmente es este el que realiza la carga de las aplicaciones de usuario como son Excel, Power Point, Windows Media, Firefox, etc.
 

Estas ultimas realizan la carga de los modulos que requieren para funcionar, por ejemplo el modulo de edicion de texto enriquecido riched32.dll el cual sirve para los cuadros de edicion de varias lineas en la mayoria de las aplicaciones, modulos que contienen controles comunes como son Botones, Cuadros de Edicion, Listas Desplegables, etc.


Cada modulo tiene la capacidad de ser llamado multiples ocaciones y por distintas aplicaciones de manera simultanea, cada que el modulo es llamado por alguna aplicacion se crea una instancia, esta es una area de memoria que contiene la informacion necesaria para permitir el vinculo entre el modulo y la aplicacion o modulo desde la que ha sido llamada, pudiendo de esta manera interactuar con muchas aplicaciones a la vez y que la informacion de cada instancia sea unica e independiente.

 
Básicamente el sistema operativo esta conformado por un Kernel el cual es el núcleo, este establece y provee mecanismos para la carga, enlace y comunicación de Módulos de Código (DLL, EXE, OCX, SRC, Etc.), Datos o Recursos, los drivers de acceso a los dispositivos, los modulos de acceso a la interfaz grafica, las aplicaciones y los controles de usuario como lo son los botones, cuadros de edicion y cuaquier otro elemento que utilizamos en Windows.



 
Prácticamente cualquier Modulo de Código se puede comunicar con cualquier otro Modulo de Código con la excepción de aquellos módulos que son esenciales para el sistema operativo o bien que por cuestiones de Seguridad o Estabilidad no se deba permitir su acceso desde cualquier aplicación, un ejemplo de esto son los Drivers o Controladores de Dispositivo mismos que para su protección se ejecutan en lo que se conoce como el Anillo 0 del Procesador, esta es una área a la que solo deben tener acceso unas cuantas aplicaciones, pues cualquier aplicación que aquí se ejecute podría tener acceso ilimitado a cualquier recurso de la computadora. 
 
Pero eso no siempre fue así, por lo que aquí haremos un poco de memoria.

En un principio, en los sistemas operativos primitivos de Microsoft solamente se podían reservar 64kb de espacio de memoria para la ejecución de los programas y las aplicaciones ejecutables diseñadas en ese tiempo se les identifico con la extensión de nombre de archivo .COM, esta capacidad tan limitada obligaba a los programadores de esa época a realizar aplicaciones muy sencillas y altamente eficientes que aprovecharan al máximo el escaso espacio de memoria que le asignaba el sistema operativo.
 
Esta limitante fue resuelta diseñando un nuevo tipo de ejecutable, uno que pudiera ocupar mas de 64kb de memoria, un modelo ejecutables que permitiera diseñar aplicaciones de mucho mayores alcances, aplicaciones que con el paso del tiempo proporcionaran interfaces de usuario cada vez más simples para los usuarios pero más pesadas para las computadoras, nacieron las aplicaciones del tipo .EXE las cuales podían ocupar múltiples segmentos de 64kb, con esta nueva característica se podían diseñar aplicaciones muy grandes en comparación con las .COM.

Como característica adicional las aplicaciones .EXE podían cargar código adicional desde unos archivos conocidos como Overlay lo cual era una técnica de superposición o intercambio de segmentos de código, esto es de alguna manera dicho el antecesor de las Librerías de Enlace Dinámico .DLL.

Con la aparición de Windows 1.0 llegaron las Librería de Enlace Dinámico las cuales son simplemente la implementación del concepto de Librerías Compartidas en Microsoft Windows, estas librerías comúnmente utilizaban las extensiones .DLL, OCX (para librerías contenedoras de controles ActiveX), DRV (para drivers) o SRC (protector de pantalla), cada Librería de Enlace Dinámico contiene secciones de Código, Datos o Recursos en cualquier combinación, siendo que también los archivos .EXE son un ejemplo de este mismo diseño.
 
Este modelo de las Librerías de Enlace Dinámico ha sido la base sobre la que se ha desarrollado la mayoría de la lógica intrínseca de Windows, todas las características adicionadas al Sistema Operativo o a las Aplicaciones están derivadas de la utilización de Librerías de Enlace Dinámico.

El acceso a las interfaces Graficas, los Controles de Usuario, el Acceso al Kernel (núcleo del sistema operativo), el Acceso a Cualquier dispositivo de Hardware, Etc. Esta diseñado sobre los Protocolos de Carga, Utilización, Reutilización, Etc. de las Librerías de Enlace Dinámico.

Las implementaciones DDE Intercambio Dinámico de datos o Dynamic Data Exchange, COM Modelo de Objetos Componente Component Object Model, OLE Enlazado y Ligado de Objetos Object Linking and Embedding, Automatización OLE, COM+ y DCOM Modelo de Objetos Componente Distribuido (es decir que su ejecución se puede realizar distribuyéndolo entre múltiples computadoras) Distributed Component Object Model, ActiveX, Etc. no son más que mecánicas o protocolos diseñados para la comunicación, ejecución,  conexión y compartición del modelo de Librerías Enlazadas Dinámicamente.
 
(Este documento se irá enlazando con otros que agregare en un futuro)

No hay comentarios: