Resumen Completo de Sistemas Operativos, Procesos, Memoria y Comandos Linux

Informática y Telecomunicaciones8,42 KB

Historia y Evolución de los Sistemas Operativos

  • IBM 704 (1956): Primer sistema operativo para este equipo.
  • QDOS (1980): Sistema operativo rápido de disco.
  • Android (2008): Sistema operativo desarrollado por Google, basado en Linux.
  • IBSYS (1960): Nuevo método de gestión de búferes y dispositivos.
  • Windows NT: Arquitectura base para las versiones modernas de Windows.
  • Windows 95 (1995): Sistema operativo con interfaz gráfica de usuario.
  • CTSS (1961): Sistema de tiempo compartido compatible (Time-sharing).
  • Mac OS X (2001): Sistema operativo desarrollado por Apple Inc. para ordenadores Macintosh, que utiliza virtualización.
  • EXEC 8 (1964): Combina procesamiento por lotes y tiempo compartido, permitiendo trabajos mixtos simultáneos.
  • Unix (1969): Sistema operativo multitarea y multiusuario creado por Bell Labs.
  • Apple I (1977): Primer producto de Apple.
  • Windows XP (2001): Enfocado en la experiencia del usuario.
  • Ubuntu (2004): Distribución de Linux orientada a la facilidad de uso.
  • iOS (2007): Sistema operativo móvil diseñado para el iPhone.
  • Windows 10 (2015): Sistema operativo de escritorio moderno.

Gestión de Procesos

Un proceso es un programa en ejecución. En su estructura en memoria encontramos:

  • Segmento de Código (Text): Instrucciones del programa.
  • Datos (Data): Variables globales.
  • Pila (Stack): Almacena variables locales y control de llamadas.
  • Registro (Registers): Incluye el Program Counter (PC) que indica la siguiente instrucción a ejecutar.

Estados de los Procesos

  • Running (Ejecución): El proceso se está ejecutando en la CPU.
  • Ready (Listo): El proceso está listo pero esperando a que se le asigne la CPU.
  • Blocked (Bloqueado): El proceso espera un evento externo (por ejemplo, una operación de E/S).

Transiciones de Estados

  • Running → Blocked: El proceso pide una operación de E/S (como leer un archivo).
  • Blocked → Ready: La operación de E/S ha terminado.
  • Ready → Running: El sistema operativo selecciona el proceso para ejecutarlo.
  • Running → Ready: El sistema operativo arrebata la CPU al proceso para dársela a otro.

Llamadas al Sistema para Procesos

  • fork(): Crea una copia exacta del proceso actual. Cada uno tiene su propio espacio de datos y pila.
  • kill(): Termina un proceso.
  • wait(): Espera a que otro proceso termine.
  • pause(): Pausa la ejecución.
  • getpid(): Obtiene el identificador (ID) del proceso.
  • exec(): Reemplaza el programa actual por uno nuevo.
  • Pipes (|): Conectan la salida estándar de un proceso con la entrada de otro (ejemplo: echo "hola mundo" | wc).

Planificación de CPU (Scheduling)

Métricas clave:

  • Turnaround Time: Tiempo de finalización - Tiempo de llegada.
  • Response Time: Primer inicio - Tiempo de llegada.

Algoritmos de Planificación

  • FIFO (First In, First Out): El primero que llega es el primero en ser atendido. Una vez que comienza, corre hasta terminar.
  • SJF (Shortest Job First): Se ejecuta primero el trabajo más corto. Una vez que comienza, no se interrumpe.
  • STCF (Shortest Time-to-Completion First): Corre el trabajo con menor tiempo restante; si llega un nuevo trabajo, se compara con el tiempo restante del actual.
  • Round Robin (RR): Cada trabajo se ejecuta durante un cuanto de tiempo (quantum), luego se interrumpe y pasa al siguiente.

MLFQ (Multilevel Feedback Queue)

  • Regla 1: Prioridad más alta gana.
  • Regla 2: Misma prioridad = se aplica Round Robin.
  • Regla 3: Todo trabajo nuevo entra con la prioridad más alta.
  • Regla 4: Si un trabajo usa todo su quantum, baja su prioridad.
  • Regla 5: Si un trabajo libera la CPU antes de terminar su quantum (por E/S), mantiene su prioridad.
  • Estructura: Alta prioridad (Q8) descendiendo hasta Baja prioridad (Q1).

Gestión de Memoria y Virtualización

Jerarquía de Unidades: Bit → (÷8) Bytes → (÷1024) KB → MB → GB → TB

API de Memoria en C

  • malloc(): Asigna memoria en el montículo (heap). Ejemplo: int *x = malloc(sizeof(int));
  • free(): Libera la memoria asignada previamente.
  • Buenas prácticas: Inicializar usando malloc(10 * sizeof(int)), usar free() al terminar, y asignar memoria explícitamente (ej. malloc(strlen(...) + 1)).
  • Errores comunes: Olvidar liberar memoria, hacer doble free() (liberar solo una vez), o usar un puntero tras liberarlo (se recomienda asignar x = NULL después de free(x)).

Distribución de Memoria en un Proceso

Direcciones altas (Stack) ➔ [Libre] ➔ (free) ➔ Heap ➔ BSS ➔ Data ➔ Text (Code) ➔ Direcciones bajas.

Virtualización y Paginación

  • Dirección Física: Dirección Virtual + Base.
  • Comprobación de límites: 0 ≤ Dirección Virtual ≤ Bound.
  • Offset (Desplazamiento): Dirección Virtual % Tamaño de página (en bytes).
  • VPN (Número de Página Virtual): Dirección Virtual / Tamaño de página (en bytes).
  • Número de páginas virtuales: $2^{ ext{bits del VPN}}$.
  • Número de marcos: Memoria física total / Tamaño de página.
  • Tamaño de la tabla de páginas: Número de páginas virtuales × Bytes de cada entrada.

Comandos esenciales de Linux

Gestión de Archivos y Directorios

  • ls: Listar archivos.
  • ls -tr: Listar ordenados por tiempo inverso.
  • ls -ns: Listar mostrando tamaños.
  • ls -R: Listado recursivo.
  • mkdir [dir]: Crear carpeta.
  • rmdir [dir]: Eliminar carpeta vacía.
  • cd [dir]: Entrar a una carpeta.
  • cd ..: Subir un nivel en el directorio.
  • touch [file]: Crear archivo.
  • rm [file]: Borrar archivo.
  • mv [viejo] [nuevo]: Renombrar o mover archivo/carpeta.
  • cat [file]: Ver el contenido de un archivo.
  • man [comando]: Manual de ayuda del comando.

Búsqueda y Procesamiento de Texto

  • grep "txt" archivo.txt: Buscar texto.
  • grep -i "txt" archivo.txt: Buscar sin distinguir mayúsculas y minúsculas.
  • grep -c "txt" archivo.txt: Contar ocurrencias.
  • grep -v "Linux" archivo.txt | grep "UNIX": Excluir una palabra y buscar otra.
  • grep -m 2 "UNIX" example.txt: Mostrar las primeras 2 coincidencias.
  • diff [file1] [file2]: Comparar archivos.
  • wc -l [file]: Contar líneas.
  • wc -w [file]: Contar palabras.
  • wc -c [file]: Contar caracteres.
  • sort: Ordenar líneas alfabéticamente.
  • sort -r: Orden inverso.
  • sort -n: Orden numérico.
  • sort -u: Quitar duplicados.
  • uniq: Eliminar duplicados consecutivos.
  • uniq -c: Contar duplicados consecutivos.
  • cut -d':' -f1 [archivo]: Cortar por delimitador y seleccionar columna.
  • head -n 3 / tail -n 3: Mostrar las primeras o últimas líneas de un archivo.

Descargar

PDF Word HTML