sábado, 30 de junio de 2012


Unidad 5
Usos y Tendencias de los Sistemas Distribuidos

5.1 Administración Sistemas Distribuidos
La administración de sistemas distribuidos incluye las actividades como: manejo de la versión y distribución del software, monitoreo de la utilización de los recursos y el mantenimiento del sistema de seguridad, entre otros. 

Los administradores de sistemas distribuidos se ocupan de monitorear continuamente al sistema y se deben de asegurar de su disponibilidad. Para una buena administración, se debe de poder identificar las áreas que están teniendo problemas así como de la rápida recuperación de fallas que se puedan presentar. La información que se obtiene mediante el monitoreo sirve a los administradores para anticipar situaciones críticas. La prevención de estas situaciones ayuda a que los problemas no crezcan para que no afecten a los usuarios del sistema. 


5.1.1 Instalación de Sistemas Operativos Distribuidos
El instalar un sistema operativo no es solo instalar un CD y ejecutarlo, ya que debe configurarse para blindarlo de amenazas y ofrecer mayor seguridad. Una vez instalado el sistema operativo se deben realizar las siguientes acciones:

1. Verificar que el firewall esté habilitado y habilitarlo en caso contrario.
2. Actualizar a las últimas versiones del producto.
3. Verificar las actualizaciones automáticas.
4. Habilitar la protección antivirus.
5. Crear un usuario con permisos no-administrativos y dejar el usuario.
“Administrador” sólo para tareas de instalación y mantenimiento
6. Deshabilitar algunos servicios si es Windows XP.

5.1.2 Configuración de Sistemas Operativos Distribuidos
Instalación Típica
Soporte de instalación del Sistema Operativo (CD con auto-arranque)
Información del Hardware disponible en la máquina destino Drivers de los dispositivos Hardware para el sistema operativo elegido (mínimo la tarjeta gráfica, aunque es muy aconsejable disponer de conexión a Internet)

De forma general, la instalación se compone de los siguientes pasos:
      1. Configuración del dispositivo de arranque en la BIOS
      2. Creación de las particiones en el disco duro
      3. Creación del sistema de ficheros
      4. Selección de paquetes
      5. Configuración
      6. Instalación y configuración de aplicaciones


En el caso concreto de a práctica, se va a instalar un sistema operativo Microsoft Windows. El instalador se subdivide en dos partes fundamentales:

     1. Instalación modo texto: Se encarga de detectar y cargar los controladores necesarios. Permite crear las particiones y sistema de ficheros y finaliza realizando la copia de los ficheros imprescindibles.

     2. Instalación gráfica: encargada de realizar la copia de los ficheros del sistema y aplicaciones del sistema operativo y permite configurar las opciones de internacionalización y de red.




5.2 Estándares
Los estándares son aquellas normas usuales, los propósitos, los objetivos, a alcanzar, las metas a alcanzar y aquellos índices que integran los planes, y todo dato o cifra que pueda emplearse como medida para cumplirlas, son considerados como estándares. 

Estas medidas son indispensables para el control, ya que indican la manera en que deseas que se ejecute una actividad. En la práctica, son los objetivos declarados y definidos de la organización y por esa razón los estándares deben abarcar las funciones básicas y áreas clave de los resultados logrados. 
Un estándar muy utilizado en los sistemas distribuidos es el CORBA, en el cual nos basaremos para explicar este tema.
 CORBA es el estándar para la creación de sistemas distribuidos creado por el Object Management Group (OMG). Pensado para ser independiente del lenguaje, rápidamente aparecieron implementaciones en las que se podía usar casi cualquier lenguaje.



5.3 Tendencias de Investigación Sistemas Distribuidos
Una tendencia reciente en los sistemas de computador es distribuir el cómputo entre varios procesadores. En contraste con los sistemas fuertemente acoplados, los procesos no comparten ni la memoria ni el reloj.  Los procesadores se comunican entre sí a través de diversas líneas de comunicación, como buses de alta velocidad o líneas telefónicas. 

Los procesadores de estos sistemas pueden tener diferentes tamaños y funciones que pueden incluir microprocesadores pequeños, estaciones de trabajo, minicomputadoras y sistemas de computador de propósito general o distribuido. Tales procesadores pueden recibir varios nombres como: sitios, nodos, etc., dependiendo del contexto en que se mencionan.

5.4 Sistemas Distribuidos y la Sociedad
El comportamiento de los usuarios (sociedad) ha variado los últimos años, en los que muchos de ellos ya están introduciendo a este nuevo mundo de tecnología.

El impacto en los sistemas distribuidos dentro de la sociedad ha ayudado a facilitar el trabajo al hombre. Ya que existen medios e interfaces que ayudan a un usuario a interactuar por medio de computadora para realizar infinidades de tareas que anteriormente eran difíciles.Con el uso de ha sido posible el uso de aplicaciones comerciales, aplicaciones de red de área extensa y aplicaciones multimedia.

Esto ha favorecido también al crecimiento económico de una organización o empresa ya sea pública o privada.



 Video Tutorial "Unidad 5"








martes, 19 de junio de 2012

Memoria Compartida Distribuida


Unidad 4
Memoria Compartida Distribuida

Los sistemas de Memoria Compartida Distribuida (MCD) son sistemas que, mediante software, emulan semántica de memoria compartida sobre hardware que ofrece soporte solo para comunicación mediante paso de mensajes. Este modelo permite utilizar una red de estaciones de trabajo de bajo costo como una maquina paralela con grandes capacidades de procesamiento y amplia escalabilidad, siendo a la vez fácil de programar. El objetivo principal de estos sistemas es permitir que un multicomputador pueda ejecutar programas escritos para un multiprocesador con memoria compartida.

Cada uno de los nodos en un sistema de MCD aporta una parte de su memoria local para construir un espacio global de direcciones virtuales que será empleado por los procesos paralelos que se ejecuten en el sistema. El software de MCD se encarga de interceptar las referencias a memoria que hacen los procesos, y satisfacerlas, ya sea local o remotamente. Si los accesos a memoria hacen referencia a posiciones almacenadas remotamente, es necesario llevar a cabo una transferencia a través de la red, con el consecuente overhead que esto conlleva. Por esta razón los sistemas de MCD tienen un comportamiento no uniforme respecto a los accesos a memoria. Sin embargo, a diferencia de los sistemas NUMA, en este caso los procesadores no tienen acceso a memoria remota en forma directa. Es necesario que medie un componente de software para permitir los accesos que no son locales.



4.1 Configuraciones Memoria Compartida Distribuida
Computación Paralela
·        Es un conjunto de procesadores capaces de cooperar en la solución de un problema.
·  El problema se divide en partes. Cada parte se compone de un conjunto de instrucciones. Las instrucciones de cada parte se ejecutan simultáneamente en diferentes CPU.

Técnicas computacionales que descomponen un problema en sus tareas y pistas que pueden ser computadas en diferentes máquinas o elementos de proceso al mismo tiempo.



¿Por qué utilizar computación paralela?
* Reducir el tiempo de procesamiento
-  Resolver problemas de gran envergadura.
- * Proveer concurrencia.
Utilizar recursos remotos de cómputo cuando los locales son escasos.
Reducción de costos usando múltiples recursos "baratos" en lugar de costosas supercomputadoras.
 Ampliar los límites de memoria para resolver problemas grandes.

El mayor problema de la computación paralela radica en la complejidad de sincronizar unas tareas con otras, ya sea mediante secciones críticas, semáforos o paso de mensajes, para garantizar la exclusión mutua en las zonas del código en las que sea necesario.
La computación paralela está penetrando en todos los niveles de la computación, desde computadoras masivamente paralelas usados en las ciencias de larga escala computacional, hasta servidores múltiples procesadores que soportan procesamiento de transacciones. Los principales problemas originados en cada uno de las áreas básicas de la informática (por ejemplo, algoritmos, sistemas, lenguajes, arquitecturas, etc.) se vuelven aún más complejos dentro del contexto de computación paralela.

4.1.1 De Circuitos Basados en Bus, anillo o con conmutador

Arquitecturas de MCD 
Existen varias formas de implantar físicamente memoria compartida distribuida, a continuación se describen cada una de ellas. 
Memoria basada en circuitos: Existe una única área de memoria y cada micro tiene su propio bus de datos y direcciones (en caso de no tenerlo se vuelve un esquema centralizado) 

MCD basada en bus: En este esquema los micros comparten un bus de datos y direcciones por lo que es más barato de implementar, se necesita tener una memoria caché grande y sumamente rápida. 



MCD basada en anillos: Es más tolerante a fallos, no hay coordinador central y se privilegia el uso de la memoria más cercana.



MCD basada en conmutador: Varios micros se conectan entre sí en forma de bus formando un grupo, los grupos están interconectados entre sí a través de un conmutador. 


4.2 Modelos de Consistencia

La duplicidad de los bloques compartidos aumenta el rendimiento, pero produce un problema de consistencia entre las diferentes copias de la página en caso de una escritura. Si con cada escritura es necesario actualizar todas las copias, el envío de las páginas por la red provoca que el tiempo de espera aumente demasiado, convirtiendo este método en impracticable. Para solucionar este problema se proponen diferentes modelos de consistencia, que establezcan un nivel aceptable de acercamiento tanto a la consistencia como al rendimiento. Nombramos algunos modelos de consistencia, del más fuerte al más débil: consistencia estricta, secuencial, causal, PRAM, del procesador, débil, de liberación y de entrada.



4.2.1 Estricta Causal Secuencial Débil, de liberación y de entrada
Consistencia Estricta
El modelo de consistencia más restrictivo es llamado consistencia estricta y es definido por la siguiente condición Cualquier lectura sobre un item de dato x retorna un valor correspondiente con la más reciente escritura sobre x
a) Un almacenamiento estrictamente consistente.
b) Un almacenamiento que no es estrictamente consistente.

Consistencia Causal
El modelo de consistencia causal (Hutto and Ahamad, 1990) es un debilitamiento de la consistencia secuencial. Se hace una diferenciación entre eventos que están potencialmente relacionados en forma causal y aquellos que no. Las operaciones que no están causalmente relacionadas se dicen concurrentes.
La condición a cumplir para que unos datos sean causalmente consistentes es:
Escrituras que están potencialmente relacionadas en forma causal deben ser vistas por todos los procesos en el mismo orden. Escrituras concurrentes pueden ser vistas en un orden diferente sobre diferentes máquinas.

Esta secuencia es permitida con un almacenamiento causalmente consistente, pero no con un almacenamiento secuencialmente consistente o con un almacenamiento consistente en forma estricta.

Consistencia secuencial
La consistencia secuencial es una forma ligeramente más débil de la consistencia estricta. Satisface la siguiente condición:
El resultado de una ejecución es el mismo si las operaciones (lectura y escritura) de todos los procesos sobre el dato fueron ejecutadas en algún orden secuencial y las operaciones de cada proceso individual aparecen en esta operaciones de cada proceso individual aparecen en esta secuencia en el orden especificado por su programa
a) Un dato almacenado secuencialmente consistente.
b) Un dato almacenado que no es secuencialmente consistente.

Consistencia Débil
Los accesos a variables de sincronización asociadas con los datos almacenados son secuencialmente consistentes.

Propiedades
No se permite operación sobre una variable de sincronización hasta que todas las escrituras previas de hayan completado. No se permiten operaciones de escritura o lectura sobre ítems de datos hasta que no se hayan completado operaciones previas sobre variables de sincronización.

Consistencia liberación (Release)
El modelo de consistencia release, RC [27], se basa en el supuesto de que los accesos a variables compartidas se protegen en secciones críticas empleando primitivas de sincronización, como por ejemplo locks. En tal caso, todo acceso esta precedido por una operación seguido por una operación release. Es responsabilidad del programador que esta propiedad se cumpla en todos los programas.

Puesto que ningún otro proceso, ni local ni remoto, puede acceder a las variables que han sido modificadas mientras se encuentren protegidas en la sección crítica, la actualización de cualquier modificación puede postergarse hasta el momento en que se lleva a cabo la operación release.

La operación release no se da por completada hasta que la actualización haya sido propagada a todos aquellos procesadores en donde haya replicas. Con RC, la propagación de un conjunto de modificaciones a memoria compartida se lleva a cabo con un costo fijo.
Propagación de Actualizaciones bajo RC y LRC de código sin proteger. En consecuencia obtuvo un valor inconsistente para la variable leída.

4.3 Mcd en base a Páginas
El esquema de MCD propone un espacio de direcciones de memoria virtual que integre la memoria de todas las computadoras del sistema, y su uso mediante paginación. Las páginas quedan restringidas a estar necesariamente en un único ordenador. Cuando un programa intenta acceder a una posición virtual de memoria, se comprueba si esa página se encuentra de forma local. Si no se encuentra, se provoca un fallo de página, y el sistema operativo solicita la página al resto de computadoras. El sistema funciona de forma análoga al sistema de memoria virtual tradicional, pero en este caso los fallos de página se propagan al resto de ordenadores, hasta que la petición llega al ordenador que tiene la página virtual solicitada en su memoria local. A primera vista este sistema parece más eficiente que el acceso a la memoria virtual en disco, pero en la realidad ha mostrado ser un sistema demasiado lento en ciertas aplicaciones, ya que provoca un tráfico de páginas excesivo.
Una mejora dirigida a mejorar el rendimiento sugiere dividir el espacio de direcciones en una zona local y privada y una zona de memoria compartida, que se usará únicamente por procesos que necesiten compartir datos. Esta abstracción se acerca a la idea de programación mediante la declaración explícita de datos públicos y privados, y minimiza el envío de información, ya que sólo se enviarán los datos que realmente vayan a compartirse.

4.3.1 Diseño Replica Granularidad Consistencia, propietario y copias
Razones para la Replicación  Hay dos razones principales para la replicación de datos:
 Confiabilidad
Continuidad de trabajo ante caída de la réplica Mayor cantidad de copias mejor protección contra la corrupción de datos

Rendimiento
El SD escala en número Escala en área geográfica (disminuye el tiempo de acceso al dato)  Consulta simultánea de los mismos datos, se refiere a la especificidad a la que se define un nivel de detalle en una tabla.

4.4 Mcd en Base a Variables
En los MCD basados en variables busca evitar la compartición falsa ejecutando un programa en cada CPU que se comunica con una central, la que le provee de variables compartidas, administrando este cualquier tipo de variable, poniendo variables grandes en varias páginas o en la misma página muchas variables del mismo tipo, en este protocolo es muy importante declarar las variables compartidas.
La compartición falsa se produce cuando dos procesos se pelean el acceso a la misma página de memoria, ya que contiene variables que requieren los dos, pero estas no son las mismas. Esto pasa por un mal diseño del tamaño de las páginas y por la poca relación existente entre variables de la misma página.
En este esquema la granularidad es más fina ya que sólo se comparten variables que han sido marcados previamente en el código del programa.
Tanto el compilador como el entorno de ejecución se encargan del acceso y compartición de las variables compartidas.

4.5 Mcd en Base a Objetos
En los MCD basados en objetos se busca el acceso a datos por medio de la encapsulación de la información y repartida a través de la red, estos objetos serán definidos por el Programador y las CPU cambiaran los estados según procedan con los accesos. Nace como respuesta a la creciente popularización de los lenguajes orientados por objetos. Los datos se organizan y son transportados en unidades de objetos, no unidades de páginas
Una alternativa al uso de páginas es tomar el objeto como base de la transferencia de memoria. Aunque el control de la memoria resulta más complejo, el resultado es al mismo tiempo modular y flexible, y la sincronización y el acceso se pueden integrar limpiamente. Otra de las restricciones de este modelo es que todos los accesos a los objetos compartidos han de realizarse mediante llamadas a los métodos de los objetos, con lo que no se admiten programas no modulares y se consideran incompatibles.

Ventajas:
·        Es mas modular que otras técnicas.
·        La implementación es más flexible por que los accesos son controlados. Sincronización y accesos se pueden integrar juntos, más fácilmente

Desventajas:
·        No corre en viejos programas para multiprocesadores.
·        Los accesos se deben hacer invocando a los accesos, lo que significa más trabajo que los métodos de páginas compartidas.

¿Qué son los objetos?
Estructura de datos encapsulada definida por el programador. Se componen de datos internos (estado) y operaciones o métodos. Cumplen con la propiedad de ocultamiento dela información, por lo que contribuyen con la modularidad.

No existe una memoria lineal en bruto.‡ La localización y administración de los objetos es controlada por el sistema de tiempo de ejecución.‡ Los objetos se pueden duplicar o no. En caso de duplicarse, hay que decidir cómo se harán las actualizaciones.‡ Evitan el compartimiento falso.

Sus principales desventajas son que no soportan programas multiprocesadores antiguos y el costo adicional que genera el acceso indirecto a los datos.
Una alternativa al uso de páginas es tomar el objeto como base de la transferencia de memoria. Aunque el control de la memoria resulta más complejo, el resultado es al mismo tiempo modular y flexible, y la sincronización y el acceso se pueden integrar limpiamente. Otra de las restricciones de este modelo es que todos los accesos a los objetos compartidos han de realizarse mediante llamadas a los métodos de los objetos, con lo que no se admiten programas no modulares y se consideran incompatibles.

viernes, 8 de junio de 2012


Unidad 3
PROCESOS Y PROCESADORES EN SISTEMAS DISTRIBUIDOS

3.1 Procesos, Procesadores
Conceptos Básicos
Un hilo de ejecución, en sistemas operativos, es una característica que permite a una aplicación realizar varias tareas concurrentemente. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.

Proceso
Un proceso puede informalmente entenderse como un programa en ejecución. Formalmente un proceso es "Una unidad de actividad que se caracteriza por la ejecución de una secuencia de instrucciones, un estado actual, y un conjunto de recursos del sistemas asociados"

3.2 Hilos y Multihilos
Hilos
Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden e ese dato modificado inmediatamente.
Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU (incluyendo el valor de los registros).
El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso es terminado, todos sus hilos de ejecución también lo son. Asimismo en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.

Un ejemplo de la utilización de hilos es tener un hilo atento a la interfaz gráfica (iconos, botones, ventanas), mientras otro hilo hace una larga operación internamente. De esta manera el programa responde de manera más ágil a la interacción con el usuario. También pueden ser utilizados por una aplicación servidora para dar servicio a múltiples clientes.



  

Multihilo
Sincronización de hilos
Todos los hilos comparten el mismo espacio de direcciones y otros recursos como pueden ser archivos abiertos. Cualquier modificación de un recurso desde un hilo afecta al entorno del resto de los hilos del mismo proceso. Por lo tanto, es necesario sincronizar la actividad de los distintos hilos para que no interfieran unos con otros o corrompan estructuras de datos.
Una ventaja de la programación multihilo es que los programas operan con mayor velocidad en sistemas de computadores con múltiples CPU (sistemas multiprocesador o a través de grupo de máquinas) ya que los hilos del programa se prestan verdaderamente para la ejecución concurrente.
Formas de Multihilos
Los sistemas operativos generalmente implementan hilos de dos maneras:

Multihilo apropiativo
Permite al sistema operativo determinar cuándo debe haber un cambio de contexto. La desventaja de esto es que el sistema puede hacer un cambio de contexto en un momento inadecuado, causando un fenómeno conocido como inversión de prioridades y otros problemas.

Multihilo cooperativo
Depende del mismo hilo abandonar el control cuando llega a un punto de detención, lo cual puede traer problemas cuando el hilo espera la disponibilidad de un recurso.
El soporte de Hardware para multihilo desde hace poco se encuentra disponible. 

3.3 Modelos de Procesadores

EVOLUCION DE LOS PROCESADORES
Hablar de procesadores es, sobre todo, hablar de Intel y de AMD, ya que son las empresas que han soportado el peso del desarrollo de estos, ya sea colaborando ambas empresas como en su fase de desarrollos independientes. 

Aunque la historia de los ordenadores comienza bastante antes, la historia de los microprocesadores comienza en el año 1971, con el desarrollo por parte de Intel del procesador 4004, para facilitar el diseño de una calculadora. 

Al mismo tiempo, la empresa Texas Instruments (conocida por el diseño y fabricación de calculadoras) también trabajaba en un proyecto similar, por lo que aun se discute quien fue el creador del primer microprocesador, si Texas Instruments o Intel. Vamos a limitar a la época de los PC (Personal Computer), que podemos decir que comienza en el año 1978, con la salida al mercado del procesador Intel 8086. 

Hablando de la historia de los ordenadores personales y sus procesadores no podemos olvidar a Apple y su Macintosh, ni a Motorola y su Power PC, pero en este tutorial nos vamos a centrar en los procesadores que utilizan los juegos de instrucciones x86 y x64 (los actuales procesadores de 64 bits). 


8086 y 8088 (1978 a 1982)
Son los primeros procesadores utilizados en PC. 

La diferencia entre los 8086 y los 8088 estaba en su frecuencia, que en el caso del 8086 era de unos ''sorprendentes'' 4.77Mhz, pasando en los 8088 a una frecuencia de entre 8 y 10Mhz, pudiendo gestionar 1Mb de memoria. 

Usaban un socket de 40 pines (paralelos 20 + 20) y tenían un bus externo de entre 8 y 16 bits. 

Carecían de instrucciones de coma flotante, pero para implementar estas se podían complementar con el coprocesador matemático 8087, que era el más utilizado, aunque no el único, ni tan siquiera el que ofrecía un mejor rendimiento. 

De los dos modelos, el más utilizado sin duda fue el 8088, que además fue el utilizado por IBM en su IBM PC.

El modelo 8086 aun es utilizado en algunos dispositivos y calculadoras. 


80186 y 80188 (1982 hasta nuestros días)
Se trata de una evolución de los modelos 8086 y 8088. 
Si bien su uso como procesadores para ordenador tuvo muy poco uso e incidencia, siendo utilizado como tal por tan solo un par de fabricantes de PC, no se puede decir lo mismo sobre su importancia, ya que se siguen utilizando en nuestros días (en su versión CMOS), sobre todo por su capacidad de desarrollar las funciones que de otra forma tendrían que estar distribuidas entre varios circuitos. 

En lugar de socket utilizaban una presentación tipo chip (la misma que utilizan hoy como CMOS), con una frecuencia de 6Mhz. 


80286 (1982 a 1986)
Más conocido como i286 o simplemente como 286, se trata de un procesador en el que ya aparece la forma definitiva que llega hasta hoy (cuadrado, con los pines en una de sus caras), insertado en un socket de 68 pines, si bien también hubo versiones en formato chip de 68 contactos. 

Los primeros 80286 tenían una frecuencia de 6 y 8Mhz, llegando con el paso del tiempo a los 25Mhz. 

Funcionaban al doble de velocidad por ciclo de reloj que los 8086 y podían direccionar 16Mb de memoria RAM. 

Los 80286 fueron desarrollados para poder trabajar en control de procesos en tiempo real y sistemas multiusuario, para lo que se le añadió un modo protegido. En este modo trabajaban las versiones de 16 bits del sistema operativo OS/2. En este modo protegido se permitía el uso de toda la memoria directamente, ofreciéndose además una protección entre aplicaciones para evitar la escritura de datos accidental fuera de la zona de memoria asignada (un sistema en buena parte similar al actual Bit de desactivación de ejecución de datos en su funcionamiento). 

Los procesadores 80286 fueron fabricados bajo licencia de Intel por varios fabricantes además de la propia Intel, como AMD, Siemens, Fujitsu y otros. 


80386 (1986 hasta 1994)
La aparición en el año 1986 de los procesadores 80386 (más conocido como i386) supuso el mayor avance hasta el momento en el desarrollo de los procesadores, no solo por lo que supusieron de mejora sobre los 80286 en cuanto a rendimiento, sino porque es precisamente con este procesador con el que se sientan las bases de la informática tal como la conocemos.
Esto llega hasta el punto de que si no fuera por el rendimiento y frecuencias, cualquier programa actual podría funcionar perfectamente en un 80386 (cosa que no ocurre con los procesadores anteriores). 

Se trata del primer procesador para PC con una arquitectura CISC de 32bits e instrucciones x86 de direccionamiento plano (IA32), que básicamente es la misma que se utiliza en nuestros días. 

Al tratarse de procesadores de 32bits podían manejar (en teoría) hasta 4Gb de RAM. 

Fueron también los primeros procesadores a los que se adaptó un disipador para su refrigeración. 

Aclaro lo de ''para PC'' porque Motorola, con su Motorola 68000 para Mac hacia tiempo que ya utilizaba el direccionamiento plano. 

La conexión a la placa base en las primeras versiones es mediante socket de 68 pines, igual al de los 80286 pero no compatibles, por lo que también significó el desarrollo de placas base específicas para este procesador, pasando posteriormente a un socket de 132 pines. 

Con unas frecuencias de entre 16 y 40Mhz, se fabricaron en varias versiones. 

80386 - A la que nos hemos referido hasta el momento. 

i386SX - Diseñado como versión económica del 80386. Seguía siendo un procesador de 32bits, pero externamente se comunicaba a 16bits, lo que hacía que fuera a la mitad de la velocidad de un 80386 normal.

i386SX Now - Versión del 80386SX, pero con el patillaje compatible pin a pin con los procesadores 80286, desarrollado por Intel para poder actualizar los 80286 sin necesidad de cambiar de placa base. 

i386DX - Es la denominación que se le dio a los 80386 para distinguirlos de los 80386SX cuando estos salieron al mercado. 

Este procesador supuso la ruptura de la colaboración de Intel con otros fabricantes de procesadores, lo que tuvo como consecuencia que la gran mayoría de ellos dejaran de fabricar estos. 

La gran excepción fue AMD, que en 1991 sacó al mercado su procesador Am386, totalmente compatible con los i386, lo que terminó con el monopolio de Intel en la fabricación de estos. 

Aunque no se utilizan en ordenadores, este procesador sigue en producción por parte de Intel, habiendo anuncio el fin de esta para mediados de 2007. 


80486 (1989 a 1995)
Más conocidos como i486, es muy similar al i386DX, aunque con notables diferencias. 

De este tipo de procesador ha habido muchas versiones, tanto de Intel como de otros fabricantes a los que les fue licenciado. 

En ocasiones se trataba de procesadores iguales a los de Intel y en otras de diseños propios, como fue el caso de los Am486 de AMD. 

Las frecuencias de estos procesadores fueron creciendo con el tiempo, llegando al final de su periodo de venta a los 133Mhz (en el caso del Am486 DX5 133), lo que lo convirtió en uno de los procesadores más rápidos de su época (y hay que tener en cuenta que los Pentium ya estaban en el mercado). 

Las más frecuentes fueron 25Mhz, 33Mhz, 40Mhz, 50Mhz (con duplicación del reloj), 66Mhz (con duplicación del reloj), 75Mhz (con triplicación del reloj), 100Mhz (con triplicación del reloj) y en el caso de AMD (en los Am486DX5) 120Mhz y 133Mhz. 

En un primer momento también salieron con unas frecuencias de 16Mhz y de 20Mhz, pero estas versiones son muy raras. 

Con respecto a los Am486DX5 133 (también conocidos como Am5x86 133), hay que señalar que se trataba del procesador de mayor rendimiento de su época. 

Las novedades en estos procesadores i486 fueron muchas, como por ejemplo un conjunto de instrucciones muy optimizado, unidad de coma flotante integrada en el micro (fueron los primeros en no necesitar el coprocesador matemático), una caché integrada en el propio procesador y una interface de bus mejorada. Esto hacia que a igualdad de frecuencia que un i386 los i486 fueran al doble de velocidad. 

En cuanto a las versiones de los i486, podemos destacar: 

Intel 80486-DX - La versión modelo, con las características indicadas anteriormente. 

Intel 80486-SX - Un i486DX con la unidad de coma flotante deshabilitada, para reducir su coste. 

Intel 80486-DX2 - Un i486DX que internamente funciona al doble de la velocidad del reloj externo. 

Intel 80486-SX2 - Un i486SX que funciona internamente al doble de la velocidad del reloj. 

Intel 80486-SL - Un i486DX con una unidad de ahorro de energía. 

Intel 80486-SL-NM - Un i486SX con una unidad de ahorro de energía. 

Intel 80486-DX4 - Un i486DX2 pero triplicando la velocidad interna.

Intel 80486 OverDrive (486SX, 486SX2, 486DX2 o 486DX4) - variantes de los modelos anteriores, diseñados como procesadores de actualización, que tienen un patillaje o voltaje diferente. Normalmente estaban diseñados para ser empleados en placas base que no soportaban el microprocesador equivalente de forma directa. 

Pentium (1993 a 1997)
Este procesador fue creado para sustituir al i486 en los PC de alto rendimiento, si bien compartió mercado con ellos hasta el año 1.995, siendo precisamente estos su gran rival, ya que tuvieron que pasar algunos años (y versiones del Pentium) para que superara a los i486 DX4 en prestaciones, siendo además mucho más caros. 

Los primeros Pentium tenían una frecuencia de entre 60Mhz, 66Mhz, 75Mhz y 133Mhz, y a pesar de las mejoras en su estructura, entre las que destaca su arquitectura escalable, no llegaban a superar a los i486 de Intel que en ese momento había en el mercado, y mucho menos a los Cyrix y Am486 DX4. 

En enero de 1997 salió al mercado una evolución de los Pentium llamada Pentium MMX (Multimedia Extensions), al añadírsele a los Pentium un juego de instrucciones multimedia que agilizaba enormemente el desarrollo de estos, con unas frecuencias de entre 166Mhz y 200Mhz. 

Los Intel Pentium MMX utilizaban los socket 7, de 321 pines y entre 2.5 y 5v. Estos socket son los que también utilizaban los procesadores de la competencia de Intel, tanto los AMD K5 y K6 como los Cyrix 6x86. 

Los primeros K5 aparecieron en 1996. Se trataba de unos procesadores basados en la arquitectura RISC86, más próximos a lo que después serían los Pentium PRO y con un nivel de prestaciones desde un principio muy superior a los Pentium de Intel, pero con una serie de problemas, más de fabricación que del propio procesador, que hicieron que los K5 fueran un fracaso para AMD, y si bien los problemas se solucionaron totalmente con la salida de los K6, Intel supo aprovechar muy bien esta circunstancia para imponerse en el mercado de los procesadores para PC. 

Utilizaban para las funciones multimedia las instrucciones MMX, que se habían convertido en el estándar de la época. 

En 1997 salen al mercado los AMD K6. 
Diseñados para trabajar en placas base de Pentium dotadas de socket 7 y con unas frecuencia de entre 166 y 300Mhz, tuvieron una pronta aceptación en el mercado, ya que no solo tenían un precio bastante inferior a los Pentium MMX de Intel, sino también unas prestaciones muy superiores a estos y a los Cyrix 6x86, que se quedaron bastante descolgados. 

Pentium Pro (1995 hasta 1998)
El Pentium PRO no fue diseñado como sustituto de ningún procesador, sino como un procesador para ordenadores de altas prestaciones destinados a estaciones de trabajo y servidores. 

Basado en el nuevo núcleo P6, que más tarde seria adoptado por los Pentium II y Pentium III, utilizaba el socket 8, de forma rectangular y 387 pines, desarrollado exclusivamente para este procesador. 

Con una frecuencia de reloj de 133 y 200Mhz, incorpora por primera vez un sistema de memoria caché integrada en el mismo encapsulado. Esta cache podía ser de 256Kb, 512Kb o de 1Mb. 

Sobresalían en el manejo de instrucciones y software de 32 bits, en máquinas trabajando bajo Windows NT o Unix, pero casi siempre resultaban más lentos que un Pentium (y no digamos que un AMD K6) en programas e instrucciones de 16 bits. 
Estos procesadores no llegaron nunca a incorporar instrucciones MMX. 


Pentium II (comienzos de 1997 a mediados de 1999)
A comienzo de 1.997 Intel saca al mercado a bombo y platillo, y con una campaña de propaganda nunca antes vista para el lanzamiento de un procesador, el Pentium II. 

Se trata de un procesador basado en la arquitectura x86, con el núcleo P6, que fue utilizado por primera vez en los Pentium Pro. 

Con el lanzamiento de este procesador se produce la separación definitiva entre Intel y AMD... y llega la incompatibilidad de placas base entre ambos. 

También se produce por parte de Intel el abandono de los socket, en favor de instalar los procesadores enSlot, en este caso Slot 1, de 242 contactos y de entre 1.3 y 3.3 voltios, que por cierto, sería abandonado posteriormente ante los problemas que este sistema genera. 

Estos procesadores, que como ya hemos dicho estaban basados más en los Pentium Pro que en los Pentium originales, contaban con memoria caché, tanto de nivel L1 (32Kb) como de nivel L2 (512Kb), pero a diferencia de lo que ocurría en los Pentium Pro no estaba integrada en el encapsulado del procesador, sino unida a este por medio de un circuito impreso. Para complicar más el tema, se les dota de instrucciones MMXy se les mejora el rendimiento en ejecuciones de 16bits. 


Klamath
A la venta desde mayo de 1.997, con un FSB de 66Mhz y frecuencias de 233Mhz, 266Mhz y 300Mhz. 
Sustituye a la serie Klamath en enero de 1.998. 
Se comercializa con dos frecuencias de FSB diferentes y con velocidades de entre 266Mhz y 450Mhz. 
- FSB 66Mhz - 266Mhz, 300Mhz y 333Mhz. 
- FSB 100Mhz - 350Mhz. 400Mhz y 450Mhz. 

También, y en un intento por dominar totalmente el mercado cubriendo el espectro de ordenadores más económicos, Intel introduce en 1.998 la gama Celeron. 

En agosto de 1998 Intel saca al mercado una nueva gama de procesadores económicos, denominados Intel Celeron, denominación que llega hasta nuestros días. 
La principal finalidad de esta gama fue y es la de ofrecer procesadores al bajo precio para frenar el avance de AMD. 
En esta fecha, Intel lanza el primer Celeron, denominado Covington. 
Este procesador no era otra cosa que un Pentiun II a 266 o a 300Mhz, pero sin memoria Caché L2. 
Tenían una velocidad superior a los MMX, pero su rendimiento efectivo era bastante pobre, por lo que después de un éxito inicial (basado sobre todo en la fuerza de la marca, más que en las cualidades del producto), Intel se planteó su sustitución. 

Por su parte, AMD no respondió a la salida de los Intel Pentium II hasta mayo de 1.998, con la salida al mercado del nuevo AMD K6-2. 
Este procesador siguió utilizando el socket 7 en las versiones de hasta 550Mhz y el socket Súper7, que permitía el uso de AGP. 
En general, los Mendocinos eran más rápidos en accesos a caché y tenían un excelente rendimiento en operaciones de coma flotante frente a los K6-2, pero estos tenían una mayor velocidad de acceso a memoria y un mejor desempeño multimedia, debido sobre todo a la utilización de un FSB a 100Mhz y al conjunto de instrucciones 3DNow!, que con las debidas actualizaciones y mejoras sigue utilizando AMD en la actualidad. 

La gama de AMD K6-2 iba desde los 233Mhz hasta los 550Mhz, con una caché L1 de 64Kb (32 para instrucciones y 32 para datos, en acceso exclusivo). 

Este procesador, de un gran éxito comercial, afianzó las bases de AMD y permitió el posterior desarrollo de los AMD Athlon. 


Pentium III (1999 hasta 2003)

En febrero de 1999 Intel lanza el sustituto del Pentium II, el Pentium III. 
Entre 1999 y 2003 se produjeron Pentium III en tres modelos diferentes: 

Katmai: De diseño muy similar al Pentium II, introduce el juego de instrucciones SSE, que ya no implica la deshabilitación de la unidad de coma flotante para poder realizar las funciones multimedia, tal como ocurría con MMX, así como un controlador mejorado de caché. 
El Pentium III Katmai utilizaba el mismo Slot 1 que los Pentium II, pero se fabricaron con unos FSB de 100Mhz y de 133Mhz. 
En un principio sus frecuencias eran de 450Mhz y 500Mhz, y en mayo de 1.999 salieron al mercado los Katmai de 550Mhz y 600Mhz. 

Coppermine:A finales de 1.999 sale al mercado la versión Coppermine. 
Esta versión incluye un aumento de caché L2 hasta los 256Kb. 
Esta serie utiliza tanto el Slot 1 como el nuevo Socket 370, introducido en el mercado para estos procesadores. 
Incluso existía un adaptador para poder utilizar los Coppermone 370 en slot 1. 
Se fabricaron con unas velocidades de 500Khz, 533Mhz, 550Mhz, 600Mhz, 650Mhz, 667Mhz, 700Mhz y 733Mhz. 
En el año 2.000 salieron las versiones de 750Mhz, 800Mhz, 850Mhz, 866Mhz, 933Mhz y 1Ghz. 
Esta versión no ha muerto, ya que los primeras consolas Xbox lo utilizan en una versión especial de 900Mhz. 

Tualatin: Introducida en el año 2.001, se trata de la última serie de Pentium III, ya desarrollada solo para socket 370, con unas velocidades de 1.13Ghz, 1.2Ghz, 1.26Ghz y 1.4Ghz y un FSB de 133Mhz. 
Estos procesadores contaban con 256Kb de caché, y en la versión Pentium III-S (versión para servidores), con 512Kb. 
Durante este periodo, Intel también potenció la Gama Celeron, con una serie de mejoras introducidas en este, así como una serie de modelos diferentes: 

Celeron Coppermine-128: En Marzo de 2000, Intel pone finalmente a la venta los nuevos Celeron Coppermine-128, conocidos también como Celeron II. 
Estos procesadores estaban basados en los Pentium III Coppermine, pero con un FSB de 66Mhz y tan solo 128Kb de caché. 
Estos Celeron no destacaban precisamente por su rendimiento, que no supuso una gran mejora sobre el Mendocino.
Se fabricaron en velocidades que iban desde los 533Mhz a los 766Mhz. 

Celeron Tuatalin: En 2002 se introducen los Celeron Tuatalin, basados en los Pentium III del mismo nombre, a los que se les había reducido el FSB a 100Mhz, con la misma caché que los Pentium III, es decir, 256Kb. 

Las primeras versiones de este nuevo Celeron tenían una velocidades de 1Ghz y 1.1Ghz, y se les denomina como Celeron A para diferenciarlos de los Celeron Coppermine de esas velocidades. 
Posteriormente se sacaron al mercado versiones de 1.2Ghz, 1.3Ghz y 1.4Ghz. 

Athlon Classic: Aunque basado en parte en el K6-2, se le mejora notablemente el rendimiento de coma flotante al incorporar 3 unidades que pueden funcionar simultáneamente, incorporando también las instrucciones 3DNow!. También se eleva la caché L1 a 128Kb (64 para instrucciones y 64 para datos) y se le incorporan 512Kb de caché L2, montados externamente (al igual que los P-II y los P-III de slot 1). 
Pero quizás la mayor diferencia la marca la utilización del FSB compatible con el protocolo EV6 de Alpha. Este bus funciona en esta versión a 100Mhz DDR (Dual Data Rate), lo que lo convierte en 200Mhz efectivos. 

AMD Duron: La primera serie de AMD Duron, denominada Spitfire, sale al mercado a mediados de 2.000 para competir en el mercado de los procesadores económicos con los Intel Celeron, batiendo a estos en prestaciones desde el primer momento. 
Esta primera serie no es otra cosa que un Athlon Thunderbird al que se le ha reducido la caché L2 a 64Kb, en lugar de los 256Kb de los Athlon, pero manteniendo el resto de especificaciones, incluido el FSB EV6 de 100Mhz DDR (200Mhz efectivos). 
Tenían en esta versión una frecuencia de entre 600Mhz y 1.2Mhz, un extraordinario rendimiento en operaciones de coma flotante y contaban con las instrucciones 3DNow!. 

En noviembre del año 2.000 Intel saca al mercado el procesador Intel Pentium 4, que estuvieron durante unos años compartiendo mercado con los Pentium III y AMD Athlon y Athlon XP. 




El sistema consta de estaciones de trabajo (PC) dispersas conectadas entre sí mediante una red de área local (LAN).

Los usuarios tienen:
·  Una cantidad fija de poder de cómputo exclusiva.
·  Un alto grado de autonomía para asignar los recursos de su estación de trabajo.

Uso de los discos en las estaciones de trabajo:
Sin disco:
·  Bajo costo, fácil mantenimiento del hardware y del software, simetría y flexibilidad.
·  Gran uso de la red, los servidores de archivos se pueden convertir en cuellos de botella.

Disco para paginación y archivos de tipo borrador:
·  Reduce la carga de la red respecto del caso anterior.
·  Alto costo debido al gran número de discos necesarios.

Disco para paginación, archivos de tipo borrador y archivos binarios (ejecutables):
·  Reduce aún más la carga sobre la red.
·  Alto costo y complejidad adicional para actualizar los binarios.

Disco para paginación, borrador, binarios y ocultamiento de archivos:
·  Reduce aún más la carga de red y de los servidores de archivos.
·  Alto costo.
·  Problemas de consistencia del caché.

Sistema local de archivos completo:
·  Escasa carga en la red.
·  Elimina la necesidad de los servidores de archivos.
·  Pérdida de transparencia.

 

Se dispone de un conjunto de CPU que se pueden asignar dinámicamente a los usuarios según la demanda.
Los usuarios no disponen de estaciones de trabajo sino de terminales gráficas de alto rendimiento.
No existe el concepto de propiedad de los procesadores, los que pertenecen a todos y se utilizan compartidamente.

El modelo de pila es más eficiente que el modelo de búsqueda de estaciones inactivas.
También existe el modelo híbrido que consta de estaciones de trabajo y una pila de procesadores.


3.3.3 Hibrido
- Los trabajos interactivos se ejecutan en las estaciones de trabajo mientras que los no interactivos se ejecutan en la pila de procesadores.

-  El Modelo de las Estaciones de trabajo suele coincidir en la actualidad con la mayoría de las organizaciones.

-  Cuando se utiliza este modelo hay una serie de aspectos a tener en cuenta:
• La asignación de Procesos a los Procesadores.
• Los Algoritmos de Distribución de la Carga.
• La Planificación de los Procesos en un Sistema Distribuido.


Son necesarios algoritmos para decidir cuál proceso hay que ejecutar y en qué máquina.

Para el modelo de estaciones de trabajo:
·       Decidir cuándo ejecutar el proceso de manera local y cuándo es necesario buscar estaciones inactivas o no locales que tienen una conexión a la misma red pero fuera de ella.

Para el modelo de la pila de procesadores:
·       Decidir dónde ejecutar cada nuevo proceso respecto de la misma maquina que es la tabla(lista) de los procesos que se crean dentro de la maquina.


Aspectos del Diseño de Algoritmos de Asignación de Procesadores
Los principales aspectos son los siguientes:
Algoritmos deterministas vs. heurísticos.
Los algoritmos deterministas son adecuados cuando se sabe anticipadamente todo acerca del comportamiento de los procesos, pero esto generalmente no se da, aunque puede haber en ciertos casos aproximaciones estadísticas. Los algoritmos heurísticos son adecuados cuando la carga es impredecible.

Algoritmos centralizados vs. distribuidos.
Los diseños centralizados permiten reunir toda la información en un lugar y tomar una mejor decisión; la desventaja es que la máquina central se puede sobrecargar y se pierde robustez ante su posible falla.

Algoritmos óptimos vs. subóptimos.
Generalmente los algoritmos óptimos consumen más recursos que los subóptimos, además, en la mayoría de los sistemas reales se buscan soluciones subóptimas, heurísticas y distribuidas.

Algoritmos locales vs. globales.
Los algoritmos locales son sencillos pero no óptimos.
Los algoritmos globales son mejores pero consumen muchos recursos.

Algoritmos iniciados por el emisor vs. iniciados por el receptor.


Casi todos los algoritmos suponen que las máquinas conocen su propia carga y que pueden informar su estado:
-  La medición de la carga no es tan sencilla.
-  Un método consiste en contar el número de procesos (hay que considerar los procesos latentes no activos). Otro método consiste en contar solo los procesos en ejecución o listos.
-  También se puede medir la fracción de tiempo que la CPU está ocupada.
-  Otro aspecto importante es el costo excesivo en consumo de recursos para recolectar medidas y desplazar procesos, ya que se debería considerar el tiempo de CPU, el uso de memoria y el ancho de banda de la red utilizada por el algoritmo para asignación de procesadores.
-  Se debe considerar la complejidad del software en cuestión y sus implicancias para el desempeño.
-  Si el uso de un algoritmo sencillo proporciona casi la misma ganancia que uno más caro y más complejo, generalmente será mejor utilizar el más sencillo.

Se debe otorgar gran importancia a la estabilidad del sistema:
-  Las máquinas ejecutan sus algoritmos en forma asíncrona por lo que el sistema nunca se equilibra.

La mayoría de los algoritmos que intercambian información:
-  Son correctos luego de intercambiar la información y de que todo se ha registrado.
-  Son poco confiables mientras las tablas continúan su actualización, es decir que se presentan situaciones de no equilibrio.

 

3.5         Coplanificacion
·      Toma en cuenta los patrones de comunicación entre los procesos durante la planificación.
·      Debe garantizar que todos los miembros del grupo se ejecuten al mismo tiempo.
·      Se emplea una matriz conceptual donde:
·      Las filas son espacios de tiempo.
·      Las columnas son las tablas de procesos de los procesadores.
·      Cada procesador debe utilizar un algoritmo de planificación round robin:
·      Todos los procesadores ejecutan el proceso en el espacio “0” durante un cierto periodo fijo.
·      Todos los procesadores ejecutan el proceso en el espacio “1” durante un cierto periodo fijo, etc.
·      Se deben mantener sincronizados los intervalos de tiempo.
·      Todos los miembros de un grupo se deben colocar en la misma n° de espacio de tiempo pero en procesadores distintos.


La capacidad de procesamiento está distribuida entre varios computadores interconectados.
  • Las actividades del sistema tienen requisitos de tiempo.
  • Necesidad de sistemas distribuidos:
/Requisitos de procesamiento.
/Distribución física del sistema.
/Fiabilidad: Tolerancia a fallos.
  • Los sistemas distribuidos de tiempo real (SDTR) son complicados de realizar.
  • Se consideran sistemas débilmente acoplados.
  • Comunicación mediante mensajes
  • El tiempo de comunicación es significativo.
  • Ej. Sistemas multimedia, SCADA, aviónica, fabricación integrada, robótica.
  • Distintos tipos de requisitos temporales
  • Se consideran, fundamentalmente, sistemas críticos