Capítulo 1: Caracterización de sistemas operativos

Publicado por P. Ruiz en

Unidad central de proceso, memoria, buses, unidades de E/S.

Ahora que tenemos una panorámica general del modelo Von Neumann, estamos en disposición de conocer de una forma más detallada cada una de sus partes…

Unidad central de proceso (Procesador)

Ya hemos dicho antes que el procesador es una parte fundamental del hardware del ordenador, que se encarga de leer de memoria las instrucciones que debe ejecutar, las interpreta y las ejecuta.

Aunque la estructura interna de cualquier procesador actual es extremadamente compleja, a nivel lógico podemos decir que está formada por los siguientes elementos:

  • Una unidad aritmético-lógica o ALU (de Arithmetic-Logic Unit) que se encarga de realizar las operaciones de cálculo: Aritméticas (como las sumas), lógicas (como AND y OR) y comparativas (que permiten saber, por ejemplo si un valor es mayor que otro).

  • Una unidad de control, que obtiene de la memoria la siguiente instrucción a ejecutar, la interpreta, vuelve a la memoria para obtener los datos implicados en la operación, los sitúa en la ALU y, una vez obtenido el resultado, lo devuelve a la posición adecuada de la memoria.

  • Una serie de registros de memoria que almacenan temporalmente información relacionada con el proceso de datos que se está realizando. Algunos de los registros que suelen estar presentes en el diseño de los procesadores son:

    • Contador de programa: Que guarda la dirección de memoria de la instrucción que se ejecutará a continuación de la actual

    • Registro Acumulador: Guarda los resultados temporales de una operación cíclica que se encuentre en curso en la ALU.

    • Registro de instrucción: Contiene el código de la instrucción que se está ejecutando

    • Registro de pila: Contiene la dirección de memoria del último elemento de la pila de datos que esté utilizándose

    • Registro de estado: Contiene información sobre el resultado de la operación en curso.

Cuando se hace referencia al procesador, también suele utilizarse la expresión Unidad Central de Proceso o CPU (del inglés, Central Processing Unit).

El Juego de instrucciones del procesador

Llamamos juego de instrucciones al conjunto de instrucciones que un procesador en particular es capaz de interpretar. En realidad, además de las instrucciones, también están implicados los registros que incluye el diseño del procesador, los tipos de datos que sabe manejar, las interrupciones, etc.

Algunas veces, procesadores con un diseño totalmente diferentes tienen los mismos juegos de instrucciones. Esto se hace persiguiendo la compatibilidad entre distintos modelos de procesador del mismo fabricante o entre procesadores de fabricantes distintos (como es el caso de los productos de Intel y AMD).

Sin embargo, lo normal es que los procesadores que son diferentes tengan juegos de instrucciones distintos.

Ciclo de instrucción

Interpretando el funcionamiento del procesador de una forma simplista, podemos decir que la ejecución de un programa se basa en un proceso repetitivo en el que se van leyendo y ejecutando una serie de instrucciones preestablecidas. A este proceso lo llamamos Ciclo básico de instrucción y sigue el siguiente esquema:

Ciclo de instrucción

En definitiva, el ciclo de instrucción es el periodo que tarda el procesador en ejecutar una instrucción de su juego de instrucciones. Podemos dividirlo en las siguiente etapas:

  1. Leer la instrucción siguiente:
    • Se pasa el valor del contador de programa al bus de direcciones.
    • Se carga la instrucción desde la memoria principal al registro de datos.
    • Se incrementa el valor del contador de programa.
    • Se carga el valor del registro de datos en el registro de instrucción.
    • El decodificador de instrucción interpreta la instrucción.
    • Si hay datos implicados, se cargan en los registros de datos.
  1. Ejecutar la instrucción:
    • La unidad de control interpreta la instrucción como una serie de señales de control y las envía a las unidades funcionales implicadas para que se realice la acción
    • Según la instrucción, el resultado se envía a la memoria principal o a algún dispositivo.

En general, las instrucciones se clasifican en las siguientes categorías:

  • Procesador-memoria: Se envían datos desde la memoria al procesador o a la inversa.

  • Procesador-E/S: Se envían datos desde un dispositivo de entrada/salida al procesador o a la inversa

  • Tratamiento de datos: realiza una operación aritmética, una operación lógica o una comparación

  • Control: Modifica la secuencia de ejecución del programa, es decir, coloca un valor diferente en el registro contador de programa.

Interrupciones

Una Interrupción consiste en una señal que recibe el procesador en ciertas situaciones y que ocasiona la suspensión temporal del programa que se está ejecutando. El objetivo es atender posibles incidencias que surjan a lo largo de la ejecución del programa.

De esta forma se consigue mejorar la eficiencia del procesamiento porque, por ejemplo, el procesador puede dedicarse a ejecutar un proceso mientras espera una operación de entrada/salida de un proceso diferente, siendo avisado cuando la operación de entrada/salida concluya.

Existen diferentes tipos de interrupciones.

  • De programa: Se producen cuando, al tratar de ejecutar una instrucción, se obtiene un error inesperado (una división por cero, el uso de una posición de memoria no autorizada, etc).

  • Por fallo hardware: Cuando se produce un fallo imprevisto en el uso de un dispositivo (como un error de paridad en una posición de memoria)

  • De reloj: Producidas por el reloj del sistema.

  • De entrada/salida: cuando se produce una situación de error en una operación de entrada/salida o cuando esta ha terminado satisfactoriamente.

Hablaremos más acerca de las interrupciones en el capítulo 3.

Actividad 4: Rendimiento comparado

Elige el ordenador personal que te comprarías en este momento y averigua su rendimiento máximo, medido en  FLOPS (floating point operations per second). Es decir, la cantidad de operaciones en punto flotante que puede realizar en un segundo

Podrás encontrar esta información investigando las características técnicas del procesador que incorpora.

A continuación, compara su rendimiento con el de los Superordenadores que has incluido en las actividades anteriores: El más potente de España y del mundo.

Para ambos casos, deberás indicar la cantidad de ordenadores, como el que has elegido al principio, necesitarías para igualar su rendimiento.

Nota: Debes explicar los cálculos que has realizado.

Memoria

Desde un punto de vista genérico, la memoria es la parte del ordenador que se encarga de almacenar los datos que intervienen en el proceso. Sin embargo, dentro del sistema informático existen diferentes tipos de memoria, que vamos a ir desglosando:

  • Registros: Los registros son pequeñas porciones de memoria que se encuentran integradas en el procesador y que, por lo tanto, funcionan a la misma velocidad que este.

  • Caché: Su funcionamiento es similar al de la memoria principal, que comentaremos a continuación, pero su tamaño es mucho menor y su acceso mucho más rápido.

    La idea es que, cuando el procesador necesita acceder a un dato, se copia a la caché todo el bloque que lo contiene. Así, si se producen accesos sucesivos (para leer o escribir) al mismo dato o a sus datos circundantes, el tiempo de acceso se reduce drásticamente.

  • Memoria principal: También se llama Memoria de acceso aleatorio o Memoria RAM (del inglés, Random-Access Memory) porque en los primeros ordenadores era la única memoria que permitía acceder a los datos sin seguir un orden previo.

    Este es el lugar donde deben encontrarse tanto las instrucciones como los datos para que el procesador pueda utilizarlos. Su contenido se organiza en posiciones de memoria que están identificadas de forma individual por una dirección única.

    Tanto la memoria principal, como la memoria caché y los registros son memoria volátil. Es decir, estos tipos de memoria sí necesitan constantemente alimentación eléctrica para recordar su contenido.

  • Dispositivos de almacenamiento externo: Son dispositivos que permiten almacenar grandes volúmenes de información.

    Su principal característica es que no es volátil, es decir, no necesitan un suministro continuo de corriente eléctrica para mantener la información que contienen.

    Existen dispositivos construidos a partir de tecnologías muy diferentes, como las unidades magnéticas (HDD, del inglés Hard Disk Drive), las ópticas (CD/DVD, del inglés Compact Disc/Digital Versatile Disc) o las flash (SSD, del inglés Solid State Drive).

  • Dispositivos de almacenamiento secundario o extraíble: Son dispositivos de gran capacidad, destinados fundamentalmente a la realización de copias de seguridad.

    Suelen ser dispositivos de acceso secuencial, como las cintas DAT (del inglés Digital Audio Tape).

En principio, existen tres datos fundamentales que debemos tener en cuenta cuando nos referimos a la memoria: su cantidad, su velocidad y el coste por unidad de almacenamiento (por ejemplo, el coste por byte).

Si representamos gráficamente los diferentes tipos de memoria en función de su tamaño medio, obtenemos una jerarquía de la memoria con forma piramidal:

Jerarquía de memoria

Si tomamos como punto de partida la imagen anterior, podemos afirmar que, según se desciende en la jerarquía, se cumplen las siguientes características:

  • Disminuye el coste por byte.

  • Aumenta la capacidad.

  • Aumenta el tiempo de acceso.

  • Disminuye la frecuencia con la que se accede a la memoria.

Con el fin de abaratar costes, siempre se ha tratado de sustituir los tipos de memoria más cara, pequeña y rápida por otros más baratos, grandes y lentos. El objetivo final es perder la menor cantidad de rendimiento posible.

El truco para conseguirlo está en aumentar la frecuencia con la que se accede a los dispositivos más rápidos en detrimento de los más lentos. La estrategia a seguir se basa en el principio de cercanía de referencias que, básicamente, consiste en que mientras se está ejecutando un determinado programa en el procesador, las referencias que se hagan a posiciones de memoria tenderán a estar agrupadas.

Esto permite acercar los datos al procesador, de modo que la cantidad de acceso a los niveles de memoria inmediatamente inferiores se vea considerablemente reducido.

Estas técnicas se aplican en diferentes niveles de la jerarquía de memoria:

  • Usando memoria caché entre el procesador y la memoria RAM

  • Las técnicas de memoria virtual, que pretenden simular una mayor cantidad de memoria RAM de la que existe realmente, usando el disco como almacenamiento de apoyo

  • La caché de disco, que utiliza parte de la memoria RAM para guardar temporalmente los datos que deben transferirse al disco, lo que permite que las escrituras se agrupen, ahorrar accesos cuando un dato se escribe varias veces o recuperarlo más rápidamente si lo volvemos a usar poco después de escribir.

A modo de ejemplo, vamos a explicar con más detalle el funcionamiento de la memoria caché.

Memoria caché

Ya hemos comentado que la memoria principal funciona a una velocidad muy inferior a la del procesador. Sin embargo, este debe acceder a la memoria para obtener cada una de las instrucciones que debe ejecutar (muchas veces, tendrá que volver para obtener los datos involucrados en la instrucción). Resulta evidente la carga que supone esta situación para el rendimiento del procesador.

Para resolverlo, los diseñadores recurren al principio de cercanía. La idea consiste en colocar, entre el procesador y la memoria principal, una memoria de poco tamaño y gran velocidad, a la que llamamos memoria caché.

Por cuestiones de eficiencia, la memoria caché se gestiona completamente a nivel hardware y es invisible para el software del ordenador.

La idea es que, cada vez que el procesador solicite un dato de la memoria principal, se busque primero en la memoria caché. Si no se encuentra, se lee de la memoria principal el bloque completo que contiene el dato solicitado y se guarda en la caché (lógicamente, también se envía al procesador el dato que solicitó).

Memoria cache

Según el principio de cercanía de referencias, es muy probable que, la próxima vez que el procesador solicite un nuevo dato, este pertenezca al mismo bloque del dato anterior, con lo que se podrá devolver de forma casi inmediata.

memoria caché

Cuando se diseña un nuevo procesador, el equipo de diseño debe enfrentarse a varias preguntas que definirán los principios en los que estará basado el funcionamiento de la memoria caché. Estas son algunas de ellas:

  • ¿Qué tamaño debe tener la memoria caché? En este sentido, debemos saber que no será necesaria una memoria caché muy grande para que su impacto sobre el rendimiento sea notable.

  • ¿Qué tamaño debe tener cada bloque de memoria? Para responder a esta pregunta es muy importante otro concepto denominado tasa de aciertos. Es decir, el porcentaje de veces en el que se encontrará en memoria caché el dato que se está buscando.

    Es fácil deducir que, a medida que escojamos bloques de memoria más grandes el principio de cercanía de referencias hará que los datos más alejados del que produjo la lectura del bloque, tengan menos probabilidades de ser utilizados. Además, al ser bloques más grandes, cabrán menos bloques en la caché. Esto deriva en una memoria caché saturada con datos que tienen pocas posibilidades de ser utilizados y la tasa de aciertos descenderá.

    Por el contrario, si se eligen bloques demasiado pequeños, pueden quedar fuera del bloque algunos datos que, según el principio de cercanía de referencias, tengan una probabilidad elevada de ser referenciados. Esto también hará que descienda la tasa de aciertos.

    Por consiguiente, el tamaño óptimo del bloque será el que ofrezca una mayor tasa de aciertos.

  • ¿Cómo se elige el bloque de memoria principal que se trae a la memoria caché? La técnica empleada para realizar esta tarea recibe el nombre de política de extracción, y existen dos planteamientos frecuentes:

    • Bajo demanda: El bloque se copia a la memoria caché sólo cuando es referenciado uno de sus datos y no se encuentra en la caché.

    • Con pre-búsqueda: Existen muchas situaciones en las que las referencias se realizan a posiciones sucesivas de la memoria principal durante periodos relativamente prolongados de tiempo. Por ejemplo, al ejecutar instrucciones de un programa es muy frecuente que estas se encuentren almacenadas una tras otra. Basándose en esta idea, la política de extracción con pre-búsqueda plantea que, además de llevar a caché el bloque referenciado, se lleve también el siguiente.

      Cuando se referencia el bloque i-ésimo de memoria principal, se trae además el bloque (i+1)-ésimo. Esta política se basa en la propiedad de localidad espacial de los programas.

  • ¿Cómo se establece la posición que ocupará cada bloque en la caché? En este sentido, es importante comprender que, cuanto más flexible sea el proceso de traducción de direcciones de memoria a posiciones de caché (y viceversa), más complicado será el diseño de los circuitos que permitan averiguar si se encuentra en caché el bloque que se está buscando.

    La técnica empleada para realizar esta tarea recibe el nombre de política de ubicación, y es común encontrarnos con alguna de estas alternativas:

    • Directa: Realiza una división entera entre la posición del bloque en memoria principal y el número de bloques que puede almacenar la caché. Después, utiliza el valor del resto como posición donde ubicar el bloque en la caché.

    • Asociativa: Cada bloque de la memoria caché incorpora una etiqueta que identifica al bloque de la memoria principal que contiene. De esta forma, cualquier bloque de la memoria principal puede ocupar cualquiera de las posiciones de la memoria caché. Será preciso que la memoria caché incluya una funcionalidad por la que pueda comprobarse, en una sola operación y de forma simultánea en todas las etiquetas, si contiene el bloque que se está buscando en un momento dado.

    • Asociativa por conjuntos: Esta técnica trata de aunar los beneficios de las dos anteriores. Tanto la memoria caché como la memoria principal se dividen en grupos de bloques. De este modo, se establece una relación directa entre unos y otros. Después, se aplica una técnica asociativa para determinar el bloque de la memoria caché donde se ubica un determinado bloque de la memoria principal, dentro de su grupo. Esto significa que un bloque de la memoria principal podrá ocupar cualquiera de los bloques de la memoria caché, pero siempre dentro del conjunto de bloques que le corresponda por el grupo al que pertenece en la memoria principal.

    La función de traducción de direcciones suele denominarse mapping.

  • ¿Cómo se establece el bloque a sustituir cuando la caché está llena? La técnica empleada para realizar esta tarea recibe el nombre de política de reemplazo, y también aquí tenemos varias alternativas:

    • Una de las más utilizadas consiste en sustituir el usado menos recientemente (LRU, Least Recently Used).

    • También puede sustituirse el bloque que haya sufrido menos referencias, es decir, el usado menos a menudo (LFU, Least Frequently Used).

    • Otra opción, aunque menos eficaz, es sustituir el que lleva más tiempo en la caché, es decir, el primero en entrar es el primero en salir (FIFO, First In First Out).

    • Incluso, para simplificar el circuito empleado, puede elegirse el bloque a sustituir de forma aleatoria.

  • ¿Cuándo se escribe un bloque en la memoria principal? En este caso, pueden aplicarse dos planteamientos diferentes:

    • Escribir el bloque cada vez que se actualice

    • Escribir el bloque cuando va a ser reemplazado

En el segundo caso, la memoria principal contendrá información desactualizada, pero se minimizan las operaciones de escritura en la memoria principal.

Por supuesto, todos estos conceptos se comparten con el diseño de la memoria virtual y de la caché de disco que comentábamos antes.

Unidades de E/S

Como ya dijimos, casi al principio de este capítulo, los dispositivos de entrada/salida tienen un doble objetivo:

  1. Permiten que el ordenador se comunique con el exterior. Así obtiene la información que debe procesar u ofrece los resultados de sus cálculos.

  2. Codifican la información de entrada en un formato que comprenda el ordenador y, la información de salida, en un formato que se entienda en el exterior.

Existe una gran variedad de dispositivos de entrada/salida, por lo que comenzaremos por clasificarlos en tres categorías:

  • Dispositivos de entrada: Son los que se encargan de suministrar información al ordenador. Entre los más conocidos encontramos estos: teclado, ratón, webcam, micrófono, escáner, etc.
Unidades de entrada
  • Dispositivos de salida: Son los que se encargan de ofrecer información al exterior. Entre los más conocidos encontramos estos: monitor, impresora, altavoces, auriculares, etc.
Unidades de salida
  • Dispositivos de entrada y salida: Son los que pueden realizar las dos funciones anteriores de forma simultánea. Entre los más conocidos encontramos los siguientes: pantalla táctil, dispositivos de almacenamiento externo (discos duros, memorias USB, CDs o DVDs, …), tarjetas de red, …

Unidades de entrada y salida Además de la clasificación anterior, también podemos diferenciar los dispositivos según la forma en la que se transmite la información. En este caso, podemos establecer dos tipos:

  • Dispositivos de bloque: Son dispositivos que procesan información en porciones (bloques) de tamaño fijo. Es frecuente que el tamaño del bloque sea de 512 bytes, pero puede ser mucho mayor (aunque siempre en potencias de 2).

    En definitiva, cada vez que se transmite información se envían o reciben uno o varios bloques completos. Nunca se transmiten fragmentos de un bloque.

    Los ejemplos más comunes de dispositivos de bloque son los dispositivos de almacenamiento externo.

dispositivos de bloque
  • Dispositivos de carácter: son dispositivos que procesan información carácter (byte) a carácter.

    Un ejemplo obvio de dispositivo de carácter es el teclado, aunque también podemos incluir las tarjetas de red, los ratones o las impresoras.

Dispositivos de carácter

Actividad 5: Otros dispositivos de entrada y salida

Documenta, como mínimo, un dispositivo de entrada, otro de salida y otro de entrada/salida, que no hayan sido incluidos como ejemplo en la documentación.

Al menos, debes indicar lo siguiente:

  1. Su función.

  2. Sus características principales.

  3. El motivo por el que lo ubicas en su categoría.


Buses

Podemos definir los buses como canales que sirven para transferir datos entre los distintos componentes de un ordenador. Permiten interconectar desde las diferentes partes de un circuito integrado hasta los dispositivos periféricos unidos al ordenador. Según su naturaleza, podemos encontrar dos tipos de buses:

  • Paralelos: Están formados por varias líneas por las que circula información de forma sincronizada. Los dispositivos conectados a él escuchan las comunicaciones para identificar las que van dirigidas a ellos. Estas líneas se dividen en tres tipos según su función:

    • Líneas de datos: Todos los bits de un mismo byte son enviados a la vez por las diferentes líneas de datos del bus.

    • Líneas de dirección: Por ellas circulan los bits que representan la posición de memoria o el dispositivo de destino de la información que se está transmitiendo.

    • Líneas de control: Se encargan de enviar señales de control entre los dispositivos. Pueden contener información sobre el estado de la comunicación, interrupciones o DMA.

    Bus paralelo

    En el pasado, se ha usado muy a menudo, no sólo para los elementos conectados al procesador, sino también en la comunicación con discos duros, impresoras y otros dispositivos. Sin embargo, en la actualidad, las dificultades de sincronización de los datos a altas velocidades ha hecho que se tienda a utilizar buses de tipo serie.

    Entre los ejemplos más conocidos de buses paralelos, podemos nombrar los siguientes:PCI, IEE1284 (más conocido como Centronics), IDE y SCSI

  • Serie: En este caso, los bits se envían de uno en uno. Esto hace que su diseño sea sencillo y la velocidad puede ser mucho más elevada. En la actualidad se utilizan casi en todos los contextos en los que antes se utilizaban buses paralelos (para el bus del procesador, discos duros, impresoras, etc). Entre los buses serie más habituales encontramos los siguientes: RS-232, RS-422, USB, Firewire (IEEE 1394), SATA y Thunderbolt.

Actividad 6: Almacenamiento en dispositivos de memoria de estado sólido

Investiga las características de los dispositivos de almacenamiento de estado sólido y documenta, como mínimo, los siguientes aspectos:

  1. En qué consisten la tecnología.

  2. Cómo es su funcionamiento.

  3. Cuáles son sus principales ventajas e inconvenientes.

  4. Qué factores de forma utilizan.

  5. Qué métodos utilizan para comunicarse con la placa base

  6. En qué formatos (factores de forma) se comercializa esta tecnología y cuáles son sus diferencias.

Por último, incluye ejemplos de productos comerciales de diferentes capacidades, que sean comunes en el mercado, incluyendo sus precios.

Actividad 7: Características de los Buses

Investiga y documenta, por separado, las características de los buses mencionados en el capítulo:

  1. Crea una tabla resumen con las características de los buses paralelos: PCI, IEE1284 (o Centronics), IDE y SCSI.

  2. Crea una nueva tabla con las características de los buses serie: RS-232, RS-422, USB,Firewire (IEEE 1394), SATA y Thunderbolt.

Como mínimo, deberás indicar el año de su aparición, si ya no se fabrica, el año de su desaparición, la longitud máxima del cable y el ancho de banda máximo.

Cada tipo deberá ir acompañado por una imagen del conector que utiliza.