📝 TEMA1_RESUMEN
← Volver

TEMA 1 — CONCEPTOS DE SISTEMAS OPERATIVOS

Características, Evolución, Estructura, Componentes y Funciones


Nota de estudio: Este tema es la base conceptual de toda la asignatura. Dominar estos conceptos permite responder correctamente preguntas como la 1 (comandos Linux), la 9 (permisos NTFS), y entender los fundamentos de seguridad, redes y almacenamiento que aparecen en el resto del examen.


1. DEFINICIÓN Y CONCEPTO DE SISTEMA OPERATIVO

Un sistema operativo (SO) es el conjunto de programas que gestiona los recursos hardware de un ordenador y proporciona servicios comunes a los programas de aplicación. Es el intermediario entre el hardware físico y el software que ejecutan los usuarios.

Tiene tres roles simultáneos e inseparables:

  1. Gestor de recursos: controla y distribuye de forma eficiente la CPU, la memoria RAM, el almacenamiento y los dispositivos de E/S entre todos los procesos que compiten por ellos, evitando conflictos.

  2. Máquina extendida (o máquina virtual): oculta la complejidad del hardware real y ofrece a los programadores una interfaz abstracta, uniforme y más sencilla de usar. Un programa no necesita saber si el disco es NVMe, SATA o una unidad en red; el SO presenta una misma interfaz de ficheros.

  3. Árbitro: resuelve conflictos entre procesos que quieren acceder al mismo recurso, garantizando aislamiento, seguridad y equidad.

Analogía: El SO es como el director de un aeropuerto: los aviones (aplicaciones) no se comunican directamente con las pistas, el combustible o el control de tráfico (hardware); el director (SO) coordina todo para que cada avión despegue y aterrice sin colisiones.


2. FUNCIONES PRINCIPALES DEL SISTEMA OPERATIVO

2.1 Gestión de procesos

¿Qué es un proceso?

Un proceso es un programa en ejecución. No es lo mismo que el programa (fichero en disco, estático); el proceso es ese programa cargado en memoria con su estado de ejecución, sus variables, su contador de programa y sus recursos asignados.

Componentes de un proceso:
- Código (text segment): instrucciones del programa.
- Datos (data segment): variables globales y estáticas.
- Heap: memoria dinámica asignada en tiempo de ejecución (malloc, new).
- Stack (pila): variables locales, parámetros de funciones y direcciones de retorno.
- PCB (Process Control Block): estructura de datos del SO que almacena toda la información del proceso (PID, estado, registros de CPU, prioridad, recursos asignados...).

Estados de un proceso

Un proceso pasa por los siguientes estados a lo largo de su vida:

                  admitido
  [ NUEVO ] ─────────────────► [ LISTO ] ◄──────────── interrupción
                                    │                        │
                              despachado                     │
                                    │                        │
                                    ▼                        │
                              [ EJECUTANDO ] ────────────────┘
                                    │
                    ┌───────────────┴──────────────┐
               E/S o evento               termina
                    │                              │
                    ▼                              ▼
              [ BLOQUEADO ]               [ TERMINADO ]
                    │
           E/S o evento completado
                    │
                    └──────────────► [ LISTO ]
Estado Descripción
Nuevo El proceso acaba de ser creado pero aún no está listo para ejecutar
Listo El proceso espera a que la CPU quede libre para asignársela
Ejecutando El proceso está usando la CPU activamente
Bloqueado El proceso espera un evento externo (E/S, señal, temporizador)
Terminado El proceso ha finalizado; el SO libera sus recursos

Ejemplo práctico: Cuando abres un navegador web (nuevo → listo → ejecutando), haces clic en un enlace y el navegador espera la respuesta del servidor (ejecutando → bloqueado), cuando llega la respuesta (bloqueado → listo → ejecutando) y cuando cierras el navegador (ejecutando → terminado).

Hilos (Threads)

Un hilo (thread o proceso ligero) es la unidad mínima de ejecución dentro de un proceso. Un proceso puede contener múltiples hilos que comparten el mismo espacio de memoria (heap, código, datos globales) pero cada uno tiene su propio stack y sus propios registros de CPU.

Proceso Hilo
Espacio de memoria Propio e independiente Compartido con el proceso padre
Recursos Propios (ficheros, sockets...) Compartidos con el proceso
Creación Costosa (requiere copiar espacio de memoria) Barata (solo se crea un stack)
Comunicación Mediante IPC (costoso) Directamente mediante memoria compartida
Aislamiento Alto: un proceso no afecta a otro Bajo: un hilo que falla puede tumbar el proceso

Modelos de hilos:


2.2 Planificación de la CPU (Scheduling)

La planificación decide qué proceso usa la CPU en cada instante. Es una de las funciones más críticas del SO porque impacta directamente en el rendimiento percibido.

Tipos de planificador

Criterios de evaluación

Algoritmos de planificación

FCFS — First Come, First Served (Primero en llegar, primero en ser atendido)

Ejemplo:

Proceso Llegada Ráfaga CPU
P1 0 24 ms
P2 1 3 ms
P3 2 3 ms

Con FCFS: P1 ejecuta de t=0 a t=24, P2 de t=24 a t=27, P3 de t=27 a t=30.
- Tiempo de espera: P1=0, P2=23, P3=25. Media = 16 ms. (muy alto por el efecto convoy)

SJF — Shortest Job First (Trabajo más corto primero)

Planificación por prioridades

Round Robin (RR)

Ejemplo con quantum = 4 ms:

Proceso Llegada Ráfaga
P1 0 10 ms
P2 0 4 ms
P3 0 5 ms

Orden: P1(4ms) → P2(4ms) → P3(4ms) → P1(4ms) → P3(1ms) → P1(2ms)
Todos los procesos avanzan equitativamente.

Multilevel Queue (Cola multinivel)

Multilevel Feedback Queue (Cola multinivel con retroalimentación)


2.3 Comunicación entre procesos (IPC)

Los procesos necesitan a veces comunicarse o sincronizarse. El SO proporciona mecanismos de IPC (Inter-Process Communication):

Mecanismo Descripción Uso típico
Pipes (tuberías) Canal unidireccional entre procesos. El SO crea un buffer en kernel. ls \| grep .txt en bash
Colas de mensajes Los procesos envían y reciben mensajes discretos a través de una cola gestionada por el kernel Comunicación entre servicios
Memoria compartida El SO mapea la misma región de RAM en el espacio de dos procesos. El más rápido, pero requiere sincronización Bases de datos, procesamiento paralelo
Semáforos Variables de control que permiten sincronizar acceso a recursos compartidos Control de acceso a secciones críticas
Sockets Canal de comunicación bidireccional, puede ser local (Unix socket) o en red (TCP/IP) Comunicación cliente-servidor
Señales Notificaciones asíncronas enviadas a un proceso kill -9 PID en Linux envía la señal SIGKILL

Relevancia para el examen: El comando kill de Linux envía señales a procesos. kill -9 PID envía SIGKILL (terminación forzosa); kill -15 PID envía SIGTERM (petición de terminación elegante).


2.4 Sincronización y problemas de concurrencia

Cuando múltiples procesos o hilos comparten datos, pueden surgir problemas graves.

Condición de carrera (Race condition)

Ocurre cuando el resultado de una operación depende del orden de ejecución de los procesos, y ese orden no está controlado.

Ejemplo: Dos procesos leen una variable saldo=100, ambos suman 50, ambos escriben. El resultado debería ser 200, pero como ambos leyeron 100 y sumaron sobre ese valor, ambos escriben 150. Se pierde una actualización.

Sección crítica

Fragmento de código que accede a datos compartidos y que solo puede ejecutar un proceso a la vez. Para protegerla se necesitan tres condiciones:

  1. Exclusión mutua: solo un proceso ejecuta la sección crítica a la vez.
  2. Progreso: si nadie está en la sección crítica, un proceso que quiera entrar debe poder hacerlo en tiempo finito.
  3. Espera acotada: un proceso no puede ser pospuesto indefinidamente.

Deadlock (Interbloqueo)

Situación en que dos o más procesos esperan indefinidamente un recurso que sostiene el otro, por lo que ninguno puede avanzar.

Condiciones de Coffman (se deben cumplir las cuatro simultáneamente para que ocurra un deadlock):

  1. Exclusión mutua: los recursos no pueden compartirse.
  2. Retención y espera: un proceso retiene al menos un recurso mientras espera otro.
  3. Sin desalojo: un recurso no puede ser arrebatado a un proceso; este debe liberarlo voluntariamente.
  4. Espera circular: existe una cadena circular de procesos donde cada uno espera un recurso retenido por el siguiente.

Estrategias frente al deadlock:

Starvation (Inanición)

Un proceso espera indefinidamente porque siempre hay otros de mayor prioridad que se adelantan. No es un bloqueo pero el proceso nunca progresa. Solución: envejecimiento (aging).


2.5 Gestión de memoria

Objetivos

El gestor de memoria del SO tiene que conseguir simultáneamente:
- Relocalización: un proceso puede ejecutarse en cualquier parte de la RAM sin importar en qué dirección fue compilado.
- Protección: un proceso no puede acceder a la memoria de otro.
- Compartición: a veces se quiere que dos procesos compartan código (librerías compartidas) sin duplicarlo.
- Organización lógica: los programas se organizan en módulos; la memoria debe soportar esta estructura.

Jerarquía de memoria

La memoria no es un bloque homogéneo. Existe una jerarquía ordenada por velocidad y coste:

  Más rápido, más caro, menos capacidad
  ┌──────────────┐
  │  Registros   │  ~1 ns    ~KB
  ├──────────────┤
  │ Caché L1/L2  │  ~5 ns    ~MB
  ├──────────────┤
  │ RAM (DRAM)   │  ~100 ns  ~GB
  ├──────────────┤
  │    Disco     │  ~10 ms   ~TB
  └──────────────┘
  Más lento, más barato, más capacidad

Memoria virtual

La memoria virtual es la ilusión creada por el SO de que cada proceso tiene acceso a una cantidad de memoria mucho mayor que la RAM física disponible. Los procesos trabajan con direcciones virtuales que el hardware (MMU) traduce a direcciones físicas.

Ventajas:
- Cada proceso cree tener para sí toda la memoria del sistema.
- Los procesos están protegidos entre sí.
- Se pueden ejecutar procesos más grandes que la RAM física.

Paginación

La memoria se divide en bloques de tamaño fijo llamados páginas (en el espacio del proceso) y marcos de página (en la RAM física). El tamaño típico es 4 KB.

El SO mantiene una tabla de páginas por proceso que mapea cada página virtual a su marco físico:

Dirección virtual: [ número de página | desplazamiento ]
                           │
                    tabla de páginas
                           │
                           ▼
Dirección física:  [ número de marco  | desplazamiento ]

La MMU (Memory Management Unit) es el componente hardware que realiza esta traducción en cada acceso a memoria.

El TLB (Translation Lookaside Buffer) es una caché hardware muy rápida de las traducciones más recientes de la tabla de páginas. Si la dirección buscada está en el TLB (TLB hit), la traducción es instantánea. Si no (TLB miss), hay que consultar la tabla de páginas en RAM, lo que es más lento.

Fallo de página (Page fault)

Si la página a la que accede el proceso no está en RAM (está en disco, en el área de intercambio o swap), se produce un fallo de página. El SO:

  1. Para la ejecución del proceso.
  2. Encuentra el marco libre (o libera uno usando un algoritmo de reemplazo).
  3. Carga la página desde disco a RAM.
  4. Actualiza la tabla de páginas.
  5. Reanuda el proceso.

Este mecanismo permite que procesos más grandes que la RAM puedan ejecutarse, pero si hay demasiados fallos de página el sistema se ralentiza enormemente (thrashing: el SO pasa más tiempo gestionando páginas que ejecutando código).

Algoritmos de reemplazo de páginas

Cuando no hay marcos libres y hay que cargar una página, el SO debe elegir qué página expulsar:

Algoritmo Descripción Problema
FIFO Se expulsa la página que lleva más tiempo en memoria Anomalía de Belady: más marcos puede dar más fallos
LRU (Least Recently Used) Se expulsa la página menos recientemente usada Costoso de implementar con precisión
LFU (Least Frequently Used) Se expulsa la página usada con menos frecuencia Puede retener páginas antiguas muy usadas en el pasado
Clock (Segunda Oportunidad) Aproximación eficiente de LRU. Cada página tiene un bit de referencia; se recorre circular y se expulsa la primera con bit=0 El más usado en la práctica

Segmentación

Alternativa a la paginación donde la memoria se divide en segmentos de tamaño variable con significado lógico (segmento de código, de datos, de pila). Las direcciones virtuales tienen la forma [segmento:desplazamiento].

Diferencia clave con paginación:
- Paginación: bloques de tamaño fijo, transparente al programador, eficiente.
- Segmentación: bloques de tamaño variable, visible al programador, permite protección por segmento.

Los procesadores x86 modernos combinan ambos (segmentación + paginación), aunque en la práctica los SO modernos usan paginación plana (segmentos que cubren todo el espacio de direcciones).

Swapping

El SO puede mover un proceso completo desde RAM al disco para liberar espacio, y traerlo de vuelta cuando sea necesario. Diferente del paging (que trabaja con páginas individuales); el swapping trabaja con procesos completos. Es muy lento y solo se usa en situaciones de emergencia de memoria.


2.6 Gestión de entrada/salida (E/S)

Tipos de dispositivos

Drivers (controladores de dispositivo)

Un driver es software específico para un dispositivo hardware que traduce las llamadas genéricas del SO (read, write, open...) a los comandos específicos del hardware. Corre en modo kernel.

El SO presenta a las aplicaciones una interfaz uniforme (las mismas llamadas al sistema para cualquier dispositivo), mientras que cada driver implementa internamente esa interfaz de forma específica para su hardware.

Técnicas de E/S

E/S programada (Polling)

La CPU espera activamente a que el dispositivo termine (comprueba repetidamente un registro de estado). Muy ineficiente: la CPU no puede hacer otra cosa mientras espera. Solo aceptable para dispositivos muy rápidos.

E/S por interrupciones

El proceso que pide la E/S se bloquea. Cuando el dispositivo termina, genera una interrupción hardware que fuerza al procesador a ejecutar una rutina de servicio de interrupción (ISR). La ISR desbloquea el proceso. La CPU queda libre para ejecutar otros procesos mientras tanto. Eficiente para la mayoría de los casos.

DMA (Direct Memory Access)

Para transferencias grandes de datos (lectura de un fichero grande del disco), hacer que la CPU transfiera byte a byte es ineficiente incluso con interrupciones.

El controlador DMA es hardware especializado que puede transferir bloques de datos directamente entre el dispositivo y la RAM sin intervención de la CPU. La CPU solo inicia la transferencia y recibe una interrupción al final.

Sin DMA: Disco → CPU → RAM (la CPU trabaja todo el tiempo)
Con DMA: Disco → DMA → RAM (la CPU solo interviene al inicio y al final)

Buffering, Spooling y Caching


2.7 Gestión del sistema de archivos

Conceptos fundamentales

Principales sistemas de archivos

Sistema SO Características clave
FAT32 Windows antiguo, memorias USB Sin permisos, tamaño máximo de fichero 4 GB, compatible universalmente
exFAT Windows, memorias grandes FAT32 sin el límite de 4 GB; sin permisos
NTFS Windows moderno Journaling, permisos ACL, cifrado (EFS), compresión, ficheros grandes, streams alternativos
ext4 Linux Journaling, inodos, extents, soporte hasta 1 EB de volumen
XFS Linux (Red Hat) Alto rendimiento con ficheros grandes, journaling
Btrfs Linux Copy-on-write, snapshots, RAID integrado, checksums de datos
ZFS Solaris, FreeBSD, Linux Integridad total con checksums, RAID-Z, desduplicación, snapshots
APFS macOS, iOS Copy-on-write, snapshots, cifrado nativo, optimizado para SSD

Journaling

El journaling (registro en diario) protege la integridad del sistema de archivos ante fallos inesperados (corte de luz, cuelgue del sistema). Antes de escribir los datos definitivamente, el SO registra la operación pendiente en un área especial (el journal). Si el sistema falla a mitad de la escritura, al reiniciar el SO puede revisar el journal y completar o deshacer la operación incompleta.

Sin journaling (FAT32): un apagado brusco puede dejar el sistema de archivos corrupto e inconsistente.

Con journaling (NTFS, ext4): la recuperación es mucho más rápida y fiable.

Permisos en Linux (rwx)

En Linux, cada archivo tiene tres conjuntos de permisos:

-rwxr-xr--  1  usuario  grupo  1234  Jun 9 2025  fichero.txt
│└──┴──┴──┘
│  │  │  └── Otros (others): r-- = solo lectura
│  │  └───── Grupo (group): r-x = lectura y ejecución
│  └──────── Propietario (owner): rwx = lectura, escritura, ejecución
└─────────── Tipo: - fichero regular, d directorio, l enlace simbólico

El comando chmod modifica estos permisos. Se puede usar notación simbólica o numérica (octal):

chmod 755 fichero    # rwxr-xr-x
chmod u+x fichero    # añade ejecución al propietario
chmod go-w fichero   # quita escritura a grupo y otros

Relevancia para el examen: chmod es exactamente la pregunta 1.d del examen de la Politécnica.


2.8 Gestión de seguridad

Autenticación

Proceso de verificar la identidad de un usuario o proceso. Métodos:

La autenticación multifactor (MFA) combina dos o más de estos factores, como explora la pregunta 2 del examen.

Autorización

Una vez autenticado, la autorización determina qué puede hacer el usuario. Se implementa mediante:

Auditoría

Registro de eventos relevantes de seguridad: accesos, modificaciones de ficheros, cambios de configuración. Fundamental para la detección de intrusiones y la investigación forense.

Relevancia para el examen: El comando sudo (pregunta 1.b) es el mecanismo de Linux para ejecutar comandos con privilegios de superusuario de forma controlada y auditada. Cada uso de sudo queda registrado en /var/log/auth.log.


3. ESTRUCTURA INTERNA DEL SO: EL KERNEL

3.1 Modo usuario vs modo kernel

El procesador opera en dos modos distintos:

3.2 Llamadas al sistema (System Calls)

Las llamadas al sistema son la interfaz entre las aplicaciones (modo usuario) y el kernel (modo kernel). Cuando una aplicación necesita un servicio del kernel (leer un fichero, crear un proceso, abrir un socket...), realiza una system call.

Mecanismo:

Aplicación (modo usuario)
    │
    │  1. La aplicación invoca la system call con sus parámetros
    │     (p.ej. read(fd, buffer, size))
    ▼
  Instrucción TRAP (syscall / int 0x80)
    │  2. El procesador cambia a modo kernel y salta al manejador de syscalls
    ▼
Kernel del SO (modo kernel)
    │
    │  3. El kernel verifica los parámetros y ejecuta la operación solicitada
    │     (lee del disco, comprueba permisos, etc.)
    ▼
  Retorno al modo usuario
    │  4. El kernel devuelve el resultado y el procesador vuelve a modo usuario
    ▼
Aplicación (modo usuario) — continúa con el resultado

Tipos de llamadas al sistema:

Tipo Ejemplos
Gestión de procesos fork() (crea proceso), exec() (ejecuta programa), exit() (termina), wait() (espera hijo)
Gestión de memoria mmap() (mapea memoria), brk() (ajusta heap), munmap()
Gestión de ficheros open(), read(), write(), close(), stat(), chmod()
Gestión de dispositivos ioctl() (control de dispositivo), read()/write() sobre devices
Comunicación socket(), bind(), connect(), send(), recv(), pipe()
Gestión del sistema getpid(), getuid(), uname(), reboot()

Los comandos Linux touch, pwd, chmod y kill de la pregunta 1 del examen son programas de usuario que internamente realizan estas llamadas al sistema.

3.3 Arquitecturas del kernel

Kernel monolítico

Todo el código del SO (gestión de procesos, memoria, sistemas de archivos, drivers, redes) reside en un único bloque que ejecuta completamente en modo kernel.

┌─────────────────────────────────────────────┐
│              KERNEL MONOLÍTICO               │
│  Procesos | Memoria | FS | Drivers | Redes  │
└─────────────────────────────────────────────┘
              Hardware

Microkernel

El kernel solo incluye las funciones más esenciales: gestión básica de memoria (espacio de direcciones) y comunicación entre procesos (IPC). Todo lo demás (drivers, sistema de archivos, pila de red) corre en modo usuario como procesos servidores.

┌──────────────────────────────────────────┐  Modo usuario
│  Servidor FS  | Servidor Red | Drivers   │
└──────────────────────────────────────────┘
┌──────────────────────────────────────────┐  Modo kernel
│      Micro-kernel: IPC + memoria básica  │
└──────────────────────────────────────────┘
              Hardware

Kernel híbrido

Combina el núcleo pequeño del microkernel con algunos servicios en modo kernel por rendimiento. En la práctica, la mayoría de los SO modernos son híbridos.

Exokernel

Arquitectura experimental donde el kernel apenas abstrae el hardware: lo expone directamente a las aplicaciones con controles de seguridad mínimos. Las aplicaciones gestionan directamente sus propios recursos. Máximo rendimiento teórico pero enorme complejidad para el programador. Principalmente en investigación.


4. INTERFAZ DE USUARIO DEL SO

4.1 CLI (Command Line Interface)

Interfaz de texto donde el usuario introduce comandos. El componente que interpreta estos comandos se llama shell.

Ventajas del CLI:
- Mucho más potente para administración: scripts, automatización, acceso remoto (SSH).
- Menor consumo de recursos.
- Precisión y reproducibilidad (un script hace exactamente lo mismo siempre).

Inconvenientes:
- Curva de aprendizaje pronunciada.
- No intuitivo para usuarios no técnicos.

4.2 GUI (Graphical User Interface)

Interfaz gráfica con ventanas, iconos y ratón. Más accesible para el usuario general.

Ventajas del GUI:
- Intuitivo y accesible.
- Adecuado para tareas creativas (edición de imágenes, video...).

Inconvenientes:
- Mayor consumo de recursos.
- Menos eficiente para administración masiva.
- Difícil de automatizar.

4.3 Shells en Linux/Unix

El shell es el intérprete de comandos que lee las instrucciones del usuario, las analiza y las ejecuta llamando a los programas correspondientes mediante system calls.

Shell Descripción
sh (Bourne Shell) El shell original de Unix. Base de todos los demás.
bash (Bourne Again Shell) El más extendido en Linux. Compatible con sh, con mejoras (historial, autocompletado, arrays). Es el shell por defecto en la mayoría de distribuciones Linux.
zsh Moderno, muy configurable. Autocompletado avanzado. Default en macOS desde Catalina.
ksh (Korn Shell) Popular en entornos Unix comerciales (Solaris, AIX).
fish Shell con sintaxis moderna y autocompletado inteligente. No compatible con bash.

4.4 Shells en Windows

Shell Descripción
CMD (Command Prompt) Heredero del MS-DOS. Comandos básicos (dir, copy, del...). Limitado para administración moderna.
PowerShell Shell moderno orientado a objetos. Los comandos (cmdlets) devuelven objetos .NET, no texto. Multiplataforma (también en Linux/macOS). Herramienta de administración estándar en entornos Windows/Azure.

4.5 Comandos Linux fundamentales (relevantes para el examen)

Tal y como aparece en la pregunta 1 del examen de la Politécnica, estos son sus significados:

Comando Función
pwd (Print Working Directory) Muestra la ruta absoluta del directorio de trabajo actual. Internamente realiza la syscall getcwd().
sudo (Substitute User Do) Ejecuta un comando con los privilegios de otro usuario, normalmente root. El usuario debe estar en el fichero /etc/sudoers. Cada uso queda registrado en el log de auditoría. El mecanismo usa el bit SUID del ejecutable /usr/bin/sudo.
touch Actualiza la marca de tiempo de acceso y modificación de un fichero. Si el fichero no existe, lo crea vacío. Utiliza las syscalls utimes() o open().
chmod (Change Mode) Modifica los permisos de acceso de ficheros y directorios. Usa la syscall chmod(). Ejemplo: chmod 755 script.sh → rwxr-xr-x.
kill Envía una señal a un proceso identificado por su PID. Por defecto envía SIGTERM (señal 15, terminación elegante). Con -9 envía SIGKILL (terminación forzosa e inmediata). Ejemplo: kill -9 1234.

5. ARRANQUE DEL SISTEMA (BOOT)

5.1 BIOS vs UEFI

Cuando enciendes un ordenador, antes de que el SO arranque, hay un firmware que inicializa el hardware.

BIOS (Basic Input/Output System):
- Firmware tradicional, existe desde los años 80.
- Almacenado en un chip ROM de la placa base.
- Limitado a discos de hasta 2 TB (usa tablas de partición MBR con direcciones de 32 bits).
- Solo puede arrancar desde el primer sector del disco (MBR, 512 bytes).
- Sin interfaz gráfica, solo texto.

UEFI (Unified Extensible Firmware Interface):
- Sucesor moderno de BIOS, estándar desde ~2010.
- Soporte para discos mayores de 2 TB (usa GPT, tabla de particiones GUID con 64 bits).
- Interfaz gráfica, soporte para ratón.
- Secure Boot: verifica criptográficamente la firma digital del bootloader antes de ejecutarlo, impidiendo la ejecución de malware en el arranque (bootkits).
- Arranque más rápido.

5.2 MBR vs GPT

MBR GPT
Máximo disco 2 TB 9.4 ZB (prácticamente ilimitado)
Particiones primarias 4 128 (en Windows)
Redundancia Sin backup La tabla se replica al final del disco
Compatibilidad Universal (incluso BIOS) Requiere UEFI (o BIOS con soporte especial)
Integridad Sin verificación CRC32 en cada entrada

5.3 Proceso de arranque completo

1. [ENCENDIDO] La CPU empieza a ejecutar desde la dirección del firmware (BIOS/UEFI)

2. [POST] Power-On Self Test: el firmware verifica la RAM, CPU, dispositivos...

3. [LOCALIZA EL BOOTLOADER] 
   - BIOS: lee el primer sector del disco (MBR) donde está el código de arranque
   - UEFI: busca en la partición EFI (ESP) el bootloader registrado

4. [BOOTLOADER] (GRUB en Linux, Windows Boot Manager en Windows)
   - Presenta menú de arranque si hay varios SO
   - Carga el kernel del SO en memoria y lo ejecuta

5. [KERNEL] 
   - Inicializa los subsistemas internos (memoria, procesos, drivers)
   - Monta el sistema de archivos raíz
   - Lanza el primer proceso de usuario

6. [INIT / SYSTEMD] (Linux) o [Session Manager] (Windows)
   - Lanza todos los servicios y daemons del sistema
   - Presenta la pantalla de login

7. [LOGIN] El usuario se autentica y accede al escritorio o shell

6. EVOLUCIÓN HISTÓRICA DE LOS SO

Primera generación (1945–1955): sin sistema operativo

Los primeros ordenadores (ENIAC, UNIVAC) se programaban directamente en hardware mediante conexión de cables (plugboards) o tarjetas perforadas. No existía el concepto de SO. Cada programa tenía control absoluto del hardware. Un solo trabajo a la vez. Enormes y carísimos.

Segunda generación (1955–1965): sistemas de procesamiento por lotes (batch)

Aparecen los transistores y los primeros ordenadores comerciales (IBM 701, 1401). Los trabajos (jobs) se agrupan en lotes de tarjetas perforadas y se procesan secuencialmente. Surge el monitor residente: un pequeño programa que carga automáticamente el siguiente trabajo cuando el anterior termina. Es el precursor del SO. Problema: la CPU queda ociosa mientras el lector de tarjetas o la impresora trabajan.

Tercera generación (1965–1980): multiprogramación y tiempo compartido

IBM lanza el System/360 (1964): la primera familia de ordenadores con una arquitectura unificada. El SO OS/360 introduce la multiprogramación: varios trabajos residen en memoria, y cuando uno espera E/S, la CPU ejecuta otro. Aprovechamiento radical de la CPU.

El tiempo compartido (time-sharing) lleva esto más lejos: múltiples usuarios conectados por terminales (teletipo) usan el mismo ordenador de forma interactiva, con la ilusión de que cada uno tiene el ordenador para sí. El SO de referencia de esta era es MULTICS (1969), y de él nace UNIX ese mismo año, creado por Ken Thompson y Dennis Ritchie en los laboratorios Bell de AT&T. UNIX sentará las bases de todos los SO modernos.

Cuarta generación (1980–2000): PC y GUI

Los microprocesadores hacen los ordenadores accesibles para particulares. Apple presenta el Apple II (1977) y el Macintosh (1984), con interfaz gráfica revolucionaria. Microsoft lanza MS-DOS (1981) para el IBM PC, un SO simple de línea de comandos.

En 1991 Linus Torvalds publica el kernel Linux, que junto con las herramientas GNU de Richard Stallman forma el primer SO libre y de código abierto completo. Windows NT (1993) introduce una arquitectura moderna de 32 bits con kernel híbrido, que es la base de todos los Windows actuales.

Quinta generación (2000–presente): internet, móviles, nube y contenedores

Los SO se rediseñan para la era en red. Windows Server, distribuciones Linux para servidores (Red Hat, Debian). La virtualización con VMware (1998) y luego KVM y Hyper-V revolucionan los centros de datos. Android (2008, basado en Linux) e iOS (2007, basado en Darwin/BSD) crean el ecosistema móvil. Docker (2013) y Kubernetes (2014) transforman el despliegue de aplicaciones. El SO se convierte en infraestructura efímera y automatizable.


7. TIPOS DE SISTEMAS OPERATIVOS

7.1 SO de propósito general

Diseñados para ejecutar una gran variedad de aplicaciones. Optimizan el throughput medio y la experiencia interactiva. Ejemplos: Windows 11, Ubuntu Linux, macOS.

7.2 SO de tiempo real (RTOS)

Hard real-time: las respuestas deben producirse dentro de plazos estrictos e inviolables. Un fallo en el plazo es un fallo del sistema. Ejemplos de uso: sistemas de control de aviones, centralitas nucleares, frenos ABS, marcapasos.

Soft real-time: se prefiere respetar los plazos pero ocasionalmente superarlos no es catastrófico. Ejemplos: streaming de vídeo, videoconferencia, sistemas de audio.

Características de un RTOS: planificador determinista, latencias predecibles, sin paginación (podría causar fallos de página impredecibles), sin garbage collection.

Ejemplos: FreeRTOS, VxWorks, QNX, Zephyr.

7.3 SO embebidos

Diseñados para dispositivos con recursos muy limitados (microcontroladores, electrodomésticos, impresoras). Muy ligeros, a menudo sin interfaz de usuario. Pueden ser RTOS o no. Ejemplos: Linux embebido (OpenWRT en routers), RTOS FreeRTOS.

7.4 SO distribuidos

El SO gestiona un conjunto de máquinas interconectadas como si fueran un único sistema. El usuario no sabe en qué máquina se ejecuta su proceso. Transparencia total. Ejemplos históricos: Plan 9, Amoeba. En la práctica moderna: los clústeres de Kubernetes son una forma de computación distribuida, aunque el SO subyacente sigue siendo Linux en cada nodo.

7.5 SO de red vs SO distribuido


8. SISTEMAS OPERATIVOS MÁS RELEVANTES

8.1 UNIX

Creado en 1969 por Ken Thompson y Dennis Ritchie en los Bell Labs de AT&T. Escrito en C (lenguaje creado por los mismos autores), lo que le dio portabilidad entre arquitecturas hardware: algo revolucionario para la época.

Filosofía UNIX:
- Cada programa hace una sola cosa y la hace bien.
- Los programas se pueden encadenar mediante tuberías (pipes): la salida de uno es la entrada del siguiente (ls -l | grep .txt | wc -l).
- Todo es un fichero (dispositivos, procesos en /proc, sockets...).
- Preferencia por interfaces de texto.

8.2 Linux

Kernel creado por Linus Torvalds en 1991, publicado bajo licencia GPL (software libre). Combinado con las herramientas GNU de Richard Stallman, forma el sistema GNU/Linux.

Arquitectura: kernel monolítico modular. El núcleo es monolítico en arquitectura, pero los drivers y módulos pueden cargarse y descargarse en caliente (insmod, rmmod, modprobe) sin reiniciar. Esto combina el rendimiento del monolítico con la flexibilidad de los módulos.

Principales distribuciones:

Distribución Base Uso principal
Ubuntu Debian Escritorio y servidores. La más popular en la nube (AWS, GCP, Azure).
Debian Estabilidad extrema. Base de Ubuntu, Raspbian, etc.
Red Hat Enterprise Linux (RHEL) Red Hat Entornos empresariales críticos. Con soporte comercial.
Rocky Linux / AlmaLinux RHEL Alternativas comunitarias y gratuitas a RHEL tras el fin de CentOS.
SUSE Linux Enterprise SUSE Entornos empresariales, especialmente SAP.
Fedora Red Hat Distribución de vanguardia; prueba las novedades que llegan a RHEL.
Kali Linux Debian Seguridad ofensiva y pentesting.

8.3 Windows

Arquitectura NT: el kernel de Windows NT (y todos sus sucesores: XP, Vista, 7, 8, 10, 11, Server) está basado en un diseño híbrido inspirado en los microkernels. Tiene:

Active Directory (AD): servicio de directorio de Microsoft para gestionar centralizadamente usuarios, equipos y políticas de seguridad en redes corporativas. Es la pieza central de la administración de entornos Windows empresariales. Permite autenticación centralizada (Kerberos), políticas de grupo (GPO), asignación de recursos, etc.

8.4 macOS

Basado en Darwin, que combina el microkernel Mach (de la Universidad Carnegie Mellon) con componentes del sistema BSD (Berkeley Software Distribution). Kernel híbrido llamado XNU. POSIX-compliant. Integra la GUI Aqua.

8.5 Android

Sistema operativo móvil de Google basado en el kernel Linux. Arquitectura en capas:

  1. Linux Kernel: gestión de hardware, drivers.
  2. HAL (Hardware Abstraction Layer): interfaz estándar para el hardware.
  3. Android Runtime (ART): máquina virtual que ejecuta apps compiladas a bytecode (DEX).
  4. Framework de aplicaciones: APIs de Java para los desarrolladores.
  5. Aplicaciones: apps del sistema y de terceros.

8.6 iOS

De Apple. Basado en Darwin (mismo núcleo que macOS). Modelo de seguridad muy estricto: aplicaciones en sandbox, firma de código obligatoria (App Store), arranque seguro (Secure Enclave), cifrado por hardware.


9. VIRTUALIZACIÓN (DESDE LA PERSPECTIVA DEL SO)

9.1 Concepto

La virtualización abstrae los recursos hardware para permitir que múltiples SO ejecuten simultáneamente sobre el mismo hardware físico. Cada instancia de SO cree tener el hardware para sí sola.

9.2 Hipervisores

El hipervisor (o VMM, Virtual Machine Monitor) es el software que crea y gestiona las máquinas virtuales.

Tipo 1 (bare metal): el hipervisor ejecuta directamente sobre el hardware, sin SO huésped entre medias. Más eficiente y seguro. Uso en producción y centros de datos. Ejemplos: VMware ESXi, Microsoft Hyper-V, Citrix XenServer, KVM (Linux).

Tipo 2 (hosted): el hipervisor es una aplicación más que corre sobre un SO convencional. Más fácil de instalar pero con más overhead. Uso en desarrollo y pruebas. Ejemplos: VirtualBox, VMware Workstation.

9.3 Diferencia fundamental VM vs Contenedor

Máquina Virtual Contenedor
Qué virtualiza Hardware completo Sistema operativo
SO propio Sí, cada VM tiene su propio SO completo No, comparten el kernel del SO anfitrión
Peso Pesado (GBs) Ligero (MBs)
Arranque Minutos Segundos
Aislamiento Muy alto Menor (comparten kernel)
Overhead Mayor Mínimo
Tecnologías VMware, Hyper-V, KVM Docker, Podman, containerd

10. TENDENCIAS ACTUALES EN SO

10.1 Contenedores y orquestación

Docker (2013) popularizó los contenedores Linux. Un contenedor empaqueta la aplicación con todas sus dependencias en una imagen portable, garantizando que funciona igual en cualquier entorno.

Kubernetes (2014, Google) orquesta miles de contenedores: los distribuye entre nodos, los reinicia si fallan, los escala según la carga, gestiona el tráfico de red entre ellos. El SO moderno de servidor es cada vez más la base sobre la que corre Kubernetes.

10.2 Sistemas operativos inmutables

El SO arranca desde una imagen de solo lectura verificada. Las actualizaciones reemplazan la imagen completa de forma atómica (se aplica la nueva imagen y se reinicia; si falla, se vuelve a la anterior). Ventajas: no hay "configuration drift", mayor seguridad, reproducibilidad total.

Ejemplos: Fedora CoreOS (diseñado para ejecutar contenedores), Talos Linux (SO para nodos Kubernetes, sin acceso shell), Flatcar Linux, ChromeOS.

10.3 Seguridad avanzada integrada en el SO

10.4 Edge Computing e IoT

Millones de dispositivos (sensores, cámaras, vehículos autónomos) procesan datos localmente en lugar de enviarlos todos a la nube. Necesitan SO ligeros y a menudo con garantías de tiempo real. Sistemas como Zephyr RTOS, FreeRTOS, y versiones mínimas de Linux construidas con Yocto Project están diseñados para estos entornos con RAM de KB y procesadores a MHz.

10.5 Inteligencia Artificial integrada en el SO

10.6 Observabilidad nativa

Los SO modernos incorporan infraestructura de observabilidad de primera clase:
- Logs estructurados: systemd-journald en Linux genera logs estructurados (JSON) consultables con journalctl.
- Métricas del kernel: mediante eBPF se pueden extraer métricas del kernel en tiempo real.
- Trazas distribuidas: herramientas como OpenTelemetry integran el SO en sistemas de observabilidad distribuida.


11. TABLA RESUMEN DE COMPARATIVAS PARA EXAMEN

Concepto A Concepto B Diferencia clave
Proceso Hilo Proceso tiene memoria propia; hilos comparten memoria del proceso. Hilos más ligeros.
Programa Proceso Programa = código estático en disco. Proceso = programa en ejecución con estado dinámico.
Kernel monolítico Microkernel Monolítico: todo en modo kernel, rápido pero un fallo puede tumbar el sistema. Microkernel: solo lo esencial en kernel, más estable pero con mayor overhead de IPC.
Multitarea cooperativa Multitarea preventiva Cooperativa: el proceso cede voluntariamente la CPU; un bug puede bloquear el sistema. Preventiva: el SO puede forzar el cambio; más robusto.
Memoria física Memoria virtual Física: RAM real. Virtual: espacio de direcciones abstracto por proceso, puede superar la RAM.
Paginación Segmentación Paginación: bloques fijos, transparente al programador. Segmentación: bloques variables con significado lógico.
Planificación preventiva No preventiva Preventiva: el SO puede interrumpir cualquier proceso. No preventiva: el proceso ejecuta hasta que cede voluntariamente.
Deadlock Starvation Deadlock: proceso nunca puede avanzar porque espera recursos en ciclo. Starvation: proceso puede avanzar teóricamente pero nunca le toca en la práctica.
BIOS UEFI BIOS: antiguo, limita a 2 TB, sin Secure Boot. UEFI: moderno, soporte GPT, Secure Boot, interfaz gráfica.
MBR GPT MBR: máx 4 particiones, discos hasta 2 TB. GPT: 128 particiones, discos hasta 9 ZB, con redundancia.
VM Contenedor VM virtualiza hardware completo con SO propio. Contenedor comparte kernel del anfitrión, más ligero.
Hipervisor Tipo 1 Hipervisor Tipo 2 Tipo 1: sobre hardware directamente, más eficiente. Tipo 2: sobre SO existente, más fácil pero más overhead.
Linux Windows Linux: open source, CLI-first, muy estable en servidores. Windows: propietario, GUI-first, integración con AD.
CLI GUI CLI: más potente para administración y automatización. GUI: más intuitivo para usuarios no técnicos.
SO propósito general RTOS Propósito general: maximiza rendimiento medio. RTOS: garantiza tiempos de respuesta máximos predecibles.
DAC MAC DAC: el propietario controla los permisos (Unix/Windows). MAC: el sistema impone reglas que los usuarios no pueden cambiar (SELinux).
Autenticación Autorización Autenticación: verifica quién eres. Autorización: determina qué puedes hacer.

12. CONEXIÓN CON LAS PREGUNTAS DEL EXAMEN

Pregunta del examen Concepto de este tema
Q1 — Comandos Linux (pwd, sudo, touch, chmod, kill) Interfaz CLI, shell, llamadas al sistema, gestión de ficheros, permisos, gestión de procesos/señales, autenticación con sudo
Q2 — MFA Gestión de seguridad: autenticación (algo que sabes, tienes, eres), factores de autenticación, TOTP
Q7 — Malware Mecanismos de protección del SO, control de accesos, auditoría
Q8 — NAS y backups Gestión del sistema de archivos, sistemas de archivos en red, tolerancia a fallos
Q9 — Permisos NTFS Sistema de archivos NTFS, permisos DAC, ACLs, herencia de permisos

Fin del Tema 1 — Conceptos de Sistemas Operativos