SlideShare uma empresa Scribd logo
1 de 88
¿Qué es un S. O.?
Los sistemas operativos son ante todo
administradores de recursos; el principal
recurso que administra es el hardware de
la computadora: los procesadores, los
medios de almacenamiento, dispositivos
de E/S, dispositivos de comunicación y
datos,etc.
DATOS ALMACENAMIENTO
EXTERNO
SISTEMA
OPERATIVO
ENLACES
MEMORIA REAL
Y VIRTUAL
while (cierto)
{ bandera[proc_id] =
cierto; while
(bandera[1-proc_id]
== cierto)
C P U
RESULTADOS
DISPOSITIVOS DE E/SUSUARIOS
PROGRAMAS
RECURSOS ADMINISTRADOS POR EL SO
SUBSISTEMAS DE UN SO.
SUBSISTEMAS DEFINICIÓN
PROCESO
Es una estancia de ejecución de un programa identificable y
controlable por el sistema operativo.
ADMON DE LA
MEMORIA
Secció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 hacer
cada uno de ellos.
ENTRADA Y
SALIDA
Periféricos de E/S de la computadora, que se utilizan para
comunicarse.
BLOQUEOS
Estado del trabajo que significa que no puede continuar mientras
no se le asigne un recurso especifico o haya terminado una
operación de E/S.
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.
SO de Tiempo Real
Aquellos en los cuales no tiene importancia el
usuario, sino los procesos. Están
subutilizados sus recursos con la finalidad de
prestar atención a los procesos en el
momento que lo requieran.
Son construidos para aplicaciones muy
específicas como control de tráfico aéreo,
bolsas de valores, control de refinerías,
control de laminadores.
Algunos ejemplos de Sistemas Operativos de
tiempo real son: VxWorks, Solaris, Lyns OS y
Spectra, QNX, RT Linux.
Características SO de Tiempo Real
Se dan en entornos en donde deben ser
procesados sucesos externos al sistema, en
breve tiempo o dentro de ciertos plazos.
Procesa ráfagas de miles de interrupciones
por segundo sin perder un solo suceso.
Población de procesos estática .
Poco movimiento de programas entre
almacenamiento secundario y memoria.
Gestión de archivos orientada más a
velocidad de acceso que a utilización
eficiente del recurso.
SO multitarea
Se distinguen por sus habilidades para poder
soportar la ejecución de dos o más trabajos
activos al mismo tiempo.
La CPU siempre tenga alguna tarea que
ejecutar, aprovechándola al máximo.
Su objetivo es tener a varias tareas en la
memoria principal, de manera que cada uno
está usando el procesador, o un procesador
distinto, es decir, involucra máquinas con
más de una CPU
Características de SO multitarea
Mejora la productividad y el uso de recursos.
Multiplexa recursos entre varios programas.
Generalmente soportan múltiples usuarios
que requieren validación para seguridad y
protección.
Proporcionan contabilidad del uso de los
recursos.
Múltiples programas activos compitiendo por
los recursos del sistema.
Ejemplos: Windows, Unix, Linux, OS/2.
SO de tiempo compartido
Permiten la simulación de que el sistema y
sus recursos son todos para cada usuario.
El usuario hace una petición a la
computadora, esta la procesa tan pronto
como le es posible en la terminal del usuario.
Le dan a cada usuario la ilusión de que tiene
el sistema dedicado para sí mismo.
Esto trae como consecuencia una gran carga
de trabajo al SO.
Ejemplos : Multics, OS/360, OS/2 y DEC-10.
Características SO tiempo
compartido
Programas se ejecutan con prioridad rotatoria
que se incrementa con la espera y disminuye
después de concedido el servicio.
Evitan monopolización del sistema asignando
tiempos de procesador.
Gestión de memoria proporciona protección a
programas residentes.
Protección de archivos ya que pueden existir
múltiples usuarios accediendo un mismo
archivo.
SO distribuidos
Permiten distribuir trabajos, entre un conjunto de
CPU´s en un equipo o en diferentes.
Existen dos esquemas básicos: Un sistema
fuertemente acoplado es aquel que comparte la
memoria y un reloj global.
En un sistema débilmente acoplado los
procesadores no comparten ni memoria ni reloj,
ya que cada uno cuenta con su memoria local.
Confiables, ya que si un componente del
sistema falla, otro componente lo reemplaza.
Ejemplos: Sprite, Solaris-MC, Mach, Chorus,
Spring, Amoeba, Taos.
SO de red
Son aquellos sistemas que mantienen a
dos o más computadoras unidas a través
de algún medio de comunicación con el
objetivo de compartir recursos y la
información del sistema.
Ejemplos: Windows, Linux, Unix.
El núcleo del SO
Consiste en la parte principal del código
del SO, el cual se encargan de controlar y
administrar los servicios y peticiones de
los recursos SW y HW de los procesos.
Es el código que más se utiliza. Reside en
RAM, mientras que otras partes del SO
son cargadas sólo cuando se necesitan.
Se diseñan para realizar el mínimo
posible de procesamiento en cada
interrupción y dejar que el resto lo realice
el proceso apropiado.
IMAGEN DEL NUCLEO
Figura que muestra
como el núcleo actúa
como intermediario
entre el HW y las
aplicaciones del
usuario
Detalles del Núcleo
Más sobre el núcleo
• No necesariamente se necesita un núcleo para
usar una computadora. Los programas pueden
cargarse y ejecutarse directamente sobre el HW
sin usar ninguna abstracción. Así operaban las
primeras computadoras.
• Con el tiempo, se empezó a dejar en memoria
pequeños programas auxiliares, como el
cargador y el depurador, o se cargaban desde
memoria de sólo lectura. A medida que se
fueron desarrollando, se convirtieron en los
fundamentos de lo que llegarían a ser los
primeros núcleos de SO.
Microkernel
• Proporcionan un pequeño
conjunto de abstracciones
simples del HW, y usan las
aplicaciones servidores para
ofrecer mayor funcionalidad.
• Su enfoque consiste en
definir una abstracción muy
simple sobre el HW, con un
conjunto de primitivas (call
system) que implementan
servicios del SO mínimos,
como la gestión de Threads
y la intercomunicación entre
procesos.
Microkernel
• El objetivo principal es la separación de la
implementación de los servicios básicos y
la política de funcionamiento del sistema.
• El SO opera en dos modos: modo usuario
y modo núcleo
Microkernel
• En el modo usuario es donde se ejecutan
todas las aplicaciones de los usuarios, las
aplicaciones cuentan con un conjunto de
instrucciones para operar.
• En el modo núcleo están un conjunto de
instrucciones privilegiadas que accesan al
HW.
Microkernel
• Entonces se observa que cuando el
sistema en ejecución, cambia de modo de
operación infinidad de veces, esto lo hace
utilizando un mecanismo especial llamado
llamadas al sistema.
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 del
sistema
Interrupciones
Evento que altera la secuencia en que el CPU
ejecuta 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 se
interrumpió.
El SO analiza la interrupción y transfiere el control
a la rutina apropiada para atenderla.
La rutina del manejador de interrupciones procesa
la interrupción.
Se restablece el estado del proceso anterior a la
interrupción.
Continúa la ejecución del proceso
Interrupciones
Una interrupción puede ser iniciada
específicamente por un proceso en
ejecución (en cuyo caso se suele
denominar trap), y se dice que está
sincronizada con la operación del
proceso) o puede ser causada por
algún evento que puede estar
relacionado o no con el proceso en
ejecución (se dice que es asíncrona
con la operación del proceso).
Interrupciones
Las interrupciones surgen de la necesidades
que tienen los dispositivos periféricos de enviar
información al procesador principal de un
sistema de computación.
Cada dispositivo que desea comunicarse con el
procesador por interrupciones debe tener
asignada una línea única capaz de avisarle que
le requiere para una operación. Esta línea es la
llamada IRQ ("Interrupt ReQuest“)
Interruption ReQuest (IRQ)
• Son líneas que llegan al controlador de
interrupciones, HW dedicado a la gestión de
interrupciones, puede estar integrado al CPU o
ser un circuito separado conectado al CPU.
• El controlador de interrupciones debe ser capaz
de habilitar o inhibir líneas de interrupción
(operación llamada enmascaramiento), y fijar
prioridades entre las distintas interrupciones
habilitadas. Cuando varias líneas de IRQ se
activan a la vez, el controlador de interrupciones
utilizará estas prioridades para escoger la
interrupción sobre la que informará al CPU.
• Pero hay interrupciones que no se pueden
enmascarar o deshabilitar, las conocidas como
interrupciones no enmascarables o NMI
Interruption ReQuest (IRQ)
• A partir del número de IRQ el SO busca en el
vector de interrupciones qué rutina debe llamar
para atender una petición del dispositivo
asociado a dicha IRQ.
• Las rutinas de interrupción generalmente toman
un pequeño tiempo de ejecución y la mayoría no
pueden ser interrumpidas cuando se están
atendiendo, porque al entrar en ellas se
almacena el estado de los registros en una pila
y si se interrumpen muchas veces, la pila se
puede desbordar
Interruption ReQuest (IRQ)
• Dependiendo del tipo de computadora las IRQ
pueden ser de 8 canales, 16 canales o
superiores.
Antes de la existencia de los dispositivos plug
and play, los usuarios tenían que configurar los
valores IRQ de los dispositivos manualmente
cuando agregaban un dispositivo nuevo al
sistema. A continuación se listan los números
IRQ y para qué eran usados generalmente.
Números IRQ
•
IRQ 0: cronómetro del sistema. Este interruptor
está reservado para el timer del sistema y jamás
está disponible para otros dispositivos.
IRQ 1: controlador del teclado.
IRQ 2: Interrupciones en cascada para las
interrupciones IRQ del 8 al 15.
IRQ 3: Segundo Puerto Serie (COM2). A menudo
es también para el cuarto puerto serie (COM4).
IRQ 4: Primer Puerto Serie (COM1). También es
utilizado por defecto para el COM3.
IRQ 5: Tarjeta de sonido.
IRQ 6: Controlador de Unidad de disco.
Números IRQ
IRQ 7: Puerto Paralelo LPT1 para impresoras o
cualquier otro dispositivo que utiliza puerto
paralelo.
IRQ 8: Reloj del Sistema.
IRQ 9, 10, 11: Interrupción disponible para
periféricos extras.
IRQ 12: Mouse PS/2 o Placa de Red o similares.
IRQ 13: Coprocesador/Unidad de punto flotante
IRQ 14: Canal IDE Primario. En sistemas que no
se utiliza dispositivos IDE, este canal se utiliza
para otros periféricos
IRQ 15: Canal IDE Secundario
Interrupciones de SW
• En procesadores x86, también se
denomina interrupción (o interrupción
software) a las interrupciones causadas
por SW mediante una instrucción en
código ensamblador. Este tipo de
interrupciones se llaman también traps o
excepciones, para distinguirlas de las
interrupciones HW.
Llamadas al Sistema
Son iniciadas por un proceso en ejecución
que ejecute la instrucción SVC.
Una SVC es una petición generada por un
proceso para pedirle al núcleo la ejecución
de una instrucción privilegiada, como realizar
una operación de E/S.
El mecanismo de las SVC ayuda a proteger
al SO de las acciones de los usuarios. Un
usuario no puede entrar arbitrariamente al
SO, sino que debe solicitar un servicio por
medio de una SVC. El SO está al tanto de
todos los usuarios que intentan rebasar sus
limites y puede rechazar ciertas peticiones si
el usuario no tiene los privilegios necesarios
Tipos de Llamadas al Sistema
Llamadas al sistema para administración
de procesos.
Llamadas al sistema para administración
de archivos.
Llamadas al sistema para administración
de directorios.
La API Win32 de Windows.
Arquitectura del sistema UNIX
UNIX es el núcleo de un sistema operativo de tiempo compartido, y entre
otros 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
Características del Núcleo de Linux
• Escrito en lenguaje C, primera capa en
ensamblador.
• 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 de
estándares POSIX.
• Soporta uno o varios microprocesadores (SMP)
symmetric multiprocessing.
• Multitarea.
• Multiusuario.
• Gestión y protección de memoria
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.
Características del Núcleo de Linux
• Todos los dispositivos periféricos son
manejados como archivos. (abstracción)
• Ejecuta algunas aplicaciones Windows a
través del proyecto WINE. Se mantiene
compatibilidad con archivos Windows a
través de los servicios SAMBA.
• Soporta protocolo de redes TCP/IP,
AppleTalk (Macintosh), protocolos de Novell
IPX(Internetwork Packet Exange), SPX
(Sequenced Packet Exange), NCP (NetWare
Core Protocol), y IPv6 la nueva versión de IP.
• Mantiene compatibilidad con una variedad de
dispositivos hardware
Características del Núcleo de Linux
• El núcleo define una interfaz abstracta a los
subsistemas de ficheros denominada VFS
(Virtual File System Interface), que permite
integrar en el sistema varios sistemas de
archivos reales.
• Mantiene una separación entre código fuente
dependiente de la arquitectura y código
fuente independiente de la arquitectura, que
le permite ejecutar Linux en diversas
plataformas como Intel, Alpha, Motorola,
Mips, PowerPC, Sparc, Macintoshes, Sun,
etc. Existen versiones del núcleo especificas
para portatiles, y PAD’s.
Interacción entre modo usuario y
modo núcleo de Linux
1. La interacción o solicitud de un servicio por parte
de un programa de usuario implica los siguientes
pasos:
2. El usuario en su programa solicita una función de
la librería libc.
3. La función de libc, hace una llamada al núcleo a
travé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ódulos
implicados que a su vez llaman a otros hasta llegar
al hardware y realizar la solicitud del usuario.
6. El núcleo hace llegar a la aplicación del usuario el
resultado de su solicitud
Las Llamadas al Sistema en Linux
• En la mayoría de los casos no es necesario
invocar una llamada al sistema directamente,
pero hay veces en que la biblioteca C
estandar carece de una función adecuada.
• Lo importante a conocer sobre una llamada
al sistema es su prototipo. Es necesario
saber cuántos argumentos usa, sus tipos, y
el tipo retornado por la función. Hay seis
macros que facilitan la llamada real al
sistema
Las Llamadas al Sistema en Linux
• Un proceso de usuario no puede acceder a la memoria
del 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 de
usuario rellena los registros con los valores apropiados y
entonces llama a una instrucción especial, que salta a
una posición previamente definida dentro del núcleo (la
posición es legible por los procesos de usuario, pero no
pueden escribir en ella).
• Bajo las CPUs de Intel, esto se hace por medio de la
interrupción 0x80. El HW sabe que una vez que salta a
esta localización, ya no se esta ejecutando en el modo
de usuario, sino en modo núcleo. Y entonces.. se
permite hacer todo lo que se quiera (si se tienen los
conocimientos de programación).
Las Llamadas al Sistema en Linux
• A la posición en el núcleo a la que un proceso
puede saltar se le llama system_call. El
procedimiento en esa posición verifica el
número de la llamada al sistema, que le dice al
núcleo qué servicio ha pedido el proceso. Luego
mira en la sys_call_table para ver la dirección
de la función del núcleo a llamar. A continuación
llama a la función, y después de retornar hace
unas pocas comprobaciones del sistema y luego
regresa al proceso (o a un proceso diferente, si
el tiempo del proceso ha finalizado
Las Llamadas al Sistema en Linux
• Entonces, si queremos cambiar la forma en que
funciona una cierta CS, lo que tenemos que
hacer es escribir nuestra propia función para
implementarla (normalmente añadiendo un poco
de nuestro código y después llamando a la
función original) y entonces cambiar el puntero
que está en sys_call_table para que apunte a
nuestra función. Como es posible que seamos
eliminados más tarde y no queremos dejar el
sistema en un estado inestable, es importante
que cleanup_module restaure la tabla a su
estado original.
Las Llamadas al Sistema en Linux
Tienen la siguiente forma:
_syscallX(tipo,nombre,tipo1,arg1,tipo2,arg2,...)
donde :
 X es 0-5, el número de argumentos usado por la
llamada 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
El puente API/Syscall
• Para que nuestra aplicación de espacio de
usuario pueda emitir una syscall, es necesario
poder realizar la llamada mediante un API. Este
API lo proporciona la librería estándar de C de
nuestro sistema, la libc o glibc en el caso de
Linux. Una de las APIs más comunes del mundo
Unix es la basada en el estándar POSIX. Este
estándar aglutina un conjunto de estándares o
recomendaciones del instituto IEEE, que
intentan definir la base para la realización de SO
abiertos basados en Unix. Linux es considerado
compatible con POSIX.
• Hay que decir que el estándar POSIX se refiere
a las APIs, no a las syscalls, es decir, define un
comportamiento, pero no como lo debe hacer.
• Desde el punto de vista del programador de
aplicaciones, la distinción entre una API y una
syscall es irrelevante, lo único que importa es el
nombre de la función, los tipos de los
parámetros y el valor devuelto.
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);
• }
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 / compartida
8237056
• Memoria en bufers = 5066752
• Swap: total 27881472 / libre 24698880
• Número de procesos = 40
Las Llamadas al Sistema en Linux
• Las llamadas al sistema no tienen porque
retornar sólo códigos de error positivos o
negativos. Es necesario examinar el código
fuente para estar seguro de cómo retornan los
errores. Generalmente, es el negativo de un
código de error estándar, por ejemplo,
-EPERM. Las macros _syscall() devolverán el
resultado r de la llamada al sistema cuando r
no sea negativo, pero devolverán -1 y
establecerán la variable errno a -r cuando r sea
negativo. Para los códigos de error vea errno
(3).
Módulos Cargables
• Un módulo cargable del núcleo es un archivo
que contiene código objeto que puede extender
el núcleo en ejecución.
• La mayoría de los sistemas estilo Unix, y
Windows soportan módulos cargables.
• Son generalmente utilizados para brindar
soporte a nuevos dispositivos de HW y FS, así
como para agregar llamadas al sistema. Cuando
la funcionalidad proveída por un módulo del
núcleo deja de ser requerida, éste puede ser
descargado, liberando su memoria.
Módulos cargables y Drivers
• Un típico empleo para los módulos cargables es
crear controladores de dispositivos de HW.
• Los drivers tienen un rol especial en el núcleo
Linux. Estos son los encargados de esconder
los detalles de cómo un dispositivo funciona
internamente a nivel del HW, permitiendo que
las actividades de los usuarios sean realizadas
mediante un conjunto de llamadas estándar,
independientes del controlador específico que
se está utilizando en realidad.
• Los desarrolladores de módulos cargables
deberían ser cuidadosos de no introducir errores
de seguridad en los módulos que desarrollan. El
lenguaje de programación C, utilizado en la
mayoría de Linux, hace que el introducir errores
sea fácil y muchos problemas de seguridad
suelen deberse a olvidan controlar cuánta
información es almacenada en una porción
asignada de memoria (buffer), derivando en
errores de sobreescritura que podrían ser
utilizados por un usuario malicioso para alterar
la memoria del núcleo y sus módulos.
Drivers
• Un driver es una capa de código entre el
dispositivo de hardware y la aplicación. Un
driver usa los privilegios con los que se
ejecuta su código para definir
exactamente como se quiere que un
dispositivo sea visto por una aplicación.
• El driver está en el kernel.
Drivers
• La idea es que un Driver permita acceder a los
dispositivos de hardware, sin imponer
restricciones arbitrarias a los que usan el driver.
En UNIX esto es una regla de diseño, que se
conoce como separación de mecanismos y
políticas.
• Para no escribir políticas en el driver, se puede
hacer una aplicación de usuario que se
encargue de configurar el dispositivo, y/o una
librería para acceder a él. La idea es que el
driver cambie muy poco
Tipos de Drivers
El 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 un
FS como ext3 o reiserfs son drivers de software,
que mapea estructuras de datos de bajo nivel a
estructuras de datos de más alto nivel
El Scheduler
Gestiona el tiempo de CPU que tiene un
proceso.
Cada cierto tiempo decide si el proceso
actual tiene derecho a seguir en ejecución
(dependiendo de su prioridad y privilegios)
o hacer cambio de contexto.
El Swapping
Consiste en llevar procesos cuyo
tiempo de uso de RAM expira a
memoria secundaria o virtual.
Consiste en traer de la memoria virtual
a los procesos a los que el scheduler
les asigna tiempo de uso de RAM.
Tarea
Investigar 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 una
cuartilla en la indica la importancia de
conocer esta información.
Librerías de Enlace Dinámico (DLL)
• Son elementos indispensables en la
construcción de programas eficientes en
el manejo de memoria RAM.
• Casi todos los lenguajes permiten la
creación de estas librerías.
• En C, se encuentran disponibles gran
cantidad de librerías, como stdio.h,
conio.h, etc. Cada una con funciones y
declaraciones para un determinado fin.
Librerías de Enlace Dinámico (DLL)
• El programador puede crear sus propias
librerías que le ayuden a resolver un
problema particular, y éstas pueden
reutilizarse en otros proyectos.
• Las librerías nos permiten agrupar varias
funciones y variables en un mismo
archivo, de manera que luego podamos
referenciarlas.
Objetivo de las DLL
• El objetivo que se persigue con la
creación de librerías de funciones es
poder aprovechar el mismo código desde
diferentes aplicaciones, lo que supone un
ahorro de código evidente en cada una de
esas aplicaciones.
Definición de DLL
• Una DLL es un archivo ejecutable en
donde se encuentran funciones y/o
Recursos (Bitmaps, Definiciones de
Fuentes,...), que pueden ser utilizados por
cualquier aplicación en RunTime.
• La ventaja de las DLL frente a las
librerías convencionales es que sólo se
cargan en memoria, cuando se necesitan
los recursos de dicha DLL.
Características de DLL
• Las aplicaciones ligan el código de la
librería, reduciendo el espacio de
almacenamiento y evitando la duplicación
de código.
• Si un problema surge, o se quiere añadir
una nueva característica, simplemente se
actualizan las DLL’s y todas las
aplicaciones resultan beneficiadas.
La Carga de una DLL
La carga de una DLL se puede hacer de 2
formas:
1.Enlazado implícito
2.Enlazado explícito
Enlazado Implícito
• Cuando se enlaza una aplicación se debe
pasar una lista de archivos LIB. Los
archivos LIB, en la programación
Windows, contienen una lista de las
funciones que las DLL permiten llamar.
• Cada DLL tiene su correspondiente
archivo LIB.
Enlazado Implícito
• Cuando el enlazador se percata que la
aplicación está llamando a una función
incluida en el archivo LIB de una DLL,
pone información adicional en la imagen
del EXE que indican el nombre de la DLL
que se requiere.
• Luego, cuando el sistema operativo carga
el EXE, recorre esta lista de DLL’s
necesarias y trata de cargarlas una por
una.
Proceso de búsqueda de DLL
Cuando el SO busca una DLL, recorre:
1. El directorio que contiene la imagen del
EXE.
2. El directorio actual del proceso.
3. El directorio de sistema de Windows.
4. El directorio Windows.
5. Los directorios de la variable PATH
Enlazado explícito
• Es posible proyectar una DLL en el
espacio de un proceso en tiempo de
ejecución llamando a la función
LoadLibrary o LoadLibraryEx.
• Ambas funciones tratan de cargar una
DLL en el espacio de direcciones de un
proceso
Ventajas del uso de DLLs
• Una función definida dentro de una DLL
se encuentra disponible para cualquier
aplicación Windows.
• Reducción del tamaño de las aplicaciones
que utilizan la DLL, por la reutilizacion de
su código. Este hecho comporta dos
ventajas añadidas, como son:
Ventajas del uso de DLLs
• Mejora en el tiempo de compilación y/o
carga de la aplicación (el tamaño del
código se ha reducido)
• Ahorro de espacio en disco, esa función
se encuentra una sola vez en el disco,
independientemente del número de
aplicaciones que la usen.
• Las DLLs son independientes de la
aplicación
Desventajas del uso de DLLs
• Tienen que estar presentes antes de ser
usadas.
• Tiempo de Acceso a la DLL por parte de
la aplicación que usa esa DLL.
Acceso a los métodos de una
DLL
• Para poder acceder a las funciones de
esa DLL, existen dos métodos:
–Llamada Estática
–Llamada Dinámica a una DLL
Llamada Estática a DLL
• O Enlace Estático, es un método que
emplea la librería estática (archivo .lib)
generada durante el proceso de creación
de la DLL.
• Durante el proceso de compilación se
produce el enlace entre la DLL y la
aplicación que la va a usar.
• Genera un único archivo ejecutable (.exe)
para Windows.
Llamada Estática a DLL
• A partir de esto, se puede deducir que la
librería queda incluida dentro del archivo
ejecutable.
• Al estar incluida dentro del ejecutable, la
librería se carga al inicio de la aplicación y
se descarga al finalizar la ejecución.
Llamada Estática a DLL
• La llamadas a funciones de la DLL se
realizará de igual forma como se realizan
en forma convencional.
• Esto es debido a que se encuentran en la
misma zona de memoria de la aplicación
y, como se conoce su posición exacta, ya
que se ha fijado durante la carga del
ejecutable.
Inconvenientes de las
llamadas estáticas
• Como la DLL se carga junto como el
ejecutable de la aplicación y se descarga
al finalizar ésta, no hay forma de poder
controlar lo que sucede durante los
procesos de carga y descarga de la DLL.
• Y podría darse el caso que se intente
acceder a una DLL que no se ha podido
cargar en memoria por el motivo que sea.
Inconvenientes de las
llamadas estáticas
• Al estar incluido el archivo .lib dentro del
archivo ejecutable (.exe) de la aplicación,
cualquier cambio en la DLL implicaría una
recompilación de la aplicación, para
obtener dentro del archivo ejecutable.
Inconvenientes de las
llamadas estáticas
• AL incluir el archivo .lib dentro del
ejecutable de nuestra aplicación, hay
incremento del tamaño del archivo exe.
• Esto hace que la DLL esté ocupando
memoria RAM durante toda la ejecución
de la aplicación; aun cuando no se
acceda en ningún momento de la
ejecución de la aplicación, a las funciones
de la DLL.
Llamada Dinámica a DLL
• O Enlace Dinámico, es un método que
emplea la librería dinámica (archivo .dll)
generada durante el proceso de creación
de la DLL.
• El enlace entre la DLL y la aplicación que
la va a usar, se producirá durante la
ejecución de la aplicación.
Llamada Dinámica a DLL
• la Llamada Dinámica apuesta por tener un
mayor control sobre los procesos de
carga/descarga de la DLL, así como
obtener una mayor independencia entre la
DLL y la aplicación que la va a usar.
Llamada Dinámica a DLL
• la DLL no será incluida dentro del
ejecutable, sino que será cargada cuando
sea necesaria y será descargada en el
momento en que ya no sea necesaria.
• Esta carga/descarga de la DLL en función
de su uso, nos permite una mejor gestión
de los recursos, pues no ocupará espacio
en memoria, a menos que sea necesario.
Creación de una DLL en C#
• Considere el siguiente escenario:
• MyLibrary.DLL: archivo que contiene el método
Add que se utilizarán durante la ejecución.
• Add.cs: archivo que contiene el método
Add(long i, long j). Devuelve la suma de sus
parámetros. La clase AddClass, que contiene el
método Add, es un miembro del espacio de
nombres MyMethods.
Creación de una DLL en C#
– MyClient.cs: archivo que contiene el método
Main. Utiliza los métodos del archivo DLL
para calcular la suma y el producto de los
argumentos especificados en tiempo de
ejecución.
Archivo: Add.cs
using System;
namespace MyMethods {
public class AddClass {
public static long Add(long i, long j)
{ return(i+j);
}
}
}
Archivo: MyClient.cs
using 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);
}
}
• La directiva using situada al principio del
archivo permite utilizar los nombres de las
clases sin calificar para hacer referencia a
los métodos de la DLL en tiempo de
compilación, por ejemplo:
– AddClass.Add(num1, num2);
• De lo contrario, sería necesario usar
nombres completos, por ejemplo:
– MyMethods.AddClassClass.Add(num1,
num2);
Compilación
• Para crear el archivo MyLibrary.DLL,
compile los dos archivos Add.cs y Mult.cs
mediante la siguiente línea de comandos:
– csc /target:library /out:MyLibrary.DLL Add.cs
• La opción /target:library indica al
compilador que genere un archivo DLL en
vez de un archivo EXE.
• La opción /out del compilador seguida de
un nombre de archivo se utiliza para
especificar el nombre de archivo de la
DLL. Si no se utiliza, el compilador usa el
primer archivo (Add.cs) como nombre de
la DLL
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 que
genere un archivo EXE y especifica el
nombre del archivo (MyClient.exe). Esta
opción no es de uso obligado. La opción
/reference especifica el archivo o archivos
DLL que utiliza el programa

Mais conteúdo relacionado

Mais procurados

Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosjesusarce
 
INTRODUCCION A LOS SISTEMAS OPERATIVOS
INTRODUCCION A LOS SISTEMAS OPERATIVOSINTRODUCCION A LOS SISTEMAS OPERATIVOS
INTRODUCCION A LOS SISTEMAS OPERATIVOSAnel Sosa
 
Sistemas operativos (1)
Sistemas operativos (1)Sistemas operativos (1)
Sistemas operativos (1)mesiasangeles
 
Clasificación del software
Clasificación del softwareClasificación del software
Clasificación del softwareATM_SSI
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativoYitt Arzate
 
Sistemas operativos y dispositivos de almacenamiento
Sistemas operativos y dispositivos de almacenamientoSistemas operativos y dispositivos de almacenamiento
Sistemas operativos y dispositivos de almacenamientoSaraiCelis
 
Fundamentos de sistemas operativos
Fundamentos de sistemas operativos Fundamentos de sistemas operativos
Fundamentos de sistemas operativos JenniferAnayaM
 
Sistema operativo y dipositivos de almacenamiento
Sistema operativo y dipositivos de almacenamientoSistema operativo y dipositivos de almacenamiento
Sistema operativo y dipositivos de almacenamientobrendanoemigarciaserna
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosdocentecis
 
Que son los sistemas operativos
Que son los sistemas operativosQue son los sistemas operativos
Que son los sistemas operativoschicaruda
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativosmmazonf
 

Mais procurados (20)

Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
INTRODUCCION A LOS SISTEMAS OPERATIVOS
INTRODUCCION A LOS SISTEMAS OPERATIVOSINTRODUCCION A LOS SISTEMAS OPERATIVOS
INTRODUCCION A LOS SISTEMAS OPERATIVOS
 
Sistemas operativos (1)
Sistemas operativos (1)Sistemas operativos (1)
Sistemas operativos (1)
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Clasificación del software
Clasificación del softwareClasificación del software
Clasificación del software
 
Sistemasoperativos
SistemasoperativosSistemasoperativos
Sistemasoperativos
 
Sistemasoperativos
SistemasoperativosSistemasoperativos
Sistemasoperativos
 
Sistemasoperativos
SistemasoperativosSistemasoperativos
Sistemasoperativos
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Sistemas operativos y dispositivos de almacenamiento
Sistemas operativos y dispositivos de almacenamientoSistemas operativos y dispositivos de almacenamiento
Sistemas operativos y dispositivos de almacenamiento
 
Fundamentos de sistemas operativos
Fundamentos de sistemas operativos Fundamentos de sistemas operativos
Fundamentos de sistemas operativos
 
Sistema operativo y dipositivos de almacenamiento
Sistema operativo y dipositivos de almacenamientoSistema operativo y dipositivos de almacenamiento
Sistema operativo y dipositivos de almacenamiento
 
Word excel
Word excelWord excel
Word excel
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Que son los sistemas operativos
Que son los sistemas operativosQue son los sistemas operativos
Que son los sistemas operativos
 
Fundamentos de sistemas operativos final
Fundamentos de sistemas operativos finalFundamentos de sistemas operativos final
Fundamentos de sistemas operativos final
 
Sistemaoperativo
SistemaoperativoSistemaoperativo
Sistemaoperativo
 
Tarea de DFSO COBAEJ #10
Tarea de DFSO COBAEJ #10Tarea de DFSO COBAEJ #10
Tarea de DFSO COBAEJ #10
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 

Semelhante a Qué es un SO

1.- Introduccion a los SO 1ra Parte.pdf
1.- Introduccion a los SO 1ra Parte.pdf1.- Introduccion a los SO 1ra Parte.pdf
1.- Introduccion a los SO 1ra Parte.pdfssuser6353bc
 
Estructura de los Sistemas Operativos
Estructura de los Sistemas OperativosEstructura de los Sistemas Operativos
Estructura de los Sistemas OperativosG Hoyos A
 
1. CaracteríSticas Del Sistema Operativo
1. CaracteríSticas Del Sistema Operativo1. CaracteríSticas Del Sistema Operativo
1. CaracteríSticas Del Sistema OperativoCANDIDO RUIZ
 
TIPOS DE SOFTWARE
TIPOS DE SOFTWARETIPOS DE SOFTWARE
TIPOS DE SOFTWAREJenni2011
 
TRABAJO SISTEMAS OPERATIVOS
TRABAJO SISTEMAS OPERATIVOSTRABAJO SISTEMAS OPERATIVOS
TRABAJO SISTEMAS OPERATIVOScrisstthi
 
Definición de plataformas tecnológicas de software
Definición de plataformas tecnológicas de softwareDefinición de plataformas tecnológicas de software
Definición de plataformas tecnológicas de softwarekatbeca
 
Características de los sistemas operativos
Características de los sistemas operativosCaracterísticas de los sistemas operativos
Características de los sistemas operativosMonica CasJim
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administraMartin Lautrerio
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administradanielvaldez
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administraMartin Lautrerio
 

Semelhante a Qué es un SO (20)

1.- Introduccion a los SO 1ra Parte.pdf
1.- Introduccion a los SO 1ra Parte.pdf1.- Introduccion a los SO 1ra Parte.pdf
1.- Introduccion a los SO 1ra Parte.pdf
 
Estructura de los Sistemas Operativos
Estructura de los Sistemas OperativosEstructura de los Sistemas Operativos
Estructura de los Sistemas Operativos
 
1. CaracteríSticas Del Sistema Operativo
1. CaracteríSticas Del Sistema Operativo1. CaracteríSticas Del Sistema Operativo
1. CaracteríSticas Del Sistema Operativo
 
TIPOS DE SOFTWARE
TIPOS DE SOFTWARETIPOS DE SOFTWARE
TIPOS DE SOFTWARE
 
TRABAJO SISTEMAS OPERATIVOS
TRABAJO SISTEMAS OPERATIVOSTRABAJO SISTEMAS OPERATIVOS
TRABAJO SISTEMAS OPERATIVOS
 
Definición de plataformas tecnológicas de software
Definición de plataformas tecnológicas de softwareDefinición de plataformas tecnológicas de software
Definición de plataformas tecnológicas de software
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Presentación1
Presentación1Presentación1
Presentación1
 
Características de los sistemas operativos
Características de los sistemas operativosCaracterísticas de los sistemas operativos
Características de los sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
que es un sistema operativo
 que es un sistema operativo que es un sistema operativo
que es un sistema operativo
 
Sistemasoperativos
SistemasoperativosSistemasoperativos
Sistemasoperativos
 
Sistemasoperativos
SistemasoperativosSistemasoperativos
Sistemasoperativos
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administra
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administra
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administra
 
5.2 identificar los recursos que administra
5.2 identificar los recursos que administra5.2 identificar los recursos que administra
5.2 identificar los recursos que administra
 
Unidad 1
Unidad 1Unidad 1
Unidad 1
 
Resumen s.m.
Resumen s.m.Resumen s.m.
Resumen s.m.
 

Qué es un SO

  • 1. ¿Qué es un S. O.? Los sistemas operativos son ante todo administradores de recursos; el principal recurso que administra es el hardware de la computadora: los procesadores, los medios de almacenamiento, dispositivos de E/S, dispositivos de comunicación y datos,etc.
  • 2. DATOS ALMACENAMIENTO EXTERNO SISTEMA OPERATIVO ENLACES MEMORIA REAL Y VIRTUAL while (cierto) { bandera[proc_id] = cierto; while (bandera[1-proc_id] == cierto) C P U RESULTADOS DISPOSITIVOS DE E/SUSUARIOS PROGRAMAS RECURSOS ADMINISTRADOS POR EL SO
  • 3. SUBSISTEMAS DE UN SO. SUBSISTEMAS DEFINICIÓN PROCESO Es una estancia de ejecución de un programa identificable y controlable por el sistema operativo. ADMON DE LA MEMORIA Secció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 hacer cada uno de ellos. ENTRADA Y SALIDA Periféricos de E/S de la computadora, que se utilizan para comunicarse. BLOQUEOS Estado del trabajo que significa que no puede continuar mientras no se le asigne un recurso especifico o haya terminado una operación de E/S.
  • 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. SO de Tiempo Real Aquellos en los cuales no tiene importancia el usuario, sino los procesos. Están subutilizados sus recursos con la finalidad de prestar atención a los procesos en el momento que lo requieran. Son construidos para aplicaciones muy específicas como control de tráfico aéreo, bolsas de valores, control de refinerías, control de laminadores. Algunos ejemplos de Sistemas Operativos de tiempo real son: VxWorks, Solaris, Lyns OS y Spectra, QNX, RT Linux.
  • 6. Características SO de Tiempo Real Se dan en entornos en donde deben ser procesados sucesos externos al sistema, en breve tiempo o dentro de ciertos plazos. Procesa ráfagas de miles de interrupciones por segundo sin perder un solo suceso. Población de procesos estática . Poco movimiento de programas entre almacenamiento secundario y memoria. Gestión de archivos orientada más a velocidad de acceso que a utilización eficiente del recurso.
  • 7. SO multitarea Se distinguen por sus habilidades para poder soportar la ejecución de dos o más trabajos activos al mismo tiempo. La CPU siempre tenga alguna tarea que ejecutar, aprovechándola al máximo. Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno está usando el procesador, o un procesador distinto, es decir, involucra máquinas con más de una CPU
  • 8. Características de SO multitarea Mejora la productividad y el uso de recursos. Multiplexa recursos entre varios programas. Generalmente soportan múltiples usuarios que requieren validación para seguridad y protección. Proporcionan contabilidad del uso de los recursos. Múltiples programas activos compitiendo por los recursos del sistema. Ejemplos: Windows, Unix, Linux, OS/2.
  • 9. SO de tiempo compartido Permiten la simulación de que el sistema y sus recursos son todos para cada usuario. El usuario hace una petición a la computadora, esta la procesa tan pronto como le es posible en la terminal del usuario. Le dan a cada usuario la ilusión de que tiene el sistema dedicado para sí mismo. Esto trae como consecuencia una gran carga de trabajo al SO. Ejemplos : Multics, OS/360, OS/2 y DEC-10.
  • 10. Características SO tiempo compartido Programas se ejecutan con prioridad rotatoria que se incrementa con la espera y disminuye después de concedido el servicio. Evitan monopolización del sistema asignando tiempos de procesador. Gestión de memoria proporciona protección a programas residentes. Protección de archivos ya que pueden existir múltiples usuarios accediendo un mismo archivo.
  • 11. SO distribuidos Permiten distribuir trabajos, entre un conjunto de CPU´s en un equipo o en diferentes. Existen dos esquemas básicos: Un sistema fuertemente acoplado es aquel que comparte la memoria y un reloj global. En un sistema débilmente acoplado los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local. Confiables, ya que si un componente del sistema falla, otro componente lo reemplaza. Ejemplos: Sprite, Solaris-MC, Mach, Chorus, Spring, Amoeba, Taos.
  • 12. SO de red Son aquellos sistemas que mantienen a dos o más computadoras unidas a través de algún medio de comunicación con el objetivo de compartir recursos y la información del sistema. Ejemplos: Windows, Linux, Unix.
  • 13. El núcleo del SO Consiste en la parte principal del código del SO, el cual se encargan de controlar y administrar los servicios y peticiones de los recursos SW y HW de los procesos. Es el código que más se utiliza. Reside en RAM, mientras que otras partes del SO son cargadas sólo cuando se necesitan. Se diseñan para realizar el mínimo posible de procesamiento en cada interrupción y dejar que el resto lo realice el proceso apropiado.
  • 14. IMAGEN DEL NUCLEO Figura que muestra como el núcleo actúa como intermediario entre el HW y las aplicaciones del usuario
  • 16. Más sobre el núcleo • No necesariamente se necesita un núcleo para usar una computadora. Los programas pueden cargarse y ejecutarse directamente sobre el HW sin usar ninguna abstracción. Así operaban las primeras computadoras. • Con el tiempo, se empezó a dejar en memoria pequeños programas auxiliares, como el cargador y el depurador, o se cargaban desde memoria de sólo lectura. A medida que se fueron desarrollando, se convirtieron en los fundamentos de lo que llegarían a ser los primeros núcleos de SO.
  • 17. Microkernel • Proporcionan un pequeño conjunto de abstracciones simples del HW, y usan las aplicaciones servidores para ofrecer mayor funcionalidad. • Su enfoque consiste en definir una abstracción muy simple sobre el HW, con un conjunto de primitivas (call system) que implementan servicios del SO mínimos, como la gestión de Threads y la intercomunicación entre procesos.
  • 18. Microkernel • El objetivo principal es la separación de la implementación de los servicios básicos y la política de funcionamiento del sistema. • El SO opera en dos modos: modo usuario y modo núcleo
  • 19. Microkernel • En el modo usuario es donde se ejecutan todas las aplicaciones de los usuarios, las aplicaciones cuentan con un conjunto de instrucciones para operar. • En el modo núcleo están un conjunto de instrucciones privilegiadas que accesan al HW.
  • 20. Microkernel • Entonces se observa que cuando el sistema en ejecución, cambia de modo de operación infinidad de veces, esto lo hace utilizando un mecanismo especial llamado llamadas al sistema.
  • 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 del sistema
  • 22. Interrupciones Evento que altera la secuencia en que el CPU ejecuta 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 se interrumpió. El SO analiza la interrupción y transfiere el control a la rutina apropiada para atenderla. La rutina del manejador de interrupciones procesa la interrupción. Se restablece el estado del proceso anterior a la interrupción. Continúa la ejecución del proceso
  • 23. Interrupciones Una interrupción puede ser iniciada específicamente por un proceso en ejecución (en cuyo caso se suele denominar trap), y se dice que está sincronizada con la operación del proceso) o puede ser causada por algún evento que puede estar relacionado o no con el proceso en ejecución (se dice que es asíncrona con la operación del proceso).
  • 24. Interrupciones Las interrupciones surgen de la necesidades que tienen los dispositivos periféricos de enviar información al procesador principal de un sistema de computación. Cada dispositivo que desea comunicarse con el procesador por interrupciones debe tener asignada una línea única capaz de avisarle que le requiere para una operación. Esta línea es la llamada IRQ ("Interrupt ReQuest“)
  • 25. Interruption ReQuest (IRQ) • Son líneas que llegan al controlador de interrupciones, HW dedicado a la gestión de interrupciones, puede estar integrado al CPU o ser un circuito separado conectado al CPU. • El controlador de interrupciones debe ser capaz de habilitar o inhibir líneas de interrupción (operación llamada enmascaramiento), y fijar prioridades entre las distintas interrupciones habilitadas. Cuando varias líneas de IRQ se activan a la vez, el controlador de interrupciones utilizará estas prioridades para escoger la interrupción sobre la que informará al CPU. • Pero hay interrupciones que no se pueden enmascarar o deshabilitar, las conocidas como interrupciones no enmascarables o NMI
  • 26. Interruption ReQuest (IRQ) • A partir del número de IRQ el SO busca en el vector de interrupciones qué rutina debe llamar para atender una petición del dispositivo asociado a dicha IRQ. • Las rutinas de interrupción generalmente toman un pequeño tiempo de ejecución y la mayoría no pueden ser interrumpidas cuando se están atendiendo, porque al entrar en ellas se almacena el estado de los registros en una pila y si se interrumpen muchas veces, la pila se puede desbordar
  • 27. Interruption ReQuest (IRQ) • Dependiendo del tipo de computadora las IRQ pueden ser de 8 canales, 16 canales o superiores. Antes de la existencia de los dispositivos plug and play, los usuarios tenían que configurar los valores IRQ de los dispositivos manualmente cuando agregaban un dispositivo nuevo al sistema. A continuación se listan los números IRQ y para qué eran usados generalmente.
  • 28. Números IRQ • IRQ 0: cronómetro del sistema. Este interruptor está reservado para el timer del sistema y jamás está disponible para otros dispositivos. IRQ 1: controlador del teclado. IRQ 2: Interrupciones en cascada para las interrupciones IRQ del 8 al 15. IRQ 3: Segundo Puerto Serie (COM2). A menudo es también para el cuarto puerto serie (COM4). IRQ 4: Primer Puerto Serie (COM1). También es utilizado por defecto para el COM3. IRQ 5: Tarjeta de sonido. IRQ 6: Controlador de Unidad de disco.
  • 29. Números IRQ IRQ 7: Puerto Paralelo LPT1 para impresoras o cualquier otro dispositivo que utiliza puerto paralelo. IRQ 8: Reloj del Sistema. IRQ 9, 10, 11: Interrupción disponible para periféricos extras. IRQ 12: Mouse PS/2 o Placa de Red o similares. IRQ 13: Coprocesador/Unidad de punto flotante IRQ 14: Canal IDE Primario. En sistemas que no se utiliza dispositivos IDE, este canal se utiliza para otros periféricos IRQ 15: Canal IDE Secundario
  • 30. Interrupciones de SW • En procesadores x86, también se denomina interrupción (o interrupción software) a las interrupciones causadas por SW mediante una instrucción en código ensamblador. Este tipo de interrupciones se llaman también traps o excepciones, para distinguirlas de las interrupciones HW.
  • 31. Llamadas al Sistema Son iniciadas por un proceso en ejecución que ejecute la instrucción SVC. Una SVC es una petición generada por un proceso para pedirle al núcleo la ejecución de una instrucción privilegiada, como realizar una operación de E/S. El mecanismo de las SVC ayuda a proteger al SO de las acciones de los usuarios. Un usuario no puede entrar arbitrariamente al SO, sino que debe solicitar un servicio por medio de una SVC. El SO está al tanto de todos los usuarios que intentan rebasar sus limites y puede rechazar ciertas peticiones si el usuario no tiene los privilegios necesarios
  • 32. Tipos de Llamadas al Sistema Llamadas al sistema para administración de procesos. Llamadas al sistema para administración de archivos. Llamadas al sistema para administración de directorios. La API Win32 de Windows.
  • 33. Arquitectura del sistema UNIX UNIX es el núcleo de un sistema operativo de tiempo compartido, y entre otros 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. Características del Núcleo de Linux • Escrito en lenguaje C, primera capa en ensamblador. • 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 de estándares POSIX. • Soporta uno o varios microprocesadores (SMP) symmetric multiprocessing. • Multitarea. • Multiusuario. • Gestión y protección de memoria
  • 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. Características del Núcleo de Linux • Todos los dispositivos periféricos son manejados como archivos. (abstracción) • Ejecuta algunas aplicaciones Windows a través del proyecto WINE. Se mantiene compatibilidad con archivos Windows a través de los servicios SAMBA. • Soporta protocolo de redes TCP/IP, AppleTalk (Macintosh), protocolos de Novell IPX(Internetwork Packet Exange), SPX (Sequenced Packet Exange), NCP (NetWare Core Protocol), y IPv6 la nueva versión de IP. • Mantiene compatibilidad con una variedad de dispositivos hardware
  • 37. Características del Núcleo de Linux • El núcleo define una interfaz abstracta a los subsistemas de ficheros denominada VFS (Virtual File System Interface), que permite integrar en el sistema varios sistemas de archivos reales. • Mantiene una separación entre código fuente dependiente de la arquitectura y código fuente independiente de la arquitectura, que le permite ejecutar Linux en diversas plataformas como Intel, Alpha, Motorola, Mips, PowerPC, Sparc, Macintoshes, Sun, etc. Existen versiones del núcleo especificas para portatiles, y PAD’s.
  • 38. Interacción entre modo usuario y modo núcleo de Linux 1. La interacción o solicitud de un servicio por parte de un programa de usuario implica los siguientes pasos: 2. El usuario en su programa solicita una función de la librería libc. 3. La función de libc, hace una llamada al núcleo a travé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ódulos implicados que a su vez llaman a otros hasta llegar al hardware y realizar la solicitud del usuario. 6. El núcleo hace llegar a la aplicación del usuario el resultado de su solicitud
  • 39. Las Llamadas al Sistema en Linux • En la mayoría de los casos no es necesario invocar una llamada al sistema directamente, pero hay veces en que la biblioteca C estandar carece de una función adecuada. • Lo importante a conocer sobre una llamada al sistema es su prototipo. Es necesario saber cuántos argumentos usa, sus tipos, y el tipo retornado por la función. Hay seis macros que facilitan la llamada real al sistema
  • 40. Las Llamadas al Sistema en Linux • Un proceso de usuario no puede acceder a la memoria del 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 de usuario rellena los registros con los valores apropiados y entonces llama a una instrucción especial, que salta a una posición previamente definida dentro del núcleo (la posición es legible por los procesos de usuario, pero no pueden escribir en ella). • Bajo las CPUs de Intel, esto se hace por medio de la interrupción 0x80. El HW sabe que una vez que salta a esta localización, ya no se esta ejecutando en el modo de usuario, sino en modo núcleo. Y entonces.. se permite hacer todo lo que se quiera (si se tienen los conocimientos de programación).
  • 41. Las Llamadas al Sistema en Linux • A la posición en el núcleo a la que un proceso puede saltar se le llama system_call. El procedimiento en esa posición verifica el número de la llamada al sistema, que le dice al núcleo qué servicio ha pedido el proceso. Luego mira en la sys_call_table para ver la dirección de la función del núcleo a llamar. A continuación llama a la función, y después de retornar hace unas pocas comprobaciones del sistema y luego regresa al proceso (o a un proceso diferente, si el tiempo del proceso ha finalizado
  • 42. Las Llamadas al Sistema en Linux • Entonces, si queremos cambiar la forma en que funciona una cierta CS, lo que tenemos que hacer es escribir nuestra propia función para implementarla (normalmente añadiendo un poco de nuestro código y después llamando a la función original) y entonces cambiar el puntero que está en sys_call_table para que apunte a nuestra función. Como es posible que seamos eliminados más tarde y no queremos dejar el sistema en un estado inestable, es importante que cleanup_module restaure la tabla a su estado original.
  • 43. Las Llamadas al Sistema en Linux Tienen la siguiente forma: _syscallX(tipo,nombre,tipo1,arg1,tipo2,arg2,...) donde :  X es 0-5, el número de argumentos usado por la llamada 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. El puente API/Syscall • Para que nuestra aplicación de espacio de usuario pueda emitir una syscall, es necesario poder realizar la llamada mediante un API. Este API lo proporciona la librería estándar de C de nuestro sistema, la libc o glibc en el caso de Linux. Una de las APIs más comunes del mundo Unix es la basada en el estándar POSIX. Este estándar aglutina un conjunto de estándares o recomendaciones del instituto IEEE, que intentan definir la base para la realización de SO abiertos basados en Unix. Linux es considerado compatible con POSIX.
  • 45. • Hay que decir que el estándar POSIX se refiere a las APIs, no a las syscalls, es decir, define un comportamiento, pero no como lo debe hacer. • Desde el punto de vista del programador de aplicaciones, la distinción entre una API y una syscall es irrelevante, lo único que importa es el nombre de la función, los tipos de los parámetros y el valor devuelto.
  • 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. 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 / compartida 8237056 • Memoria en bufers = 5066752 • Swap: total 27881472 / libre 24698880 • Número de procesos = 40
  • 48. Las Llamadas al Sistema en Linux • Las llamadas al sistema no tienen porque retornar sólo códigos de error positivos o negativos. Es necesario examinar el código fuente para estar seguro de cómo retornan los errores. Generalmente, es el negativo de un código de error estándar, por ejemplo, -EPERM. Las macros _syscall() devolverán el resultado r de la llamada al sistema cuando r no sea negativo, pero devolverán -1 y establecerán la variable errno a -r cuando r sea negativo. Para los códigos de error vea errno (3).
  • 49. Módulos Cargables • Un módulo cargable del núcleo es un archivo que contiene código objeto que puede extender el núcleo en ejecución. • La mayoría de los sistemas estilo Unix, y Windows soportan módulos cargables. • Son generalmente utilizados para brindar soporte a nuevos dispositivos de HW y FS, así como para agregar llamadas al sistema. Cuando la funcionalidad proveída por un módulo del núcleo deja de ser requerida, éste puede ser descargado, liberando su memoria.
  • 50. Módulos cargables y Drivers • Un típico empleo para los módulos cargables es crear controladores de dispositivos de HW. • Los drivers tienen un rol especial en el núcleo Linux. Estos son los encargados de esconder los detalles de cómo un dispositivo funciona internamente a nivel del HW, permitiendo que las actividades de los usuarios sean realizadas mediante un conjunto de llamadas estándar, independientes del controlador específico que se está utilizando en realidad.
  • 51. • Los desarrolladores de módulos cargables deberían ser cuidadosos de no introducir errores de seguridad en los módulos que desarrollan. El lenguaje de programación C, utilizado en la mayoría de Linux, hace que el introducir errores sea fácil y muchos problemas de seguridad suelen deberse a olvidan controlar cuánta información es almacenada en una porción asignada de memoria (buffer), derivando en errores de sobreescritura que podrían ser utilizados por un usuario malicioso para alterar la memoria del núcleo y sus módulos.
  • 52. Drivers • Un driver es una capa de código entre el dispositivo de hardware y la aplicación. Un driver usa los privilegios con los que se ejecuta su código para definir exactamente como se quiere que un dispositivo sea visto por una aplicación. • El driver está en el kernel.
  • 53. Drivers • La idea es que un Driver permita acceder a los dispositivos de hardware, sin imponer restricciones arbitrarias a los que usan el driver. En UNIX esto es una regla de diseño, que se conoce como separación de mecanismos y políticas. • Para no escribir políticas en el driver, se puede hacer una aplicación de usuario que se encargue de configurar el dispositivo, y/o una librería para acceder a él. La idea es que el driver cambie muy poco
  • 54. Tipos de Drivers El 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 un FS como ext3 o reiserfs son drivers de software, que mapea estructuras de datos de bajo nivel a estructuras de datos de más alto nivel
  • 55. El Scheduler Gestiona el tiempo de CPU que tiene un proceso. Cada cierto tiempo decide si el proceso actual tiene derecho a seguir en ejecución (dependiendo de su prioridad y privilegios) o hacer cambio de contexto.
  • 56. El Swapping Consiste en llevar procesos cuyo tiempo de uso de RAM expira a memoria secundaria o virtual. Consiste en traer de la memoria virtual a los procesos a los que el scheduler les asigna tiempo de uso de RAM.
  • 57. Tarea Investigar 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 una cuartilla en la indica la importancia de conocer esta información.
  • 58. Librerías de Enlace Dinámico (DLL) • Son elementos indispensables en la construcción de programas eficientes en el manejo de memoria RAM. • Casi todos los lenguajes permiten la creación de estas librerías. • En C, se encuentran disponibles gran cantidad de librerías, como stdio.h, conio.h, etc. Cada una con funciones y declaraciones para un determinado fin.
  • 59. Librerías de Enlace Dinámico (DLL) • El programador puede crear sus propias librerías que le ayuden a resolver un problema particular, y éstas pueden reutilizarse en otros proyectos. • Las librerías nos permiten agrupar varias funciones y variables en un mismo archivo, de manera que luego podamos referenciarlas.
  • 60. Objetivo de las DLL • El objetivo que se persigue con la creación de librerías de funciones es poder aprovechar el mismo código desde diferentes aplicaciones, lo que supone un ahorro de código evidente en cada una de esas aplicaciones.
  • 61. Definición de DLL • Una DLL es un archivo ejecutable en donde se encuentran funciones y/o Recursos (Bitmaps, Definiciones de Fuentes,...), que pueden ser utilizados por cualquier aplicación en RunTime. • La ventaja de las DLL frente a las librerías convencionales es que sólo se cargan en memoria, cuando se necesitan los recursos de dicha DLL.
  • 62. Características de DLL • Las aplicaciones ligan el código de la librería, reduciendo el espacio de almacenamiento y evitando la duplicación de código. • Si un problema surge, o se quiere añadir una nueva característica, simplemente se actualizan las DLL’s y todas las aplicaciones resultan beneficiadas.
  • 63. La Carga de una DLL La carga de una DLL se puede hacer de 2 formas: 1.Enlazado implícito 2.Enlazado explícito
  • 64. Enlazado Implícito • Cuando se enlaza una aplicación se debe pasar una lista de archivos LIB. Los archivos LIB, en la programación Windows, contienen una lista de las funciones que las DLL permiten llamar. • Cada DLL tiene su correspondiente archivo LIB.
  • 65. Enlazado Implícito • Cuando el enlazador se percata que la aplicación está llamando a una función incluida en el archivo LIB de una DLL, pone información adicional en la imagen del EXE que indican el nombre de la DLL que se requiere. • Luego, cuando el sistema operativo carga el EXE, recorre esta lista de DLL’s necesarias y trata de cargarlas una por una.
  • 66. Proceso de búsqueda de DLL Cuando el SO busca una DLL, recorre: 1. El directorio que contiene la imagen del EXE. 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. Enlazado explícito • Es posible proyectar una DLL en el espacio de un proceso en tiempo de ejecución llamando a la función LoadLibrary o LoadLibraryEx. • Ambas funciones tratan de cargar una DLL en el espacio de direcciones de un proceso
  • 68. Ventajas del uso de DLLs • Una función definida dentro de una DLL se encuentra disponible para cualquier aplicación Windows. • Reducción del tamaño de las aplicaciones que utilizan la DLL, por la reutilizacion de su código. Este hecho comporta dos ventajas añadidas, como son:
  • 69. Ventajas del uso de DLLs • Mejora en el tiempo de compilación y/o carga de la aplicación (el tamaño del código se ha reducido) • Ahorro de espacio en disco, esa función se encuentra una sola vez en el disco, independientemente del número de aplicaciones que la usen. • Las DLLs son independientes de la aplicación
  • 70. Desventajas del uso de DLLs • Tienen que estar presentes antes de ser usadas. • Tiempo de Acceso a la DLL por parte de la aplicación que usa esa DLL.
  • 71. Acceso a los métodos de una DLL • Para poder acceder a las funciones de esa DLL, existen dos métodos: –Llamada Estática –Llamada Dinámica a una DLL
  • 72. Llamada Estática a DLL • O Enlace Estático, es un método que emplea la librería estática (archivo .lib) generada durante el proceso de creación de la DLL. • Durante el proceso de compilación se produce el enlace entre la DLL y la aplicación que la va a usar. • Genera un único archivo ejecutable (.exe) para Windows.
  • 73. Llamada Estática a DLL • A partir de esto, se puede deducir que la librería queda incluida dentro del archivo ejecutable. • Al estar incluida dentro del ejecutable, la librería se carga al inicio de la aplicación y se descarga al finalizar la ejecución.
  • 74. Llamada Estática a DLL • La llamadas a funciones de la DLL se realizará de igual forma como se realizan en forma convencional. • Esto es debido a que se encuentran en la misma zona de memoria de la aplicación y, como se conoce su posición exacta, ya que se ha fijado durante la carga del ejecutable.
  • 75. Inconvenientes de las llamadas estáticas • Como la DLL se carga junto como el ejecutable de la aplicación y se descarga al finalizar ésta, no hay forma de poder controlar lo que sucede durante los procesos de carga y descarga de la DLL. • Y podría darse el caso que se intente acceder a una DLL que no se ha podido cargar en memoria por el motivo que sea.
  • 76. Inconvenientes de las llamadas estáticas • Al estar incluido el archivo .lib dentro del archivo ejecutable (.exe) de la aplicación, cualquier cambio en la DLL implicaría una recompilación de la aplicación, para obtener dentro del archivo ejecutable.
  • 77. Inconvenientes de las llamadas estáticas • AL incluir el archivo .lib dentro del ejecutable de nuestra aplicación, hay incremento del tamaño del archivo exe. • Esto hace que la DLL esté ocupando memoria RAM durante toda la ejecución de la aplicación; aun cuando no se acceda en ningún momento de la ejecución de la aplicación, a las funciones de la DLL.
  • 78. Llamada Dinámica a DLL • O Enlace Dinámico, es un método que emplea la librería dinámica (archivo .dll) generada durante el proceso de creación de la DLL. • El enlace entre la DLL y la aplicación que la va a usar, se producirá durante la ejecución de la aplicación.
  • 79. Llamada Dinámica a DLL • la Llamada Dinámica apuesta por tener un mayor control sobre los procesos de carga/descarga de la DLL, así como obtener una mayor independencia entre la DLL y la aplicación que la va a usar.
  • 80. Llamada Dinámica a DLL • la DLL no será incluida dentro del ejecutable, sino que será cargada cuando sea necesaria y será descargada en el momento en que ya no sea necesaria. • Esta carga/descarga de la DLL en función de su uso, nos permite una mejor gestión de los recursos, pues no ocupará espacio en memoria, a menos que sea necesario.
  • 81. Creación de una DLL en C# • Considere el siguiente escenario: • MyLibrary.DLL: archivo que contiene el método Add que se utilizarán durante la ejecución. • Add.cs: archivo que contiene el método Add(long i, long j). Devuelve la suma de sus parámetros. La clase AddClass, que contiene el método Add, es un miembro del espacio de nombres MyMethods.
  • 82. Creación de una DLL en C# – MyClient.cs: archivo que contiene el método Main. Utiliza los métodos del archivo DLL para calcular la suma y el producto de los argumentos especificados en tiempo de ejecución.
  • 83. Archivo: Add.cs using System; namespace MyMethods { public class AddClass { public static long Add(long i, long j) { return(i+j); } } }
  • 84. Archivo: MyClient.cs using 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. • La directiva using situada al principio del archivo permite utilizar los nombres de las clases sin calificar para hacer referencia a los métodos de la DLL en tiempo de compilación, por ejemplo: – AddClass.Add(num1, num2); • De lo contrario, sería necesario usar nombres completos, por ejemplo: – MyMethods.AddClassClass.Add(num1, num2);
  • 86. Compilación • Para crear el archivo MyLibrary.DLL, compile los dos archivos Add.cs y Mult.cs mediante la siguiente línea de comandos: – csc /target:library /out:MyLibrary.DLL Add.cs • La opción /target:library indica al compilador que genere un archivo DLL en vez de un archivo EXE.
  • 87. • La opción /out del compilador seguida de un nombre de archivo se utiliza para especificar el nombre de archivo de la DLL. Si no se utiliza, el compilador usa el primer archivo (Add.cs) como nombre de la DLL
  • 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 que genere un archivo EXE y especifica el nombre del archivo (MyClient.exe). Esta opción no es de uso obligado. La opción /reference especifica el archivo o archivos DLL que utiliza el programa

Notas do Editor

  1. $