Coloquio Flashcards
¿Cuál es la relación proceso - SO?
- Un programa solo se puede ejecutar si el SO crea un proceso
- El SO intercala la ejecución de los procesos en el orden que maximice la utilización del procesador.
- El SO ayuda a la creación de nuevos procesos por parte
de los usuarios
Además: la secuencia de instrucciones del proceso se llama traza, el procesador ejecuta varios mensajes intercalando trazas secuencialmente
¿Cuál es el modelo de estados más básico?
Un estado puede estar en ejecución o no.
¿Cómo es el modelo de colas para un proceso?
–Enter-> [Queue] -Dispatch-> [[Processor]] 1.-Exit-» 2.-Pause-> (a enter)
https://drive.google.com/file/d/1qzYzP9GWUZW1o2l5kQY_bCz5mGv8vO8-/view?usp=share_link
¿Cómo es el modelo de 5 estados?
- Nuevo/new: el proceso existe pero su imagen está incompleta
- Listo/ready (para ser ejecutado)
- Bloqueado/blocked (esperando un evento)
- Terminado/exit (esperando a que se elimine la imagen)
- En ejecución/running
https://drive.google.com/file/d/1m9oj8ax3MIuUTTd_l8yywvQup7dhDo9c/view?usp=share_link
¿Qué es un proceso suspendido?
Proceso suspendido: su imagen ha sido copiada al almacenamiento secundario. Puede estar bloqueado o listo a la vez.
La multiprogramación surge para mantener al procesador ocupado cuando los procesos esperan E/S, pero a veces la memoria está llena de procesos bloqueados y el procesador está libre. Entonces, se toma un proceso bloqueado y se lo suspende.
https://drive.google.com/file/d/15xSehDPRDkAooijcmG5_Go8LGqufow-S/view?usp=share_link
¿Qué es la planificación y para qué sirve?
Es una función para: repartir el tiempo del procesador de manera justa entre procesos, prevenir su inanición, reducir el overhead (aumentar la eficiencia) y permitir que se prioricen procesos si hace falta.
-Largo plazo: añadir procesos a la pool.
-Mediano plazo: añadir procesos a la memoria principal.
-Corto plazo: elegir qué procesos ejecutar.
-E/S: qué pedido de E/S atender.
¿Cómo es la planificación de corto plazo?
-Se lo conoce como scheduler.
-Se ejecuta cuando ocurre cualquier evento (interrupciones, llamadas, señales).
-Objetivo: distribuir el uso del procesador para optimizar algo del sistema, que puede ser un requerimiento del usuario o del sistema. Se establecen prioridades.
¿Cuáles son las políticas de planificación?
Ver tabla: https://drive.google.com/file/d/1AxxuBNFWOPgFYwQULEKrlHFvfwahGpnU/view?usp=sharing
-w: time spent waiting
-e: time spent running
-s: service time
-Modo de decisión preferente: se puede detener procesos en ejecución y llevarlos a listo nuevamente.
-Modo de decisión no preferente: los procesos en ejecución solo pueden pasar a terminado o bloqueado.
¿Cómo es la planificación FCFS (primero en llegar, primero en servir)?
Es un sistema de cola puro, no preferente, que favorece procesos largos/ que necesitan mucho tiempo en el CPU.
¿Cómo es la planificación Round Robin?
Es un sistema que se basa en un reloj que interrumpe cada cierto tiempo. Favorece a los procesos cortos y medianos.
¿Cómo es la planificación SPN (primero el más corto)?
Es un sistema no preferente que puede causar inanición en los procesos más largos.
¿Cómo es la planificación SRT (primero el menor tiempo restante)?
Es una versión preferente del SPN, basada en elegir al que le quede menos tiempo para ser completado.
¿Cómo es la planificación HRRN (primero el de mayor tasa de respuesta)?
Se calcula R = (w+s)/s para cada proceso y se elige el de mayor.
¿Cómo es la planificación realimentada?
Se penalizan a los procesos largos y antiguos, que pueden terminar en inanición.
¿Cómo es la planificación justa?
El usuario asigna diferentes prioridades a los grupos de procesos y el tiempo en el CPU para cada uno se divide de acuerdo a eso y a su tamaño.
¿Cuáles son las opciones para IPC (comunicación entre procesos)?
-Señales.
-FIFOs/Named Pipes.
-Colas de mensajes.
-Semáforos.
-Memoria compartida.
-Sockets.
¿Cómo se comunican los procesos a través de señales?
- Definición de señal: interrupción de software (utilizada por el SO) que se presenta a un proceso en ejecución excepcionalmente.
- Hay diferentes prioridades y algunas señales se pueden ignorar.
- Se pueden predecir e incorporar en el programa cómo responder antes señales.
- Un proceso puede enviar una señal a otro proceso.
- Ejemplos: errores de lógica o de memoria fuera de rango, finalización de procesos hijos o timer, llamadas a kill/raise, pedidos del usuario de frenar/detener programas, etc.
¿Cómo se generan las señales?
1- Errores: un programa intenta algo inválido.
2- Eventos externos: operación E/S u otro proceso.
3- Pedidos explícitos: se usa una función como kill(), SIGSTOP, SIGINT, etc.
¿Qué pasa cuando se genera una señal?
1- Queda pendiente (poco tiempo).
2- Se la presenta al proceso.
3- Se realiza una acción predefinida por defecto salvo que el proceso decida ignorarla o definir otra función de respuesta (definiendo un handler).
¿Cómo se define un handler?
Lo define el programador con el resto del programa. El SO lo llama cuando detecta la señal. Puede volver normalmente tras modificar alguna bandera global o puede terminar un programa o llevar el control a otro punto del programa.
Se utiliza sigaction() según signal.h: int sigaction (int signum, const struct sigaction *restrict action, struct sigaction *restrict old-action).
-signum: ID de la señal,
- sighandler_t sa_handler: Su valor puede ser SIG_DFL,
SIG_IGN, o un puntero a una funcion que impementa el handler,
- sigset_t sa_mask: define un conjunto de señales a bloquear mientras el handler se ejecuta,
- int sa_flags: diferentes banderas para el comportamiento.
¿Qué es un FIFO o Named Pipe?
Un FIFO es un archivo especial atemporal y con nombre, a diferencia de un pipe tradicional.
Procesos completamente independientes entre sí pueden usar su nombre para comunicarse por medio de él, pero solo si fue previamente abierto para la lectura y escritura (sino, SIGPIPE y EOF).
Es creado con mkfifo() de sys/stat.h.
¿Qué cambió con la versión System V de Unix en IPC?
- Aparecieron objetos IPC: colas de mensajes, semáforos, memoria compartida.
- Cada uno tiene un ID único asociado, que permite que el kernel lo identifique.
- Para acceder a ellos, hay que verificar permisos de acceso como los de los archivos.
- Incluyen una estructura ipc_perm: ID para el usuario dueño y creador de procesos, modo de acceso, ID de objeto.
- con ftok(), se obtiene del kernel el ID de objeto IPC.
¿Cómo funciona una cola de mensajes?
-Los procesos pueden escribir mensajes que serán leídos por otros.
-El SO tiene una cola msgque, en la que cada elemento apunta a un msgid_ds.
-Cada mensaje es una estructura msgbuf (mtype o etiqueta y mtext o string del contenido) y tiene un ID que permite que caulquier proceso lo seleccione.
¿Cómo se crea o accede a una cola de mensajes?
Se la puede crear o acceder a ella con msgget(key, msgflg), donde key es el ID devuelto por ftok() y msgflg define su comportamiento.
¿Cómo se escribe en la cola de mensajes?
Se usa msgsnd():
-msqid es el resultado de msgget,
-msgp es el contenido a cargar,
-msgsz es el tamaño,
-msgflg es 0 si se quiere una llamada bloqueante e IPC_NOWAIT si se quiere descartar el mensaje si la cola está llena.
¿Cómo se lee la cola de mensajes?
Se usa msgrcv():
-id es el resultado de msgget,
-msgp es el contenido a leer,
-msgsz es el tamaño,
-msgtyp devuelve el mensaje más viejo de ese tipo o de cualquier tipo si es 0,
-msgflg es bloqueante salvo que sea IPC_NOWAIT.
¿Cómo se elimina una cola de mensajes?
Se necesita permiso de escritura.
Se usa msgctl:
-msqid es el identificador,
-cmd es IPC_RMID,
-msqid_ds es una estructura de control que se usa con otros cmd.
¿Qué es la memoria compartida?
La memoria compartida es un área en la que los procesos pueden escribir y leer información. Funciona como si múltiples procesos hubiesen llamado a malloc() y recibido el mismo espacio de memoria. Es el método IPC más rápido porque no involucra llamadas al sistema. La sincronización la realiza el programador y los procesos se acoplan/desacoplan.
¿Cómo se crea la memoria compartida?
Se usa shmget:
-key es lo obtenido con ftok()
-size es el tamaño de memoria deseado
-shmflg puede incluir IPC_CREAT que crea el segmento si no existía antes
¿Cómo se conecta un segmento a un espacio de memoria compartida?
Se usa shmat:
-shmid es lo obtenido con shmget()
-shmaddr es la dirección de memoria pretendida o 0 (a discreción del SO)
-shmflg
Los hijos reciben los segmentos compartidos también.