Bienvenidos sean a este post, hoy hablaremos sobre una mecanica del CPU.
Un proceso es una imagen de un programa corriendo en la memoria
Grigoryan, Wu
Cuando iniciamos un programa, el S.O lee al mismo desde la unidad de almacenamiento, lo copia en memoria, y apunta el CPU a la instruccion inicial del programa. Esto que podemos denominarlo como un proceso tiene su propio espacio de direccion virtual privada, stack y heap. Esto permite al S.O garantizarnos que dos procesos no se interferiran entre ellos pero esto puede complicar nuestra tarea especialmente si el objetivo es la comunicacion entre procesos (IPC por sus siglas en ingles). Si bien no es necesario que conozcamos al dedillo todo el esquema a bajo nivel si es necesario tener aunque sea un leve conocimiento sobre que sucede cuando ejecutamos un programa.
Pero todo va a depender del hardware, desde la estructura del hardware del CPU, hasta la cantidad de nucleos, pasando por la memoria cache y la memoria cache compartida entre el CPU y sus nucleos. Ya que todo lo anterior afecta la manera que el S.O corre el programa. Tomemos el caso de los numeros de nucleos, estos nos indican la cantidad de procesos que pueden correr en paralelo.
Esto usualmente se lo denomina como multiproceso, y podemos considerarlo como un entorno que permite correr varios procesos simultaneamente, y si corren al mismo tiempo se consideran que corren en paralelo. Por eso, concurrencia no es paralelismo mientras el paralelismo si implica concurrencia. En el post anterior hablamos del caso cuando tenemos una CPU con un solo nucleo. Los procesos corren simultaneamente pero no en paralelo, porque el S.O se encarga de manerjarlo mediante un mecanismo llamado context switching. Este se encarga de congelar el trabajo del proceso por un momento, copiando todos los valores del registro que el proceso estaba usando al momento actual, y almacenando todos los recursos activos y valores del proceso. Cuando un proceso es detenido, otro proceso procede a correr y luego de establecido el tiempo para el segundo proceso, el S.O procede al intercambio de contexto. Otra vez, se vuelve a repetir el proceso y antes de que el primer proceso se vuelva a iniciar, el S.O copia nuevamente los recursos y valores a sus correspondiente slots usados por el primer proceso y vuelve a retomar la ejecucion del mismo.
Como dato curioso el proceso ni se entera de todo lo comentado anteriormente porque todo esto sucede tan rapidamente que el usuario apenas puede notar que los procesos no corren al mismo tiempo. Cuando un proceso esta activo, el CPU ejecuta sus instrucciones secuencialmente, almacenando cualquier dato intermedios en sus registros, mientras otro proceso esta a la espera del S.O por su porcion de tiempo para correr. Esto es una tarea sofisticada para el S.O, dado que tambien debe manejar los estados de los procesos, cuales procesos deben tomar mas tiempo del CPU, y asi sucesivamente. Para la programacion de los procesos se utilizan tablas de prioridad. Este es utilizado por el S.O para proveer mas tiempo a procesos mas prioritarios, como los del sistema, sobre otros que no lo son tanto, como los del usuario.
El S.O anota el punto de ejecucion de un proceso antes de pausarlo antes de retomar otro proceso. El segundo proceso puede usar el mismo conjunto de registros del procesado pausado. Esto fuerza al S.O a almacenar los valores de registro para el primer proceso pueda ser recuperado en algun momento mas tarde. Cuando el segundo proceso es pausado se retoma al primero, volviendo a cargar todos los registros guardados en sus correspondientes registros y este lo retomara como si nunca lo hubieran pausado.
Como todo lo anterior fue descripto para el caso de una CPU de un solo nucleo. Para el caso de multiples nucleos, cada uno tiene su conjunto de registros. A su vez, cada uno ejecuta las instrucciones del programa independientemente de los otros nucleos, permitiendo correr cada proceso en paralelo sin necesidad de pausarlos y retomarlos. Pero la dificultad crecera cuando necesitemos contactar a cada uno de la misma manera pero eso sera tema para otro post.
En resumen, hoy hemos visto a procesos, que son, como nos benefician, asi como algunos conceptos sobre estos, y un ejemplo para ver como trabaja. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donation
It’s for maintenance of the site, thanks!
$1.50
