Conceptos basicos de procesos y procesadores

3.1 Procesos y procesadores conceptos básicos.
Es posible disponer en un proceso de más de un flujo de ejecución. A cada uno de estos flujos le
denominaremos "thread" (Hilo). La introducción de threads en la codificación de servidores aporta ventajas
e inconvenientes que serán estudiados en primer lugar. Por otra parte, en un SD se dispone de más de un
procesador. A continuación, estudiaremos las diversas formas de organizar los procesadores. Finalmente,
estudiaremos la forma de asignar un proceso entre todos los procesadores disponibles.
3.2 Hilos y multihilos
En los años ochenta se descubrió que el concepto de proceso, tal como lo entendemos en el mundo UNIX,
resultaba desproporcionado para los requisitos de los SD. El problema radica en que UNIX asocia un único
thread de control con cada proceso. Un proceso es un recurso costoso en su creación y en su gestión. Ello
lleva consigo que la cooperación entre las distintas actividades de una aplicación donde cada una de ellas ha
sido implementada como un proceso sea difícil de programar y costosa en términos de ciclos de CPU por el
gran número de llamadas al sistema requeridas en la comunicación de actividades, comunicación de
procesos, y en la planificación de los mismos y cambios de contexto- (

En la actualidad, la investigación en SD y el concepto de microkernel [en vez de tener todo el código para el
sistema operativo en un gran programa único (llamado kernel), la mayoría del código estaría ubicado en
programas más pequeños conocidos como servidores, los cuales se ejecutarían como cualquier otro
programa. El trabajo del kernel se reduce esencialmente en "ser" el sistema operativo, a mantener los
servidores y programar su acceso al hardware], han puesto de manifiesto la necesidad de que en un mismo
espacio de direccionamiento convivan más de un thread de control. Aunque no es la única, una de las
finalidades de los threads es mejorar las prestaciones de los servidores, ahora no ocultos en las
profundidades del sistema sino construidos como procesos de usuario.
Introducción al concepto de thread
En ocasiones, el servidor de archivos debe bloquearse porque los octetos que solicita un proceso de usuario
no se encuentran en la caché y debe solicitar la lectura del bloque correspondiente al manejador de disco. El
servidor de archivos se bloquea esperando el servicio. Leer un bloque de disco lleva algún tiempo. Durante
este tiempo, el manejador también se bloquea. El resultado del bloqueo del servidor es que otras peticiones
de bloques por parte de otros procesos de usuario no pueden ser atendidas, estén o no estén los octetos
solicitados disponibles en la caché. Para subsanar el problema se debe disponer de uno o más threads
alternativos en el servidor de archivos que continúen con la ejecución. Así, cuando un thread se bloquea en la solicitud de un bloque al manejador de disco duro, otro thread toma el control sirviendo la siguiente
petición, cuyos octetos pueden estar en la caché. La introducción del concepto de thread aumenta la
concurrencia y las prestaciones del servidor de archivos.
La figura 4.3 a) muestra tres procesos. Cada uno de ellos tiene su propio espacio de direccionamiento y
descriptor de proceso. Los tres procesos, ya que no comparten espacio de direcciones, deben comunicarse
haciendo uso de los servicios de comunicación de procesos ofrecidos por el sistema operativo. En la figura
4.3 b) observamos un único proceso con tres threads de control. Cada uno de ellos tiene su propio contador
de programa y su propia pila, pero todos ellos comparten el mismo espacio de direcciones. A estos miniprocesos
se les denomina threads o procesos ligeros. Por supuesto, los threads comparten el CPU en un
sistema monoprocesador. En un hardware multiprocesador, sin embargo, los threads pueden ejecutar en
paralelo. Un thread puede crear un thread hijo y, al igual que los procesos invocar, llamadas al sistema. Si un
thread se bloquea en una de estas llamadas, otra puede tomar el CPU sin que el sistema operativo necesite
cambiar de contexto.