Tema 3. Procesos. Hay que tener muy claras las diferencias entre programa y proceso: Un programa es una entidad pasiva compuesta unicamente por un código y unos datos, es decir, tiene un listado fijo. Un proceso es una entidad activa, es el "programa" en ejecución Un proceso se compone de: - Código del programa que ejecuta. - Estado del proceso: - sección de datos. - pila - contador de programa - puntero de pila - palabra de estado - registros de uso general - informacion del S.O. Un proceso puede tener tres estados distintos: - preparado: el proceso está listo para pasar a ejecutarse. - en ejecución - en espera: por alguna razón (operación de E/S, interrupción, etc.) el proceso debe esperar a que se acabe una acción sin la cual no puede continuar su ejecución. Ejecución de procesos: El S.O. inicia la ejecución de un proceso nuevo que está preparado. Cuando este proceso no va a utilizar la CPU durante un tiempo (hay una llamada a E/S, etc.) el S.O. lo pone en espera hasta que acaba esa operación. Mientras tanto pasa a la CPU la ejecución de otro proceso que estuviera preparado y realiza los mismos pasos: ejecuta hasta que este deja de usar la CPU, lo pone en espera si es necesario y pasa a ejecutar otro. Cuando la acción del proceso que está en espera termina (acaba la E/S, etc.) el S.O. lo pone otra vez en estado de preparado, así hasta que termina con todo el proceso. En todos estos cambios de estado el S.O. debe guardar el "contexto" del proceso, en el cual está toda la información necesaria para volver a ejecutarlo donde se dejó. Esta información se guarda en el Bloque de Control de Procesos (PCB), que tiene una dirección de memoria protegida que solo puede modificar el S.O. El S.O. deberá decidir que proceso de los que estan en espera pasará a ejecución cuando la CPU quede libre, esta decisión la hará a traves de un Planificador de Procesos. Planificación de Procesos: Existen dos planificadores que se encargan respectivamente de pasar trabajos o procesos a la memoria principal y a la CPU. El más importante es el Planificador de la CPU que se encarga de decidir qué procesos de los que están preparados pasarán a ejecución cuando la CPU se libere de algún otro proceso (cuando este pase a estar en espera). Esta planificación puede ser apropiativa o no apropiativa, siendo la primera aquella en la que unos procesos tienen prioridad sobre otros y cuando acaban de estar en espera y pasan a preparado hacen que el S.O. les dé paso a la CPU que abandona el proceso que tenía en ejecución, lo pone en preparado y pasa a ejecutar el que tiene prioridad. Con el otro sistema la CPU ejecuta un proceso hasta que lo termina o por alguna razón éste pasa a estar en espera. Existen varios criterios por los cuales la CPU es capaz de cambiar de proceso en ejecución: - Utilización de la CPU: el S.O. pretende que la CPU este el menor tiempo posible inactiva. - Productividad. - Tiempo de retorno: el proceso en ejecución tarda mucho en acabar una acción, pudiendo encontrarse en un bucle muy largo. - Tiempo de espera: se pretende que los procesos no estén demasiado tiempo en espera. - Tiempo de respuesta.