Estructura de un Sistema Operativo
¿Dónde vive el Sistema Operativo?
Sistema Operativo ES software
Sistema Operativo habla con el hardware
El Sistema Operativo es nuestro servidor más importante
- Nos protege de los detalles del hardware
- ¿Un core, dos core?, ¿4GB RAM?, ¿disco SSD?, … úselo no más, yo me encargo
- Nos permite compartir recursos con otros programas
- ¿Quiere navegar, tocar música, jugar WoW, compilar su tarea, todo al mismo tiempo? No se preocupe
- Nos ofrece servicios para hacer más cómodo el uso del hardware
- Escritura y lectura de disco, envío de mensajes por red, acceso a su pendrive USB, y todo eso … con una interfaz gráfica
Nos permite usar el computador 😃
¿Como no querer/estudiar a nuestro sistema operativo?
¿Qué esperamos de un sistema operativo?
¡TODO lo bueno!
- Que sea confiable (reliable)
- "Que no se caiga/bloquee/cuelgue"
- Que mis programas ejecuten rápidamente
- "Para eso tengo mis 8 core y mis 128GB RAM"
- "Así puedo jugar, compilar, ver películas, etc. al mismo tiempo"
- Que no gaste todos los recursos (CPU, memoria, disco)
- "Este Windows/Linux/MacOSX cada vez consume más"
- Que mis datos estén seguros: que no me hackeen
- Que mis programas sigan funcionando después de una actualización
- Que me permita usar el computador (que no me moleste)
El sistema operativo es un software complejo
Debe cumplir varios roles
- Debe ser un administrador de recursos
- ¿A quién le toca ejecutar? ¿Qué recursos necesita?
- ¿Qué CPU uso? ¿En qué disco escribo?
- Sistema Operativo multiplexa recursos escasos entre múltiples usuarios
- Debe ser capaz de proteger los recursos
- "No tiene permisos para leer/escribir esos archivos"
- "No intente leer la memoria de otro proceso"
- "¿Quién es este usuario?"
- Debe ser capaz de abstraernos de los detalles del hardware
- Permite que el sistema se vea como una máquina única
- ¿AMD, Intel, Samsung, Seagate?, no importa, aquí tiene una máquina con: CPU, memoria y disco.
- Provee una interfaz para poder usar apropiadamente el hardware
- Sistema Operativo virtualiza recursos para hacernos creer que hay más
El sistema operativo es como el gobierno … no sirve para nada por sí solo …
… pero es fundamental para que podamos usar programas
El sistema operativo es un software complejo
¿Qué hay dentro de un sistema operativo?
- Administración de procesos
- Manejo de memoria
- Sistemas de archivos
- Protección y seguridad
- Control de I/O
- Manejo de errores
- Comunicación inter-procesos
- Contabilidad / logging
- Controladores (drivers)
- etc …
Programas utilizan servicios del sistema operativo. ¿Cómo los invocan?
El sistema operativo es un software complejo
¿Cómo se invocan los servicios del sistema operativo?
Sistema operativo provee una interfaz de llamadas al sistema (syscalls)
- Cada vez que un programa desea solicitar algo al sistema operativo, debe invocar una syscall
- "Por favor, sistema operativo, haz esto por mi"
- Cada sistema operativo puede proveer un conjunto distinto de syscalls
- Sistemas operativos proveen bibliotecas (libraries) en algún lenguaje de programación (C) para invocar syscalls.
Sin embargo, cuando interactuamos con el computador no escribimos syscalls
El sistema operativo es un software complejo
¿Cómo interactuamos con el sistema operativo?
Sistema operativo provee interfaces de usuario (user interface) que enmascara syscalls
- Ofrecen un entorno más "amigable" para usar el computador
- ¿Son parte del sistema operativo?
Distintas maneras de interactuar con el sistema operativo
- Interfaces gráficas: GUI (Graphical User Interface)
- Intérprete de comandos (Command Line)
- Batch (lotes): secuencias de comandos no-interactivas
El sistema operativo es un software complejo
Interfaces gráficas: GUI
El sistema operativo es un software complejo
Intérprete de comandos / linea de comandos / command line
menos preciso: shell, terminal, consola, xterm, prompt
- UNIX/Linux/MacOSX:
sh
, csh
, tcsh
, ksh
, bash
, zsh
- MS-DOS/Windows:
COMMAND.COM
, cmd.exe
, PowerShell
El sistema operativo es un software complejo
Intérprete de comandos / linea de comandos / command line
menos preciso: shell, terminal, consola, xterm, prompt
- Solicitar comando/instrucción al usuario y ejecutarlo
prompt comando [parametros]
Command Prompt (símbolo del sistema)
- Indica que el sistema está listo para recibir un comando
- Usualmente un texto terminado en
$, %, #, :, >
cruz$ ls
jabaier@grima$ cp clase-01.tex backup/
jnavon@www[15:35]:> rm tareaSistOp.*
dietr1ch@nb# ~/SO/Tareas
ls -d */ | parallel --tag 'cd {} && make'
El sistema operativo es un software complejo
El kernel (núcleo, supervisor)
El código fundamental del sistema operativo.
- Es software
- Suele ser lo más pequeño posible (o no)
Tiene completo control sobre el sistema (hardware)
- Es el único programa que ejecuta en un modo privilegiado
- También conocido como modo monitor, modo kernel, modo sistema
- Todo lo que no es parte del kernel, ejecuta en modo usuario
Sistema operativo incluye herramientas (programas) que facilitan la labor del kernel, pero que no son fundamentales
Sistema Operativo = Kernel + Programas del Sistema
El sistema operativo es un software complejo
¿De qué tamaño es todo esto?
- MacOSX (Tiger, 2005): \( \sim 86 \times 10^6 \) líneas de código
- Windows 10: \( \sim 50\times 10^6 \) líneas de código
- Linux 4.14: \( \sim 20\times 10^6 \) líneas de código
- Version 1.0.0 (Marzo 1994) tenía 176250 líneas
- Kernel Linux está en archivo
vmlinuz
(Virtual Memory LINUx gZip)
- ChromeOS: \( 17 \times 10^6 \) líneas de código
- MINIX 3: \( \sim 12000 \) líneas de código
El sistema operativo es un software complejo
A veces fallan ...
Errores y vulnerabilidades pueden deberse a una combinación entre el hardware y el sistema operativo
- O en las herramientas del kernel