Sistemas Operativos: Procesos, Hilos y Gestión de Memoria


1. Funciones Principales del Sistema Operativo

  • Administración de Procesos
  • Administración de Memoria Primaria
  • Gestión de Archivos
  • Gestión de Almacenamiento Secundario
  • Gestión del Sistema de Protección

2. Diferencias entre Proceso e Hilo

a. Programa y Proceso

Un programa es un conjunto de sentencias que pueden incluir varios procesos. Un proceso es una serie de sentencias asignadas a una tarea. Una vez realizada la tarea, el programa continúa. Conceptualmente, un proceso es un programa en ejecución.

b. Proceso Padre e Hijo

CaracterísticaPadre e Hijo Comparten Todos los RecursosHijo Comparte Algunos Recursos del PadrePadre e Hijo No Comparten Recursos
Espacio de DireccionesEl proceso hijo ocupa un espacio de direcciones de memoria propio y diferente al del proceso padre.
CódigoEl proceso hijo duplica el código del proceso padre en su propio espacio de direcciones.El hijo carga otro código en su espacio de direcciones.
EjecuciónLos procesos padre e hijo se «ejecutan» concurrentemente.El proceso padre espera hasta que finalice el proceso hijo.

c. Proceso e Hilo

Un proceso es cualquier programa en ejecución y es totalmente independiente de otros procesos. Un hilo es una unidad de ejecución dentro de un proceso. Un proceso puede tener varios hilos de ejecución, lo que significa que puede realizar varias tareas «a la vez». Los hilos dentro de un proceso comparten la misma memoria. Esto implica que si un hilo modifica una variable, todos los demás hilos del mismo proceso verán el nuevo valor. Por lo tanto, es fundamental usar semáforos o mutex para la sincronización. Un fallo en un hilo puede provocar el fallo de todos los demás hilos del mismo proceso.

3. Diagrama de 5 Estados de un Proceso

  • Nuevo: Se crea un proceso.
  • Ejecutando: El proceso tiene asignada la CPU y sus instrucciones se están ejecutando.
  • Esperando: El proceso está en espera de que ocurra algún evento.
  • Listo: El proceso está esperando para obtener la CPU.
  • Finalizado: El proceso ha terminado y sale del sistema.

4. Script

Un script es un conjunto de instrucciones que permiten la automatización de tareas, creando pequeñas utilidades. Se utiliza, por ejemplo, para la administración de sistemas UNIX en un archivo de procesamiento por lotes.

5. Funciones para Crear Procesos Padre e Hijos

fork()

Es una llamada al sistema para crear un nuevo proceso. Crea un proceso hijo que es una copia del proceso padre. Los procesos resultantes son idénticos (copia de la imagen de memoria) pero con PIDs diferentes.

exec()

Es una llamada al sistema que se usa después de fork() para reemplazar el código en el espacio de memoria del nuevo proceso. Proporciona un vector de punteros a cadenas de caracteres terminadas en 0. El primer argumento, por convención, debe apuntar al nombre del archivo que se está ejecutando. Inicia un nuevo programa reemplazando al programa original, por lo tanto, el PID no cambia.

system()

Es una función que llama a comandos y/o funciones especificadas por una cadena que puede incluir opciones y argumentos.

6. Recursos del SO para Controlar Procesos

  • Tabla de Procesos
  • Tabla de Memoria
  • Tabla de Archivos
  • Tabla de E/S

7. Bloque de Control de Procesos (PCB)

Es una estructura de datos que contiene información asociada a cada proceso. Entre otros, los datos que contiene un PCB son:

  • Identificador del proceso
  • Estado
  • Contador de programa
  • Registros de la CPU
  • Información de planificación de CPU
  • Información de administración de memoria
  • Información de contabilidad
  • Información de E/S

8. Proceso de Inicio del Computador y Carga del SO

La computadora solo puede realizar actividades si tiene un programa permanente en la ROM. Una parte del mapa de memoria está construida con ROM, donde se encuentra el programa de arranque o iniciador ROM. Cuando se enciende la computadora o se pulsa RESET, se cargan los valores predefinidos en sus registros, es decir, se carga en el PC la dirección del iniciador ROM. Este realiza 3 funciones:

  1. Realiza una comprobación del sistema para detectar sus características.
  2. Lee y almacena en memoria el programa cargador del SO (lee un programa almacenado en un periférico y lo carga en la memoria principal).
  3. Da el control a este programa.

9. Semáforos

Un semáforo es una variable especial protegida que se utiliza para controlar el acceso a recursos compartidos en un entorno de multiprocesamiento. Se emplean para permitir el acceso a secciones críticas del código donde se manipulan variables o recursos que deben ser accedidos de forma especial. Según su valor inicial, se permite que más o menos procesos utilicen el recurso simultáneamente.

Usos de los Semáforos

  • Implementar cierres de exclusión mutua o locks.
  • Barreras.
  • Permitir un máximo de N threads acceder a un recurso.
  • Notificación.

10. Características para Evaluar la Eficiencia de Algoritmos de Planificación de CPU

  1. Utilización de la CPU: El algoritmo debe mantener la CPU ocupada en todo momento.
  2. Tiempo de espera promedio mínimo: La suma del tiempo que los procesos pasan en la cola de listos debe ser mínima.
  3. Tiempo de retorno: El valor máximo de tiempo de retorno debe ser lo mínimo posible.
  4. Tiempo de respuesta: El tiempo que tarda el sistema en dar una respuesta debe ser mínimo.

11. Algoritmos de Planificación

FCFS (First-Come, First-Served)

Ventajas: Sencillo de implementar.

Desventajas: No garantiza el tiempo de espera promedio mínimo. Puede producirse el efecto convoy.

SJF (Shortest Job First)

Ventajas: No hay efecto convoy. Mejor rendimiento, ya que se ejecutan primero los procesos con ráfagas de CPU más cortas.

Desventajas: No se conoce con exactitud la duración de la ráfaga de CPU por adelantado.

Round Robin (RR)

Ventajas: Garantiza un tiempo de respuesta razonable para todos los procesos.

Desventajas: El rendimiento puede ser menor que con SJF si las ráfagas de CPU son muy variables.

Planificación con Colas de Múltiples Niveles

Ventajas: Permite clasificar los procesos según sus necesidades de CPU.

Desventajas: Puede ser complejo de implementar. La elección de los parámetros de las colas es crucial.

Planificación con Colas de Múltiples Niveles y Realimentación

Ventajas: Es un mecanismo adaptativo que responde a los cambios en el comportamiento del sistema.

Desventajas: Mayor complejidad que la planificación con colas de múltiples niveles sin realimentación.

12. Problemas de Concurrencia

Exclusión Mutua

Se produce cuando dos o más procesos necesitan acceder a un recurso compartido al mismo tiempo. Solo un proceso puede acceder al recurso a la vez. Ejemplo: Dos procesos que intentan escribir en el mismo archivo al mismo tiempo.

Interbloqueo (Deadlock)

Se produce cuando dos o más procesos se bloquean mutuamente esperando a que el otro libere un recurso. Ejemplo: El proceso A tiene el recurso 1 y necesita el recurso 2, mientras que el proceso B tiene el recurso 2 y necesita el recurso 1. Ninguno de los dos procesos puede continuar.

Inanición (Starvation)

Se produce cuando un proceso no puede obtener los recursos que necesita porque otros procesos los están utilizando continuamente. Ejemplo: Un proceso de baja prioridad puede no obtener nunca la CPU si hay muchos procesos de alta prioridad en ejecución.

13. Funciones para el Manejo de Hilos

  • Identificar un hilo: pthread_self()
  • Crear un hilo: pthread_create()
  • Esperar a que un hilo termine: pthread_join()

14. Memoria Virtual

La memoria virtual es una técnica que permite simular un espacio de memoria mayor que la memoria física disponible. Esta «ilusión» se logra mediante la combinación de la memoria RAM y el espacio en disco duro. El sistema operativo gestiona la memoria virtual de forma transparente para los programas, permitiendo que estos se ejecuten sin tener en cuenta la cantidad de memoria física disponible.

Ventajas de la Memoria Virtual

  • Permite ejecutar programas más grandes que la memoria física.
  • Mejora la gestión de la memoria, permitiendo que el sistema operativo asigne memoria de forma más eficiente.
  • Aumenta la seguridad, ya que cada proceso tiene su propio espacio de direcciones virtual.

15. Fragmentación Interna

La fragmentación interna se presenta en el esquema de gestión de memoria por asignación de bloques de tamaño fijo. Se produce cuando un proceso no utiliza todo el espacio asignado en un bloque de memoria. El espacio no utilizado se desperdicia y no puede ser utilizado por otros procesos.

Ejemplo

Si un proceso necesita 10KB de memoria y el tamaño de bloque es de 16KB, se le asignará un bloque completo de 16KB. Los 6KB restantes no podrán ser utilizados por otros procesos.

Solución a la Fragmentación Interna

Para solucionar el problema de la fragmentación interna, los sistemas operativos actuales utilizan la paginación o la segmentación. Estos esquemas de gestión de memoria permiten asignar memoria a los procesos en unidades más pequeñas (páginas o segmentos), lo que reduce la cantidad de espacio desperdiciado por la fragmentación interna.

Dejar un Comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *