¿Alguna vez sus máquinas se les pusieron mortalmente lentas y el led del disco no paraba ni aunque la desenchufaran? Bueno, acá les intentaré explicar de la forma más sencilla que puedo, qué es lo que pasa en estos casos TAN desagradables.
Los sistemas operativos multi-procesos, deben administrar la memoria de la mejor manera posible para que todos los procesos coexistan de forma equilibrada. Para esto, el SO. usa una técnica llamada paginación, que divide la memoria en distintos frames o páginas que le son asignados a cada proceso.
Todos sabemos que la memoria no es un recurso ilimitado, por esto es que existe la memoria virtual. Esta memoria virtual, no es más que una extensión de esas páginas en otro dispositivo de almacenamiento que no sea la memoria Principal (por ejemplo el disco rígido). Esto es lo que se conoce comúnmente como swaping; utilizar otro dispositivo de almacenamiento como extensión de la memoria principal (lo hace Photoshop cuando trabaja con imágenes grandes).
Ahora bien; cada proceso, tiene un número mínimo de frames o páginas que requiere que estén en la memoria principal para funcionar de forma correcta; por lo que no funcionaría si le falta alguno de esos espacios de memoria. Cuando esto sucede, el proceso, llamémosle A, envía un error de paginación solicitando que se le dé más espacio en la memoria principal. Hasta acá funcionaría todo bajo control.
¿Qué pasa cuando no tenemos disponibles esa cantidad mínima de memoria que necesita este proceso A?, tendríamos dos posibilidades: la primera sería quitarle alguna página a otro proceso B que se esta ejecutando para dársela a este. La segunda y que no viene al caso, sería dejar en cola de espera el proceso hasta que haya memoria suficiente, lo cual podría esperar eternamente sin resultados.
Supongamos que le quitamos páginas en memoria al proceso B y las bajamos al disco rígido haciendo swaping para que se cumpla que haya disponible el mínimo necesario para que nuestro proceso A funcione. Todo fantástico con el proceso A; pero resulta que el proceso B manda un error de paginación ya que necesitaba que sí o sí estén en la memoria principal esos frames que le quitamos. Otra vez corremos con la disyuntiva de que podríamos hacer.
Supongamos que somos un sistema operativo tipo Windows y le bajamos de nuevo al proceso A algunas páginas al disco rígido para dárselos al B; el B estaría fabulosamente bien, pero el A se moriría de bronca y le haría un piquete al SO con una bandera de “error de paginación”.
De esta forma, el procesador se mataría paginando y bajando de la memoria principal al swap y viceversa para que los dos estén felices… pero ninguno lo estaría. Ni el proceso A ni el proceso B que tardarían años en terminar sus funciones, ni el SO que estaría matando al microprocesador en acciones inútiles ni muchos menos nosotros que veríamos como la PC esta casi muerta con el procesador al 100% y el led del disco estaría rojo en todo momento.
Imaginen por un momento esta situación cuando tenemos más arriba de 50 procesos simultáneos. Sería un verdadero quilombo.
Es por eso que mientras mayor es el grado de multiproceso más probabilidades hay que nuestra PC esté en estado de thrashing. Este gráfico podría ayudar a entender el moco que sería.

Ahora ya lo entienden al Windows, cuando hace esto o simplemente cuando dice que hay un error de paginación y unos números que nadie podría entender. No es tarea fácil ser un sistema operativo. :P




No me gustan demasiado las apuestas, por lo general no las acepto. Pero cuando
Hace unos días atrás un compañero de la facultad, me pasó por email la dirección de un artículo en
Se está armando un revuelo, aunque lógico también innecesario, por la larga espera del nuevo Córdoba Weblogs. Digo lógico porque parece dar la sensación de que no se está haciendo nada y digo innecesario, porque carece de sentido apurar al grupo de gente que está a cargo del desarrollo teniendo en cuenta que no existe remuneración en el proyecto.