viernes, 20 de agosto de 2010

Los Procesadores

0 comentarios
Procesadores
El “cerebro” del ordenador es la CPU, la cual toma
instrucciones de la memoria y las ejecuta. El ciclo básico de toda CPU consiste en tomar la primera instrucción de lamemoria, decodificarla para determinar su tipo y operandos, ejecutarla, y luego tomar, decodificar y ejecutar las instrucciones subsiguientes. Es así como se ejecutan los programas.

Cada CPU ejecuta un
repertorio de instrucciones específico. Por lo tanto, un Pentium no puede ejecutar programas para un SPARC, y un SPARC no puede ejecutarprogramas para un Pentium. Puesto que acceder a la memoria para extraer una instrucción o una palabra de datos tarda mucho más que la ejecución de una instrucción, todas las CPUs contienen algunos registros internos para guardarvariables importantes y resultados temporales. El repertorio de instrucciones incluye por lo general instrucciones para cargar una palabra de la memoria en un registro, y para almacenar en la memoria una palabra que está en un registro. Otrasinstrucciones combinan dos operandos tomados de los registros, de la memoria o de ambos, para producir un resultado; por ejemplo, sumar dos palabras y almacenar el resultado en un registro o en la memoria.

Además de los registros generales que se utilizan para guardar variables y resultados temporales, casi todos
los ordenadores tienen varios registros especiales que puede ver el programador. Uno de ellos es el contador de programa, que contiene la dirección de memoria enla que está la siguiente instrucción que se va a extraer. Una vez extraída esa instrucción, el contador del programa se actualiza automáticamente para apuntar a la siguiente instrucción.

Otro registro es el puntero de pila, que apunta a la parte superior (cima) de la pila actual en la memoria. La pila contiene una trama (o registro de activación) por cada procedimiento al que se ha llamado pero del cual no se ha retornado todavía. La trama de pila de un procedimiento contiene los parámetros de entrada, las variableslocales y variables temporales que no se guardan en registros.

Otro registro más es la PSW (Program Status Word; palabra de estado delprograma) (también se le llama el registro de estado del procesador). Este registrocontiene los bits de código de condición (también denominados indicadores o flags), que se activan cuando se ejecutan instrucciones de comparación, junto con la prioridad de ejecución de la CPU, el modo (usuario o supervisor (núcleo)) y otros bits de control. Los programas de usuario por lo general pueden leer la PSW entera, pero sólo pueden escribir en algunos de sus campos. La PSW desempeña un papel muy importante en las llamadas al sistema y la E/S.

El
sistema operativo debe conocer todos los registros. Al multiplexar en el tiempo la CPU, es común que el sistema operativo tenga que detener el programa en ejecución para iniciar o continuar la ejecución de otro. Cada vez que el sistema operativodetiene un programa en ejecución, debe guardar todos los registros para que puedan restablecerse cuando el programa continúe su ejecución.

Con el fin de mejorar el rendimiento, los diseñadores de las CPUs abandonaron desde hace ya mucho tiempo el modelo según el cual simplemente se extrae, decodifica y ejecuta una instrucción a la vez. Muchas CPUs modernas cuentan con los recursos necesarios para ejecutar más de una instrucción al mismo tiempo. Por ejemplo, una CPU podría tener unidades individuales para extraer, decodificar yejecutar, de manera que mientras esté ejecutando la instrucción n, también puedeestar decodificando la instrucción n+1 y extrayendo la instrucción n+2. Tal organización se denomina pipeline (o segmentación encauzada) y se ilustra en la Figura 1-6(a) con un pipeline de tres etapas, aunque son comunes pipelines más largos. En casi todos los diseños de pipelines, una vez que una instrucción entra en el pipeline, debe ejecutarse necesariamente, aunque la instrucción anterior haya sido un salto condicional que haya dado lugar a una ruptura de secuencia. Los pipelines provocan grandes dolores de cabeza a quienes escriben compiladores y sistemas operativos, porque les obligan a tener en cuenta aspectos muy complejos de la máquina en cuestión.


Un diseño todavía más avanzado que el pipeline es una CPU superescalar, que se muestra en la Figura 1-6(b). Cuenta con varias unidades de ejecución, por ejemplo, una para aritmética de enteros, una para aritmética de punto flotante y una para operaciones booleanas.

Se extraen dos o más instrucciones a la vez, se decodifican y se dejan en un búfer de retención hasta que puedan ejecutarse. Cuando queda libre una unidad de ejecución, se busca en el búfer de retención una instrucción que pueda ejecutarse en ella y, si la hay, se la saca del búfer y se ejecuta. Una implicación de este diseño es que las instrucciones del programa a menudo se ejecutan desordenadas. En su mayor parte, corresponde al hardware asegurarse de que el resultado producido sea el mismo que se habría obtenido con una implementación secuencial, pero una buena parte de la complejidad se endosa al sistema operativo, como veremos.

La mayoría de las CPUs, salvo las más simples que se utilizan en los sistemas empotrados, tienen dos modos de operación: modo núcleo y modo usuario, como se mencionó antes. Por lo regular, un bit de la PSW controla el modo. Cuando la CPU opera en modo núcleo puede ejecutar cualquiera de las instrucciones que componen su repertorio de instrucciones y realizar todas las funciones del hardware. El sistema operativo se ejecuta en modo núcleo, y eso le permite acceder a todo el hardware.

En contraste, los programas de usuario se ejecutan en modo usuario, que sólo permite ejecutar un subconjunto del repertorio de instrucciones y tener acceso a un subconjunto de las funciones del hardware. En general, todas las instrucciones que implican E/S y protección de memoria están deshabilitadas en modo usuario. Desde luego, también está prohibido cambiar el bit de modo de la PSW para pasar de modo usuario a modo núcleo.

Para obtener algún servicio del sistema operativo, el programa de usuario debe hacer una llamada al sistema, la cual realiza un trap dentro del núcleo e invoca alsistema operativo. La instrucción TRAP cambia de modo usuario a modo núcleo y cede el control al sistema operativo. Una vez completado el trabajo solicitado alsistema operativo, se devuelve el control al programa de usuario justo en la instrucción inmediatamente siguiente a la llamada al sistema.

Explicaremos los detalles del proceso de llamada al sistema más adelante. Como nota tipográfica, utilizaremos el tipo de letra Arial minúscula para indicar llamadas al sistema en el texto normal, como por ejemplo: read.

Vale la pena señalar que los ordenadores tienen otros traps (interrupciones y excepciones) además de las instrucciones para ejecutar una llamada al sistema (denominadas a veces interrupciones software). La mayoría de los demás traps están provocados por el hardware para advertir de una situación excepcional, tales como un intento de división por cero o un underflow de coma flotante. En todos los casos, el sistema operativo toma el control y decide lo que hay que hacer a continuación. A veces es preciso abortar el programa retornando un código de error. En otras ocasiones puede ignorarse el error (por ejemplo, ante un underflow de una variable puede simplemente asignársele un 0). Finalmente, si el programa ha anunciado con antelación que quiere manejar ciertos tipos de condiciones, puededevolvérsele el control permitiéndole que intente resolver el problema por sí mismo.

0 comentarios:

Publicar un comentario

redireccion