Tuesday, September 26, 2006

GIANT-LOCK

Hasta la version 4.x de FreeBSD, el kernel, para poder acceder a los recursos del sistema por parte de multiples procesos utilizaba un GIANT-LOCK, esto es, todos los recursos quedaban a disposicion del proceso que ha pedido un recurso. Esta es ademas la forma que Linux esta siendo implementado. Esto funcionamuy bien cuando hay un procesador, pocos recursos (el tiempo de procesador es tambien un recurso del sistema) y pocos procesos. En ordenadores muy grandes, con muchos procesos y multiprocesadores, paralizar todo el kernel por cada llamada al sistema para pedir un recurso es algo muy muy "caro".
Para evitarlo, a partir de la version 5.x se empezo a desarrollar una nueva forma de manejar esto, que son los LOCKS, en lugar de poner todos los recursos a disposicion solamente del proceso que pide uno (o varios) de ellos, el kernel y el proceso deciden que recursos deben ser cerrados para otros procesos, posibilitando que otros procesos puedan seguir pidiendo otros recursos distintos. La mayor parte de los procesos que piden recursos son los drivers. El problema es que hay que reescribirlos para que usen los LOCKS en lugar del GIANTLOCK.. Hay otros drivers que no pueden, debido al hardware que manejan, ser utilizados sin GIANTLOCKED y otros que todavia no han sido portados. La version 5.x empezo a implementarlo, y funciona, pero la rama 6.x es donde se han portado la mayor parte de los drivers y funciona mucho mejor que la 5.

DragonFlyBSD, se escindio de FreeBSD al finalizar la rama 4.x para seguir usando el modelo GIANT-LOCK.

por Eduardo [nec556 at retena dot com]