Tutoria 1: Taller de Sistemas Operativos Avanzados
1. Resumen Ejecutivo
Esta sesión de taller conecta la gestión básica de PowerShell con la administración avanzada de recursos en Windows y Linux. Se profundiza en herramientas de monitorización de rendimiento (históricos y tiempo real) y se analizan algoritmos teóricos cruciales para Sistemas Operativos Distribuidos (migración de procesos y exclusión mutua). Finalmente, se revisan ejercicios de programación en C sobre llamadas al sistema (fork, pipes y lectura de ficheros).
2. Conceptos Clave Cmdlet:* Comandos nativos de PowerShell (verbo-sustantivo).
- Pipeline (
|): Mecanismo para pasar la salida de un comando como entrada de otro. - Serialización: Proceso de convertir el estado de un proceso (memoria, registros) en un formato transferible por la red.
- Exclusión Mutua: Garantía de que solo un proceso accede a una sección crítica a la vez.
- Token Ring (Anillo): Algoritmo de exclusión mutua basado en un testigo que circula entre nodos.
- System Call (Llamada al Sistema): Mecanismo por el cual un programa solicita un servicio al kernel (ej.
fork(),open()).
3. Desarrollo del Temario###3.1. Introducción y Manejo de PowerShellEl taller comienza repasando la operatividad básica de la consola de Microsoft.
Puesta en Marcha y Comandos BásicosPara iniciar, se utiliza pwsh en Linux/macOS o se busca "Windows PowerShell" en Windows.
-
Navegación:
Get-Location(dónde estoy),Set-Location(cambiar directorio). -
Listado:
Get-ChildItemequivale allsodir. Se pueden usar filtros:Get-ChildItem -Path C:\Users -Filter *.txt.
Gestión de Procesos y Servicios*
Listar procesos: Get-Process muestra lo que está corriendo.
-
Servicios:
Get-Servicemuestra el estado de los servicios de Windows. -
Filtrado y Ordenación: Es posible encadenar comandos (Pipelining) para refinar datos.
-
Ejemplo: Ver los 5 procesos que más CPU consumen:
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5. -
Ejemplo: Exportar a CSV:
Get-Process | Export-Csv ....
Scripting y Variables (Explicación del Profesor)Los scripts tienen extensión .ps1. Si hay errores de permisos, se debe cambiar la política de ejecución: Set-ExecutionPolicy RemoteSigned.
Ejemplo Avanzado en Clase (Variables y Objetos): El profesor demostró cómo tratar los procesos como objetos: 1. Obtener el ID de un proceso (ej. Paint):
$proceso = Get-Process -Id 216162. Matar el proceso usando un método del objeto:$proceso.Kill()Esto demuestra que PowerShell es orientado a objetos, no solo texto plano.
3.2. Monitorización de Sistemas (Windows vs. Linux)Esta sección fue puramente práctica basada en la transcripción. El objetivo es saber dónde mirar cuando el sistema va lento.
En Windows Tiempo Real: Administrador de Tareas* (Ctrl+Shift+Esc). Permite ver consumo de CPU/Memoria y finalizar tareas.
- Histórico: Pestaña "Historial de aplicaciones" dentro del Administrador de tareas (muestra tiempo de CPU acumulado).
- Detalle: Monitor de Recursos para un desglose más fino por hilos y disco.
En Linux El profesor destacó varias herramientas fundamentales para la consola:
| Herramienta | Función Principal | Notas del Profesor |
|---|---|---|
top |
Monitorización en tiempo real | Muestra procesos ordenados por consumo. |
ps |
Snapshot de procesos | Útil con flags personalizados: ps -eo pid,ppid,cmd,%mem,%cpu. |
sar |
Histórico (System Activity Reporter) | Parte del paquete sysstat. Permite ver qué pasó "ayer" o hace una hora. |
dstat |
Estadísticas combinadas | Combina vmstat, iostat y netstat en una sola vista. |
atop |
Monitorización avanzada | Registro detallado de recursos a nivel de sistema y proceso. |
3.3. Teoría de Sistemas Distribuidos¡OJO AL DATO!: Esta sección contiene teoría densa explicada verbalmente que suele ser material de examen.
A. Migración de Procesos entre NodosEl profesor enfatizó la importancia de dibujar el workflow antes de programar. El algoritmo genérico para mover un proceso de un Nodo A a un Nodo B es:
- Captura de Estado (Snapshot): Guardar registros de CPU, contador de programa (PC), memoria RAM asignada y archivos abiertos.
- Serialización: Convertir ese estado en un formato que pueda viajar por la red.
- Transferencia: Enviar los datos serializados al Nodo destino.
- Deserialización: Reconstruir el estado en el Nodo B.
- Asignación de Recursos: Reservar memoria y CPU en el destino.
- Reinicio: Arrancar el proceso en el punto exacto donde se pausó.
- Actualización de Referencias: Avisar al resto del sistema que el proceso ahora vive en el Nodo B.
B. Algoritmos de Exclusión MutuaCómo evitar que dos procesos escriban en el mismo recurso a la vez en un sistema distribuido.
- Algoritmo de Anillo (Token Ring):
- Funcionamiento: Un "token" (permiso) viaja en círculo lógico entre nodos. Solo quien tiene el token puede entrar.
- Ventaja: Sencillo, garantiza exclusión mutua, no hay colisiones (Starvation-free).
-
Desventaja: Si un nodo falla, el anillo se rompe. El token tarda en dar la vuelta (latencia).
-
Algoritmo Centralizado:
- Funcionamiento: Un nodo "Coordinador" da permisos. Todos le piden permiso a él.
- Ventaja: Fácil de implementar.
-
Desventaja: Punto único de fallo. Si el coordinador cae, el sistema se detiene. Cuello de botella.
-
Algoritmo de Suzuki-Kasami:
- Funcionamiento: Usa un token que lleva una "cola de solicitudes" dentro. El token viaja directamente a quien lo necesita, no en círculo ciego.
- Ventaja: Eficiente en número de mensajes.
- Desventaja: Complejidad de gestión alta.
3.4. Ejercicios de Programación en C (System Calls)Se revisaron dos códigos fuente durante la clase para entender cómo interactúa el software con el Kernel de Linux.
Lectura de /etc/passwdEjercicio para usar fopen y leer líneas secuencialmente.
- Lógica: Abrir fichero -> Bucle
whileleyendo líneas -> Contadori++. - Objetivo: Mostrar específicamente la 4ª línea del fichero de usuarios.
- Nota: En C, los índices empiezan en 0, por lo que la lógica de parada debe ser precisa (stop cuando
contador == 3para la 4ª línea).
Comunicación Padre-Hijo (fork y pipe)El profesor explicó un script donde un proceso padre envía un mensaje a su hijo.
- Pipe (
p): Se crea una tubería.p[0]es lectura,p[1]es escritura. - Fork: Se clona el proceso.
- Código del Hijo (
pid == 0): Cierra escritura -> Lee del pipe (read) -> Imprime mensaje -> Sale. - Código del Padre (
pid > 0): Cierra lectura -> Escribe en el pipe (write) -> Espera al hijo (wait) -> Sale.
3.5. Curiosidades Técnicas (Contexto) MMORPG: Massively Multiplayer Online Role-Playing Games*. Juegos con persistencia de mundo y miles de conexiones concurrentes.
- Consumo ENIAC vs. Moderno:
- ENIAC: 160 kW de consumo.
- Pentium Gold: ~58 W.
- Equivalencia: El consumo de una ENIAC equivale a tener encendidos ~2,759 procesadores Pentium simultáneamente.
4. Preguntas de Autoevaluación
- PowerShell: ¿Qué comando y parámetro utilizarías para exportar la lista de procesos actuales a un archivo compatible con Excel?
- Monitorización: Si necesitas saber qué ocurrió con el consumo de CPU en tu servidor Linux ayer a las 3:00 AM, ¿qué herramienta utilizarías:
toposar? ¿Por qué? - Sistemas Distribuidos: En el algoritmo de exclusión mutua centralizado, ¿cuál es el riesgo principal (la mayor desventaja) comparado con el algoritmo de anillo?
- Programación C: En un programa que usa
pipe(), ¿por qué el proceso hijo debe cerrar el extremo de escritura (p[1]) si solo va a leer datos? - Teoría: Describe los 3 primeros pasos teóricos para realizar la migración de un proceso vivo de un nodo a otro.