Es un software que administra el hardware de la computadora. Proporciona un entorno para que el
usuario pueda ejecutar programas de aplicación de manera eficiente (actúa como intermediario entre el usuario y hardware).
El sistema operativo es el programa más íntimamente relacionado con el hardware. En este sentido, podemos verlo como un asignador de recursos. Un sistema informático tiene muchos recursos que pueden ser necesarios para resolver un problema: tiempo de CPU, espacio de memoria, espacio de almacenamiento, dispositivos de E/S, etc. Al enfrentarse a numerosas solicitudes de recursos, el sistema operativo debe decidir cómo asignarlos a programas y usuarios específicos para que pueda operar el sistema informático de manera eficiente.
Para explorar el papel de un sistema operativo en un entorno informático, es importante comprender primero la organización y arquitectura del hardware. Esto incluye:
- CPU (procesador)
- memoria principal
- dispositivos de E/S
- almacenamiento secundario
Una responsabilidad fundamental de un sistema operativo es asignar estos recursos a los programas.
Un sistema de cómputo se puede dividir en cuatro componentes:
- Hardware: proporcionan los recursos informáticos básicos para el sistema (CPU, memoria, periféricos E/S, etc.).
- Sistema operativo:controla el hardware y coordina su uso entre los diversos programas de aplicaciones para los usuarios. Es decir, administra los recursos como el espacio en memoria, tiempo de CPU, entre otros.
- Programas de aplicación: son los programas diseñados para que los usuarios puedan resolver tareas específicas (hojas de cálculo, navegadores web, compiladores, etc.). Estos definen la formas en que los recursos del hardware se utilizan para resolver los problemas informáticos de los usuarios.
- Usuario.
-
¿Qué pasa cuando se enciende una computadora?🔷 1. El firmware arranca el sistema
Cuando se enciende una computadora, lo primero que se ejecuta no es el sistema operativo, sino un programa de bajo nivel (fuertemente integrado con el hardware) muy básico llamado firmware.
Este programa está grabado en un chip de memoria no volátil (por ejemplo, en una memoria ROM o EEPROM). Se llama BIOS (en computadoras tradicionales) o UEFI (en sistemas modernos).Su función es inicializar el hardware: configura los registros de la CPU; activa y prueba la memoria RAM; detecta los controladores de dispositivos (teclado, pantalla, disco, etc.); y ejecuta un chequeo básico.🔷 2. El firmware busca y carga el sistema operativo
La BIOS/UEFI busca en los dispositivos (disco, USB, red, etc.) el cargador de arranque del sistema operativo. Su tarea es encontrar el núcleo (kernel) del sistema operativo y cargarlo en la memoria RAM.🔷 3. Se ejecuta el núcleo del sistema operativo (kernel)
El kernel es el “corazón” del sistema operativo. Una vez cargado en la memoria, toma el control completo del sistema. Se encarga de:
- Administrar el uso del procesador (CPU).
- Gestionar la memoria y los dispositivos de entrada/salida.
- Coordinar procesos y usuarios.
📌 Desde ese momento, la BIOS/UEFI ya no interviene. El control pasa al sistema operativo.🔷 4. Se inician los servicios o programas del sistema (system daemons)
Una vez que el kernel está funcionando:
- Se cargan en memoria una serie de programas llamados demonios del sistema (system daemons).
- Estos no forman parte del núcleo, pero trabajan junto a él.
- Brindan servicios al sistema y a los usuarios.
📌 Se ejecutan en segundo plano, durante todo el tiempo que el sistema está encendido.Resumen del proceso
Cuando una computadora se enciende, lo primero que se ejecuta es un programa de arranque llamado firmware (BIOS), almacenado en una memoria no volátil. Este programa inicializa el hardware y busca el sistema operativo en un dispositivo de almacenamiento. Luego carga el núcleo (kernel) del sistema operativo en la memoria.
Una vez cargado, el kernel toma el control completo de la computadora y activa diversos procesos de fondo llamados daemons, que se encargan de brindar servicios esenciales al sistema y a los usuarios.
GESTIÓN DE RECURSOS
Multiprogramación y Multitarea
Ambos apuntan a cómo el sistema operativo organiza el uso de la CPU entre varios programas, pero tienen diferencias importantes en su funcionamiento y objetivos.
Multitarea (Multitasking)
La multitarea es una evolución de la multiprogramación.
También permite ejecutar varios procesos a la vez, pero con cambios más rápidos y visibles para el usuario.
- La CPU ejecuta un pequeño fragmento (cuanto de tiempo) de un proceso.
- Luego interrumpe ese proceso y pasa a otro, incluso si no estaba esperando.
- Este cambio ocurre muy rápido (cada pocos milisegundos), por lo que da la sensación de que todos los programas se ejecutan al mismo tiempo (aunque en realidad se turnan).
📌 Esto se llama “tiempo compartido”, y es la base de todos los sistemas operativos modernos (Windows, Linux, macOS).Resumen
La multitarea extiende la idea de multiprogramación haciendo que la CPU cambie de proceso rápidamente, incluso si no están esperando, para dar la sensación de ejecución simultánea y mejorar el tiempo de respuesta percibido por el usuario.
Scheduling de la CPU (planifiicador)
El scheduling de la CPU es el mecanismo mediante el cual el sistema operativo decide qué proceso se ejecutará a continuación, cuando hay varios que están listos y esperando para usar la CPU.
Los algoritmos de planificación y estrategia que deciden qué proceso ejecutar en cada momento se implementan dentro del kernel del sistema operativo, ya que solo el núcleo tiene acceso completo a los recursos del sistema y al control de los procesos.En un sistema multiprogramado o multitarea, hay más procesos que CPU disponibles. Por ejemplo:
- Estás escuchando música.
- Usás el navegador web.
- Tenés un programa de descarga en segundo plano.
- Y el antivirus está haciendo un escaneo.
📌 Todos esos procesos quieren usar la CPU. Pero la CPU solo puede ejecutar uno por núcleo a la vez. Entonces, el sistema operativo necesita un mecanismo para decidir qué proceso atender y cuánto tiempo. Esa decisión la toma el scheduler (planificador de la CPU).🔁 ¿Cómo lo hace?
Mediante algoritmos de planificación, que establecen reglas como:
- ¿Ejecutar primero al proceso más corto?
- ¿Dar prioridad al que lleva más tiempo esperando?
¿Repartir el tiempo de forma justa entre todos?
🧠 Además de elegir qué proceso se ejecuta en cada momento, el sistema operativo también debe asegurarse de que los procesos no interfieran entre sí. Eso implica que el SO debe controlar:
- El uso de la memoria (cada proceso tiene su espacio separado).
- El acceso a los archivos y recursos compartidos.
- Los permisos y prioridades.
Multiprogramación
La multiprogramación es una técnica usada por el sistema operativo para mantener siempre ocupada a la CPU.
- El sistema operativo mantiene en memoria varios programas (procesos) al mismo tiempo.
- Eventualmente, cuando uno de los procesos no puede seguir ejecutándose porque está esperando que se complete alguna tarea (por ejemplo, porque está esperando que se complete una operación de entrada/salida como leer del disco), la CPU no se queda esperando.
- En lugar de estar inactiva, la CPU se asigna a otro proceso disponible en memoria.
- Así, la CPU siempre está trabajando, nunca queda inactiva.
📌 Esto mejora la eficiencia del uso de la CPU.Resumen
La multiprogramación permite que varios procesos estén en memoria al mismo tiempo, y el sistema operativo asigna la CPU a otro proceso si el actual queda esperando, para no desperdiciar recursos.
-
Memoria Virtual
La memoria virtual es una técnica usada por los sistemas operativos que consiste en usar espacio del disco como extensión de la RAM para simular que hay más memoria RAM disponible de la que existe físicamente.🧠 ¿Cómo funciona?
- El sistema operativo reserva una parte del almacenamiento secundario (por ejemplo, el disco rígido o SSD) y la usa como si fuera memoria RAM.
- Si un proceso necesita más memoria de la que hay disponible en la RAM, parte de sus datos se "paginan" al disco (swap).
- Cuando se vuelven a necesitar, se traen nuevamente a la memoria física.
🎯 ¿Para qué sirve?
- Permite ejecutar programas más grandes que la memoria RAM real disponible.
- Permite que varios programas usen más memoria en total sin interferirse entre sí.
📌 Ejemplo:
- Tenés 4 GB de RAM.
- Abrís un navegador con muchas pestañas, una app de edición de video y un juego.
- El sistema usa memoria virtual para "sacar" partes de estos programas de la RAM y guardarlas temporalmente en el disco, permitiendo que todo siga funcionando.
Funcionamiento en modo dual
Es un mecanismo fundamental en todos los sistemas operativos modernos para garantizar protección, estabilidad y seguridad.El funcionamiento en modo dual separa el código que ejecuta el sistema operativo (modo kernel) del código que ejecutan los programas del usuario (modo usuario). Esta separación protege el sistema de errores o accesos maliciosos. Un bit de modo dentro de la CPU indica el estado actual (usuario o kernel), y cambia automáticamente cuando un programa hace una llamada al sistema (system call). El sistema operativo toma el control, ejecuta la operación en modo kernel en nombre del programa de usuario y luego vuelve al modo usuario para continuar con el programa.Significa que el procesador (CPU) puede trabajar en dos modos distintos, con diferentes niveles de acceso a los recursos del sistema:🟦 1. Modo usuario (user mode)
- Es el modo en el que se ejecutan los programas normales del usuario: aplicaciones, juegos, navegadores, etc.
- En este modo, el proceso no puede acceder directamente al hardware, ni modificar zonas críticas del sistema operativo.
- Las aplicaciones en modo de usuario solo pueden interactuar con hardware y realizar operaciones privilegiadas mediante una llamada al sistema (system call), que se transmite mediante la API del sistema operativo.
🟦 2. Modo kernel (kernel mode, modo privilegiado)
- Es el modo en el que se ejecuta el núcleo del sistema operativo (kernel) y sus componentes críticos.
- Tiene acceso total al hardware y a todos los recursos del sistema.
📌 ¿Para qué sirve esta separación?
- Para que los programas de usuario no puedan dañar o interferir con el sistema.
- Para que haya un control claro sobre qué código puede hacer operaciones críticas.
- Para proteger la estabilidad y seguridad del sistema.
🔁 ¿Cómo se cambia de modo usuario a modo kernel?
A través de una llamada al sistema (system call). Es una especie de “puerta segura” por la que un programa de usuario puede pedirle al sistema operativo que realice tareas reservadas o privilegiadas por él.Por ejemplo:
- El proceso de usuario se está ejecutando en modo usuario (bit = 1).
- Llama a una función del sistema operativo → esto es una system call.
- El sistema operativo toma el control y entra en modo kernel (bit = 0).
- El sistema operativo ejecuta la operación solicitada.
- Al terminar, devuelve el control al proceso de usuario, y el bit vuelve a 1 → se retorna al modo usuario.
⚙️ ¿Qué es el bit de modo?
Es un bit especial dentro del procesador que indica en qué modo se está trabajando.
- Si el bit = 1 → modo usuario.
- Si el bit = 0 → modo kernel.
El cambio de valor del bit lo realiza el sistema operativo cuando se produce una interrupción o una llamada al sistema.
Gestión de procesos
Un proceso es un programa en ejecución.No basta con tener el código de un programa, ese código debe estar cargado en memoria y siendo ejecutado por la CPU para considerarse un proceso.Un proceso necesita varios recursos para funcionar:
- Tiempo de CPU (para ejecutar instrucciones).
- Memoria (para código, datos y variables).
- Dispositivos de entrada/salida (como teclado o disco)
Además, cada proceso tiene:
- Un contador de programa (program counter): indica qué instrucción se ejecutará a continuación.
- Un estado (ejecutando, esperando, listo, suspendido, etc.).
📊 Tipos de procesos
- Procesos del sistema operativo (ejecutan código del SO).
- Procesos de usuario (ejecutan aplicaciones del usuario).
📌 Un sistema moderno contiene muchos procesos simultáneamente, algunos visibles para el usuario, otros en segundo plano.✅ ¿Qué hace el sistema operativo con los procesos?
El sistema operativo (SO) es responsable de gestionar todos los procesos que se están ejecutando. Esto incluye:
- Creación y eliminación de procesos
- Planificación (scheduling)
- Suspensión y reanudación
- Sincronización: Asegura que los procesos que comparten recursos no interfieran entre sí.
- Comunicación entre procesos
Esta gestión permite que muchos procesos se ejecuten concurrentemente o en paralelo, optimizando el uso del sistema.
🔸 Multiplexación: En un solo núcleo, la CPU se turna entre procesos, cambiando muy rápido (multitarea).
🔸 Ejecución en paralelo: En procesadores multinúcleo, diferentes núcleos ejecutan procesos distintos al mismo tiempo.
Gestión de memoria principal
La memoria principal (también llamada RAM) es el espacio donde se cargan los programas y datos mientras se están ejecutando.
- Está compuesta por una gran cantidad de bytes.
- Cada byte tiene una dirección única, lo que permite acceder a cualquier parte de la memoria.
- La CPU puede leer y escribir directamente en la RAM de forma muy rápida.
- Es una memoria volátil: se borra al apagar el sistema.
¿Por qué es necesaria la gestión de memoria?
- Hay muchos procesos cargados al mismo tiempo (multiprogramación).
- Todos ellos comparten la misma memoria física.
- Es necesario organizar, repartir y proteger el uso de la memoria para que ningún proceso interfiera con otro; se aproveche la memoria de forma eficiente y se puedan cargar nuevos programas y liberar los que ya terminaron.
El sistema operativo (SO) tiene tres grandes responsabilidades:
- Seguimiento del uso de la memoria: el SO sabe qué partes están ocupadas y por qué proceso. También sabe qué partes están libres y disponibles para asignar.
- Asignación y desasignación: cuando un proceso se crea, el SO le asigna espacio en memoria. Cuando termina, el SO libera esa memoria, que pasa a estar disponible para otro proceso.
- Decisión sobre qué mover dentro y fuera de la memoria: si la memoria física no alcanza, el SO puede mover parte de los datos al disco (memoria virtual). Esto permite ejecutar programas más grandes que la RAM, aunque con menor velocidad. También puede mover procesos inactivos fuera de la memoria para hacer espacio a los activos.
Gestión del sistema de archivos
El sistema operativo proporciona una vista lógica y uniforme del almacenamiento de información. El sistema operativo se abstrae de las propiedades físicas de sus dispositivos de almacenamiento para definir una unidad de almacenamiento lógica, el archivo (file).
La gestión de archivos es uno de los componentes más visibles de un sistema operativo
Un sistema de archivos es el componente del sistema operativo que se encarga de gestionar, organizar, almacenar y recuperar la información alojada en los dispositivos de almacenamiento (como discos duros, SSD, pendrives, etc.).El sistema operativo se abstrae del hardware (es decir, no necesita saber cómo funciona físicamente el disco), y trabaja con una unidad lógica llamada archivo (file).📌 ¿Qué es un archivo?
Un archivo es una unidad lógica de almacenamiento. Representa datos o programas. Puede contener texto, imágenes, programas ejecutables, archivos multimedia y datos binarios.
Los archivos pueden tener formato libre (como un .txt) o un formato estructurado (como una base de datos o un PDF).
Los archivos permiten guardar información de manera persistente (no se pierde al apagar la computadora). También facilitan la organización de datos.✅ ¿Qué hace el sistema operativo respecto a los archivos?
El sistema operativo implementa el concepto de archivo sobre los dispositivos físicos.
Su objetivo es hacer que el almacenamiento sea útil, organizado y seguro.
- Creación, manipulación y eliminación de archivos y directorios
- Controla en qué parte del disco se guarda cada archivo.
- Facilita la creación de copias de seguridad en medios no volátiles (como discos externos).
Gestión de almacenamiento masivo
El almacenamiento masivo incluye todos los dispositivos que guardan datos de manera permanente, es decir, no volátil (la información no se borra al apagar el equipo).
🔹 Se divide en dos grandes tipos:
- Almacenamiento secundario:
Principal medio de trabajo del sistema (programas, archivos del usuario). Ejemplos: discos duros (HDD), unidades de estado sólido (SSD / NVM).
- Almacenamiento terciario:
Más lento, mayor capacidad, más barato, usado para copias de seguridad o archivos poco usados. Ejemplos: cintas magnéticas, CDs, DVDs, Blu-ray.
🧠 ¿Qué hace el sistema operativo con el almacenamiento?
El sistema operativo es responsable de gestionar los dispositivos de almacenamiento, y de organizar el uso del espacio en ellos.
- Montaje y desmontaje: Activa y desactiva el uso de un dispositivo de almacenamiento (ej: conectar un pendrive).
- Gestión del espacio libre: Controla qué partes del disco están disponibles y cuáles ocupadas.
- Asignación de almacenamiento: Decide dónde guardar cada archivo (en qué sectores del disco).
- Particionado (fraccionamiento): Divide un disco en secciones lógicas (particiones) para tener múltiples sistemas o separar datos.
- Protección: Asegura que los usuarios no accedan a archivos sin permisos, o que procesos no corrompan información.
Gestión de caché
La caché es un almacenamiento temporal de alta velocidad que guarda los datos más usados recientemente o con más probabilidad de ser reutilizados por la CPU.
El objetivo es acelerar el acceso a los datos y reducir el tiempo de espera al evitar acceder a memorias más lentas (como RAM o disco).🧠 ¿Cómo funciona el almacenamiento en caché (caching)?
Cuando un programa necesita un dato:
- Primero verifica si está en la caché.
- Si está (éxito o cache hit), se lee directamente desde allí → más rápido.
- Si no está (cache miss), se lo busca en la memoria principal o el disco, y se guarda una copia en la caché para la próxima vez.
Este mecanismo se hace automáticamente por el hardware (en el caso de la caché de CPU) o por software (en algunos niveles de sistema operativo o aplicaciones).🔧 Gestión del caché
Dado que la caché tiene un tamaño limitado, el sistema necesita decidir qué datos guardar y cuándo reemplazarlos. Para esto se usan algoritmos de reemplazo y asignación.🔁 ¿Quién gestiona el movimiento de datos?
- De la caché a la CPU: generalmente lo hace el hardware directamente.
Del disco a la RAM (memoria principal): lo maneja el sistema operativo.
Esto crea una estructura jerárquica donde los datos pueden estar replicados en diferentes niveles del sistema al mismo tiempo.🧩 Problemas posibles: coherencia de caché
- En un entorno multitarea, donde la CPU se alterna entre varios procesos, se debe tener mucho cuidado para garantizar que, si varios procesos desean acceder a un valor, cada uno de estos procesos obtendrá el valor actualizado más reciente.
- En sistemas multiprocesador, donde cada núcleo tiene su propia caché, puede suceder que un valor se actualice en una caché, pero las otras cachés no se enteren de ese cambio. Esto se llama problema de coherencia de caché.
🔹 ¿Cómo se resuelve?
Se usan protocolos de coherencia (como MESI) implementados por el hardware, que garantizan que todas las cachés estén sincronizadas.
Estructura de datos
Una estructura de datos es una forma organizada de almacenar y administrar información para que pueda ser accedida y manipulada eficientemente dentro de un sistema operativo (SSOO). Según el tipo de dato, su acceso y tamaño, se selecciona la estructura más adecuada (como vectores, listas, pilas, colas, árboles o grafos). Su correcta elección permite que el sistema operativo sea eficiente, seguro y confiable en la gestión de memoria, procesos,
- Se utiliza para representar datos y establecer relaciones entre ellos.
- Son fundamentales para el diseño de algoritmos eficientes.
- Se clasifican según su tamaño (estáticas o dinámicas) y su tipo de acceso (indexado o secuencial).
📦 Clasificación general
- Vectores y matrices → Tamaño Estático → Acceso Indexado
- Listas, pilas, colas, árboles, grafos→ Tamaño Dinámico → Acceso Secuncial
🧮 1. Vectores y matrices
🔹 Vector (array unidimensional) → Es una colección ordenada e indexada de elementos (cada elemento se accede por su posición). La ocupación de memoria a lo largo de la ejecución del programa es fija, es decir que es una estructura de datos estática.
Uso: almacenamiento de datos homogéneos como tablas, buffers o registros temporales.🔹 Matriz (array bidimensional) → Similar al vector, pero en dos dimensiones. Se usa, por ejemplo, en representación de memoria principal.🔗 2. Listas enlazadas
Es una estructura de datos dinámica y secuencial. Cada elemento (nodo) contiene un valor y una referencia al siguiente. Son útiles cuando el tamaño de los datos varía.
Tipos de listas:
- Lista enlazada individualmente: cada elemento o nodo apunta al siguiente (sucesor).
- Lista doblemente enlazada: cada elemento o nodo apunta al anterior y al siguiente (predecesor y sucesor).
- Lista circularmente enlazada: el último elemento o nodo apunta al primero.
Las listas con frecuencia se utilizan para construir o implementar otras estructuras de datos más potentes, como pilas y colas.📚 3. Pilas (stacks)
Es una estructura de datos ordenada de acceso secuencial que utiliza el principio LIFO (último en entrar, primero en salir) para agregar y eliminar elementos. Esto que significa que el último elemento que se coloca en una pila es el primero que se elimina o extrae.
La cantidad de datos puede variar, por lo tanto es una estructura dinámica. Las operaciones para insertar y quitar elementos de una pila se conocen como empujar (push) y sacar (pop), respectivamente.
Uso en el sistema operativo: Manejo de llamadas a funciones y almacenamiento de parámetros, variables locales y direcciones de retorno.🏁 4. Colas (queues)
Es una estructura de datos ordenada de acceso secuencial que utiliza el principio FIFO (primero en entrar, primero en salir). Los elementos se eliminan o extraen de una cola en el orden en que se insertaron.
La cantidad de datos puede variar, por lo tanto es una estructura dinámica.
Las colas también son bastante comunes en los SSOO, los trabajos que se envían a una impresora generalmente se imprimen en el orden en que se enviaron (cola de trabajos para impresión).
Las tareas que esperan ser ejecutadas en una CPU a menudo se organizan en colas (planificación de procesos).🌲 5. Árboles
Un árbol es una estructura de datos de acceso secuencial que se puede utilizar para representar datos jerárquicamente a través de relaciones padre-hijo.
La cantidad de datos puede variar, por lo tanto es una estructura dinámica.
Existen distintos tipos de árbol:
- Árbol general: un elemento o no padre puede tener un número ilimitado de nodos hijos.
- Árbol binario: un elemento o nodo padre puede tener como máximo dos hijos.
- Árbol de búsqueda binaria (BST): Valor del nodo hijo izquierdo ≤ Valor del nodo padre ≤ Valor del nodo hijo derecho. Permite búsquedas rápidas si está balanceado.
El camino es la secuencia de nodos desde la raíz hasta un nodo hoja.
🔗 6. Grafos
Un grafo es una estructura de datos de acceso secuencial que representa relaciones entre elementos de un conjunto. Permite representar relaciones complejas entre elementos.
La cantidad de datos puede variar, por lo tanto es una estructura dinámica.
A diferencia de árboles, en un grafo pueden existir mas de un camino definido entre dos nodos.Tipos de grafos:
- Dirigido / no dirigido: si los caminos tienen dirección o no.
- Acíclico / con ciclos: si hay o no ciclos.
- Ponderado: si los caminos tienen un valor asociado.
- Conexo: si todos los nodos están conectados de alguna forma.
Uso en SSOO: Representación de redes y rutas.