La estructura de OS/2 a nivel de multitarea se centra en los tres conceptos dados anteriormente:
Threads y
Procesos, gestionados por el núcleo, y
Sesiones, gestionadas por los subsistemas y por el
Selector de programas.
El selector de programas es la parte de OS/2 que se encarga de conmutar la pantalla, teclado y ratón físicos hacia los buffers lógicos de cada sesión. Para ello, incluye un API propio, que permite a una sesión hacer pasar a primer plano a cualquier sesión hija.
Surje la cuestión de como se arranca la primera sesión, la que nos permitirá arrancar nuevos programas, etc. Para ello, OS/2 incluye una línea en el
CONFIG.SYS que le indica un proceso que debe arrancar al principio de todo. Este proceso será el
Shell del sistema.
El Shell del sistema, en principio, puede ser cualquier programa, de modo que al arrancar OS/2, se arrancará éste también. Sin embargo, para que sea útil, tiene que permitir arrancar nuevas sesiones desde él y pasar el control a éstas.
En OS/2 1.0, el Shell del sistema era un simple menú, que contenía los programas básicos (como una línea de comandos). Pulsando sobre estos, se arrancaba una nueva sesión con éste, y se le cedía el control. En las versiones posteriores, como Shell se pone el
Presentation Manager. Este es el gestor de ventanas. Sin embargo, el PM no incluye ningún Shell, por lo que surge una nueva línea en el
CONFIG.SYS, que especifica qué Shell debe arrancar el PM. Este Shell, por defecto, es el
Work Place Shell, o
WPS, que es el que nos da la orientación a objetos del escritorio de OS/2; sin embargo, puede ser cambiado por otro cualquiera. Por ejemplo, poniendo como Shell el CMD.EXE de OS/2, tendremos una situación parecida a UNIX, en la que arrancamos siempre desde una línea de comandos.
El selector de programas incorpora dos
Hot Keys o
Teclas Calientes:
Ctrl+Esc y
Alt+Esc. La primera pasa la sesión actual a segundo plano y vuelve a poner el Shell en primer plano. Esto nos permite arrancar nuevas sesiones sin cerrar la actual. La segunda permite conmutar de una sesión a otra de forma cíclica, pero sin pasar por la del Shell.
OS/2 es muy atento con el usuario, y por eso tiene especial cuidado con el Shell. Dado que se trata del principal nexo de unión entre ambos, si se produce un error y el Shell se cierra, OS/2 abre uno nuevo inmediatamente, sin afectar para nada al resto de las aplicaciones que estaban corriendo. De esta forma el usuario nunca se queda sin control de la máquina. No olvidemos que el Shell es un programa más, que no corre en el núcleo, y que por tanto puede contener errores.
De todo esto deducimos varias cosas
- El Shell del sistema es un programa más, que se ejecuta en una sesión independiente, por lo que nada impide que escribamos el nuestro propio.
- Un Shell nunca debe arrancar ningún programa en su misma sesión, pues eso implicaría que el pulsar Ctrl+Esc no nos devolvería al Shell, sino al programa que estamos ejecutando en su sesión.
- Dado que el Shell es el padre de todas las sesiones que se arrancan, puede conmutar a cualquiera de ellas sin usar ningún truco especial, simplemente usando el API del selector de programas. Por esto mismo, tiene acceso a todas las sesiones de la lista de tareas de OS/2, y también puede matar a cualquiera de ellas.