Sistemas Operativos
M.Sc. Luis Eduardo Sepúlveda Rodríguez
¿Qué es un proceso?
Se define el tĂŠrmino proceso, como un programa con su entorno de trabajo (Stallings,2011) Proceso = Programa + entorno de trabajo
Según Silberschatz y otros (2009), es necesario diferenciar entre programa y proceso así: ¡
Programa: Listado de instrucciones. Ente pasivo. Se almacena en archivos.
¡
Proceso: Programa en ejecución. Ente activo. La ejecución de un programa requiere cargarlo previamente en memoria.
• Stack (variables locales, direcciones de retorno, parámetros...) (pila) • Heap (memoria dinámica ejemplo: instancias / objetos) • Data (variables globales) • Text (código)
Stack
Heap data Text Proceso en memoria
Si un SO en una máquina con un solo procesador, desea brindar la posibilidad de ejecutar múltiples procesos “al mismo tiempo”, deberá atender uno a la vez durante un intervalo de tiempo, para luego conmutar a otro proceso. Si la conmutación se realiza rápidamente, el usuario tendrá la sensación de que el SO está haciendo todo al mismo tiempo.
Un proceso puede estar en uno de tres estados posibles: ¡
Nuevo: El proceso esta siendo creado
¡
Listo: Estado en el que se encuentran uno o varios procesos que necesitan tiempo de procesador para iniciar o continuar su ejecución.
¡
Ejecución: Estado en el que se encuentra el proceso que actualmente tiene le control del procesador y esta ejecutando instrucciones.
¡
Espera: Estado en el que se encuentran todos los procesos que requieren que un evento suceda para continuar su ejecución. Aunque tuvieran el control del procesador, no podrían continuar su ejecución.
¡
Terminado: El proceso ha terminado su ejecución
Terminado
Nuevo
Asignaciรณn de CPU Admitidos Listo
Multiprogramaciรณn
CPU
Ejecuciรณn
Interrupciรณn E/S o evento de espera
E/S o evento de finalizaciรณn Espera
Salida
¡
Ejecutar: Carga el proceso en memoria y coloca la dirección del PCB en la lista de procesos listos.
¡
Cancelar: Retira adecuadamente de la lista (Listo o Espera), la dirección del PCB del proceso y si está en ejecución, termina.
¡
Suspender: Pasa la dirección del PCB del proceso de la lista de procesos listos a la de procesos en espera y, si se está ejecutando, conmuta a otro.
¡
Reanudar: Pasa la dirección del PCB del proceso de la lista de procesos en espera a la lista de procesos listos.
ยก
El sistema operativo debe guardarla informaciรณn de los procesos para que pueda conmutar de un proceso a otro
ยก
Esta informaciรณn se conoce teรณricamente como el PCB (Process Control Block) del proceso.
La información que el PCB puede tener, varía según la arquitectura de la máquina y el diseño del Sistema Operativo, pero debe incluir como mínimo lo siguiente: ¡ ¡ ¡
Estado actual del proceso. Último valor de los registros del procesador. Número identificador del proceso dentro del sistema (PID).
Estado del proceso
Identificación del proceso (PID)
Valor de los registros de la CPU Limites de memoria Lista de archivos abiertos …
También puede contener: ¡
Privilegios.
¡
Dueño del proceso.
¡
Tiempo de procesamiento (usado para servicios de cobro de uso).
¡
Prioridad.
¡
Límite de la memoria asignada.
Así como cada proceso tiene su PCB, el Sistema Operativo tiene un SCB (System Control Block), en el cual almacena toda la información necesaria para la ejecución apropiada del Sistema Operativo. Entre la información existente en el SCB tenemos: ¡
Ubicación de los PCB.
¡
Ubicación de las funciones controladoras del sistema.
¡
Cantidad de recursos disponibles.
¡
Cantidad de recursos asignados.
El cambio de contexto es el nombre que recibe el mecanismo mediante el cual, la CPU es asignada de un proceso a otro. ¡
Cuando el Sistema Operativo toma el control del procesador, éste guarda el PCB del proceso actual y recupera el PCB del proceso siguiente. ¡
El tiempo empleado en el cambio de contexto es considerado sobrecarga, debido a que el sistema NO realiza trabajo útil mientras tanto ¡
El tiempo empleado depende del soporte de hardware ¡
El Sistema Operativo puede interrumpir la ejecuci贸n de un proceso para tomar control del procesador (Multiprogramaci贸n).
ÂĄ
Cada 10 milisegundos el SO interrumpe la ejecuciĂłn del proceso actual y decide si continĂşa con el proceso actual o conmuta a otro proceso. Esta labor es realizada por el Planificador de Procesos del SO.
隆
El Sistema Operativo tendr谩 que esperar a que el proceso termine su ejecuci贸n normal para poder tomar el control (Monoprogramaci贸n).
ยก
Multiprocesador: Sistema con varios procesadores trabajando cooperativamente para atender varios procesos.
ยก
Multicomputadora: Sistema donde varias computadoras trabajan cooperativamente para resolver varios problemas.
ยก
Cola de trabajos:Conjunto de todos los procesos en el sistema
ยก
Cola de listos: Conjunto de procesos que residen en memoria principal, listos y en espera de ser ejecutados
ยก
Colas de dispositivos: conjunto de procesos esperando por un dispositivo de E/S
ยก
Los procesos migran entre las distintas colas
Un planificador de procesos es parte de un SO que se encarga de la toma de decisiones de selección sobre los procesos. Existen tres tipos de planificadores básicos: 1.
Planificador de largo plazo: Llamado “planificador de trabajos”. Controla el número de procesos en memoria. Selecciona que proceso entrar en la cola de procesos listos. Lo ideal sería que la tasa de creación y salida de procesos fuese igual. Sólo se invoca con la ejecución o cancelación de un proceso.
2.
Planificador de corto plazo: Llamado “planificador de procesos” o “planificador de CPU”. Selecciona un proceso que se encuentre en la memoria principal (procesos listos) para asignarle el procesador.
3.
Planificador de mediano plazo: Llamado “planificador de swapping”. Encargado de bajar al disco algunos procesos para reducir la competencia del procesador (disminución de la carga del sistema).
Para poder utilizar los tres planificadores, necesitamos entonces como mínimo cinco estados para los procesos.
¡
El Planificador de corto plazo es invocado muy frecuentemente (milisegundos) ⇒ (debe ser rápido)
¡
El Planificador de largo plazo se invoca con poca frecuencia (segundos, minutos) ⇒ (puede ser lento) §
¡
Controla el grado de multiprogramación
Los procesos se pueden describir como: § Procesos asociados a E/S: Pasan más tiempo haciendo E/S qué cálculos, muchas pequeñas explosiones de CPU. § Procesos asociados a la CPU: Pasan más tiempo haciendo
cálculos; pocas pero muy largas explosiones de CPU.
Todo Sistema Operativo que brinde el servicio de multiprogramación debe también, brindarle al usuario un mínimo de operaciones para controlar los procesos, tales como: ¡
Ejecutar: Carga el proceso en memoria y coloca la dirección del PCB en la lista de procesos listos.
¡
Cancelar: Retira adecuadamente de la lista (Listo o Espera), la dirección del PCB del proceso y si está en ejecución, termina.
¡
Suspender: Pasa la dirección del PCB del proceso de la lista de procesos listos a la de procesos en espera y, si se está ejecutando, conmuta a otro.
¡
Reanudar: Pasa la dirección del PCB del proceso de la lista de procesos en espera a la lista de procesos listos.
¡
Un Proceso padre crea procesos hijos, que, a su vez pueden crear otros procesos, formando un árbol
¡
Esquemas para compartir recursos § Padres e hijos comparten todos los recursos § Los hijos comparten un subconjunto de los recursos del
padre § Padre e hijo no comparten recursos ¡
Esquemas de ejecución § Padre e hijo se ejecutan de manera “concurrente” § Padre espera hasta que el hijo termina
¡
Espacio de direcciones § Hijo duplicado del padre § Se carga un programa en el hijo
¡
Ejemplos UNIX § fork llamada al sistema para crear nuevos
procesos § exec llamada al sistema, después de fork para reemplazar el espacio de memoria del proceso con un programa nuevo
33 de 6
int main() { pid_t pid; /* fork another process */ pid = fork(); if (pid < 0) { /* error occurred */ fprintf(stderr, "Fork Failed"); exit(-1); } else if (pid == 0) { /* child process */ execlp("/bin/ls", "ls", NULL); } else { /* parent process */ /* parent will wait for the child to complete */ wait (NULL); printf ("Child Complete"); exit(0); } }
¡
El proceso ejecuta su último enunciado y le pide al sistema operativo que lo borre (exit) § Datos de salida de hijo a padre (vía wait) § Recursos del proceso son liberados por el SO
¡
El padre puede terminar la ejecución de un proceso hijo (abort) § El hijo excedió los recursos asignados § La tarea asignada al hijo ya no es necesaria § Si el padre está terminando ▪ Algunos sistemas operativos no permiten a los hijos continuar trabajando ▪ Todos los hijos son terminados – terminación en cascada
Gesti贸n de Procesos
39
ยก
En un sistema que soporte multiprogramaciรณn o multiprocesamiento, bรกsicamente existen dos tipos de procesos, procesos independientes y procesos cooperativos.
ยก
La diferencia fundamental entre estos dos tipos de procesos es que entre los procesos independientes no existe relaciรณn alguna, es decir, estos procesos no afectan y no son afectados por otros procesos. Por el contrario los procesos cooperativos si pueden afectar o ser afectados por otros procesos. 40 de 6
¡
Cuando dos o más procesos cooperan para solucionar un problema, ya sea en un sistema con uno o varios procesadores, se dice que estos procesos trabajan de forma concurrente.
¡
Está claro que para que exista concurrencia es sistemas de un solo procesador, es necesaria la existencia de la multiprogramación. Sin embargo la presencia de la multiprogramación no es condición suficiente para que exista la concurrencia. 41 de 6
¡
Un proceso puede verse afectado por otro cuando uno o más de los recursos de software o de hardware que necesita para operar correctamente, son requeridos o compartidos por más procesos.
¡
Para que existan procesos cooperativos es necesario que el sistema operativo brinde servicios de comunicación y sincronización, es decir, que los procesos puedan “hablar” para compartir información y controlar el acceso concurrente.
¡
La cooperación de procesos necesita la comunicación entre proceso llamada IPC por sus siglas en inglés (InterProcess Communication)
¡
Los mecanismos de sincronización tienen como objetivo: § El control de acceso a los recursos compartidos
de hardware o software.
§ La asignación de recursos. § El controlar el flujo de ejecución (el proceso P
sólo debe ejecutarse cuando se ejecute completamente el proceso Q).
43 de 6
¡
Existen dos esquemas complementarios de comunicación entre procesos: § Mensajería entre procesos (Paso de mensajes): En este
esquema el sistema operativo es el ente responsable de la comunicación, porque mueve la información generada por un proceso (mensaje) hacia otro.
§ Memoria compartida: En estos sistemas los procesos
comparten una zona de memoria o buffer por el cual ellos se comunican. En este esquema la comunicación es responsabilidad exclusiva de los procesos, es decir, el sistema operativo sólo brinda la posibilidad de compartir memoria. La forma de utilizarla para comunicarse depende de los procesos y no del sistema operativo. 44 de 6
Paso de MensajesMemoria compartida
Sea cual sea el método que se seleccione, debe darse solución de manera muy clara, entre otros, a los siguientes interrogantes: ¡
¿Cuáles son los pasos que se deben seguir para comunicar dos procesos?
¡
¿ Se puede crear un medio de comunicación compartido por más de dos procesos?
¡
¿Cuántos medios de comunicación pueden haber entre dos procesos? 46 de 6
¡
¿Cual es la capacidad de almacenamiento de un canal de comunicación cuando un proceso trasmite pero el otro no puede atenderlo?
¡
¿Un proceso puede mantener más de un canal de comunicación abierto al mismo tiempo?
¡
¿Cual es el tamaño máximo de información (por paquete) que se puede enviar por un canal de comunicación?
¡
¿En una comunicación entre dos procesos usan un canal simplex (unidireccional), halfduplex (bidireccional no simultáneo), full duplex(bidireccional)? 47 de 6
¡
¿Como hace un proceso para interrumpir o terminar un enlace de comunicación?
¡
¿Qué pasa con la información que aun no ha sido procesada, cuando ambos procesos terminan su ejecución, o si el canal es interrumpido?
¡
¿Qué pasa cuando un proceso desea comunicarse con otro que en el momento no se está ejecutando? 48 de 6
¡
Procesos Independientes: No pueden afectar o ser afectados por la ejecución de otros procesos
¡
Procesos Cooperativos: Pueden afectar o ser afectado por la ejecución de otros procesos
¡
Ventajas de la cooperación entre procesos: § Intercambio de información § Incrementar la velocidad de cómputo § Modularidad
¡
Paradigma para procesos cooperativos, proceso productor genera información para un proceso consumidor § Con buffer no-acotado no
impone un límite práctico para el tamaño del buffer § Con buffer acotado asume
que existe un buffer de tamaño fijo
隆
Datos compartidos #define BUFFER_SIZE 10 typedefstruct { . . . } item; item buffer[BUFFER_SIZE]; int in = 0; intout = 0;
隆
La soluci贸n es correcta pero s贸lo puede utilizar BUFFER_SIZE-1 elementos
while (true) { /* Produce an item */ while (((in = (in + 1) % BUFFER SIZE count) == out) ; /* do nothing -- no free buffers */ buffer[in] = item; in = (in + 1) % BUFFER SIZE; }
while (true) { while (in == out) ; // do nothing -- nothing to consume // remove an item from the buffer item = buffer[out]; out = (out + 1) % BUFFER SIZE; return item; }
¡
Mecanismo para la comunicación entre procesos y la sincronización de sus acciones.
¡
Sistema de mensajes: Comunicación entre procesos sin recurrir a variables compartidas.
¡
Para la comunicación entre procesos se tiene dos operaciones:
¡
Si los procesos P y Q desean comunicarse, se necesita lo siguiente:
¡
Implementación del enlace de comunicaciones
§ send(message): El tamaño de los mensaje puede ser fijo o variable § receive(message) § Establecer un enlace de comunicaciones entre ellos. § Intercambiar mensajes vía send/receive. § Físico: Memoria compartida o hardware (bus) § Lógico: software
¡
Un mensaje es información almacenada en un formato determinado. Este formato varía entre los distintos sistemas operativos. Sin embargo, en dicho formato debe ir por lo menos:
¡
Fuente: Identificación (ID) del proceso que envía la información.
¡
Destino: Identificación (ID) del proceso receptor de la información.
¡
Contenido: Información o cuerpo del mensaje.
¡
Para algunos sistemas operativos, existe más información importante que tiene que ir en el mensaje, como prioridad del mensaje, longitud, número del paquete, etc. Por otro lado, los procesos que deseen comunicarse deben tener una manera de referirse unos a otros. Para ello pueden usar comunicación directa o indirecta.
¡
Los procesos deben conocer la identificación de los otros procesos de forma explícita: § send (P, mensaje): Enviar un mensaje el proceso P § receive(Q, mensaje): Recibir un mensaje del Q
¡
Propiedades del enlace de comunicaciones § § § §
El enlace de comunicaciones se establece automáticamente. Un enlace es asociada con exactamente un para de procesos. Entre cada para de procesos existe exactamente un enlace. El enlace puede ser unidireccional, pero generalmente es bidireccional.
¡
Los mensajes son dirigidos y recibidos desde buzones o casillas de correo (también llamados puertos). § Cada buzón tiene un identificador. § Los procesos pueden comunicarse sólo si ellos comparten un
buzón.
¡
Propiedades del enlace de comunicaciones § Enlace establecido sólo si los procesos comparten un buzón
común. § Un enlace puede estar asociado con muchos procesos. § Cada par de procesos puede compartir varios enlaces de comunicaciones. § Los enlaces pueden ser unidireccionales o bidireccionales.
¡
Operaciones § Crear un nuevo buzón § Enviar y recibir mensajes a través de buzones § Destruir un buzón
¡
Las primitivas son definidas así:
send(A, mensaje): Enviar un mensaje al buzón A receive(A, mensaje): Recibir un mensaje del buzón A
¡
El paso de mensajes puede ser bloqueante o no bloqueante.
¡
Bloqueante: Es considerado sincrónico. § Enviar Bloqueo: Es enviado el bloqueo hasta que el
mensaje es recibido. § Recibir Bloqueo: Es recibido el bloqueo hasta que el mensaje esta disponible. ¡
No bloqueante: Es considerado Asincrónico § Enviar No bloqueo hasta que el emisor envíe el mensaje y
continúe. § Enviar No bloqueo hasta que el receptor recibe un mensaje válido o nulo.
ยก
Cola de mensajes relacionados con el enlace; implementada en una de tres formas: 1. Capacidad Cero: 0 mensajes El emisor necesita esperar para recibir (cita).
2. Capacidad limitada: Longitud finita de n mensajes
El emisor debe esperar si el enlace esta lleno
3. Capacidad ilimitada: Longitud infinita
El emisor nunca espera
¡
Memoria compartida según POSIX § El primer proceso crea un segmento de memoria compartida segment id = shmget(IPC PRIVATE, size, S IRUSR | S IWUSR);
§ El proceso espera acceder a la memoria compartida
sharedmemory = (char *) shmat(id, NULL, 0); § Ahora el proceso puede escribir la memoria compartida sprintf(sharedmemory, "Writingtosharedmemory");
§ Cuando se realiza un proceso puede separarse la memoria
compartida de sus espacio de direcciones. shmdt(sharedmemory);
¡
El sistema de comunicaciones de Mach es basado en mensajes § Incluso las llamadas al sistema son mensajes § Cada tarea tiene dos buzones en la creación: El núcleo y
notificaciones.
§ Sólo tres llamadas al sistema son necesarias para transferir
mensajes msg_send(), msg_receive(), msg_rpc()
§ Los buzones necesarios para la comunicación son creados
vía: port_allocate()
Proceso 2
Procesos 1
Proceso 3
Computador 1
¡
El paso de mensajes locales es vía “local procedurecall – LPC” § Sólo trabaja entre procesos sobre el mismo sistema. § Utiliza puertos (similar buzones) para establecer y mantener
el canal de comunicaciones.
§ Las comunicaciones trabajan así: ▪ El cliente abre un identificador para el subsistema de conexión de puerto objetivo. ▪ El cliente envía una solicitud de conexión. ▪ El servidor crea dos puertos de comunicación privados y retorna el identificador de uno de ellos a el cliente. ▪ El cliente y el servidor usan el correspondiente identificador de puerto para enviar mensajes o escuchar las respuestas.
¡
Sockets
¡
RemoteProcedureCalls (RPC)
¡
Pipes (Canalización)
¡
RemoteMethodInvocation – RMI (Java)
¡
Un Socket está definido como un punto final de la comunicación
¡
Concatenación de dirección IP y puerto
¡
El socket 161.25.19.8:1625 se refiere al puerto 1625 sobre el host 161.25.19.8
¡
La comunicación consiste en un par de sockects
¡
Remoteprocedurecall (RPC) son llamados a procedimientos abstractos entre procesos sobre un sistema en red.
¡
El cliente inicia el proceso indicando al servidor que ejecute cierto procedimiento o función y enviando éste de vuelta el resultado de dicha operación al cliente.
¡
Actúan como conductos o tuberías permitiendo la comunicación entre dos procesos
¡
Consideraciones § ¿La comunicación es unidireccional o bidireccional? § ¿En el caso de comunicación de dos vías, esta es half o
full-duplex?
§ ¿Existe una relación entre los procesos que se
comunican (padre – hijo)?
§ ¿Pueden utilizarse las tuberías a través de la red?
¡
Las tuberías ordinarias permiten la comunicación estándar al estilo productor-consumidor.
¡
El productor escribe en uno de los extremos de la tubería
¡
El consumidor lee desde el otro extremo de la tubería.
¡
Las tuberías ordinarias son por lo tanto unidireccionales.
¡
Requieren una relación Padre-hijo entre los procesos comunicados
Proceso Padre
Proceso Hijo
Pipe
Ejemplo # ls -Rla / | less
¡
Las tuberías nombradas son más poderosas que las tuberías ordinarias.
¡
La comunicación es bidireccional
¡
No necesita que exista una relación padre-hijo entre los procesos a comunicar
¡
Varios procesos pueden usar las tuberías nombradas para comunicarse.
¡
Disponible en sistemas UNIX y Windows
Proceso 1
Proceso 2
Proceso n
Computador 1
Proceso 2
Proceso 1
Proceso n
Computador 2
¡
STALLING W. Operating Systems: Internals and Design Principles. 7th Edition. 2011.
¡
SILBERSCHATZ A, GALVIN P, GAGNE G. Operating System Concepts. 8th Edition. 2009.
¡
VIÑAS R, LLINAS F. Sistema Operativo GNU/Linux básico. UOC. 2003. ESTEVE J, BOLDRITO R, Administración avanzada de GNU/LINUX. UOC. 2004.
¡
Demostraci贸n
¡
Demostración en diversos sistemas operativos – En CLI y GUI
¡ ¡ ¡
Mac OS GNU / Linux MS Windows
Sistemas tipo Unix ¡ ¡ ¡ ¡ ¡
ps pstree top kill ctr+z § jobs § bg § fg
GRACIAS