Conceptos generales (2)

177 visualizaciones

Publicado el

0 comentarios
0 recomendaciones
Estadísticas
Notas
  • Sé el primero en comentar

  • Sé el primero en recomendar esto

Sin descargas
Visualizaciones
Visualizaciones totales
177
En SlideShare
0
De insertados
0
Número de insertados
5
Acciones
Compartido
0
Descargas
2
Comentarios
0
Recomendaciones
0
Insertados 0
No insertados

No hay notas en la diapositiva.
  • $
  • Conceptos generales (2)

    1. 1. ¿Qué es un S. O.?Los sistemas operativos son ante todoadministradores de recursos; el principalrecurso que administra es el hardware dela computadora: los procesadores, losmedios de almacenamiento, dispositivosde E/S, dispositivos de comunicación ydatos,etc.
    2. 2. DATOS ALMACENAMIENTOEXTERNOSISTEMAOPERATIVOENLACESMEMORIA REALY VIRTUALwhile (cierto){ bandera[proc_id] =cierto; while(bandera[1-proc_id]== cierto)C P URESULTADOSDISPOSITIVOS DE E/SUSUARIOSPROGRAMASRECURSOS ADMINISTRADOS POR EL SO
    3. 3. SUBSISTEMAS DE UN SO.SUBSISTEMAS DEFINICIÓNPROCESOEs una estancia de ejecución de un programa identificable ycontrolable por el sistema operativo.ADMON DE LAMEMORIASección del sistema operativo que controla el uso de la memoria.ARCHIVOS Estructura de directorio con algún tipo de organización.SEGURIDAD Garantiza la identidad de los usuarios y definir lo que puede hacercada uno de ellos.ENTRADA YSALIDAPeriféricos de E/S de la computadora, que se utilizan paracomunicarse.BLOQUEOSEstado del trabajo que significa que no puede continuar mientrasno se le asigne un recurso especifico o haya terminado unaoperación de E/S.
    4. 4. Tipos de Sistemas OperativosSistemas operativos de tiempo realSistemas operativos multitareaSistemas operativos multiprocesador.Sistemas operativos de tiempo compartidoSistemas operativos distribuidosSistemas operativos de redSistemas operativos integrados.
    5. 5. SO de Tiempo RealAquellos en los cuales no tiene importancia elusuario, sino los procesos. Estánsubutilizados sus recursos con la finalidad deprestar atención a los procesos en elmomento que lo requieran.Son construidos para aplicaciones muyespecíficas como control de tráfico aéreo,bolsas de valores, control de refinerías,control de laminadores.Algunos ejemplos de Sistemas Operativos detiempo real son: VxWorks, Solaris, Lyns OS ySpectra, QNX, RT Linux.
    6. 6. Características SO de Tiempo RealSe dan en entornos en donde deben serprocesados sucesos externos al sistema, enbreve tiempo o dentro de ciertos plazos.Procesa ráfagas de miles de interrupcionespor segundo sin perder un solo suceso.Población de procesos estática .Poco movimiento de programas entrealmacenamiento secundario y memoria.Gestión de archivos orientada más avelocidad de acceso que a utilizacióneficiente del recurso.
    7. 7. SO multitareaSe distinguen por sus habilidades para podersoportar la ejecución de dos o más trabajosactivos al mismo tiempo.La CPU siempre tenga alguna tarea queejecutar, aprovechándola al máximo.Su objetivo es tener a varias tareas en lamemoria principal, de manera que cada unoestá usando el procesador, o un procesadordistinto, es decir, involucra máquinas conmás de una CPU
    8. 8. Características de SO multitareaMejora la productividad y el uso de recursos.Multiplexa recursos entre varios programas.Generalmente soportan múltiples usuariosque requieren validación para seguridad yprotección.Proporcionan contabilidad del uso de losrecursos.Múltiples programas activos compitiendo porlos recursos del sistema.Ejemplos: Windows, Unix, Linux, OS/2.
    9. 9. SO de tiempo compartidoPermiten la simulación de que el sistema ysus recursos son todos para cada usuario.El usuario hace una petición a lacomputadora, esta la procesa tan prontocomo le es posible en la terminal del usuario.Le dan a cada usuario la ilusión de que tieneel sistema dedicado para sí mismo.Esto trae como consecuencia una gran cargade trabajo al SO.Ejemplos : Multics, OS/360, OS/2 y DEC-10.
    10. 10. Características SO tiempocompartidoProgramas se ejecutan con prioridad rotatoriaque se incrementa con la espera y disminuyedespués de concedido el servicio.Evitan monopolización del sistema asignandotiempos de procesador.Gestión de memoria proporciona protección aprogramas residentes.Protección de archivos ya que pueden existirmúltiples usuarios accediendo un mismoarchivo.
    11. 11. SO distribuidosPermiten distribuir trabajos, entre un conjunto deCPU´s en un equipo o en diferentes.Existen dos esquemas básicos: Un sistemafuertemente acoplado es aquel que comparte lamemoria y un reloj global.En un sistema débilmente acoplado losprocesadores no comparten ni memoria ni reloj,ya que cada uno cuenta con su memoria local.Confiables, ya que si un componente delsistema falla, otro componente lo reemplaza.Ejemplos: Sprite, Solaris-MC, Mach, Chorus,Spring, Amoeba, Taos.
    12. 12. SO de redSon aquellos sistemas que mantienen ados o más computadoras unidas a travésde algún medio de comunicación con elobjetivo de compartir recursos y lainformación del sistema.Ejemplos: Windows, Linux, Unix.
    13. 13. El núcleo del SOConsiste en la parte principal del códigodel SO, el cual se encargan de controlar yadministrar los servicios y peticiones delos recursos SW y HW de los procesos.Es el código que más se utiliza. Reside enRAM, mientras que otras partes del SOson cargadas sólo cuando se necesitan.Se diseñan para realizar el mínimoposible de procesamiento en cadainterrupción y dejar que el resto lo realiceel proceso apropiado.
    14. 14. IMAGEN DEL NUCLEOFigura que muestracomo el núcleo actúacomo intermediarioentre el HW y lasaplicaciones delusuario
    15. 15. Detalles del Núcleo
    16. 16. Más sobre el núcleo• No necesariamente se necesita un núcleo parausar una computadora. Los programas puedencargarse y ejecutarse directamente sobre el HWsin usar ninguna abstracción. Así operaban lasprimeras computadoras.• Con el tiempo, se empezó a dejar en memoriapequeños programas auxiliares, como elcargador y el depurador, o se cargaban desdememoria de sólo lectura. A medida que sefueron desarrollando, se convirtieron en losfundamentos de lo que llegarían a ser losprimeros núcleos de SO.
    17. 17. Microkernel• Proporcionan un pequeñoconjunto de abstraccionessimples del HW, y usan lasaplicaciones servidores paraofrecer mayor funcionalidad.• Su enfoque consiste endefinir una abstracción muysimple sobre el HW, con unconjunto de primitivas (callsystem) que implementanservicios del SO mínimos,como la gestión de Threadsy la intercomunicación entreprocesos.
    18. 18. Microkernel• El objetivo principal es la separación de laimplementación de los servicios básicos yla política de funcionamiento del sistema.• El SO opera en dos modos: modo usuarioy modo núcleo
    19. 19. Microkernel• En el modo usuario es donde se ejecutantodas las aplicaciones de los usuarios, lasaplicaciones cuentan con un conjunto deinstrucciones para operar.• En el modo núcleo están un conjunto deinstrucciones privilegiadas que accesan alHW.
    20. 20. Microkernel• Entonces se observa que cuando elsistema en ejecución, cambia de modo deoperación infinidad de veces, esto lo haceutilizando un mecanismo especial llamadollamadas al sistema.
    21. 21. Resumen de funciones del Núcleo Manejo de interrupciones. Creación y destrucción de procesos. Cambio de estado de los procesos. Despacho de procesos. Suspensión y reanudación de procesos. Sincronización de procesos. Comunicación entre procesos. Apoyo para las actividades de E/S. Apoyo para asignación y liberación de memoria. Apoyo para el sistema de archivos. Apoyo para ciertas funciones de contabilidad delsistema
    22. 22. InterrupcionesEvento que altera la secuencia en que el CPUejecuta las instrucciones.¿Qué pasa cuando ocurre una interrupción?El SO toma el control del hardware.El SO guarda el estado del proceso al que seinterrumpió.El SO analiza la interrupción y transfiere el controla la rutina apropiada para atenderla.La rutina del manejador de interrupciones procesala interrupción.Se restablece el estado del proceso anterior a lainterrupción.Continúa la ejecución del proceso
    23. 23. InterrupcionesUna interrupción puede ser iniciadaespecíficamente por un proceso enejecución (en cuyo caso se sueledenominar trap), y se dice que estásincronizada con la operación delproceso) o puede ser causada poralgún evento que puede estarrelacionado o no con el proceso enejecución (se dice que es asíncronacon la operación del proceso).
    24. 24. InterrupcionesLas interrupciones surgen de la necesidadesque tienen los dispositivos periféricos de enviarinformación al procesador principal de unsistema de computación.Cada dispositivo que desea comunicarse con elprocesador por interrupciones debe tenerasignada una línea única capaz de avisarle quele requiere para una operación. Esta línea es lallamada IRQ ("Interrupt ReQuest“)
    25. 25. Interruption ReQuest (IRQ)• Son líneas que llegan al controlador deinterrupciones, HW dedicado a la gestión deinterrupciones, puede estar integrado al CPU oser un circuito separado conectado al CPU.• El controlador de interrupciones debe ser capazde habilitar o inhibir líneas de interrupción(operación llamada enmascaramiento), y fijarprioridades entre las distintas interrupcioneshabilitadas. Cuando varias líneas de IRQ seactivan a la vez, el controlador de interrupcionesutilizará estas prioridades para escoger lainterrupción sobre la que informará al CPU.• Pero hay interrupciones que no se puedenenmascarar o deshabilitar, las conocidas comointerrupciones no enmascarables o NMI
    26. 26. Interruption ReQuest (IRQ)• A partir del número de IRQ el SO busca en elvector de interrupciones qué rutina debe llamarpara atender una petición del dispositivoasociado a dicha IRQ.• Las rutinas de interrupción generalmente tomanun pequeño tiempo de ejecución y la mayoría nopueden ser interrumpidas cuando se estánatendiendo, porque al entrar en ellas sealmacena el estado de los registros en una pilay si se interrumpen muchas veces, la pila sepuede desbordar
    27. 27. Interruption ReQuest (IRQ)• Dependiendo del tipo de computadora las IRQpueden ser de 8 canales, 16 canales osuperiores.Antes de la existencia de los dispositivos plugand play, los usuarios tenían que configurar losvalores IRQ de los dispositivos manualmentecuando agregaban un dispositivo nuevo alsistema. A continuación se listan los númerosIRQ y para qué eran usados generalmente.
    28. 28. Números IRQ•IRQ 0: cronómetro del sistema. Este interruptorestá reservado para el timer del sistema y jamásestá disponible para otros dispositivos.IRQ 1: controlador del teclado.IRQ 2: Interrupciones en cascada para lasinterrupciones IRQ del 8 al 15.IRQ 3: Segundo Puerto Serie (COM2). A menudoes también para el cuarto puerto serie (COM4).IRQ 4: Primer Puerto Serie (COM1). También esutilizado por defecto para el COM3.IRQ 5: Tarjeta de sonido.IRQ 6: Controlador de Unidad de disco.
    29. 29. Números IRQIRQ 7: Puerto Paralelo LPT1 para impresoras ocualquier otro dispositivo que utiliza puertoparalelo.IRQ 8: Reloj del Sistema.IRQ 9, 10, 11: Interrupción disponible paraperiféricos extras.IRQ 12: Mouse PS/2 o Placa de Red o similares.IRQ 13: Coprocesador/Unidad de punto flotanteIRQ 14: Canal IDE Primario. En sistemas que nose utiliza dispositivos IDE, este canal se utilizapara otros periféricosIRQ 15: Canal IDE Secundario
    30. 30. Interrupciones de SW• En procesadores x86, también sedenomina interrupción (o interrupciónsoftware) a las interrupciones causadaspor SW mediante una instrucción encódigo ensamblador. Este tipo deinterrupciones se llaman también traps oexcepciones, para distinguirlas de lasinterrupciones HW.
    31. 31. Llamadas al SistemaSon iniciadas por un proceso en ejecuciónque ejecute la instrucción SVC.Una SVC es una petición generada por unproceso para pedirle al núcleo la ejecuciónde una instrucción privilegiada, como realizaruna operación de E/S.El mecanismo de las SVC ayuda a protegeral SO de las acciones de los usuarios. Unusuario no puede entrar arbitrariamente alSO, sino que debe solicitar un servicio pormedio de una SVC. El SO está al tanto detodos los usuarios que intentan rebasar suslimites y puede rechazar ciertas peticiones siel usuario no tiene los privilegios necesarios
    32. 32. Tipos de Llamadas al SistemaLlamadas al sistema para administraciónde procesos.Llamadas al sistema para administraciónde archivos.Llamadas al sistema para administraciónde directorios.La API Win32 de Windows.
    33. 33. Arquitectura del sistema UNIXUNIX es el núcleo de un sistema operativo de tiempo compartido, y entreotros brinda los siguientes servicios:•Controla recursos de hardware•Controla los dispositivos periféricos•Permite a usuarios compartir recursos y ejecutar sus programas.•Proporciona un sistema de archivos
    34. 34. Características del Núcleo de Linux• Escrito en lenguaje C, primera capa enensamblador.• Ejecutable en varias plataformas hardware.• Se ejecuta en arquitectura des 32 bits y 64 bits.• Estaciones de trabajo y servidores.• Código y funcionamiento escrito bajo la familia deestándares POSIX.• Soporta uno o varios microprocesadores (SMP)symmetric multiprocessing.• Multitarea.• Multiusuario.• Gestión y protección de memoria
    35. 35. Características del Núcleo de Linux• Memoria virtual.• Varios sistemas de archivos.• Comunicación entre procesos (señales,pipes, IPC, sockets).• Librerías compartidas y dinámicas.• Permite trabajar en red TCP/IP.• Soporte grafico para interfase con el usuario.• Funcionalmente es muy parecido a UNIX.• Comunidad de usuarios en aumento.
    36. 36. Características del Núcleo de Linux• Todos los dispositivos periféricos sonmanejados como archivos. (abstracción)• Ejecuta algunas aplicaciones Windows através del proyecto WINE. Se mantienecompatibilidad con archivos Windows através de los servicios SAMBA.• Soporta protocolo de redes TCP/IP,AppleTalk (Macintosh), protocolos de NovellIPX(Internetwork Packet Exange), SPX(Sequenced Packet Exange), NCP (NetWareCore Protocol), y IPv6 la nueva versión de IP.• Mantiene compatibilidad con una variedad dedispositivos hardware
    37. 37. Características del Núcleo de Linux• El núcleo define una interfaz abstracta a lossubsistemas de ficheros denominada VFS(Virtual File System Interface), que permiteintegrar en el sistema varios sistemas dearchivos reales.• Mantiene una separación entre código fuentedependiente de la arquitectura y códigofuente independiente de la arquitectura, quele permite ejecutar Linux en diversasplataformas como Intel, Alpha, Motorola,Mips, PowerPC, Sparc, Macintoshes, Sun,etc. Existen versiones del núcleo especificaspara portatiles, y PAD’s.
    38. 38. Interacción entre modo usuario ymodo núcleo de Linux1. La interacción o solicitud de un servicio por partede un programa de usuario implica los siguientespasos:2. El usuario en su programa solicita una función dela librería libc.3. La función de libc, hace una llamada al núcleo através de una llamada (syscall).4. El núcleo recibe esa llamada mediante una función(system call).5. El núcleo redirige esta llamada a los módulosimplicados que a su vez llaman a otros hasta llegaral hardware y realizar la solicitud del usuario.6. El núcleo hace llegar a la aplicación del usuario elresultado de su solicitud
    39. 39. Las Llamadas al Sistema en Linux• En la mayoría de los casos no es necesarioinvocar una llamada al sistema directamente,pero hay veces en que la biblioteca Cestandar carece de una función adecuada.• Lo importante a conocer sobre una llamadaal sistema es su prototipo. Es necesariosaber cuántos argumentos usa, sus tipos, yel tipo retornado por la función. Hay seismacros que facilitan la llamada real alsistema
    40. 40. Las Llamadas al Sistema en Linux• Un proceso de usuario no puede acceder a la memoriadel núcleo y no puede llamar a las funciones del núcleo.El hardware de la CPU fuerza esto (modo protegido).• Las CS son una excepción a la regla. Un proceso deusuario rellena los registros con los valores apropiados yentonces llama a una instrucción especial, que salta auna posición previamente definida dentro del núcleo (laposición es legible por los procesos de usuario, pero nopueden escribir en ella).• Bajo las CPUs de Intel, esto se hace por medio de lainterrupción 0x80. El HW sabe que una vez que salta aesta localización, ya no se esta ejecutando en el modode usuario, sino en modo núcleo. Y entonces.. sepermite hacer todo lo que se quiera (si se tienen losconocimientos de programación).
    41. 41. Las Llamadas al Sistema en Linux• A la posición en el núcleo a la que un procesopuede saltar se le llama system_call. Elprocedimiento en esa posición verifica elnúmero de la llamada al sistema, que le dice alnúcleo qué servicio ha pedido el proceso. Luegomira en la sys_call_table para ver la direcciónde la función del núcleo a llamar. A continuaciónllama a la función, y después de retornar haceunas pocas comprobaciones del sistema y luegoregresa al proceso (o a un proceso diferente, siel tiempo del proceso ha finalizado
    42. 42. Las Llamadas al Sistema en Linux• Entonces, si queremos cambiar la forma en quefunciona una cierta CS, lo que tenemos quehacer es escribir nuestra propia función paraimplementarla (normalmente añadiendo un pocode nuestro código y después llamando a lafunción original) y entonces cambiar el punteroque está en sys_call_table para que apunte anuestra función. Como es posible que seamoseliminados más tarde y no queremos dejar elsistema en un estado inestable, es importanteque cleanup_module restaure la tabla a suestado original.
    43. 43. Las Llamadas al Sistema en LinuxTienen la siguiente forma:_syscallX(tipo,nombre,tipo1,arg1,tipo2,arg2,...)donde : X es 0-5, el número de argumentos usado por lallamada del sistema tipo es el tipo devuelto por la llamada al sistema nombre es el nombre de la llamada al sistema tipoN es el tipo del argumento num N argN es el nombre del argumento num N
    44. 44. El puente API/Syscall• Para que nuestra aplicación de espacio deusuario pueda emitir una syscall, es necesariopoder realizar la llamada mediante un API. EsteAPI lo proporciona la librería estándar de C denuestro sistema, la libc o glibc en el caso deLinux. Una de las APIs más comunes del mundoUnix es la basada en el estándar POSIX. Esteestándar aglutina un conjunto de estándares orecomendaciones del instituto IEEE, queintentan definir la base para la realización de SOabiertos basados en Unix. Linux es consideradocompatible con POSIX.
    45. 45. • Hay que decir que el estándar POSIX se refierea las APIs, no a las syscalls, es decir, define uncomportamiento, pero no como lo debe hacer.• Desde el punto de vista del programador deaplicaciones, la distinción entre una API y unasyscall es irrelevante, lo único que importa es elnombre de la función, los tipos de losparámetros y el valor devuelto.
    46. 46. Ejemplo• #include <stdio.h>• #include <linux/unistd.h> /* para macros _syscallX */• #include <linux/kernel.h> /* para la estructura sysinfo */• _syscall1(int, sysinfo, struct sysinfo *, info);• int main(void){• struct sysinfo s_info;• int error;• error = sysinfo(&s_info);• printf("Código de error = %dn", error);• printf("Uptime = %dsnCarga: 1 min %d / 5 min %d / 15 min %dn"• "RAM: total %d / libre %d / compartida %dn"• "Memoria en bufers = %dnSwap: total %d / libre %dn"• "Número de procesos = %dn",• s_info.uptime, s_info.loads[0],• s_info.loads[1], s_info.loads[2],• s_info.totalram, s_info.freeram,• s_info.sharedram, s_info.bufferram,• s_info.totalswap, s_info.freeswap,• s_info.procs);• return(0);• }
    47. 47. Salida del ejemplo• Código de error = 0• Uptime = 502034s• Carga: 1 min 13376 / 5 min 5504 / 15 min 1152• RAM: total 15343616 / libre 827392 / compartida8237056• Memoria en bufers = 5066752• Swap: total 27881472 / libre 24698880• Número de procesos = 40
    48. 48. Las Llamadas al Sistema en Linux• Las llamadas al sistema no tienen porqueretornar sólo códigos de error positivos onegativos. Es necesario examinar el códigofuente para estar seguro de cómo retornan loserrores. Generalmente, es el negativo de uncódigo de error estándar, por ejemplo,-EPERM. Las macros _syscall() devolverán elresultado r de la llamada al sistema cuando rno sea negativo, pero devolverán -1 yestablecerán la variable errno a -r cuando r seanegativo. Para los códigos de error vea errno(3).
    49. 49. Módulos Cargables• Un módulo cargable del núcleo es un archivoque contiene código objeto que puede extenderel núcleo en ejecución.• La mayoría de los sistemas estilo Unix, yWindows soportan módulos cargables.• Son generalmente utilizados para brindarsoporte a nuevos dispositivos de HW y FS, asícomo para agregar llamadas al sistema. Cuandola funcionalidad proveída por un módulo delnúcleo deja de ser requerida, éste puede serdescargado, liberando su memoria.
    50. 50. Módulos cargables y Drivers• Un típico empleo para los módulos cargables escrear controladores de dispositivos de HW.• Los drivers tienen un rol especial en el núcleoLinux. Estos son los encargados de esconderlos detalles de cómo un dispositivo funcionainternamente a nivel del HW, permitiendo quelas actividades de los usuarios sean realizadasmediante un conjunto de llamadas estándar,independientes del controlador específico quese está utilizando en realidad.
    51. 51. • Los desarrolladores de módulos cargablesdeberían ser cuidadosos de no introducir erroresde seguridad en los módulos que desarrollan. Ellenguaje de programación C, utilizado en lamayoría de Linux, hace que el introducir erroressea fácil y muchos problemas de seguridadsuelen deberse a olvidan controlar cuántainformación es almacenada en una porciónasignada de memoria (buffer), derivando enerrores de sobreescritura que podrían serutilizados por un usuario malicioso para alterarla memoria del núcleo y sus módulos.
    52. 52. Drivers• Un driver es una capa de código entre eldispositivo de hardware y la aplicación. Undriver usa los privilegios con los que seejecuta su código para definirexactamente como se quiere que undispositivo sea visto por una aplicación.• El driver está en el kernel.
    53. 53. Drivers• La idea es que un Driver permita acceder a losdispositivos de hardware, sin imponerrestricciones arbitrarias a los que usan el driver.En UNIX esto es una regla de diseño, que seconoce como separación de mecanismos ypolíticas.• Para no escribir políticas en el driver, se puedehacer una aplicación de usuario que seencargue de configurar el dispositivo, y/o unalibrería para acceder a él. La idea es que eldriver cambie muy poco
    54. 54. Tipos de DriversEl kernel diferencia tres tipos de drivers:– Drivers de carácter (char devices)– Drivers de bloque (block devices)– Drivers de red (network devices)• No todos los drivers son de dispositivos,algunos son de SW. Por ejemplo, el driver de unFS como ext3 o reiserfs son drivers de software,que mapea estructuras de datos de bajo nivel aestructuras de datos de más alto nivel
    55. 55. El SchedulerGestiona el tiempo de CPU que tiene unproceso.Cada cierto tiempo decide si el procesoactual tiene derecho a seguir en ejecución(dependiendo de su prioridad y privilegios)o hacer cambio de contexto.
    56. 56. El SwappingConsiste en llevar procesos cuyotiempo de uso de RAM expira amemoria secundaria o virtual.Consiste en traer de la memoria virtuala los procesos a los que el schedulerles asigna tiempo de uso de RAM.
    57. 57. TareaInvestigar los Sistemas Operativos QNX,Symbian y gOS (Android de Google);destacando características de:• Seguridad.• Sistema de archivos.• Gestión de procesos.Y elaborar una introducción de unacuartilla en la indica la importancia deconocer esta información.
    58. 58. Librerías de Enlace Dinámico (DLL)• Son elementos indispensables en laconstrucción de programas eficientes enel manejo de memoria RAM.• Casi todos los lenguajes permiten lacreación de estas librerías.• En C, se encuentran disponibles grancantidad de librerías, como stdio.h,conio.h, etc. Cada una con funciones ydeclaraciones para un determinado fin.
    59. 59. Librerías de Enlace Dinámico (DLL)• El programador puede crear sus propiaslibrerías que le ayuden a resolver unproblema particular, y éstas puedenreutilizarse en otros proyectos.• Las librerías nos permiten agrupar variasfunciones y variables en un mismoarchivo, de manera que luego podamosreferenciarlas.
    60. 60. Objetivo de las DLL• El objetivo que se persigue con lacreación de librerías de funciones espoder aprovechar el mismo código desdediferentes aplicaciones, lo que supone unahorro de código evidente en cada una deesas aplicaciones.
    61. 61. Definición de DLL• Una DLL es un archivo ejecutable endonde se encuentran funciones y/oRecursos (Bitmaps, Definiciones deFuentes,...), que pueden ser utilizados porcualquier aplicación en RunTime.• La ventaja de las DLL frente a laslibrerías convencionales es que sólo secargan en memoria, cuando se necesitanlos recursos de dicha DLL.
    62. 62. Características de DLL• Las aplicaciones ligan el código de lalibrería, reduciendo el espacio dealmacenamiento y evitando la duplicaciónde código.• Si un problema surge, o se quiere añadiruna nueva característica, simplemente seactualizan las DLL’s y todas lasaplicaciones resultan beneficiadas.
    63. 63. La Carga de una DLLLa carga de una DLL se puede hacer de 2formas:1.Enlazado implícito2.Enlazado explícito
    64. 64. Enlazado Implícito• Cuando se enlaza una aplicación se debepasar una lista de archivos LIB. Losarchivos LIB, en la programaciónWindows, contienen una lista de lasfunciones que las DLL permiten llamar.• Cada DLL tiene su correspondientearchivo LIB.
    65. 65. Enlazado Implícito• Cuando el enlazador se percata que laaplicación está llamando a una funciónincluida en el archivo LIB de una DLL,pone información adicional en la imagendel EXE que indican el nombre de la DLLque se requiere.• Luego, cuando el sistema operativo cargael EXE, recorre esta lista de DLL’snecesarias y trata de cargarlas una poruna.
    66. 66. Proceso de búsqueda de DLLCuando el SO busca una DLL, recorre:1. El directorio que contiene la imagen delEXE.2. El directorio actual del proceso.3. El directorio de sistema de Windows.4. El directorio Windows.5. Los directorios de la variable PATH
    67. 67. Enlazado explícito• Es posible proyectar una DLL en elespacio de un proceso en tiempo deejecución llamando a la funciónLoadLibrary o LoadLibraryEx.• Ambas funciones tratan de cargar unaDLL en el espacio de direcciones de unproceso
    68. 68. Ventajas del uso de DLLs• Una función definida dentro de una DLLse encuentra disponible para cualquieraplicación Windows.• Reducción del tamaño de las aplicacionesque utilizan la DLL, por la reutilizacion desu código. Este hecho comporta dosventajas añadidas, como son:
    69. 69. Ventajas del uso de DLLs• Mejora en el tiempo de compilación y/ocarga de la aplicación (el tamaño delcódigo se ha reducido)• Ahorro de espacio en disco, esa funciónse encuentra una sola vez en el disco,independientemente del número deaplicaciones que la usen.• Las DLLs son independientes de laaplicación
    70. 70. Desventajas del uso de DLLs• Tienen que estar presentes antes de serusadas.• Tiempo de Acceso a la DLL por parte dela aplicación que usa esa DLL.
    71. 71. Acceso a los métodos de unaDLL• Para poder acceder a las funciones deesa DLL, existen dos métodos:–Llamada Estática–Llamada Dinámica a una DLL
    72. 72. Llamada Estática a DLL• O Enlace Estático, es un método queemplea la librería estática (archivo .lib)generada durante el proceso de creaciónde la DLL.• Durante el proceso de compilación seproduce el enlace entre la DLL y laaplicación que la va a usar.• Genera un único archivo ejecutable (.exe)para Windows.
    73. 73. Llamada Estática a DLL• A partir de esto, se puede deducir que lalibrería queda incluida dentro del archivoejecutable.• Al estar incluida dentro del ejecutable, lalibrería se carga al inicio de la aplicación yse descarga al finalizar la ejecución.
    74. 74. Llamada Estática a DLL• La llamadas a funciones de la DLL serealizará de igual forma como se realizanen forma convencional.• Esto es debido a que se encuentran en lamisma zona de memoria de la aplicacióny, como se conoce su posición exacta, yaque se ha fijado durante la carga delejecutable.
    75. 75. Inconvenientes de lasllamadas estáticas• Como la DLL se carga junto como elejecutable de la aplicación y se descargaal finalizar ésta, no hay forma de podercontrolar lo que sucede durante losprocesos de carga y descarga de la DLL.• Y podría darse el caso que se intenteacceder a una DLL que no se ha podidocargar en memoria por el motivo que sea.
    76. 76. Inconvenientes de lasllamadas estáticas• Al estar incluido el archivo .lib dentro delarchivo ejecutable (.exe) de la aplicación,cualquier cambio en la DLL implicaría unarecompilación de la aplicación, paraobtener dentro del archivo ejecutable.
    77. 77. Inconvenientes de lasllamadas estáticas• AL incluir el archivo .lib dentro delejecutable de nuestra aplicación, hayincremento del tamaño del archivo exe.• Esto hace que la DLL esté ocupandomemoria RAM durante toda la ejecuciónde la aplicación; aun cuando no seacceda en ningún momento de laejecución de la aplicación, a las funcionesde la DLL.
    78. 78. Llamada Dinámica a DLL• O Enlace Dinámico, es un método queemplea la librería dinámica (archivo .dll)generada durante el proceso de creaciónde la DLL.• El enlace entre la DLL y la aplicación quela va a usar, se producirá durante laejecución de la aplicación.
    79. 79. Llamada Dinámica a DLL• la Llamada Dinámica apuesta por tener unmayor control sobre los procesos decarga/descarga de la DLL, así comoobtener una mayor independencia entre laDLL y la aplicación que la va a usar.
    80. 80. Llamada Dinámica a DLL• la DLL no será incluida dentro delejecutable, sino que será cargada cuandosea necesaria y será descargada en elmomento en que ya no sea necesaria.• Esta carga/descarga de la DLL en funciónde su uso, nos permite una mejor gestiónde los recursos, pues no ocupará espacioen memoria, a menos que sea necesario.
    81. 81. Creación de una DLL en C#• Considere el siguiente escenario:• MyLibrary.DLL: archivo que contiene el métodoAdd que se utilizarán durante la ejecución.• Add.cs: archivo que contiene el métodoAdd(long i, long j). Devuelve la suma de susparámetros. La clase AddClass, que contiene elmétodo Add, es un miembro del espacio denombres MyMethods.
    82. 82. Creación de una DLL en C#– MyClient.cs: archivo que contiene el métodoMain. Utiliza los métodos del archivo DLLpara calcular la suma y el producto de losargumentos especificados en tiempo deejecución.
    83. 83. Archivo: Add.csusing System;namespace MyMethods {public class AddClass {public static long Add(long i, long j){ return(i+j);}}}
    84. 84. Archivo: MyClient.csusing System;using MyMethods;class MyClient {public static void Main(string[] args) {long num1 = 5;long num2 = 6;long sum = AddClass.Add(num1, num2);Console.WriteLine(“La suma de {0} y {1} es {2}",num1, num2, sum);}}
    85. 85. • La directiva using situada al principio delarchivo permite utilizar los nombres de lasclases sin calificar para hacer referencia alos métodos de la DLL en tiempo decompilación, por ejemplo:– AddClass.Add(num1, num2);• De lo contrario, sería necesario usarnombres completos, por ejemplo:– MyMethods.AddClassClass.Add(num1,num2);
    86. 86. Compilación• Para crear el archivo MyLibrary.DLL,compile los dos archivos Add.cs y Mult.csmediante la siguiente línea de comandos:– csc /target:library /out:MyLibrary.DLL Add.cs• La opción /target:library indica alcompilador que genere un archivo DLL envez de un archivo EXE.
    87. 87. • La opción /out del compilador seguida deun nombre de archivo se utiliza paraespecificar el nombre de archivo de laDLL. Si no se utiliza, el compilador usa elprimer archivo (Add.cs) como nombre dela DLL
    88. 88. Creación del ejecutable• Utilice la siguiente línea de comandos:– csc /out:MyClient.exe/reference:MyLibrary.DLL MyClient.cs• La opción /out indica al compilador quegenere un archivo EXE y especifica elnombre del archivo (MyClient.exe). Estaopción no es de uso obligado. La opción/reference especifica el archivo o archivosDLL que utiliza el programa

    ×