Diseño de la colección: Editorial UOC Primera edición digital en lengua castellana: noviembre 2013 Este capítulo procede de la obra: Escaneando la informática (Joan Arnedo Moreno, Jordi Cabot Sagrera, Isabel Guitart Hormigo, Francisco Javier Noguera Otero, Rafael Macau Nadal, Maria Jesús Marco Galindo, Josep Maria Marco Simó, Joan Antoni Pastor Collado, Josep Prieto Blázquez, Dani el Riera R iera Terrén, Jordi Tubella Murgadas, José Ramón Rodríguez Bermúdez, M. Elena Rodríguez González, Ramon Segret Sala) publicada en 2010, con ISBN: 978-84-9788-110-4 © , , del texto. © Editorial UOC, de esta edición Gran Via de les Corts Catalanes, 872, 3ª. planta, 08018 Barcelona www.editorialuoc.com Realización editorial: Oberta UOC Publishing, SL SL Código del capítulo: 978-84-9788-925-4/00 978-84-9788-925-4/00
Ninguna parte de esta publicación, incluido el diseño general y la cubierta, puede ser copiada, reproducida, almacenada o transmitida de ninguna forma, ni por ningún medio, sea éste eléctrico, químico, mecánico, óptico, grabación, fotocopia, o cualquier otro, sin la previa autorización escrita de los titulares del copyright.
Autor
Jordi Tubella Murgadas Licenciado y Doctor en Informática para|por la UPC, es Profesor Titular de Universidad en la UPC y Profesor Consultor en la UOC desde 1997. A nivel de docencia ha sido profesor responsable de las asignaturas de tipo introductorio dentro del área de arquitectura de computadores. Actualmente es el Jefe de Estudios de la Fase de Selección en la FIB (Facultad de Informática de Barcelona de la UPC). Forma parte del grupo de investigación ARCO (Arquitectura i Compiladors), especializándose en el diseño de procesadores con el objetivo de elevar las prestaciones en cuanto a rendimiento y de disminuir el consumo que requieren.
© Editorial UOC
9
Índice
Índice
Capítulo II. Arquitectura de los sistemas informáticos, Jordi Tubella Murgadas ................................................................................
47
1. Introducción ........................................................................................ 2. Software de los sistemas informáticos .................................................. 2.1. Aplicaciones web .......................................................................... 2.2. Sistemas distribuidos .................................................................... 2.3. Sistema operativo ........................................................................ 3. Hardware de los sistemas informáticos ................................................ 3.1. Unidad central de proceso .......................................................... 3.2. Subsistema de memoria .............................................................. 3.3. Subsistema de entrada/salida ...................................................... 3.4. Buses ............................................................................................ 4. El sistema binario .................................................................................. 5. Historia .................................................................................................. 6. Salidas profesionales ............................................................................
47 49 49 52 54 56 57 59 60 62 63 65 69
© Editorial UOC
47
Arquitectura de los sistemas informáticos
Capítulo II
Arquitectura de los sistemas informáticos Jordi Tubella Murgadas
1. Introducción Los sistemas informáticos constituyen, hoy día, un pilar fundamental en el que se sustentan organizaciones de todo tipo para dar apoyo a sus actividades, organizaciones que van desde grandes compañías o ministerios públicos a pequeñas asociaciones de personas o microempresas. Aquí nos referiremos a los sistemas informáticos como los conjuntos de computadores, periféricos, redes y programas que interactúan para dar un servicio o producto concreto. El componente computacional tiene que permitir introducir, almacenar, procesar y visualizar la información que gestiona y los servicios y productos que proporciona, no sólo de la manera más correcta y efectiva, sino también de la manera más cómoda e intuitiva para las personas que interactúan. Los computadores nos proporcionan la capacidad de poder procesar la información con vistas a conseguir la más variada posibilidad de aplicaciones informáticas. En este contexto, cuando hablamos de un computador debemos entender que es un dispositivo electrónico capaz de ejecutar aplicaciones de propósito general. Así, por ejemplo, tanto puede ayudar a editar vídeo como a resolver problemas contables. La flexibilidad de uso de los computadores es lo que ha hecho que sean atractivos para una multitud de usuarios, que se pudieran abaratar costes y que salga rentable investigar en nuevas tecnologías. Este círculo es básico para entender el gran dinamismo que se da en este campo. De esta forma se está consiguiendo que la capacidad de proceso se vaya incrementando progresivamente, de manera que se duplica cada dos años, según establece la Ley de Moore (podéis consultar la referencia en http://es.wikipedia.org/ wiki/Ley_de_Moore para ver los detalles). También se incrementa la capacidad de almacenaje, de la misma
© Editorial UOC
48
Escaneando la Informática
manera que disminuye la potencia que consumen y, como consecuencia, la temperatura que disipan cada vez es menor. Hay segmentos de mercado tan importantes que han conseguido que sea factible que los computadores se especialicen en procesar ciertas aplicaciones específicas. Así, han aparecido dispositivos electrónicos que realizan una determinada función, como teléfonos móviles, consolas de videojuegos, reproductores de audio y de vídeo, etc. La cantidad de dispositivos existentes y que pueden aparecer en el futuro es muy destacable. De hecho, las posibilidades son múltiples tanto con respecto a la aparición de nuevos dispositivos como para unir diversos dispositivos individuales para que converjan según pide el mercado. Por ejemplo, es factible pensar ya en dispositivos que integren la telefonía, la radio y la televisión. La cantidad de procesamiento digital que requieren estos sistemas es enorme. En este capítulo se describe la arquitectura que conforman los sistemas informáticos y se hace especial hincapié en los sistemas distribuidos. En este contexto, entendemos el término arquitectura como los elementos o bloques que constituyen estos sistemas. Describiremos las diferentes capas del software, desde el nivel de las aplicaciones que nos permite ejecutar programas hasta el nivel del sistema operativo, que contiene el software para controlar los recursos del computador. Con la infraestructura de red adecuada, estos computadores se pueden conectar entre sí para construir un sistema distribuido, en el que la comunicación y la coordinación a través de la red se hacen mediante el paso de mensajes. Además, un computador genérico está compuesto por una unidad central de proceso, también llamada simplemente procesador, una memoria que almacenará el programa que se tiene que ejecutar, y unos elementos de entrada/salida que permitirán interaccionar con el exterior. Todos estos bloques están conectados por buses, que no son más que los caminos de comunicación entre estos elementos. Todo ello nos permite diseñar estos sistemas informáticos, que ofrecen actualmente una notable capacidad de proceso y permiten la comunicación desde cualquier lugar del planeta. Intentaremos entrar en el detalle de estos sistemas informáticos siguiendo una visión top-down, es decir, empezaremos por su funcionalidad principal e iremos bajando descriptivamente hasta la explicación de los elementos básicos que los constituyen.
© Editorial UOC
49
Arquitectura de los sistemas informáticos
2. Software de los sistemas informáticos Hoy en día los computadores, sean personal o portátiles, tienen unas capacidades de proceso muy elevadas y están cada vez más introducidos en la vida cotidiana de las personas. La generación actual de computadores nace, por una parte, con el desarrollo del microprocesador (procesador integrado en un único chip), que permitió reducir el tamaño y el coste de los computadores, aumentó sus prestaciones y permitió el acceso a un mayor número de personas, y por otra parte, con el desarrollo de las redes de área local y de comunicaciones, que permitieron conectar computadores con posibilidad de transferir datos a gran velocidad. En este contexto ha aparecido el concepto de sistemas distribuidos, que tiene como ámbito de estudio todos aquellos sistemas informáticos constituidos en red, tanto Internet como las redes de telefonía móvil, las redes corporativas u otras. Hay infinidad de ejemplos de aplicaciones que podemos considerar sistemas distribuidos.1 Entre otros, podemos citar: • Acceso a páginas web, al correo electrónico y a bases de datos para buscar información, que están habitualmente presentes en todos los sistemas informáticos. • Capacidad de compartir todo tipo de archivos. • Juegos en red. • Videoconferencias, mensajería instantánea. • Sistemas de reserva de billetes de líneas aéreas, aplicaciones bancarias, etc. En general, compras comerciales a través de Internet ( e-commerce). • Enseñanza asistida por ordenador. En esta sección, primero haremos un repaso de las aplicaciones web más utilizadas y, posteriormente, pasaremos a describir las características principales de la arquitectura en el ámbito del software de los sistemas distribuidos.
2.1. Aplicaciones web El acceso a las páginas web, el correo electrónico y la búsqueda de información constituyen tal vez las aplicaciones web que son más populares.
© Editorial UOC
50
Escaneando la Informática
2.1.1. Acceso a la web
Las páginas web ofrecen un contenido multimedia que puede incluir texto, imagen y sonido, así como referencias a otros elementos de información siguiendo el modelo de los sistemas hipertexto. La navegación siguiendo los hipertextos consiste en presentar en un documento un enlace a un recurso diferente y ofrecer mecanismos para acceder de manera inmediata. El servicio web sigue el modelo cliente/servidor. En el modelo cliente/servidor de un sistema distribuido hay un cliente que solicita un determinado servicio a través de un computador y un servidor que proporciona ese servicio desde otro computador.
Las páginas web contienen básicamente dos elementos: la información y la manera como se tiene que presentar esta información. Esta información se especifica siguiendo el estándar HTML. El servidor de la página web tiene la información almacenada. El cliente se encarga de solicitarla y presentarla al usuario a medida que la va obteniendo. Hay diferentes servidores y clientes web. Los clientes más conocidos son: Mozilla (que es de código abierto y es continuación de Netscape) y el MS-Internet Explorer. El servidor más utilizado es Apache, un servidor de software libre (www.apache.org). La comunicación entre el cliente web y el servidor web se hace a través del protocolo HTTP. Este protocolo permite tanto que el cliente baje datos del servidor (operación de consulta de páginas web) como que el cliente envíe datos al servidor (p. ej. cuando se llena un formulario o cualquier otra información que se envía al servidor). Las páginas que almacenan los servidores en un primer momento eran estáticas (siempre son iguales y se presentan de la misma manera). Una primera evolución fueron las páginas dinámicas, que consisten en que la página que se devuelve al usuario que accede al servidor web se genera en el momento del acceso. Esto es así porque en realidad no se está accediendo a un fichero (como es el caso de las páginas estáticas) sino a un programa que formatea el resultado de su ejecución como si fuera una página web. Esta manera de funcionar es la que utilizan las aplicaciones que tienen una interfaz web (p. ej. el campus virtual de la UOC). El siguiente paso fue conseguir que la página que recibe el navegador incluya un código que permite que la página se presente de manera diferente según el cliente que lo ejecute. Lo cual ha dado mucha más potencia a la hora de utilizar la web como interfaz de aplicaciones.
© Editorial UOC
51
Arquitectura de los sistemas informáticos
2.1.2. Correo electrónico
Al igual que el correo tradicional, el correo electrónico es un medio de comunicación asíncrono, en el que la gente envía y recibe mensajes cuando le conviene hacerlo, sin tener que coordinarse con nadie más. A diferencia del correo tradicional, es rápido, fácil de distribuir y barato. Utilizando listas de distribución, un mensaje se puede enviar a miles de receptores de una sola vez. Además, los mensajes de correo electrónico modernos incluyen adjunciones, hiperenlaces, texto formateado en HTML, imágenes, sonido, vídeo y applets –pequeños programas escritos en Java, un lenguaje de programación concreto. El correo electrónico también se gestiona utilizando el modelo cliente/servidor. El cliente de correo envía el mensaje al servidor de correo utilizando el protocolo SMTP. El receptor obtiene el correo del servidor utilizando uno de los dos protocolos siguientes: • POP3: En este caso el correo se copia en el ordenador del receptor y el mensaje se borra del servidor. Antes de poder acceder a un mensaje nuevo, el receptor tiene que haber recibido todo el correo pendiente. • IMAP: En este caso el receptor recibe la información sobre la cabecera de los mensajes. El contenido del mensaje llega al receptor sólo en caso de que éste lo quiera leer. Los mensajes no se borran del servidor si el cliente no lo indica explícitamente. De esta manera se puede acceder rápidamente al correo desde muchos ordenadores diferentes. Otra modalidad de correo es la que ofrecen los gestores de correo vía web. En este caso, se accede al correo como si se accediera a una página web. Tanto si es en el caso del emisor como en el del receptor, el usuario utiliza el navegador que tiene instalado en el ordenador para enviar o recibir correo utilizando el protocolo HTTP. Ejemplos de correo vía web son el correo del campus virtual de la UOC o los correos que proporcionan sitios web como Yahoo o Hotmail. En cuanto al correo electrónico hay otros aspectos importantes: los virus y los filtros para el correo no deseado ( spam). Los virus ya se han asociado al correo electrónico. Por una parte, porque se reciben ficheros que pueden estar infectados (programas ejecutables o ficheros que tienen la capacidad de ejecutarse, p. ej. los macros de los programas de ofimática de MS-Office) y, sobre todo últimamente, por problemas de seguridad de los clientes de correo, que permiten ejecutar el código que llega en un mensaje. El correo no solicitado, también llamado spam, es un problema que cada vez se va haciendo más patente. A diferencia del
© Editorial UOC
52
Escaneando la Informática
correo no solicitado que recibimos en papel en casa, el correo electrónico no tiene ningún coste para el emisor, mientras que el receptor tiene que dedicar un tiempo tanto para conectarse como para borrarlo. Para hacer frente a este problema, existen los programas de tipo filtro que se encargan de analizar los mensajes para detectar y marcar el spam o incluso borrarlo directamente.
2.1.3. Sistemas de búsqueda en Internet
El número de páginas web sigue creciendo de forma constante. La gran cantidad de información disponible es un atractivo más de la red Internet, a pesar de los problemas evidentes de mantenimiento y de fiabilidad de esta información. Este hecho determina que uno de los principales usos que los usuarios hacen de Internet sea la búsqueda de información por palabras clave. Se pueden destacar varios sistemas de búsqueda: Yahoo, Lycos, Altavista y el más utilizado, Google, debido a su mayor rapidez y al mayor número de páginas encontradas. También hay otros sistemas de búsqueda que se llaman metabuscadores, sistemas que utilizan más de un buscador y muestran sus resultados de forma resumida y ordenada.
2.2. Sistemas distribuidos Los sistemas distribuidos son sistemas informáticos en los que los componentes de hardware y software están conectados en red y comunican y coordinan sus acciones mediante el paso de mensajes. La comunicación se establece a través de un protocolo prefijado, como el esquema cliente-servidor, de igual a igual, o puede ser definido de forma particular por la aplicación, como en la ejecución paralela de aplicaciones.
En la sección anterior ya hemos comentado brevemente al modelo cliente/servidor, en el cual el cliente hace una petición de servicio, y los servidores, una vez recibidas estas peticiones, las resuelven y devuelven el resultado al cliente. Aparte del modelo cliente/servidor, se utiliza también el modelo de igual a igual ( peer-to-peer , P2P). En este caso no hay nodos (ordenadores) cliente y nodos servidor sino que todos los nodos del sistema se comportan de la misma manera y son al
© Editorial UOC
53
Arquitectura de los sistemas informáticos
mismo tiempo clientes y servidores. También se acostumbra a llamarlo “modelo punto a punto” o “entre iguales”.
Este tipo de redes son muy utilizadas para compartir ficheros entre los usuarios. Las redes P2P son objeto de mucho interés en los medios de comunicación por cuestiones legales cuando los ficheros que se intercambian los usuarios están sometidos a derechos de autor. En cualquier caso, el número de ficheros de audio y vídeo que se intercambian con estas redes no deja de aumentar día a día. La forma de poder saber dónde se encuentra la información es a través de nodos que contienen una especie de índices hacia el lugar donde está esta información. Actualmente, se utilizan programas basados en algoritmos totalmente descentralizados para identificar la información. Otro ejemplo de las aplicaciones de igual a igual que se están popularizando muy rápidamente entre los usuarios de Internet es la mensajería instantánea. Ya empieza a ser habitual que muchos internautas tengan activa durante todo el día la aplicación de mensajería instantánea y se comuniquen con sus amigos, conocidos o compañeros de trabajo. En el modelo cliente/servidor y en el modelo de igual a igual hay una petición que hace un nodo que es servida por un servidor u otros nodos del sistema. Hay un modelo intermedio llamado publicación/suscripción, en que el productor de la información anuncia la disponibilidad de esta información y el consumidor de la información se suscribe a los canales que difunden la información y entonces puede decidir dónde ir a buscarla. A la hora de diseñar estos sistemas distribuidos hay que tener en cuenta los siguientes aspectos: • Heterogeneidad. El sistema distribuido está formado por una variedad de redes, sistemas operativos, lenguajes de programación o hardwares del ordenador. Es necesario que todos estos diferentes elementos puedan interactuar entre sí. • Apertura. Es deseable que el sistema se pueda extender fácilmente, es decir, que se puedan añadir nuevos recursos y servicios compartidos y que éstos estén a disposición de todos los componentes del sistema. • Seguridad. Es un aspecto crítico poder saber la identidad de los usuarios o agentes que intervienen en el sistema. • Escalabilidad. Un sistema es escalable si mantiene la eficiencia cuando se aumentan los recursos y el número de usuarios.
© Editorial UOC
54
Escaneando la Informática
• Tolerancia a fallos del sistema. Cuando un componente del sistema falla,
tendría que seguir funcionando el sistema global sin problemas. • Concurrencia. Los diferentes componentes de un sistema distribuido pueden pedir acceder a un recurso simultáneamente. Es preciso que el sistema esté diseñado para permitirlo. • Transparencia. La transparencia persigue que ciertos aspectos del sistema estén ocultos en las aplicaciones, como por ejemplo la ubicación de un recurso o la replicación de los datos.
2.3. Sistema operativo La última capa de software está formada por el sistema operativo. El sistema operativo se encarga de coordinar el hardware del computador y la entrada y la salida, el almacenaje y el procesamiento.
Cada computador debe tener un componente de software que se tiene que activar cuando el computador se pone en marcha. Este componente puede residir en la memoria ROM, en el disco duro o bien en un disco externo que se inserta en el momento inicial. Los primeros computadores tenían cada uno un sistema operativo propio, por lo cual los programas diseñados para una máquina en concreto no se podían ejecutar en un modelo diferente. La universalización de los sistemas operativos empieza con el sistema operativo UNIX. Los orígenes se remontan a 1968. Tras un intento que no cristalizó, en 1969 Ken Thompson y Dennis Ritchie consiguieron completar este sistema operativo y fue el primer escrito totalmente en un lenguaje de alto nivel, el lenguaje C. 2 Eso permitió trasladar fácilmente este sistema operativo a otras máquinas e hizo aumentar la popularidad de la filosofía UNIX. También hay que mencionar que a partir del primer computador personal (IBM-PC en 1971) la empresa Microsoft diseñó un sistema operativo para esta máquina (PC-DOS) y para cualquier computador PC compatible (MS-DOS). Eso constituyó un punto de inflexión para extender el uso de los computado2. El lenguaje de programación C es el más usado en el desarrollo de sistemas operativos, así como en el desarrollo de aplicaciones, aunque en este punto cada vez se opta más por sus lenguajes sucesores C++ y Java. Se combina la robustez de los lenguajes de alto nivel con la eficiencia de poder trabajar muy cerca de los lenguajes máquina de los computadores. Todo esto se explica en profundidad en el capítulo “Programación”.
© Editorial UOC
55
Arquitectura de los sistemas informáticos
res y ha hecho de Microsoft una de las empresas más importantes del mundo. EL MS-DOS ha ido evolucionando hacia múltiples versiones hasta llegar a la que actualmente está disponible en el mercado, llamada MS Windows Vista. Por otra parte, un estudiante finlandés, llamado Linus Torvalds, tuvo en cuenta la filosofía UNIX para desarrollar un sistema operativo que estuviera disponible para todo el mundo que estuviera interesado en él, lo cual abrió la puerta a lo que actualmente se llama software libre. Este sistema operativo se llama GNU/Linux y actualmente está bastante extendido dado que su licencia (GNU Public License , GPL) garantiza la libertad de distribución (entre otras libertades) a todos sus usuarios.3 Entrando en un poco más de detalle, las tareas de un sistema operativo son: • Asignar y controlar los recursos del sistema, definiendo qué aplicación y en qué orden se tienen que ejecutar. • Gestionar la memoria del sistema, que es compartida por todas las aplicaciones. • Gestionar los sistemas de entrada/salida, incluyendo los discos duros, las impresoras y todo tipo de puertos. • Enviar mensajes de estado a las aplicaciones, al administrador del sistema o al usuario sobre cualquier error o información necesaria para que el sistema trabaje de una forma estable. Teniendo en cuenta que el paso de mensajes es la forma de comunicación en los sistemas distribuidos, la parte del sistema operativo encargada de controlarlo sigue la familia de protocolos de Internet llamada TCP/IP. Esta familia de protocolos permite dividir y ordenar la información que tiene que transportarse en paquetes de tamaño más pequeño y establecer el direccionamiento de la información a través de la red Internet.
3. Si queréis saber más cosas sobre el software libre y la GPL... Podéis consultar el sitio web de la Free software Foundation (FSF): http://www.fsf.org/
© Editorial UOC
56
Escaneando la Informática
3. Hardware de los sistemas informáticos En la introducción hemos definido la arquitectura Von Neumann como el modelo que constituye el pilar básico de los ordenadores actuales. De acuerdo con este modelo de arquitectura Von Neumann, un computador consta de un procesador, de un subsistema de memoria y de un subsistema de entrada/salida. Arquitectura Von Neumann
La memoria contiene tanto los datos como las instrucciones de los programas. El procesador, formado por una unidad de proceso (UP) y una unidad de control (UC), tiene la tarea de extraer las instrucciones de la memoria, descodificarlas (es decir, entender qué operación desean hacer) y ejecutarlas. Las instrucciones son ejecutadas en secuencia (es decir, una detrás de la otra y en el orden en que están almacenadas) y sólo las instrucciones de salto pueden romper esta secuencia. El subsistema de entrada/salida (E/S) permite la comunicación con el exterior, sea con otros computadores o con los usuarios que interaccionan. Con este subsistema y la infraestructura de red adecuada, los computadores se comunican entre sí. El estilo de programación que se adapta mejor a este modelo es el procedimental. Cualquier programa tiene que ser descrito a la máquina como una secuencia de instrucciones. La máquina espera un programa que le dice qué tiene que hacer en cada instante de tiempo. Podríamos hacer una analogía del funcionamiento de un computador con el sistema nervioso del cuerpo humano. La memoria y el procesador estarían localizados en el cerebro, y el sistema de E/S serían los diferentes sentidos –oído, vista, gusto, tacto y olfato– más el sistema del habla como salida.
© Editorial UOC
57
Arquitectura de los sistemas informáticos
3.1. Unidad central de proceso La unidad central de proceso (CPU), también llamada simplemente procesador , es el elemento del computador encargado de ejecutar el programa guardado en la memoria. En realidad, ejecutar no es más que interpretar el conjunto de instrucciones que conforman el programa almacenado en un momento determinado en la memoria de la máquina.
Una instrucción tiene una medida determinada (medida en número de bits o de grupos de 8 bits –el byte– que ocupa) y está organizada en una serie de partes fijas (denominadas campos) cada una de las cuales contiene un tipo de información. Así, generalmente, el primer campo es el código de operación, un número que identifica la operación que hay que hacer (sumar, restar... o cualquier operación que permita el procesador). Los otros campos que siguen al código de operación son, generalmente, los operandos, que indican cuáles son o dónde están los datos sobre los que se tiene que aplicar la operación y dónde hay que guardar el resultado. Las fases que el procesador tiene que realizar para interpretar las instrucciones son las siguientes: • Extraer la instrucción correspondiente de la memoria (fase de búsqueda). Según la medida y el formato de las instrucciones, la búsqueda será más o menos compleja. Por ejemplo, las máquinas RISC ( reduced instruction set computer ) tienen todas las instrucciones del mismo tamaño. De esta manera, la circuitería necesaria es más sencilla y rápida. La contrapartida son las máquinas CISC (complex instruction set computer ) en las que las instrucciones son de tamaño variable. • Determinar qué operación tiene que realizar la instrucción (fase de descodificación). Aquí también es fundamental el formato de las instrucciones. El hecho de que el código de operación ocupe una posición concreta dentro de la instrucción y que tenga un tamaño concreto facilita esta descodificación. Las máquinas RISC, además, tienen pocas instrucciones en el repertorio, lo cual facilita todavía más esta tarea. De forma opuesta, una máquina CISC contiene un gran número de instrucciones. • Obtener los datos con que se tiene que operar (fase de búsqueda de operandos). El formato de las instrucciones determina cuántos operandos se permite que tengan. Los operandos pueden ser fuente, es decir contener o indicar los valores sobre los cuales se tiene que realizar la operación, o destino, es decir, indicar dónde se tiene que guardar el resultado de la operación, Pueden ser 3 (dos operandos fuente y uno de destino), 2 (caso en el que el
© Editorial UOC
58
Escaneando la Informática
destino coincide con uno de los operandos fuente) o, incluso 1, en el caso de operaciones de un solo operando fuente que se hace coincidir con el destino del resultado. También determina el lugar en el que están guardados, ya sea en la memoria, en la misma instrucción o en registros. Los registros son elementos de almacenaje de información con un tiempo de acceso más pequeño que la memoria. • Realizar la operación correspondiente (fase de ejecución). Durante esta fase se realiza la operación. Normalmente, según el tipo de procesador, tendremos las 4 operaciones aritméticas básicas (suma, resta, producto y división) sobre datos de tipo entero y real, y operaciones lógicas que realizan la complementación (NOT), la suma lógica inclusiva (OR) y exclusiva (XOR), y el producto lógico (AND) del álgebra booleana. • Almacenar el resultado de la operación (fase de escritura ). Al igual que para los operandos fuente, la instrucción especifica también el lugar en que se tiene que guardar el resultado calculado. • Identificar la instrucción siguiente que hay que ejecutar (control de la secuenciación). La secuenciación de las instrucciones es implícita, es decir, que después de ejecutar una instrucción se tiene que ejecutar la que hay justo a continuación de la memoria. Esta secuenciación se puede romper en cualquier momento por la existencia de instrucciones de salto, que permiten especificar de forma explícita la dirección de memoria donde reside la próxima instrucción que se tiene que ejecutar. Estos saltos pueden ser incondicionales o condicionales. De esta manera podemos ejecutar diferentes fragmentos del código de un programa en función de los resultados precedentes de las instrucciones (lo que se correspondería con las sentencias condicionales de los programas de alto nivel) o bien saltar atrás en el programa para poder realizar bucles y reaprovechar el código del programa para operar con otros datos (lo que se correspondería con las sentencias iterativas de los programas de alto nivel). Con esta secuencia realmente simple de fases, repetida ad infinitum, el procesador es capaz de ejecutar programas de cualquier complejidad. 4
4. Los procesadores superescalares , como el Intel Pentium, siguen este modelo del ciclo de ejecución de las instrucciones, pero disponen de optimizaciones arquitectónicas que aumentan sus prestaciones: son capaces de encabalgar la ejecución de una instrucción con las siguientes y permiten iniciar la ejecución de más de una instrucción en cada ciclo.
© Editorial UOC
59
Arquitectura de los sistemas informáticos
Conviene que sepamos que el procesador está constituido internamente por dos unidades: • La unidad de proceso (UP). Contiene los registros, que guardan datos del programa; la unidad que realiza las operaciones que mandan hacer las instrucciones; y los buses, que permiten interconectar todos los elementos entre sí. • La unidad de control (UC). Se encarga de generar las señales de control para ejecutar las instrucciones. Para cada instrucción, genera una secuenciación de señales que se envían a la unidad de proceso y que permiten realizar las fases mencionadas anteriormente.
3.2. Subsistema de memoria La memoria almacena las instrucciones y los datos, incluyendo los resultados finales e intermedios, de los programas. Está formada por un espacio de un solo nivel de direcciones con una organización lineal de las palabras. Sobre la memoria, el procesador puede efectuar operaciones de lectura y de escritura.
La comunicación entre el procesador y la memoria es, desde los primeros computadores, uno de los principales cuellos de botella del modelo Von Neumann. La situación ideal sería un sistema de memoria de gran capacidad, gran ancho de banda, tiempo de acceso pequeño y bajo coste. Desgraciadamente, el tiempo de acceso es inversamente proporcional a la capacidad y el ancho de banda está limitado por las conexiones del procesador con el exterior así como por la organización de la memoria, mientras que el coste limita todos los factores. En la práctica hay una diferencia considerable entre la velocidad del procesador y la de la memoria. Esta tendencia no hace más que crecer con el tiempo, ya que los avances tecnológicos son más rápidos en los procesadores que en la memoria. Para resolver este problema se dispone de una organización jerárquica de la memoria. La memoria está formada por diferentes niveles. Los niveles que están más cerca del procesador, con respecto a la interconexión, son muy rápidos de acceder pero de medida limitada ya que son muy costosos. En cada nivel posterior –o más alejado del procesador– se tiene más capacidad pero también se tarda más en acceder al contenido. La idea es que la información que se utilice a menudo se guarde en los niveles más rápidos, sabiendo que en el peor
© Editorial UOC
60
Escaneando la Informática
de los casos siempre se podrá encontrar cualquier información en el último nivel de la jerarquía. Dentro de la jerarquía de memoria, el nivel más rápido de acceso son los registros, que forman parte de la unidad de proceso dentro del procesador. El nivel siguiente se llama antememoria (memoria caché ) y debemos tener en cuenta que puede haber más de uno en función del rendimiento/coste con que se diseñe un computador. Los siguientes niveles de la jerarquía están formados por elementos de almacenaje de tipo memoria RAM y almacenaje magnético u óptico (que incluye el disco duro, las unidades de CD y DVD, etc.). Memoria RAM y disco duro: dos niveles dentro de la jerarquía de la memoria de un computador
3.3. Subsistema de entrada/salida El subsistema de entrada/salida (E/S) sirve para comunicar el computador con el exterior, es decir, con los dispositivos de E/S, también llamados periféricos.
Los dispositivos de E/S se pueden clasificar en dispositivos de entrada de información, de salida de información, o bien, dispositivos que permiten la bidireccionalidad. Ejemplos típicos de dispositivos de entrada son el teclado, el
© Editorial UOC
61
Arquitectura de los sistemas informáticos
ratón y el escáner, entre otros. Por otra parte, la pantalla y la impresora son los dos periféricos de salida más representativos. Los dispositivos que actúan como entrada y salida al mismo tiempo corresponden a puertos de comunicación con otros sistemas computadores. También se engloban dentro de esta posibilidad los dispositivos que almacenan la información como los discos duros. Los periféricos son básicos para interaccionar con los sistemas informáticos
Formando parte de este subsistema dentro del computador encontramos los controladores o drivers de los dispositivos de E/S. Estos controladores ofrecen una interfaz de control uniforme y simple de los dispositivos de E/S por parte del procesador. Si el procesador tuviera que tratar cada uno de los posibles modelos existentes en el mercado de los dispositivos de E/S, la programación se haría muy compleja y poco flexible ante los cambios de estos dispositivos. Para resolver este inconveniente, el procesador controla los periféricos a través de unos registros ubicados dentro del controlador de cada periférico. Estos registros sirven para conocer la disponibilidad de la transmisión de información (el dispositivo, como es más lento, podría no estar preparado todavía), para indicar que se haga la transferencia y para guardar o recibir el dato que se transfiere.
© Editorial UOC
62
Escaneando la Informática
3.4. Buses Los diferentes elementos del computador se tienen que comunicar entre sí para pasarse información. Los buses son los caminos de comunicación entre estos elementos. Cada bus está constituido por varias líneas, cada una de éstas permite transmitir una señal binaria.
Un computador puede tener diferentes tipos de buses que proporcionan comunicación entre sus componentes. Cuando esta comunicación es entre sus tres componentes principales –procesador, memoria y entrada/salida–, se llama bus del sistema.5 Dentro de un mismo bus podemos clasificar a la vez las líneas según la funcionalidad que tengan asignadas. Así, están las líneas que permiten transferir datos entre los componentes (bus de datos), las líneas que designan el lugar en que se tiene que leer o escribir el dato dentro de la memoria o el registro de los controladores de E/S (bus de direcciones), y las líneas que se utilizan para coordinar el dato y la dirección en cada transferencia (bus de control). El número de líneas del bus de datos y de direcciones suele coincidir en los computadores actuales. Hoy por hoy la medida más extendida es la de 32 bits y empiezan a aparecer las arquitecturas de 64 bits que se convertirán en estándar en un futuro bien próximo. El parámetro más importante que debemos tener en cuenta cuando estudiamos un bus del computador es el ancho de banda. Se refiere a la velocidad máxima con que se pueden transferir datos por el bus. Normalmente, se mide este ancho de banda por el número de bits o de bytes por segundo, independientemente de cual sea la medida del bus de datos.
5. PCI ha sido y sigue siendo un estándar de bus en los computadores personales. Es un bus paralelo (hasta 32 bits de datos) de conexión de dispositivos de E/S en la placa base del computador, con velocidades de hasta 133 MB/s. Más recientes, USB y Firewire son dos buses serie (los datos se transmiten bit a bit) que conectan dispositivos al computador y que comparten prestaciones similares, con velocidades pico de 480 Mbit/s y 800 Mbit/s, respectivamente, en las versiones actuales.
© Editorial UOC
63
Arquitectura de los sistemas informáticos
4. El sistema binario La información que gestiona el computador son por una parte las instrucciones, que indican la operación que se tiene que llevar a cabo, y por otra parte los datos, con los que se tienen que hacer estas operaciones. Para que el computador pueda reconocer esta información se tiene que representar en un sistema capaz de ser interpretado electrónicamente. El fundamento físico de los computadores electrónicos es la capacidad de determinar si hay o no tensión de alimentación en una línea o, en otras palabras, si circula corriente eléctrica. El sistema que se adapta perfectamente es el sistema binario, en el que se utilizan únicamente dos dígitos (bits): 0 y 1. El 0 significa que no hay tensión, mientras que el 1 significa que sí que la hay. Por lo tanto, internamente, dentro del computador, toda la información estará representada mediante el sistema binario.
Sin embargo, para las personas es muy dificultoso trabajar con este sistema. Hay que tener en cuenta que, actualmente, la medida habitual de los datos es de 32 bits y la tendencia es ir hacia arquitecturas de 64 bits cada vez más extendidas. Si tenemos que definir o interpretar los datos en binario, nos podemos equivocar fácilmente si tenemos que escribir 32 (o 64) bits. Por eso, en nuestra aritmética cotidiana utilizamos el sistema decimal, que es el que solemos utilizar para escribir los números. En informática también es usual escribir los números en el sistema hexadecimal, en el que cada 4 bits se corresponden a 1 dígito hexadecimal, lo cual permite reducir el número de dígitos con que representamos los datos y, de esta manera, podemos minimizar los errores de transcripción. Hay diferentes tipos de datos en los programas: números naturales, números enteros, números reales, vectores, matrices, etc. Hay que tener en cuenta que en la memoria únicamente almacenaremos el valor del dato en el formato de representación que se defina por convenio para cada tipo de dato. Eso implica que la simple inspección del contenido de la memoria no nos da ninguna información sobre el tipo de dato que hay almacenado. Al igual que para los datos, un programa contiene instrucciones en lenguaje máquina que el procesador es capaz de interpretar, escritas utilizando los bits 0 y 1. Las instrucciones contienen una serie de campos, como el código de operación y la especificación de dónde se encuentran los operandos. La descodificación de la instrucción determina qué tipo de datos se corresponden con los
© Editorial UOC
64
Escaneando la Informática
operandos. Como podéis imaginar, programar utilizando el lenguaje máquina de unos y ceros es muy pesado para las personas. Por eso los programadores utilizan una representación textual del programa en que se utilizan unos códigos mnemotécnicos para indicar el código de operación y los operandos. Los programas escritos de esta manera utilizan el llamado lenguaje de ensamblador. Debe existir un proceso de traducción de los programas escritos en lenguaje de ensamblador a lenguaje máquina antes de poder almacenarlos en la memoria del computador para ser ejecutado. En la tabla siguiente se dan algunos ejemplos de datos e instrucciones tal como se definen en un programa hecho con lenguaje de ensamblador y tal como se representan en el computador (suponiendo que disponemos de 16 bits de medida para los datos y las instrucciones). Lenguaje de ensamblador
Lenguaje máquina
Significado
a: .word 10
0000000000001010 (binario)
Declaración o creación de la variable de nombre a, que se inicializa al valor entero 10. Los enteros se representan en el formato denominado complemento a 2.
000A (hexadecimal) b: .word -2
1111111111111110 (binario)
Declaración de la variable b, inicializada al valor entero 2.
FFFE (hexadecimal) ADD R3, R1, R2
0101001100010010 (binario) 5312 (hexadecimal)
ADDI R1, R1, #1
0111000100010001 (binario) 7111 (hexadecimal)
Instrucción que suma el contenido de los registros R1 y R2 y deja el resultado en R3. El formato de la instrucción determina que los primeros 4 bits son el código de operación, que los operandos son registros y que cada registro se especifica en 4 bits. Instrucción que incrementa el contenido del registro R1. El formato de esta instrucción determina que hay un registro fuente especificado en 4 bits, un registro destino
, también de 4 bits, y un dato constante también de 4 bits que se guarda en la misma instrucción en los bits de más a la derecha.
A modo de ejemplo también os mostramos un pequeño programa escrito en lenguaje de ensamblador que muestra por pantalla los números cuadrados desde el 12 hasta el 102.
© Editorial UOC
65 LOADI bucle: INC SUBI BG MUL OUT BR final: .end
Arquitectura de los sistemas informáticos
R1, #0 R1 R2, R1, #10 final R2, R1, R1 R2 bucle
Cualquier componente dentro del hardware de los computadores se realiza mediante unos dispositivos electrónicos básicos que se llaman puertas lógicas. Hay cuatro operaciones lógicas básicas: NOT, OR, AND y XOR. No es el objetivo de este capítulo definir el hardware de la unidad de proceso y de la unidad de control de un procesador. En cualquier caso, podemos intuir que el número de puertas lógicas es elevadísimo y diseñar todo el hardware únicamente a este nivel es impracticable. Para diseñar un computador se diseñan circuitos lógicos a partir de las puertas lógicas que llevan a cabo tareas comunes y que pueden después ser reutilizados en el diseño global. De esta manera, a partir de componentes más sencillos se van diseñando componentes más complejos hasta llegar al diseño final de todo el procesador. Haremos una última referencia a la capacidad de almacenaje de los computadores, la memoria. Las puertas lógicas por sí solas no permiten guardar información. Si cambia el valor de la señal en la entrada de la puerta cambia automáticamente el valor de la salida. Hay un componente electrónico, el biestable, que permite guardar 1 bit de información y que es el punto de partida de los registros y de la memoria RAM, elementos que conforman la capacidad de almacenaje de los computadores.
5. Historia Los computadores, tal como los hemos descrito aquí, son el resultado de una evolución tecnológica de la que, llegados a este punto, querríamos hacer una pequeña aproximación histórica. Desde hace mucho tiempo se ha querido acelerar la capacidad y la corrección del procesamiento. Tenemos que tener en cuenta que las matemáticas constitu-
© Editorial UOC
66
Escaneando la Informática
yen una base necesaria para el conjunto de la sociedad. El hecho de poder sumar, restar, multiplicar o dividir está presente en la vida cotidiana. La primera referencia histórica que tenemos en este aspecto es el ábaco, de procedencia china y con indicios que pueden fechar su realización desde el siglo XI a. C. Sin embargo se considera que es en el siglo XVII cuando se inicia la construcción de los primeros computadores mecánicos. El científico francés Blaise Pascal diseñó y fabricó una calculadora que permitía sumar y restar de forma totalmente mecánica. Habrá que esperar un par de siglos más hasta que Charles Babbage diseñe la llamada máquina analítica. La importancia que ha tenido esta máquina radica en el hecho de que su estructura mecánica ya coincidía con la que tienen actualmente los computadores: disponía de un molino capaz de calcular, de un almacén para guardar información, de una sección de entrada de datos y de otra de salida de datos. Diseño de la máquina analítica de Babbage
Aunque hay otros intentos que seguramente también merecerían ser destacados, para simplificar podemos señalar el paso del computador mecánico al computador electrónico como el siguiente hito notable en esta historia. La creación de las válvulas de vacío marca el inicio de la primera generación de los computadores actuales.
© Editorial UOC
67
Arquitectura de los sistemas informáticos
El primer computador que contiene ya elementos electromecánicos es el MARK1, diseñado en 1944 en la Universidad de Harvard. El equipo era impresionante, medía 16 metros de longitud por 2,5 metros de altura, contenía 800.000 piezas y más de 800 kilómetros de cableado y pesaba 5 toneladas. Hacía sumas de hasta 23 dígitos en medio segundo, multiplicaciones en 3 segundos y operaciones logarítmicas en poco más de un minuto. Todo un sueño hecho realidad. MARK1: El primer computador electromecánico
El estímulo para construir los primeros computadores electrónicos fue la Segunda Guerra Mundial. En aquella época se necesitaban máquinas que fueran capaces de descifrar mensajes en clave de los enemigos, así como calcular hasta dónde podrían llegar las piezas de artillería. El ENIAC ( Electronic Numerical Integrator And Computer ), que se empezó a construir en 1943 y se acabó en 1946 en la Universidad de Pensilvania, ya se considera un computador totalmente electrónico. Pesaba 30 toneladas, ocupaba un espacio de 450 m2, contenía 18.000 válvulas y consumía una gran cantidad de electricidad. La programación se hacía manualmente a través de 3 tableros con más de 6.000 interruptores. Los datos se representaban en decimal. Introducir un programa era muy costoso y
© Editorial UOC
68
Escaneando la Informática
se podían necesitar días o semanas. Como curiosidad tristemente célebre, hay que añadir que uno de los primeros programas que funcionaron en el ENIAC estaba relacionado con el diseño de la bomba de hidrógeno. El siguiente paso fue el EDVAC en 1947, diseñado por J. P. Eckert y J. W. Mauchly a los que, posteriormente, se añadió John von Neumann. Esta máquina constituye el primer computador que incorpora el concepto de almacenaje de la información. Tanto los datos como los programas se representaban en binario. La posibilidad de poder guardar los programas dio flexibilidad a los computadores, que podrían ser utilizados para ejecutar diferentes aplicaciones cargando el programa adecuado en cada caso. De hecho, los computadores actuales siguen la misma arquitectura iniciada con este computador, si bien, evidentemente, con muchas optimizaciones y mejoras. Por este motivo utilizamos la denominación de arquitectura Von Neumann para referirnos a la forma en que está organizado internamiento un computador actual. Para acabar esta pequeña introducción a la evolución histórica haremos un breve repaso de los acontecimientos que marcan el inicio de las cuatro generaciones de computadores hasta llegar a la actualidad. La primera (1946-1955), mencionada anteriormente, está integrada por los computadores basados en la válvula de vacío y que se programan en lenguaje máquina o en lenguaje de ensamblador. La segunda generación (1955-1965) se inicia con la invención del transistor y se caracteriza por la disminución del espacio físico del hardware y la utilización de lenguajes de programación de alto nivel. La tercera generación (1965-1980) se basa en la integración de los circuitos electrónicos mediante el uso de los materiales semiconductores y la posibilidad de procesar información en tiempo compartido, es decir, de ejecutar diferentes programas de manera concurrente. La cuarta generación (desde 1980) integra todo el procesador en un solo chip y se caracteriza por el desarrollo de las primeras redes de computadores.6
6. Si tenéis interés en conocer un poco más a fondo estos aspectos de la historia de los computadores, podéis consultar la página web http://www.thocp.net. Encontraréis un montón de anécdotas que complementarán vuestros conocimientos.
© Editorial UOC
69
Arquitectura de los sistemas informáticos
6. Salidas profesionales Los sistemas informáticos están presentes en todos los sectores de la actividad económica y, por lo tanto, hay muchos campos laborales que los requieren. Las salidas profesionales en el campo del software se abordan en el capítulo sobre programación de esta misma obra. Hay que destacar que la tarea de programador se tiene que entender tanto en el indiscutible contexto del desarrollo de aplicaciones (web, distribuidas), como en el contexto del desarrollo de software de sistemas (sistemas operativos, controladores de dispositivos...) o de aplicaciones de uso transversal (paquetes ofimáticos, navegadores, gestores de correo...). En este sentido la implantación de soluciones basadas en software libre ha hecho realidad la demanda laboral en estos contextos tradicionalmente reservados a grandes corporaciones y a otros entornos geográficos. Con respecto al hardware, cada vez hay más empresas instaladas en nuestro territorio dedicadas a la investigación en nuevas tecnologías que permiten desarrollar arquitecturas más potentes y con menos consumo. Las salidas como investigador en laboratorios de investigación han pasado de ser una utopía a una realidad hoy día. También en el campo del hardware encontramos a los técnicos en integración de sistemas , con tareas de diseño del sistema de una organización, incluidas la configuración y la instalación de los sistemas operativos y de las redes necesarias.
© Editorial UOC
253
Bibliografía
Bibliografía
Capítulo II. Arquitectura de los sistemas informáticos Cada uno de los siguientes libros sirve para profundizar en los temas de arquitectura de computadores, de sistemas distribuidos y de redes, respectivamente. No olvidéis tampoco consultar la información a la propia Internet, por ejemplo a través de wikipedia.
Stallings, W. (2006) Organización y arquitectura de computadores (7ª ed.) PrenticeHall. Coulouris, G.; Dollimore, J.; Kindberg, T. (2001) Sistemas distribuidos. Conceptos y diseño (3ª ed.) Addison-Wesley. Kurose, J. F.; Ross, K. W. (2003) Computer Networking: A Top-Down Approach Featuring the Internet. Addison-Wesley. Wikipedia http://www.wikipedia.org.