viernes, 16 de julio de 2010

Concurrencia vrs Paralelismo

Concurrencia
La concurrencia es cuando EXISTE mas de un proceso para ser atendido por el CPU, sin embargo en un instante de tiempo puede ser atendido unicamente un proceso por lo cual existen mecanismos para ejecutar simultaneamente multiples procesos dando la falsa espectativa que todos los procesos son atendidos en el mismo instante. Para lograr la el procesamiento concurrente es necesario software capaz de organizar los procesos (Sistema Operativo)

Palalelismo
El paralelismo es cuando se EJECUTA mas de un proceso en la misma praccion de tiempo, para esto debe haber un soporte de hardware (multiples procesadores).

Programacion:
En programacion, existe el termino thread que significa en español hilo. Este hilo se refiere a que un proceso (instancia de un programa)(ejecucion del codigo) puede estar compuesto por multiples hilos, en caso que se este ejecutando el proceso concurrentemente, a cada hilo le corresponde un cuantum de tiempo del procesador con la diferencia que cuando muere el proceso padre mueren los hilos.
Sin embargo la programacion por hilos o programacion concurrente es el camino para tener aplicaciones capaces de optimizar el uso de multiples procesadores, debido a que en un sistema que procesa paralelamente, cada hilo es asignado a un procesador maximizando los recursos del sistema.

jueves, 15 de julio de 2010

Administracion de Procesos

Existe el termino CONCURRENCIA, que se refiere en el contexto de los procesos y los procesadores a la capacidad que tiene un procesador de atender uno o muchos procesos simultaneamente.
No debemos confundir la palabra Concurrencia que es atender muchos procesos simultaneamente con el Paralelismo que es atender muchos procesos en el mismo instante, para lo cual se precisa de multiples procesadores.

Entonces para que se atiendan multiples procesos de forma concurrente (simultanea), debe existir un administrador de procesos el cual es encargado de alistar los procesos para ser procesados por el procesador, asignarles un cuantum de tiempo especifico a cada proceso, verificar que se cumpla este cuantum de tiempo, colocar en espera el proceso cuando ha cumplido su cuantum de tiempo y verificar cando se ha concluido un proceso. En resumen el administrador de procesos es el encargado de seleccionar el proceso de turno para que sea ejecutado por el CPU.

Proceso
Ahora que hablamos sobre procesos, se entiende como un proceso a la ejecucion de un programa o aplicacion, estos procesos son alojados en la memoria antes de ser atendidos por el CPU, existen dos tipos de procesos, el primero son los procesos del kernel que se ejecutan en modo privilegiado, y el segundo timpo de procesos que son los de usuario, estos se ejecutan sin privilegios.

Programa o Aplicacion
Un programa es una coleccion de codigos guardada en el disco duro o en una unidad de almacenamiento, este programa se convierte en proceso cuando es ejecutado por el procesador.

Analogia de diferencia entre programa y proceso:
  • Programa: Receta de cocina
  • Proceso: Cocinar esa receta.
  • Programa: Recorrido de un viaje.
  • Proceso: Viajar.
  • Programa: Libro
  • Proceso: Leer el libro.

Para que un procesador sea capaz de ejecutar procesos concurrentemente (rimultaneamente), es necesario que asigne estados a cada uno de los procesos, los estados existentes que pueden tomar los procesos son:
Creado  =  Created
Listo  =  Ready
En Ejecucion  =  Running
Suspendido  =  Waiting
Terminado  =  Terminated


PCB = Process Control Block
El sistema operativo, encargado de la gestion de procesos. Crea una estructura para cada proceso que quiere ser atendido por el CPU, a esta estructura se le llama BLOQUE DE CONTROL DEL PROCESO, en ella se almacena:
  • El identificador del proceso
  • El estado (Creado, Listo, Ejecutando, Esperando o Terminado).
  • El cuantum de tiempo
  • Con tador del proceso.
  • Valor del registro de CPU
  • Ubicacion y espacio utilizado en la memoria
  • Recursos asignados al proceso
  • Estadisticas del proceso.
  • Datos del propietario del proceso
  • Permisos del proceso.
  • Señales pendientes de ser atendidas.
Cuando un proceso quiere hacer presencia y que sea considerado por el administrador de procesos es necesario que cuente con su estructura PCB y cuando el proceso ha terminado la estructura PCB asociada es eliminada para dejar libre el registro y que un nuevo proceso pueda hacer uso de este espacio.

Listas existentes dentro del Administrador de Procesos:
  • Lista de Procesos, es una estructura circular donde estan todos los procesos listados, con su apuntador a su descriptor.
  • Lista de Procesos Listos, es la estructura que contiene los descriptores de los procesos que estan listos para ser ejecutados, estos son procesos candidatos para ser atendidos por el CPU.
  • Listado de Procesos en Espera, es la estructura que contiene los descriptores de procesos que han sido interrumpidos o que estan en espera de una señal.

miércoles, 14 de julio de 2010

Sistemas Operativos

El sistema operativo es una interface entre el usuario y el hardware, es decir, el sistema operativo es el encargado de gestionar los recursos de hardware basandonos en las peticiones de los usuarios.
Este sistema se encuentra en todo aparato que cuente con un microporocesador por ejemplo computadora, celulares, microhondas, refrigeradores, etc..

 Las funciones principales de un sistema operativo son:
  • Administrar la memoria
  • Conocer donde inicia y termina cada segmento de memoria, decidir que informacion se traslada a memoria y cual se recupera de la memoria, organizar y distribuir el espacio de la memoria.
  • Administrar el CPU
  • Crear, distribuir, parar y reanudar tareas de los procesos (programas en ejecucion)
  • Administrar dispositivos de E/S 
  • Guarda temporalmente informacion en la memoria cache.
  • Administrar Archivos
  •  Crear, modificar y eliminar archivos y carpetas, encargado de la forma de administracion de los archivos por ejemplo FAT32, NTFS, EXT2, EXT3, ReiserFS entre otros.
  • Administrar Almacenamiento Secundario
  • Es la administracion del desco o de los discos duros, el espacio disponible, la forma en que se almacena y se busca la informacion.

Las llamadas del sistema operativo son funcionalidades que este mismo presta, por ejemplo si una aplicacion de software nececita el uso de el cd-rom, existe en el SO una llamada la cual permite el uso de este periferico, de esta manera cada SO tiene sus llamada especificas. Cuando se cambia de SO a una version mas nueva hay que tener cuidado debido a que estas llamadas pueden cambiar y con ello deje de funcionar correctamente nuestro software. Entonces para concretar una llamada es cuando el software de aplicacion nececita utilizar algun hardware del sistema.

Caso contrario cuando el hardware del sistema nececita llamar a un software especifico, a esto se le conoce como una interrupcion del sistema, son utilizadas frecuentemente cuando el hardware esta ejecutando una accion y al concluir hace una interrupcion avisando que se el hardware esta libre y que puede ser utilizado nuevamente. Tambien cuando ha ocurrido un error en el hardware es necesario notificarlo al sistema operativo y a esto se le llama excepcion.

  • Llamada: Software nececita comunicarse con el hardware
  • Interrupcion: Hardware nececita comunicarse con el software.
  • Excepcion: Hardware nececita notificar un error al SO.


Administrador de Tareas:
  • Monotarea: se puede ejecutar una aplicacion simultaneamente aparte de los procesos utilizados por el SO, este proceso deja de utilizar los recursos hasta qaue termina todas sus tareas.
  • Multitarea: se pueden ejecutar diferentes aplicaciones simultaneamente, esto quiere decir que podemos estasr escuchando musica, escribiendo, utilizando un navegador y una sesion de chat abierta porque la multitarea asigna tiempos pequeños al procesador para atender la tarea en cuestion, la memoria, los perifericos son compartidos.

Administracion de Usuario:
  • Monousuario: permite ejecutar programas de un usuario al mismo tiempo.
  • Multiusuario: muchos usuarios pueden ejecutar programas al mismo tiempo, por lo general estos sistemas operativos tienen proteccion para sincronizar los datos que estan siendo alterados.

Manejo de Recursos:
  • Centralizado: se permite utilizar recursos de una sola computadora.
  • Distribuido: permite utilizar recursos de muchas computadoras simultaneamente (CPU, Memoria, Disco Duro).

martes, 13 de julio de 2010

Alta Disponibilidad

La alta disponibilidad es cuando un sistema resuelve las nececidades de los usuarios en un porcentaje de tiempo elevado, las nececidades del usuario pueden ser escribir un dato en el sistema, leer un dato en el sistema, procesar un dato en el sistema.
Existen dos tipos de inactividades que son las causas de que el usuario no pueda trabajar con el sistema y por consiguiente no hay alta disponibilidad, estas son:
Inactividad Programada
Inactividad No Programada

La inactividad programada son todas aquellas interrupciones del sistema que se llevan a cabo con hecho pensado, entre las cuales destacamos el mantenimiento, actualizacion de sistema operativo, antivirus u otro software. En algunas ocaciones no se toman en cuenta para medir la disponibilidad del sistema pero lo correcto es incluir este tiempo de inactividad para obtener el porcentaje de dispoinibilidad de servicio.

Las inactividades no programadas son aquellas que ocurren accidentalmente y sin acto de meditacion o de voluntad por ejemplo cuando se corta la corriente, algun ataque de virus, denegaciones de servicio por stress del sistema, fallas en el cableado de red, errores internos en el software entre otros, estas inactividades son las que frecuentemente se toman en cuenta para proporcionar un dato porcentual de funcionamiento del sistema.

Es prudente hablar del tiempo de recuperacion, es importante medir el tiempo de recuperacion ante diferentes tipos de inactividades debido a que este dato es fundamental para poder proporcionar a nuestros clientes un porcentaje real del tiempo de disponibilidad. Existen ocaciones en que el tiempo de recuperacion es demaciado grande o incluso infinito por ejemplo el caso de un incendio o una inundacion, para lo cual es prudente estar preparado con un plan de continuidad el cual nos garantice recuperarnos en un tiempo prudente.

La inactividad del sistema es tolerable por parte del usuario, por ejemplo imaginemos que queremos entrar a la banca electronica de nuestro banco y esta se encuentra deshabilitada por mantenimiento, como usuarios intentamos mas tarde y no hay mayor inconveniente incluso cuando sera muy preciso saber el dato, nosotros como usuarios vamos a esperar. Lo que definitivamente el usuario no puede permitir es la perdida de datos o la inconsistencia de los mismos, imaginemos el mismo caso del banco, de nada nos sirve que este disponible en un 99.999999% del tiempo si cada vez que consulto mi saldo es diferente y sin una justificacion aceptable, o que cuando quiera entrar a mi cuenta me aparezcan menos de los depositos que yo he realizado.

El calculo del porcentaje de disponibilidad se lleva a cabo de la siguiente forma:
porcentaje_disponibilidad =1- tiempo_inactividad / tiempo_año

Por ejemplo:
1 - 11dias / 365dias = 0.9698, en porcentaje seria 96.98% de disponibilidad anual.



Índice de disponibilidadDuración del tiempo de inactividad
97%11 días
98%7 días
99%3 días y 15 horas
99,9%8 horas y 48 minutos
99,99%53 minutos
99,999%5 minutos
99,9999%32 segundos

Solucion
Para proporcionar un sistema de alta disponibilidad es sencillo, debemos instalar un cluster de equipos que tengan el mismo nivel de servicio y un balanceador de disponibilidad.

La logica consiste en dos o mas servidores que tengan la misma informacion replicada entre ellos, el balanceador de disponibilidad verifica si el servidor esta funcionando y en caso deje de funcionar el balanceador redirecciona el trafico de los usuarios hacia el servidor de respaldo, el cual es bueno mencionar que tiene la misma informacion replicada del servidor principal y que resuelve las peticiones de forma similar. Finalmente cuando se ha restablecido el servidor principal, este se pone en linea, se actualizan los datos que han sido modificados en el cluster respaldo.

Nota: no debemos confundir el cluster de alta disonibilidad que garantiza funcionamiento continuo con el cluster de alto rendimiento que su funcionalidad es balancear las cargas en multiples servidores para que se procesen mas rapido los datos.


Software:
Existen multiples sistemas operativos que incluyen software para configurar la alta disponibilidad, entre ellos:
  • HearBeat
  • Idirectord y LVS (Linux Virtual Server)
  • Pirahna
  • UltraMonkey
  • Kimberlite








domingo, 4 de julio de 2010

Multiprocesamiento

El multiprocesamiento se refiere a un equipo de computo, con dos o mas procesadores que trabajan de forma simultanea pero ocupan la misma memoria.

No debemos confundir la falsa apariencia que dan los actuales procesadores al permitirnos ejecutar multiples tareas "simultaneamente", esto en realidad no sucede asi.

Los procesadores actuales tienen la capacidad de ejecutar multiples aplicaciones "simultaneamente" porque se otorgan pequeños intervalos de tiempo del procesamiento a cada aplicacion por ejemplo. si estamos navegando en internet, escribiendo un documento y escuchando musica, tenemos 3 aplicaciones activas en memoria y aparentemente todas se ejecutan a la vez, pero no sucede asi, el procesador es asignado una fraccion tan pequeña de tiempo para cada una de las 3 aplicaciones que las 3 son percibidas como que se ejecutan "simultaneamente" pero en realidad solo es una la que se ejecuta y las otras dos aplicaciones esperan su porcion de tiempo de procesador para ser ejecutadas, como repito es tan minimo el tiempo que se asigna de procesador a cada tarea que el usuario no lo persibe de esa forma.

El multiprocesamiento es caro, debido a que no solo consta de tener un equipo con dos procesadores y una memoria en comun, debe existir la tecnologia de sincronizacion y asignacion de tareas especifica, sistema operativo), porque en caso un procesador deje de funcionar los otros procesadores deben tomar procesamiento de procesador arruinado.

El multiprocesamiento es escaso y ha tenido lugar en aplicaciones de requerimientos grandes como lo es el procesamiento de datos masivos, la renderizacion de videos 3D, bases de datos entre otros.

Para que una aplicacion aprobeche el potencial de contar con un equipo hardware de multiple procesador debe estar programada en hilos, para que cada hilo sea ejecutado en cada procesador.

viernes, 2 de julio de 2010

Compilacion vr. Interpretacion

Debemos tener claro las generaciones de codigo que existen, las cuales vamos a resumir como primer generacion es el codigo de maquina, el unico entendible por la computadora. Segunda generacion es el codigo ensamblador o de tres direcciones. La tercera generacion de codigo son los lenguajes estructurados y orientados a objetos, La cuarta generacion son los lenguajes que no se ejecutan ordenes sino se solicita funcionalidad y el lenguaje genera el resultado tipo SQL.

Todas estas generaciones a escepcion de la primera generacion, deben ser compilados/interpretados para llegar a el mas bajo nivel que seria la primer generacion, donde el codigo son ceros y unos que son la unica instruccion que entiende la computadora.

Compilacion:
+ Se ejecuta con mas velocidad
+ Se compila una vez y se ejecuta muchas veces.
- Ocupa menos espacio en memoria
- La compilacion es para un equipo con una arquitectura especifica, es decir, la compilacion es dependiente de la plataforma.

FUENTE -> TRADUCCION -> OBJETO -> EJECUTABLE

Interpretacion:
+ Proporciona buen soporte para la depuracion.
+ Facil de identificar el error en el codigo.
+ Programas idependientes de la plataforma.
- Las aplicaciones interpretadas ocupan mas espacio en memoria y requieren mas CPU.
- La velocidad de ejecucion es menor que la de un programa compilado.

FUENTE -> INTERPRETE -> INSTRUCCION PARA LA MAQUINA VIRTUAL



.Net
1. Se escribe el archivo con codigo (C#, J#, Visual Basic) en el entorno de desarrollo.
2. Se compila el proyecto con el compilador llamado IL_Compiler
3. Este utiliza CTS (Common Type System) sistema de compatibilidad ante multiples lenguajes.
4. Esta compilacion genera el codigo intermedio MSIL.
5. Se instala la maquina virtual que se llama Excecution Support.

Java
1. Se escribe el archivo con codigo java y se guarda como nombre.java
2. Se compila nombre.java con el compilador llamado JAVAC.ç
3. La compilacion devuelve el codigo intermedio ByteCode, este es libre de plataforma.
4. Se instala una MAQUINA VIRTUAL DE JAVA, especifica para cada plataforma.
5. Sobre esa maquina virtual especifica de la plataforma se ejecutan los ByteCode para hacer uso de la aplicacion.

Nota:
.Net y Java son semejantes desde el punto de vista que ambos son compilados inicialmente y posteriormente interpretados por sus respectivas maquinas virtuales.
La diferencia radica en que java utiliza la maquina virtual con el objetivo de hacer sus aplicaciones multiplataforma mientras que .net utiliza su maquina virtual para integrar multiples lenguajes de programacion.

jueves, 1 de julio de 2010

Memoria RAM vr. Memoria ROM

La memoria RAM no es la misma que la memoria ROM, aunque asi parezco o aunque sea tema de confucion de muchas personas.
Ambas tienen diferentes funcionalidades y diferentes formas de operar, lo cual marca su diferencia.

Memoria RAM:
La memoria RAM, llamada asi por sus siglas en ingles de Random Access Memory en español memoria de acceso aleatorio.

Esta memoria teine la caracteristica de almacenar informacion de fomra referencial en su interior, es decir, los programas que ejecutamos en la computadora se almacenan en esta memoria y no siempre se almacenan donde mismo, mas bien, los registros le asginan un espacio aleatorio a nuestros programas para que se alojen alli mientras dure la ejecucion. Principalmente por esto su nombre de acceso aleatorio.

Tambien tiene la caracteristica que es una memoria volatil, esto significa que si hay informacion almacenada en la memoria RAM y cortamos la corriente electrica, nuestra informacio se pierde, es por este motivo que cuando desconectamos la computadora o se va la electricidad en nuestra casa, todos los programas que se estavan ejecutando se cierran inclusive el sistema operativo.

Finalmente esta memoria tiene la capacidad de ser Leida y Escrita, es decir, permite que leamos de ella y que escribamos sobre ella.

Memoria ROM:
Por otro lado existe la memoria ROM, esta a diferencia de la memoaria RAM, solo permite la lectura de informacion y no la escritura de informacion por lo cual la memoria ROM es utilizada para almacenar rutinas de arranque de la computadora, secuencias de ejecucion establecidas como revisiones de sistema periodicas o deteccion de dispositivos. Esta memoria ROM es donde esta almacenado el BIOS de la computadora.

Tambien la memoria ROM esta diseñada para no ser volatil, es decir, la informacion guardada en ella no se borra cuando apagamos la coputadora o cuando inclusive cortamos la corriente.

Resumen:
  • Memoria RAM, es donde se almacenan los programas que ejecutamos en nuestra computadora, es un acceso aleatorio, es volatil (se pierde la informacion cuando se corta la corriente) y tiene la capacidad de lectura y escritura por parte del usuario.
  • Memoria ROM, es donde se almacenan las rutinas de arranque y de revision de perifericos de la computadora, es un acceso directo, no es volatil (su informacion no se pierde cuando se corta la corriente) y tiene la capacidad de lectura unicamente. por lo cual es ideonea para el BIOS.