Sistemas Operativos: Arquitectura, Gestión y Diseño
Visión Abstracta
El Sistema Operativo (SO) es como un Gobierno:
- Hardware (CPU, Memoria, etc.)
- Software (propio S.O.)
- Usuarios (Software de Aplicación).
Visión de Usuario
Muy distinta a la del Sistema Operativo.
- El usuario necesita rapidez de interacción -> Tiempo de Respuesta.
- Se necesita reducir la energía consumida (batería).
Visión del Sistema
Podemos ver un S.O. como un Gestor de Recursos.
- Recurso (CPU, Memoria, Disco, E/S).
- Controla la asignación de recursos y ejecución de programas de usuario.
Objetivo del SO
- Ejecutar programas y facilitar las tareas del usuario.
- Aplicación o programa que siempre se está ejecutando en el computador.
- Este programa, se llama kernel o núcleo de sistema.
- Además, existen los programas del sistema y las aplicaciones de usuario.
Inicio del SO
- Un pequeño programa, BOOTSTRAP.
Secuencia de Arranque
- Se inicia el Bootstrap (ROM/EPROM)
- Busca el Kernel y lo carga en Memoria
- Inicia el SO normalmente.
Eventos del Sistema
- Puede haber una interrupción (HW)
- Una llamada a sistema o System Call (SW)
Organización de la Memoria
Registros – Cache – Memoria principal – Disco magnético – Disco óptico – Cinta magnética
Arquitectura 1
- La mayoría de arquitecturas modernas está basada en Von Neumann.
- Sistemas de Un Procesador (Monoprocesadores)
Arquitectura 2
- Sistemas Multiprocesador: sistemas paralelos.
- Incrementan el rendimiento – Economía de escalabilidad.
- Aumento de fiabilidad – Adoptadas por Windows, MacOS, Linux, Unix.
- Simétricos (Arquitecturas UMA) – SMP
- Asimétricos (Arquitecturas NUMA) – AMP
Arquitectura: Multicore
- Los sistemas Multicore: son un único procesador con múltiples núcleos.
- ◦ Su funcionamiento es similar a SMP.
Arquitectura 3
- Sistemas Clusterizados (CLUSTERS)
- • Ver distintos tipos de Clusters: TOP500: Lista de Supercomputadores y Clusters más rápidos
Multiprogramación
- Aspecto importante en los SO -> multiprogramación
- Incrementa la utilización de la CPU organizando los trabajos.
- La idea es tener una serie de trabajos en memoria simultáneamente.
- La memoria principal pequeña para ubicar todos los programas.
- Multiprogramación: Tiempo compartido o Multitarea.
- El tiempo de respuesta es muy importante.
- Un proceso es un programa almacenado en memoria para luego ejecutarse.
- Estos procesos deben ser gestionados: job scheduling – Swapping
Operaciones en un SO
- Un SO siempre está esperando una interrupción, trap o system call.
- Además, un S.O. administra:
- Gestión de Procesos (creación, eliminación, sincronización).
- Gestión de Memoria (ubicando, eliminando procesos en memoria).
- Gestión de Almacenamiento Masivo (Sistema de Ficheros).
- Caching – Sistema de I/O (Entrada Salida) – Protección y Seguridad
Sistemas Distribuidos
- Son aquellos sistemas heterogéneos que están ubicados en puntos distintos de la red.
Sistemas de Propósito Específico
- Sistemas en Tiempo Real – Sistemas Embebidos – Normalmente están basados en UNIX.
Sistemas Operativos Open Source
- Ofrecen ventajas de desarrollo e investigación – Diseño de productos que pueden ser vendidos. y BSD
Interfaz de SO
- CLI – GUI
Llamadas a Sistema (System Calls)
- Proveen un interface a los servicios del S.O.
- Generalmente, estas rutinas están en C/C++
- Estas rutinas están programadas vía un API (Application Program Interface)
- API: funciones con argumentos para programar.
- Windows: API WIN32
- Linux/UNIX/OSC: API POSIX
Manejo de la Interrupción
- Java está pensado para ejecutarse en todas las plataformas. Con lo que no existen llamadas a Sistemas Directamente. Si no que, existen una API que llama a las funciones en C/C++
- Esto es posible mediante el JNI (Java Native Interface)
- JNI -> reemplaza las funciones actuales de C/C++
Diseño e Implementación del Sistema Operativo
- Objeto de diseño: Usuario o sistema Flexible, eficiente, fiable, sin errores.
- Los requerimientos son distintos para un sistema VxWorks (tiempo real), que para un mainframe IBM (VMS).
- Generalmente los S.O. se implementan en C/C++ (Windows, Linux, MaOS) o en lenguaje ensamblador.
- La eficiencia mejora diseñando mejores algoritmos para:
- Gestión CPU – Gestión Memoria – Gestión E/S
Estructura Simple
- Los niveles de funcionalidad no están separados.
- Las aplicaciones de usuario pueden acceder a rutinas I/O directamente.
- Muy vulnerable a virus o programas mal diseñados. Ejemplo: MS-DOS
Estructura de UNIX
- UNIX inicialmente también estaba limitado
- Separaba la parte del kernel y los programas de usuario.
- Mucho más protegido y seguro.
Estructura en Capas
- Esta estructura divide a la funcionalidad del S.O. en capas.
- La más baja (0) es el HW. La más alta (N) la interfaz de usuario: Facilita el diseño. – Una capa invoca los servicios de otra capa si los necesita.
- Es menos eficiente por el gasto de tiempo de comunicación en capas.
Microkernels
- Fue el S.O. llamado Mach quien popularizó el microkernel.
- Lo que hace el microkernel es proveer la funcionalidad básica en lo que sería un kernel mínimo.
- OSX con Darwin utiliza el microkernel basado en Mach.
- Windows NT/Vista/7/8 también lo utiliza aunque también mezcla otras arquitecturas (monolíticas).
- Actualmente los Sistemas Operativos Modernos utilizan arquitecturas híbridas.
Módulos
- Esta arquitectura se basa en técnicas de Programación Orientada a Objetos. – Diseño modular – Es utilizado por Unix, Solaris, Linux y OSX.
- Existe un kernel y unos módulos que va cargando conforme los va utilizando – La comunicación entre módulos es mucho más ágil que en el enfoque de Capas.
Máquinas Virtuales
- Es un paradigma que se basa en que una máquina base (Host) alberga sistemas operativos cliente (Guest).
- Un Host puede albergar varias instancias: consume RAM y recursos.
- Las Máquinas Virtuales no se afectan unas a otras en términos de seguridad de memoria, etc.
- Se utilizan para entornos de prueba y desarrollo, pero también en producción. – Ejemplos: VMWare, VirtualBox.
- Existen otras alternativas como la Simulación o Paravirtualización (Citrix)
Java
- Es un lenguaje de programación con un JVM (Java Virtual Machine)
- Es un concepto muy parecido a las MVs.
- Java utiliza el JDK (actualmente 8) para el desarrollo.