Los conceptos teóricos utilizados para la realización propia del sistema son los conceptos básicos de programación que no es necesario comentar, pero los conceptos que se pretenden ilustrar sí que merecen mención.
El sistema operativo está hecho para dar vida a los procesos, así que comenzaré por ellos. Un proceso, no es más que una lista de instrucciones que están en ejecución y se aplican a datos en memoria principal y secundaria. Además, en los sistemas informáticos actuales, las propias instrucciones también se guardan en memoria secundaria para su almacenamiento y en memoria principal para su ejecución.
La vida de un proceso comienza con la carga de sus instrucciones en memoria principal desde la memoria secundaria y el inicio de su ejecución a partir de su primera instrucción. A lo largo de su vida típicamente necesitará datos de memoria secundaria que almacenará en memoria principal para su procesamiento y posteriormente escribirá los datos resultantes en memoria secundaria y se terminará.
En los primeros tiempos de los ordenadores de arquitectura Von Newmann era directamente el hardware el que cargaba las instrucciones del proceso en memoria e iniciaba su ejecución, el procesador se dedicada enteramente a la ejecución de este único proceso y este disponía de toda la memoria principal y podía utilizar la memoria secundaria libremente.
Actualmente el problema es que pretendemos que varios procesos convivan en la misma máquina, de manera que se aproveche más el hardware disponible (ej. un proceso puede hacer cálculos mientras otro intenta leer de memoria secundaria) y se puedan realizar varias tareas simultáneamente en el tiempo (multitarea) e incluso que varios usuarios puedan compartir la misma máquina (multiusuario). Sin añadir elementos nuevos al sistema, la complejidad a la hora de programar crecería exponencialmente con el numero de procesos, para poder compartir recursos y el fallo de uno solo de los procesos podría afectar gravemente a los demás. Es necesario, pues, una coordinación.
La figura del sistema operativo se introduce inicialmente para realizar la tarea de intermediario entre los distintos procesos. Será cargado en memoria principal y ejecutado por el hardware y será el sistema operativo el que se ocupe de dar vida a los procesos y de repartir los recursos disponibles entre ellos. Al menos tendrá que realizar las siguientes labores:
Cargar en memoria principal los distintos procesos.
Decidir cuál de los procesos es asignado al procesador para ser ejecutado en cada momento.
Cuando alguno de los procesos solicite memoria será él quien decida qué memoria utilizar, incluso podrá decidir quitársela a otro proceso. De hecho, utilizar memoria libre es sencillo, el problema surge cuando es necesario "robar" memoria a otro proceso, en cuyo caso el contenido será escrito en memoria secundaria, y entregada al que la necesita. Así que son los algoritmos de selección de "víctima" los que se estudian.
Cuando alguno de los procesos solicite leer de memoria secundaria será él quien lo haga, coordinando y ordenando las lecturas de los distintos procesos para mejorar el rendimiento. Siendo lo más importante en este caso el orden en que se leen los datos.
Este programa ilustra los distintos algoritmos utilizados para estas tareas. Concretamente los algoritmos actualmente implementados son:
El primer proceso en condiciones de ejecutarse será el asignado al procesador y permanece asignado hasta no poder ejecutarse más por tener que esperar a algún evento o por haber terminado.
Se establece un tiempo máximo de ejecución o cuanto y se ejecuta cada proceso hasta que exceda su cuanto o no quiera ejecutarse más, entonces se asigna otro y así sucesivamente. Los procesos en espera de ejecución forman una cola circular.
Se ejecuta el proceso más breve de los que estén preparados, y permanece asignado hasta no poder ejecutarse más, momento en el cual se volverá a elegir el proceso más corto.
Se ejecuta el proceso más corto de los que estén preparados, pero a diferencia del SPN el esquema es apropiativo, de manera que siempre que surja otro proceso listo para ejecutarse se comprobará si va a tardar menos en ejecutarse que el actual y si es así será el nuevo proceso el que se asigne y el actual tendrá que esperar.
Para cada proceso, basado en el tiempo que va a ocupar el procesador(s) y el tiempo que lleva esperando para ocuparlo (w), Se calcula w+s/s, una vez echo esto el proceso que tenga un valor mayor será asignado al procesador. Este algoritmo es bastante bueno, por que además de dar preferencia a los procesos cortos también tiene en cuenta el envejecimiento de los procesos para evitar así la "inanición".