Conceptos Clave de Sistemas Operativos para Aprobar tu Examen

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en con un tamaño de 12,76 KB

🔴 1. Condiciones de Carrera (Race Conditions)

💡 Concepto clave:

Dos threads (hilos) acceden y modifican la misma variable de forma concurrente, lo que produce resultados impredecibles.

Ejemplo práctico:

x++;

❗ No es una operación atómica:

  1. Leer el valor de x.
  2. Sumar 1 al valor leído.
  3. Guardar el nuevo valor en x.

👉 Otro thread puede intercalarse entre estos pasos, causando inconsistencia de datos.


🎯 Resultados posibles:

  • Máximo: Suma correcta si se ejecutan secuencialmente.
  • Mínimo: Se pierden incrementos debido a la superposición de operaciones.

👉 Ejemplo típico: Dos hilos incrementando 1000 veces cada uno:
Máximo (correcto): 2000
Mínimo (incorrecto): 1000 (si todos los incrementos de un hilo sobrescriben al otro)


🔒 Soluciones de sincronización:

  • Mutex (exclusión mutua mediante cerrojos)
  • Semáforos (Semaphores)
  • Monitores (Monitors)

🔴 2. Sección Crítica (Critical Section)

Para garantizar una solución correcta al problema de la sección crítica, se deben cumplir los siguientes requisitos fundamentales:

  1. Exclusión mutua (Mutual exclusion): Solo un proceso o hilo puede estar en su sección crítica a la vez.
  2. Progreso (Progress): Si ningún proceso está en su sección crítica y hay algunos que quieren entrar, la decisión de quién entra no se puede posponer indefinidamente.
  3. Espera limitada (Bounded waiting): Existe un límite en el número de veces que otros procesos pueden entrar antes de que se conceda la solicitud de un proceso específico (evita la inanición).
  4. Sin suposiciones de velocidad: No se deben hacer suposiciones sobre la velocidad relativa de los procesos o el número de CPUs del sistema.

🔴 3. Semáforos (Semaphores)

Tipos de semáforos:

  • Binarios (Binary): Su valor solo puede ser 0 o 1 (funcionan de manera similar a un mutex).
  • De conteo (Counting): Su valor puede tomar un rango entero, ideal para controlar el acceso a múltiples recursos disponibles.

🔥 Regla de oro:

👉 El orden de las operaciones de espera importa críticamente.

❌ Incorrecto (causa Deadlock):

wait(mutex);
wait(full);

✅ Correcto:

wait(full);
wait(mutex);

👉 Principio: Primero se adquiere el recurso (full) y luego se bloquea la sección crítica (mutex).


🚨 Interbloqueo (Deadlock)

Las 4 condiciones necesarias para que ocurra un Deadlock:

  1. Exclusión mutua (Mutual exclusion): Al menos un recurso debe estar en modo no compartido.
  2. Retener y esperar (Hold and wait): Un proceso debe retener al menos un recurso y estar esperando otros.
  3. Sin expropiación (No preemption): Los recursos no pueden ser retirados a la fuerza.
  4. Espera circular (Circular wait): Existe una cadena cerrada de procesos donde cada uno espera un recurso retenido por el siguiente.

👉 Si se cumplen simultáneamente estas 4 condiciones, se produce un 💀 deadlock.


🔴 4. Algoritmo de Peterson

flag[i] = true;
turn = j;
while (flag[j] && turn == j);

💡 ¿Cómo funciona?

  • flag[i]: Indica que el proceso i desea entrar en la sección crítica.
  • turn: Determina a quién le corresponde el turno de entrar.

🚨 Limitación en arquitecturas modernas:

Las CPUs modernas realizan ejecución fuera de orden y reordenamiento de instrucciones, lo que puede hacer que el algoritmo de Peterson falle si no se utilizan barreras de memoria (memory barriers).


🔴 5. Planificación de Procesos (Scheduling)

📊 Pasos sistemáticos para resolver problemas de planificación:

  1. Dibujar el Diagrama de Gantt.
  2. Determinar el Tiempo de Finalización (Completion Time - CT).
  3. Calcular el Tiempo de Retorno (Turnaround Time - TAT):
    TAT = CT - Arrival Time
  4. Calcular el Tiempo de Espera (Waiting Time - WT):
    WT = TAT - Burst Time

🔥 Algoritmos de Planificación:

🟢 FCFS (First-Come, First-Served)

  • Asigna la CPU en orden estricto de llegada.
  • Fácil de implementar.
  • ❌ Sufre del efecto convoy (procesos cortos esperando detrás de uno muy largo).

🟡 SJF (Shortest Job First - No apropiativo)

  • Selecciona el proceso con la ráfaga de CPU más corta.
  • ✔ Proporciona el tiempo de espera promedio óptimo.
  • ❌ Puede causar inanición (starvation) en procesos largos.

🔴 SRTF (Shortest Remaining Time First - Apropiativo)

  • Versión apropiativa de SJF. Si llega un proceso con un tiempo restante menor que el del proceso en ejecución, se realiza un cambio de contexto.

🔵 Planificación por Prioridad (Priority Scheduling)

  • Asigna la CPU al proceso con mayor prioridad (comúnmente, menor número entero = mayor prioridad).
  • ❌ Puede causar inanición (starvation). Se soluciona con el envejecimiento (aging).

🟣 Round Robin (RR)

  • Diseñado para sistemas de tiempo compartido. Cada proceso recibe un intervalo de tiempo de CPU llamado quantum (ej. 3 ms).
  • Se maneja mediante turnos cíclicos.

✔ Excelente para sistemas interactivos debido a un bajo tiempo de respuesta.


💡 Consejos clave para el examen:

  • Mejor tiempo de espera (Waiting Time): SJF / SRTF.
  • Mejor tiempo de respuesta (Response Time): Round Robin.

🔴 6. Asignación de Memoria (Memory Allocation)

Estrategias de asignación:

🟢 Primer Ajuste (First Fit)

Asigna el primer bloque de memoria libre que sea lo suficientemente grande.


🟡 Mejor Ajuste (Best Fit)

Busca en toda la lista y asigna el bloque más pequeño que sea suficiente.
❌ Deja fragmentos libres muy pequeños y difíciles de aprovechar (fragmentación externa).


🔴 Peor Ajuste (Worst Fit)

Asigna el bloque de memoria más grande disponible.
✔ Deja bloques libres restantes grandes que pueden ser útiles para otros procesos.


🔴 7. Paginación (Paging)

📦 Concepto fundamental:

La memoria lógica se divide en bloques de tamaño fijo llamados páginas (pages), y la memoria física se divide en bloques del mismo tamaño llamados marcos (frames).


🔥 Traducción de Direcciones

Pasos para la traducción:

  1. Dividir la dirección lógica en:
    • Número de página (p): Índice en la tabla de páginas.
    • Desplazamiento (d / offset): Dirección dentro de la página.
  2. Buscar el número de página en la Tabla de Páginas (Page Table) para obtener el número de marco (frame).
  3. Calcular la dirección física final:
Dirección Física = (Número de Marco * Tamaño de Página) + Desplazamiento

💡 Ejemplo práctico de cálculo:

Dado un tamaño de página (page size) = 256 bytes y una dirección lógica (dir) = 1000:

  • 👉 Número de página: 1000 / 256 = 3 (división entera)
  • 👉 Desplazamiento (offset): 1000 % 256 = 232 (resto de la división)


🔴 8. Algoritmos de Reemplazo de Páginas

First-In, First-Out (FIFO)

Reemplaza la página que lleva más tiempo en memoria.
❌ Sufre de la Anomalía de Belady.


Least Recently Used (LRU)

Reemplaza la página que no ha sido utilizada durante el período de tiempo más largo.
✔ Ofrece un rendimiento excelente en la práctica.


Óptimo (OPT)

Reemplaza la página que no se utilizará durante el período de tiempo más largo en el futuro.
🔥 Es el algoritmo ideal con la menor tasa de fallos, pero es imposible de implementar en la vida real porque requiere conocer el futuro.


🚨 Anomalía de Belady:

Fenómeno por el cual, en ciertos algoritmos como FIFO, asignar más marcos de memoria física resulta en un mayor número de fallos de página.


🔴 9. TLB (Translation Lookaside Buffer)

💡 ¿Qué es?

Es una memoria caché de hardware de alta velocidad que almacena las traducciones de direcciones virtuales a físicas recientes para acelerar el acceso.


✔ Acierto (TLB Hit):

La traducción está en la TLB; el acceso a memoria es extremadamente rápido.

❌ Fallo (TLB Miss):

La traducción no está en la TLB; se debe consultar la tabla de páginas en la memoria principal (añadiendo latencia).


⏱ Fórmula del Tiempo de Acceso Efectivo a Memoria (EMAT):

EMAT = (Hit Ratio * (Acceso TLB + Acceso Memoria)) + (Miss Ratio * (Acceso TLB + 2 * Acceso Memoria))


🔴 10. Sistemas de Archivos (File Systems)

Métodos de asignación de espacio:

📦 Asignación Contigua (Contiguous Allocation)

✔ Acceso de lectura muy rápido.
❌ Produce fragmentación externa y dificultad para expandir archivos.


🔗 Asignación Ligada (Linked Allocation)

✔ Los archivos pueden crecer fácilmente sin fragmentación externa.
❌ Acceso directo/aleatorio muy lento (se debe recorrer secuencialmente).


📑 Asignación Indexada (Indexed Allocation)

✔ Excelente balance. Soporta acceso directo eficiente sin fragmentación externa mediante un bloque de índice.


🔴 11. Scripting en Bash

🟢 Estructura Condicional (if):

if [ -f "$1" ]; then
  echo "Es un archivo"
else
  echo "No es un archivo"
fi

🟢 Bucle For:

for f in *.txt; do
  wc -l "$f"
done

🟢 Bucle While (Lectura de archivos):

while read -r line; do
  echo "$line"
done < file.txt

🚨 Errores comunes en exámenes de Bash:

  • No dejar espacios dentro de los corchetes de evaluación: [ $a == $b ] (incorrecto: [$a==$b]).
  • No usar comillas dobles para proteger variables con espacios (ej. "$1").
  • Uso innecesario o incorrecto del comando cat (ej. cat file | grep en lugar de grep file).


🔥 12. Cómo Redactar Respuestas de Examen Perfectas

❌ Respuesta insuficiente o vaga:

"Es más rápido."

✅ Respuesta excelente y académica:

"Esta técnica mejora el rendimiento del sistema debido a que reduce significativamente el número de accesos requeridos a la memoria principal, disminuyendo así la latencia general de la operación."


🧠 13. Resumen de Conceptos Esenciales

Asegúrate de dominar estos puntos clave antes de entrar al examen:

  • Condición de carrera (Race condition): Ocurre por falta de atomicidad en operaciones concurrentes.
  • Semáforos (Semaphores): El orden de ejecución de las operaciones de espera (wait) es crítico.
  • Interbloqueo (Deadlock): Requiere que se cumplan simultáneamente las 4 condiciones de Coffman.
  • Planificación (Scheduling): Dominar las fórmulas de cálculo de tiempos (Gantt, TAT, WT).
  • Paginación (Paging): Saber separar la dirección lógica en número de página y desplazamiento (offset).
  • Reemplazo de páginas: Conocer las diferencias clave entre FIFO (sufre anomalía de Belady), LRU y OPT.
  • TLB: Funciona como una caché de traducción de direcciones para optimizar el EMAT.
  • Bash: Respetar estrictamente la sintaxis de espacios y comillas.

Entradas relacionadas: