Conceptos Clave de Sistemas Operativos: Procesos, Planificación y Comunicación
Descripción del Ciclo de Vida de 5 Estados para Procesos
Grafique el Ciclo de vida de 5 estados para procesos, describiendo qué significa cada nodo y cada arista del grafo.
Nodo Nuevo: El proceso acaba de ser creado.
Arista: llamada al fork()
, system call que crea un nuevo proceso.
Nodo Listo: El proceso está esperando para ser ejecutado, en la cola de listos.
Arista despachado: el planificador de corto plazo elige un proceso de la cola de listos y se transfiere la CPU a ese proceso.
Nodo Ejecución (Exec): el proceso está en ejecución en la CPU.
Arista Interrupción Interna: el proceso es interrumpido por el sistema operativo y debe volver a la cola de listos.
Arista System Call: es el caso en que un proceso en ejecución necesita realizar una operación de Entrada/Salida (E/S).
Arista Llamada al end()
: momento en el que un proceso termina su ejecución y se finaliza completamente.
Nodo Espera: un proceso no puede seguir ejecutándose porque está esperando un evento externo, generalmente una operación de entrada/salida (E/S).
Arista Interrupción Externa: el evento externo que estaba esperando se ha completado.
Descripción del Modo Dual
Describa qué es y cómo funciona el modo DUAL.
Es un mecanismo para asegurar la protección del Sistema Operativo (SO) que permite diferenciar entre instrucciones privilegiadas y no privilegiadas, asegurando que los procesos de usuario no interfieran con el núcleo del sistema.
En este modo, tenemos 2 modos de ejecución en la CPU:
- Modo supervisor o kernel
- Modo usuario
Para llevar a cabo esto, se agrega un bit de modo al hardware (HW).
Bit=0: se ejecutan procesos en modo supervisor.
Bit=1: se ejecutan procesos en modo usuario.
La CPU cambia entre los modos mediante el uso de interrupciones y system calls.
Definición de Procesos Independientes y Cooperativos
Defina qué son los procesos independientes y procesos cooperativos.
Los procesos independientes son aquellos que se ejecutan de manera aislada a otros procesos y no interactúan con estos. Por ende, no son afectados por otros procesos ni afectan la ejecución de estos.
Los procesos cooperativos son aquellos procesos que pueden ser afectados por otros procesos en ejecución, compartiendo datos o recursos.
Comunicación entre Procesos: Métodos
¿Cómo pueden comunicarse los procesos? Describa uno de los métodos por el cual lo hacen.
Los procesos pueden comunicarse mediante dos mecanismos principales: memoria compartida y pasaje de mensajes.
En el método de memoria compartida, los procesos intercambian información a través del sistema operativo. Estos acceden a un mismo espacio de memoria donde envían y reciben mensajes.
Algoritmos de Planificación para Sistemas Batch
Nombre qué algoritmos de planificación de procesos se podrían usar para sistemas batch, además describa cómo funciona cada uno de ellos.
Los algoritmos de planificación de procesos que se podrían usar para sistemas batch son:
FCFS (First Come First Served)
Básicamente es un algoritmo no apropiativo basado en una cola FIFO (First-In, First-Out). Los procesos se ejecutan en el orden que llegan, sin interrupciones.
Su simpleza y no apropiatividad permiten que los procesos largos se ejecuten sin interrupciones innecesarias.
SJF (Shortest Job First)
Este algoritmo selecciona el proceso más corto (el que tiene la ráfaga más corta). También es no apropiativo, lo que significa que una vez que un proceso comienza, no puede ser interrumpido hasta que termine.
Planificación de Colas Multinivel
Los procesos se clasifican en colas según su prioridad. Una de estas colas puede estar dedicada a procesos batch utilizando FCFS o SJF para su ejecución. Separa procesos batch de procesos interactivos, asegurando que los primeros tengan acceso a la CPU cuando se requiera.
NOTA 1: PREGUNTALE A LUIS SI LA VARIANTE DE ROUND ROBIN QUE SE USÓ EN EL KERNEL DE LINUX, SERÍA APROPIADA YA QUE prioriza la ejecución prolongada de procesos CPU, SIENDO MÁS ADECUADA PARA SISTEMAS BATCH. TE DEJO ACÁ SI LO TENÉS QUE AGREGAR.
ROUND ROBIN (VARIANTE)
Esta variante de Round Robin usada en el kernel de Linux tiene quantums más grandes y una doble cola:
- Cola Activa: Contiene los procesos en ejecución.
- Cola Pasiva: Contiene procesos que agotaron su quantum y esperan reasignación.
Cuando la cola activa se vacía, la pasiva se convierte en la nueva activa, repitiendo el ciclo.
Favorece procesos orientados a la CPU, ya que permite que ejecuten por períodos más largos sin ser interrumpidos constantemente.
NOTA 2: la planificación de colas multinivel puede usarse tanto en sistemas interactivos como en sistemas batch, ya que su funcionamiento depende de cómo se configuren las colas y qué algoritmo de planificación se use en cada una.
Interrupciones: Definición, Función y Tipos
Qué son las interrupciones?, ¿cumplen alguna función en el diagrama de 5 estados para procesos? Describa además los tipos de interrupciones que conoce.
Las interrupciones son una suspensión temporal de un proceso activo, pasando a ejecutar una subrutina de servicio de interrupción. Por lo general, no forma parte del programa. Las interrupciones son fundamentales en el diagrama de 5 estados porque permiten la transición de procesos entre estados.
Los tipos de interrupciones que vimos fueron:
- Interrupciones de hardware
- Interrupciones de software
- Interrupciones por excepciones
Algoritmo Round Robin Tradicional y Variante
Describa cómo funciona un algoritmo Round Robin tradicional. Si tuvo alguna variante, descríbala y qué ventajas tiene sobre el tradicional.
Un algoritmo Round Robin tradicional es un algoritmo de planificación apropiativa que asigna la CPU a los procesos de manera equitativa mediante el uso de un quantum de tiempo fijo, definido por el sistema operativo. Los procesos entran a la CPU y se ejecutan durante un tiempo determinado por este quantum. Si un proceso no finaliza en ese tiempo, es interrumpido y enviado al final de la cola de listos para esperar su próximo turno.
Variante Round Robin en el Kernel de Linux
Round Robin tuvo una variante utilizada en el kernel de Linux, en la cual se definía un quantum más grande para los procesos. Además, introducía un sistema de doble cola: activa y pasiva.
La cola activa contiene los procesos que están en ejecución.
La cola pasiva almacena los procesos que agotaron su quantum y deben esperar una nueva asignación.
Una vez que todos los procesos de la cola activa han sido ejecutados, la cola pasiva se convierte en la nueva cola activa, repitiendo el ciclo.
La ventaja que tiene sobre el tradicional es que esta variante beneficia especialmente a procesos orientados a la CPU, ya que en el Round Robin tradicional eran interrumpidos constantemente antes de completarse, a causa de que rara vez terminaban dentro de un solo quantum. Esta variante permite que ejecuten por períodos más largos.
Comunicación entre Procesos: Directa e Indirecta
Comunicación entre Procesos: describa cómo funciona la comunicación Directa e Indirecta.
Comunicación Directa
Los procesos se envían mensajes directamente entre sí, sin intermediarios. Cada proceso debe conocer la identidad del otro.
La comunicación puede ser unidireccional o bidireccional. Los procesos suelen ejecutarse en la misma CPU, aunque esto no es un requisito obligatorio.
Comunicación Indirecta
En este modelo, los procesos no se envían mensajes directamente, sino que utilizan un buzón o puertos administrados por el sistema operativo.
- Los mensajes se almacenan en el buzón y pueden ser recibidos por uno o varios procesos.
- No es necesario que los procesos se conozcan entre sí, lo que facilita la comunicación en sistemas con múltiples procesos.
Nota: si Luis quiere ejemplos diferentes, tenés esto:
Funcionamiento No Bloqueante
- Envío no bloqueante (send) → El proceso envía el mensaje y continúa ejecutándose sin esperar confirmación.
- Recepción no bloqueante (receive) → El proceso intenta recibir un mensaje; si no hay datos disponibles, sigue ejecutándose.
Funcionamiento Bloqueante
- Envío bloqueante (send) → El proceso remitente se detiene hasta que el mensaje haya sido recibido por el otro proceso.
- Recepción bloqueante (receive) → El proceso receptor se detiene hasta que un mensaje esté disponible para ser leído.
Hilos (Threads): Definición, Información y Ventajas
Defina qué son los Hilos de procesos, dónde se guarda la información de cada hilo. Si tiene ventajas sobre los procesos cooperativos descríbalas.
Los hilos (threads) son la unidad más pequeña de ejecución dentro de un proceso. Cada hilo comparte la memoria y los recursos del proceso padre, pero puede ejecutar tareas de manera concurrente.
La información de cada hilo se almacena en el TCB, una estructura similar a la PCB, pero utilizada específicamente para hilos.
Las ventajas que tienen son:
- Mayor grado de respuesta: Cada hilo puede ejecutarse en una CPU diferente en sistemas multinúcleo, mejorando la eficiencia.
- Comparten memoria y recursos: Esto evita la sobrecarga de comunicación entre procesos.
- Menor uso de memoria y recursos.
- Optimización en arquitecturas multinúcleo.
Hilos (Threads): Diferencia con Procesos Cooperativos y Gestión por SO
Defina el concepto de hilos de procesos. ¿Hay alguna diferencia con procesos cooperativos? Si es así, haga una breve descripción. Nombre las formas en que los sistemas operativos manejan los hilos.
Los hilos (threads) son la unidad más pequeña de ejecución dentro de un proceso. Cada hilo comparte la memoria y los recursos del proceso padre, pero puede ejecutar tareas de manera concurrente. En cambio, los procesos cooperativos son procesos separados, cada uno con su propio espacio de memoria. Para comunicarse, necesitan mecanismos como pasaje de mensajes o memoria compartida.
Formas de Gestión de Hilos por el Sistema Operativo
Los sistemas operativos pueden gestionar los hilos de dos maneras:
Hilos a Nivel de Usuario
Los cuales son gestionados por una biblioteca en espacio de usuario, sin intervención del sistema operativo.
Nota: (preguntarle a Luis si estaría bien esto ya que no hay intervención del sistema operativo, también preguntarle si él quería que hable de los modelos muchos a muchos, uno a muchos, uno a uno, etc.)
Hilos a Nivel de Kernel
Son gestionados directamente por el sistema operativo, lo que permite un mejor uso de los núcleos del procesador.
Algoritmos de Planificación para Sistemas Interactivos
Nombre qué algoritmos de planificación de procesos se podría usar para sistemas interactivos, además describa cómo funciona cada uno de ellos.
Los algoritmos de planificación de procesos que se podrían usar para sistemas interactivos son:
Round Robin
Es un algoritmo apropiativo que asigna la CPU de manera equitativa entre los procesos utilizando un quantum de tiempo fijo. Si un proceso no finaliza en su quantum, es interrumpido y enviado al final de la cola de listos. Garantiza que ningún proceso monopolice la CPU y proporciona una respuesta rápida a los usuarios.
Planificación de Colas Multinivel
Los procesos se clasifican en diferentes colas según su tipo o prioridad. Para sistemas interactivos, se asignan colas con prioridad alta a procesos que requieren respuestas rápidas, como aplicaciones de usuario. Dentro de esta cola interactiva, se suele usar el algoritmo Round Robin, ya que asegura equidad y tiempos de respuesta rápidos.
Planificación de Colas Multinivel con Retroalimentación
Es una mejora de la planificación de colas multinivel que permite mover procesos entre colas según su comportamiento.
Los procesos interactivos reciben mayor prioridad y permanecen en colas superiores.
Si un proceso usa mucha CPU, se mueve a una cola de menor prioridad.
Algoritmos con y sin Desalojo (usando el Diagrama de 5 Estados)
Explique usando el diagrama de 5 estados qué significa que un algoritmo funcione con y sin desalojo.
El diagrama de 5 estados muestra cómo un proceso cambia entre diferentes estados durante su ejecución:
- Nuevo → Se crea el proceso.
- Listo → Espera su turno en la CPU.
- Ejecución → Está ejecutándose en la CPU.
- Espera → Se detiene esperando una operación de E/S.
- Fin → Termina su ejecución.
Además, se le puede agregar un estado desplazado (o Suspendido/Desalojado) que indica que el proceso fue interrumpido y suspendido temporalmente, algo que solo ocurre en algoritmos con desalojo.
Un algoritmo sin desalojo significa que una vez que un proceso obtiene la CPU (o sea, está siendo ejecutado), no la libera hasta que termine o pase a estado de espera.
Un algoritmo con desalojo significa que un proceso en ejecución puede ser interrumpido y enviado de vuelta a la cola de listos si el sistema operativo lo decide. Esto puede pasar si se agrega a la cola de listos un proceso con mayor prioridad, por ejemplo.
Procesos Orientados a la CPU y Procesos Orientados a la Entrada/Salida
Qué significan procesos orientados a la CPU y procesos orientados a la entrada/salida. Trate de poner un ejemplo de cada uno de ellos.
Los procesos orientados a la CPU: Son aquellos que utilizan la mayor parte del tiempo la CPU, estos procesos realizan pocas llamadas al sistema (system calls) ya que no dependen de dispositivos de E/S para continuar su ejecución.
Ejemplo: Un proceso del sistema operativo podría ser el planificador de procesos del sistema operativo, ya que realiza cálculos y asignaciones constantes para determinar qué procesos se ejecutan en la CPU.
Los procesos orientados a la entrada y salida son procesos que realizan muchas system calls, ya que necesitan acceder con frecuencia a dispositivos externos (disco, red, teclado, etc.) para continuar funcionando.
Ejemplo: Un explorador de archivos necesita acceder continuamente al disco para listar, leer o modificar archivos. Pasa gran parte del tiempo esperando que el disco entregue los datos solicitados antes de continuar ejecutando en la CPU.
Algoritmo de Planificación por Prioridad
Describa cómo funciona un algoritmo de prioridad pura. ¿Puede tener este algún inconveniente que dificulte la ejecución de algunos procesos? Si es así, qué soluciones plantearía para resolverlo.
En el algoritmo de prioridad, se asigna un valor de prioridad a cada proceso (del 0-15 normalmente tenés los procesos del sistema operativo) y la CPU siempre selecciona el proceso con la prioridad más alta para ejecutarse. Si llega un proceso con prioridad superior, puede interrumpir al que está en ejecución.
Sí, el inconveniente principal que puede tener es el de inanición (starvation). Esto sería si constantemente ingresan procesos de alta prioridad, los de baja prioridad pueden quedar indefinidamente en la cola de listos sin ejecutarse.
Una solución es aumentar la prioridad de los procesos que llevan mucho tiempo esperando (envejecimiento o aging). Una vez que un proceso obtiene la CPU y entra en ejecución, su prioridad vuelve a su valor inicial.
Mensajes Bloqueantes y No Bloqueantes
Defina qué son mensajes bloqueantes y no bloqueantes, y cómo funcionan.
Mensaje Bloqueante
Un mensaje bloqueante es aquel en el que el proceso que envía o recibe el mensaje debe esperar hasta que la operación de comunicación se complete.
¿Cómo funcionan? Un ejemplo claro es la radio de un walkie talkie. En esta, el que está recibiendo el mensaje no puede hablar hasta que el otro termine de enviar su señal.
Mensaje No Bloqueante
Un mensaje no bloqueante permite que un proceso envíe o reciba un mensaje sin necesidad de esperar a que la otra parte esté lista. Básicamente, funciona como hoy funciona WhatsApp; en este, uno puede hablar en cualquier momento sin necesidad de esperar que el otro termine de hablar.
Nota: si Luis quiere ejemplos diferentes, tenés esto:
Funcionamiento No Bloqueante
- Envío no bloqueante (send) → El proceso envía el mensaje y continúa ejecutándose sin esperar confirmación.
- Recepción no bloqueante (receive) → El proceso intenta recibir un mensaje; si no hay datos disponibles, sigue ejecutándose.
Funcionamiento Bloqueante
- Envío bloqueante (send) → El proceso remitente se detiene hasta que el mensaje haya sido recibido por el otro proceso.
- Recepción bloqueante (receive) → El proceso receptor se detiene hasta que un mensaje esté disponible para ser leído.
Socket
a) Defina qué es un Socket.
Un socket es un punto de comunicación que permite el intercambio de datos entre procesos, ya sea en la misma máquina o en diferentes dispositivos a través de una red.
b) Dé un ejemplo de implementación.
Un ejemplo claro sería la conexión al Docker de la facu. Cuando nos conectamos desde nuestra computadora al contenedor de Docker, utilizamos un socket para establecer la comunicación.
Modelo de Estructura por Capas
¿Cómo está diseñado el modelo de Estructura por Capas? ¿En qué Sistema Operativo fue implementado? ¿Qué inconvenientes tuvo en sus comienzos y cómo se solucionó?
El modelo de estructura por capas organiza el sistema operativo en múltiples capas, donde cada capa solo se comunica con la capa inmediatamente superior e inferior. Cada capa cumple una función específica, como la gestión de CPU, memoria, dispositivos de E/S y la interfaz de usuario.
Fue implementado en el sistema operativo OS/2 – OS/2 Warp.
Los inconvenientes que tenía era que, a la hora de querer ir a una capa específica, necesitaba pasar por todo el resto, siendo muy lento. La solución que se planteó fue con una estructura llamada túneling, donde una capa se salteaba las capas que no necesitaba e iba hasta la capa donde debía ejecutar la instrucción.
Sistema Cliente-Servidor
¿Cómo funciona un sistema Cliente-Servidor? Descripción del funcionamiento.
Un sistema Cliente-Servidor es un modelo de comunicación donde un cliente solicita recursos o servicios a un servidor, que los procesa y devuelve una respuesta.
El cliente envía una solicitud al servidor a través de la red.
El servidor recibe la solicitud, la procesa y accede a la base de datos si es necesario. El servidor devuelve la respuesta al cliente, completando la comunicación.
Componentes Básicos de un Diseño Cliente-Servidor
¿Cuáles son los componentes básicos de un diseño Cliente-Servidor?
- Red → Medio de comunicación entre cliente y servidor (Ejemplo: Internet o LAN).
- Cliente → Dispositivo o aplicación que solicita servicios (Ejemplo: Navegador web).
- Servidor → Máquina o software que procesa las solicitudes y envía respuestas.
- Servicios → Funcionalidades ofrecidas por el servidor (Ejemplo: HTTP, FTP, correo electrónico).
- Protocolos → Reglas que regulan la comunicación entre cliente y servidor.
- Base de Datos → Sistema que almacena la información que el servidor maneja.
Temas Cubiertos (Organización por Hojas)
- HOJA 1:
- 1) Software libre (4 libertades)
- 2) Qué es un SO, modelo por capas (gráfico) – Roles del SO
- 3) Generaciones (gráficos del monitor con sus rutinas y RAM. Gráficos con canales).
- HOJA 2:
- 4) Servicios del SO
- Definición de system call
- Gráficos de pasaje de mensajes y memoria compartida.
- Modo DUAL (gráfico incompleto)
- 5) Diseño y estructura de los SO
- SO de propósito general y propósito específico
- HOJA 3:
- Objetivos de diseño de los propósitos específicos
- Tipos de estructura de un SO
- Simple, microkernel, monolítica, enfoque por capas, modular (con gráfico incluido algunas)
- Máquina virtual
- HOJA 4:
- Sistema cliente servidor y sus componentes
- Sistema entre iguales (P2P)
- Interrupciones
- 6) Procesos – definición
- Ciclo de vida de 5 estados
- Planificadores
- HOJA 5:
- PCB – Cambio de contexto, otra definición de planificador de corto plazo
- Procesos independientes y cooperativos
- Pasaje de mensajes con su comunicación directa e indirecta.
- 7) Hilos – Gráficos, definición y TCB
- HOJA 6:
- Modelos de hilos
- 8) Planificación de la CPU
- Orientado a la CPU
- Orientado a la entrada/salida
- FCFS
- HOJA 7:
- SJF
- SRTF
- Prioridad
- Round Robin
- RR variante
- Planificación colas multinivel
- HOJA 8:
- Colas multinivel (con retroalimentación)
- 9) Comunicación entre procesos
- Independientes
- Cooperativos
- Pasaje de mensajes y memoria compartida
- Otro gráfico de modelo cliente-servidor
- Socket
- HOJA 9:
- 10) Sincronización
- Exclusión mutua