Sistemas operativos modernos

otros bits de control. Los programas de usuario por lo general pueden leer la PSW entera, pe­ ro sólo pueden escribir en algunos de sus campos. La PSW desempeña un papel importante en las llamadas al sistema y la E/S. Ei sistema operativo debe tener conocimiento de 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 reiniciar otro. Cada vez que el sistema operativo detiene un programa en ejecu­ ción, debe guardar todos los registros para que puedan restablecerse cuando el programa con­ tinúe su ejecución. Con el fin de mejorar el desempeño, los diseñadores de las CPUs abandonaron desde ha­ ce mucho el modelo simple de tomar, decodificar y ejecutar una instrucción a la vez. Muchas CPUs modernas cuentan con recursos para ejecutar más de una instrucción al mismo tiempo. Por ejemplo, una CPU podría tener unidades individuales para tomar, decodificar y ejecutar, de modo que mientras esté ejecutando la instrucción n, también pueda estar decodificando la instrucción n + i y tomando la instrucción n + 2. Tal organización se denomina canalización (pipeline) y se ilustra en la figura l-6a con una canalización de tres etapas, aunque son comu­ nes canalizaciones más largas. En casi todos los diseños de canalización, cuando ya se ha co­ locado una instrucción en la canalización, debe ejecutarse, aunque la instrucción anterior haya sido una ramificación condicional que se tomó. Las canalizaciones causan grandes dolores de cabeza a quienes escriben compiladores y sistemas operativos porque los obligan a considerar aspectos complejos de la máquina en cuestión. Figura 1-6. a) Canalización de tres etapas, b) CPU superescalar. Aún más avanzada que un diseño de canalización es una CPU superescalar, que se muestra en la figura l-6b. 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 toman 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 se desocupa una unidad de ejecución, busca en el búfer de retención una ins­ trucción que pueda manejar y, si la halla, la saca y la ejecuta. Una implicación de este diseño es que las instrucciones del programa a menudo se ejecutan en desorden. En su mayor parte, corres­ ponde al hardware asegurarse de que el resultado producido sea el mismo que se habría obteni­ do con una implementación secuencial, pero una buena porción de la complejidad se endilga al sistema operativo, como veremos. La mayoría de las CPUs, salvo las más simples que se usan en sistemas integrados, tienen dos modos, modo de kemel y modo de usuario, como se mencionó antes. Por lo regular, un bit

RkJQdWJsaXNoZXIy MjI4NDcx