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:
- Leer el valor de
x. - Sumar 1 al valor leído.
- 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:
- Exclusión mutua (Mutual exclusion): Solo un proceso o hilo puede estar en su sección crítica a la vez.
- 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.
- 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).
- 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:
- Exclusión mutua (Mutual exclusion): Al menos un recurso debe estar en modo no compartido.
- Retener y esperar (Hold and wait): Un proceso debe retener al menos un recurso y estar esperando otros.
- Sin expropiación (No preemption): Los recursos no pueden ser retirados a la fuerza.
- 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
idesea 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:
- Dibujar el Diagrama de Gantt.
- Determinar el Tiempo de Finalización (Completion Time - CT).
- Calcular el Tiempo de Retorno (Turnaround Time - TAT):
TAT = CT - Arrival Time - 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:
- 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.
- Buscar el número de página en la Tabla de Páginas (Page Table) para obtener el número de marco (frame).
- 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 | grepen lugar degrep 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.