Gestor de Arranque
Un gestor de arranque es un programa que toma el control de la máquina nada más conectarse y una vez que el hardware ha terminado las verificaciones de memoria y dispositivos conectados. Cuando el gestor de arranque toma el control, puede solicitar al usuario información necesaria sobre qué sistema cargar o cómo cargarlo.
En este caso, como gestor de arranque tenemos LILO (Linux Loader). Este programa instala el gestor de arranque, que permite que en un mismo equipo coexistan distintos sistemas operativos, de entre los cuales podremos seleccionar uno cuando arranquemos el sistema.
Memoria ROM
La memoria ROM (read-only memory) o memoria de sólo lectura, es la memoria que se utiliza para almacenar los programas que ponen en marcha el ordenador y realizan los diagnósticos, como por ejemplo la BIOS (Basic Input/Output System), un componente esencial que se usa para controlar el hardware.
A principios de los 80, los ordenadores domésticos venían con su sistema operativo almacenado en ROM, ya que no había otra alternativa razonable. Actualmente, los sistemas operativos en general ya no van en ROM; sin embargo, los ordenadores pueden dejar algunos de sus programas en la memoria ROM, pero incluso en este caso, es más frecuente que vaya en memoria flash. Los teléfonos móviles y los asistentes personales digitales (PDA) suelen tener programas en memoria ROM (o por lo menos en memoria flash).
EFI
Básicamente, EFiX consiste en un dongle USB que lleva en su interior un sistema que simula la EFI de un Mac, junto a un gestor de arranque que permite iniciar el Mac OS X. Al simular el hardware, ya no deberemos recurrir a la substitución de librerías y, por lo tanto, dejaremos de tener que aplicar complicados parches ni a descargar imágenes manipuladas de los DVD’s del sistema operativo.
La instalación se realizará desde el mismo DVD original de Apple, y una vez instalado no será necesario realizar ningún otro paso. Esto tiene dos ventajas inmediatas: por un lado aumenta la estabilidad y por el otro puede actualizarse el sistema sin tener que recurrir también a actualizaciones manipuladas ex profeso.
Android
Android es un sistema operativo orientado a dispositivos móviles basado en una versión modificada del núcleo Linux. Inicialmente fue desarrollado por Android Inc., compañía que fue comprada después por Google, y en la actualidad lo desarrollan los miembros de la Open Handset Alliance (liderada por Google).
Esta plataforma permite el desarrollo de aplicaciones por terceros a través del SDK, proporcionada por el mismo Google, y mediante el lenguaje de programación Java. Una alternativa es el uso del NDK (Native Development Kit) de Google para emplear el lenguaje de programación C.
Windows CE
Windows CE es el sistema operativo de Microsoft incrustado modular de tiempo real para dispositivos móviles de 32 bits inteligentes y conectados.
Para programar una aplicación Windows CE para HPC es simple. Cualquier persona que tenga experiencia en desarrollo de programas en C con Win32 API puede desarrollar una aplicación en un abrir y cerrar de ojos. Los requisitos son: Visual C++ para PC, Visual C++ para Windows CE (que en realidad es un agregado para soportar las nuevas plataformas MIPS y SH3) y las clases MFC para Windows CE.
Windows CE consume pocas cantidades de RAM. Todos los componentes de Windows CE se pueden ejecutar en ROM, reduciendo la necesidad de RAM. Además, en este no se requiere flash memory o una unidad de disco (aunque ambos son soportados). Es independiente del hardware del sistema. Windows CE trabaja en una variedad de microprocesadores de 32 bits y no requiere una arquitectura de hardware particular.
Coreboot
CoreBoot (anteriormente LinuxBios) es un proyecto con una trayectoria de muchos años, pero dada la complejidad y las dificultades con que se encuentra, sus frutos van saliendo poco a poco.
Su objetivo es reemplazar el firmware propietario que se encuentra en la memoria BIOS de nuestros equipos por uno basado en Linux. ¿Por qué tener una BIOS propietaria y con un diseño arcaico, pudiendo tener algo libre y mucho más eficiente?
No en vano, CoreBoot es capaz de trabajar en modo de 32 bits y arrancar un SO Linux dejándonos con el shell en muy pocos segundos desde que damos corriente al ordenador. A fin de cuentas, una BIOS propietaria tiene que cargar unos drivers que luego el SO tendrá que volver a cargar. ¿Por qué no hacer que la BIOS y el SO utilicen los mismos drivers, para no repetir la tarea dos veces? Quizás en el caso de usar Windows el resultado no sea tan visible, pero aun así habremos logrado un cierto incremento en la velocidad de inicio.
Por desgracia, pocas placas base están soportadas actualmente por LinuxBios, ya que para variar, la mayoría de los fabricantes son reacios a hacer públicas las especificaciones de sus productos. En la página de LinuxBios podemos encontrar documentación y un listado de placas y chipsets soportados. Por último, mencionar que ya han conseguido instalar LinuxBios + TinyX con shell BusyBox en una flash de 2 MB, logrando tener un entorno X-Window en 6 segundos desde que se enciende el ordenador.
Estructuras del SO
Monolítica
Es la estructura de los primeros SO, construidos fundamentalmente por un solo programa compuesto por una serie de subrutinas enlazadas, de forma que cada rutina puede llamar a cualquier otra.
Características:
- Construcción del programa final en base a módulos compilados de forma separada que se unen a través de un linkador/enlazador.
- Se carece de protecciones y privilegios.
- Eran sistemas rápidos y eficientes en su ejecución y su gestión.
Jerárquica
Dividir el SO en diferentes partes autónomas (realizan el mismo proceso), de forma que cada una de ellas estuviera perfectamente definida y permitiera un claro interfaz con el resto de elementos.
Características:
- Planificación del procesador (decidir para cada caso qué política usaremos).
- Gestión de memoria (el SO decide si la memoria la usa monolítica, o trabaja con memoria caché, etc.).
- Controlador, consola u operador y operaciones de entrada/salida.
- Gestión de la información o archivos.
Máquina virtual
SO que muestra una máquina idéntica a la máquina real subyacente, aunque no lo es, porque la máquina virtual ofrece prestaciones que no puede ofrecer la máquina real, y protege a la máquina real de posibles malos usos.
SO cliente-servidor
Presenta grandes diferencias en cuanto a la forma de distribuir los trabajos. El núcleo tiene la función de establecer la comunicación entre clientes y servidores. Los procesos pueden ser tanto clientes como servidores, así como un cliente puede ser cliente de otro y servidor de un tercero.
Servicios que debe proporcionar el SO
- Ejecución de programas.
- Permitir operaciones de entrada/salida.
- Gestión de archivos, es decir, fácil acceso y organización.
- Asignación de recursos: Se han de proveer mecanismos de solución de conflictos cuando varios procesos o usuarios están compitiendo por el mismo recurso. Cuando están cargados en memoria y se tienen que ejecutar, hay que sacar resultados. Si hay dos usuarios que quieren usar un archivo, se establece una prioridad (circulación de vehículos => semáforos).
- Contabilidad: control de tiempos de utilización de recursos por los usuarios.
- Protección: todo SO debe ofrecer protección sobre acciones no deseadas.
Llamadas al SO (casos)
Terminación normal
Esta devuelve el control al usuario cuyo proceso haya terminado a través del intérprete de comandos.
Terminación anormal
Cuando aparece un error durante la ejecución de un programa, éste se da por terminado, devolviendo el control al intérprete de comandos, que indicará la situación del error o el tipo de error.
Peticiones de estado
Una petición de estado devuelve el control del programa con la información deseada del programa.
Petición de recursos
Todo aquel programa que le pida al SO recursos específicos (HDD, impresora, todo dispositivo que tengas que montar, etc.).
Peticiones de entrada/salida
Funcionan como la petición de recursos.
Gestión de excepciones
Excepción
Suceso especial que merece la atención del CPU.
Tipos
Fallos de Hardware
Parte sólida/mantenimiento máquina (eléctrico).
Fallos de Software
División por 0. Cuando el SO detecta un error de “0 divide” da por finalizada la sesión, se lo comunica al usuario, vuelve a su PROM liberando la memoria.
Entrada de datos incorrectos
Al introducir un dato erróneo, se vuelve a pedir el dato necesario.
- Controlar el intento de acceso a archivo protegido con información restringida.
- Controlar intento de ejecución de una instrucción no permitida.
- Controlar eventos anómalos: evento para el cual no tiene respuesta el SO.
Qué son estos eventos anómalos: normalmente se denominan excepciones.
Hay tres categorías:
- Errores catastróficos: Imposibilitan el funcionamiento del sistema y no hay modo de recuperarlo. Hay que reiniciar.
- Error no recuperable: No afecta al sistema sino al proceso que se está ejecutando.
- Errores recuperables: Afectan a los procesos no al sistema operativo, son aquellos en los cuales se produce un error que con ciertos ajustes permite la continuidad de la ejecución.
Las protecciones
Todo sistema operativo tiene que tener una serie de protecciones en los puntos clave de su funcionamiento.
¿Por qué tiene que haber protecciones?
- Tiene que tener en cuenta que los programas que va a ejecutar no están exentos de errores.
- Hay usuarios con malas intenciones… El sistema tiene que estar preparado para poder contrarestar.
Tipos de protección
Protección de entrada/salida
Todos los S.O. cuentan con rutinas de entrada/salida, se denominan drivers y entre otras cosas controlan el flujo adecuado de datos y el tipo de los mismos, devolviendo el control al sistema operativo en caso de un error.
Protección de la memoria
Cada proceso tiene una zona de memoria asignada para el tratamiento de sus datos, llamada zona de direccionamiento y no puede acceder a otras zonas asignadas al SO. Para evitar el acceso a otras zonas existen los registros frontera que indican el límite de memoria asignado a cada proceso.
Protección del procesador
Todos los procesadores tienen un timeout para evitar los bucles infinitos.
Los Procesos
Un proceso es un conjunto de rutinas cuya misión es gestionar el procesador, la memoria, entradas y salidas, y resto de recursos disponibles.
Por definición, un proceso es un programa en ejecución junto al entorno asociado.
PCB (Process Control Block)
Bloque control de procesos, es una matriz en el cual están registrados por un lado el proceso, la dirección de memoria donde se ejecuta y los recursos necesarios para su ejecución, así como el estado del proceso.
Los objetivos son:
- Localización de la información del proceso por parte del SO.
- Mantener registrados los datos del proceso, en caso de tener que suspender temporalmente su ejecución o tener que reanudarla.
Información que contiene el PCB
- Estado del proceso: los procesos pueden estar activos, inactivos, stand by o zombies.
- Activo: Aquel que se está ejecutando en este momento.
- Inactivo: proceso que no está en tiempo de ejecución pero está preparado para ejecutarse.
- Stand by: proceso activo que está aletargado en espera de liberación de recursos que están ocupados. (impresora en espera)
- Zombies: Es un proceso en el cual se ha perdido la dirección de memoria donde está el proceso, está cargado en memoria pero no puede ejecutarse por algún tipo de error.
- Estadísticas de uso del procesador y ocupación de recursos.
- Ocupación de memoria interna y externa.
- Recursos en uso. Es decir, qué unidades de entrada y salida necesita, para evitar colocar todos los recursos que necesita a la vez.
- Archivos en uso. (archivos del SO)
- Privilegios.
Estado de los procesos
Los bloques de control de proceso “PCB” se almacenan en colas, cada una de las cuales representan un estado particular de los procesos. Las colas están por tipos, stand by, activos, etc…
Los estados de los procesos se pueden dividir en activos o inactivos:
Activos
Son aquellos procesos que compiten por el procesador o están en condiciones de hacerlo. Hay tres estados:
- Ejecución: Cuando un proceso tiene el control del procesador. Se está ejecutando.
- Preparado: Aquellos procesos que están dispuestos para ser ejecutados pero no están en ejecución. Normalmente se debe a que hay procesos con prioridad más alta.
- Bloqueado: Son procesos que no pueden ejecutarse en este momento porque no están disponibles los recursos que necesita.
Inactivos
Son aquellos que no pueden competir por el control del procesador. Procesos que no han terminado el trabajo pero que pueden volver a activarse desde el punto en que se quedaron sin tener que volver a ejecutarse desde el principio.
Causas para suspender un proceso
La más habitual es una avería física o humana.
Hay dos casos en los cuales el proceso se aparca en memoria a la espera de volver a ser activado:
- Proceso suspendido o bloqueado: es un proceso suspendido en espera de un evento sin que hayan desaparecido las causas de su bloqueo.
- Proceso suspendido o preparado: Proceso que no tiene causa para estar bloqueado pero que no lo ponen activo. Se convierte en un proceso zombie.
Un quantum es una unidad necesaria para realizar un trabajo. (medida universal para cuantificar un proceso).
Operaciones sobre el proceso
La primera operación siempre será crear el proceso.
Un proceso = (programa + datos + argumentos)
Una vez creado el proceso se coloca a la cola del PCB -> (Bloque control de procesos). Una especie de vector dinámico donde se colocan los procesos para irlos cogiendo y ejecutándolos. Tiene prioridades.
La creación de procesos puede ser de dos tipos:
Jerárquica
Cada proceso que se crea es hijo de un proceso creador heredando el entorno de ejecución del padre.
Cuando tú lo invocas te crea el proceso hijo y le pasa los parámetros actuales, si lo vuelven a llamar crea otro proceso hijo.
Los procesos hijos van diferenciados por la dirección de memoria donde están colocados.
Un objeto se crea en tiempo de invocación cuando yo lo pido no cuando yo compilo. Crea el objeto hijo en tiempo de ejecución y cuando acaba de usarlo lo destruye, optimiza la memoria.
No jerárquico
Procesos creados por otros procesos que se ejecutan de forma independiente al proceso creador y con condiciones del sistema operativo diferente.
Eliminar proceso
Todo SO elimina procesos que han cumplido su función o están inactivos.
Suspender un proceso
El SO tiene la facultad de poder suspender un proceso. Un proceso es suspendido por mal funcionamiento o por sobrecarga del sistema.
Lo vuelve a poner activo si se solucionan las causas que han hecho suspender el proceso. (ejemplo impresora)
Cambiar prioridad del proceso
Baja o sube la prioridad de los procesos. No tiene sentido para SO como Windows, etc… Estamos hablando de SO grandes.
Temporizar ejecución del proceso
Tiene un tiempo de reloj que dispara la ejecución del proceso.
Despertar un proceso
Cuando un proceso no cabe en el PCB porque hay sobrecarga del sistema y el recurso al que tiene acceso no está disponible, se pone en suspenso. En el momento en que el recurso necesario está disponible, ¡lo despierta!.
Clasificación de las prioridades
Prioridades asignadas por el sistema operativo
Las asigna el SO en el momento de la creación del proceso.
Prioridades asignadas por el propietario
El usuario puede cambiar la prioridad de algún proceso.
Procesos estáticos
Son aquellos procesos que no pueden ser modificados en tiempo de ejecución.
Procesos dinámicos
Pueden ser modificados en tiempos de ejecución.
Según el uso del código
Procesos reutilizables
Se pueden reutilizar.
Procesos reentrantes
Procesos que en sí no tienen datos asociados, solo tienen código. Este código normalmente se carga una sola vez en memoria y puede ser utilizado a la vez por varios usuarios. (terminal de texto).
Según el acceso a los recursos
Los recursos pueden ser apropiativos y no apropiativos:
Apropiativos
Proceso que requiere una serie de recursos del SO, para su exclusivo uso y ningún otro proceso puede utilizarlo hasta que acabe. (la grabadora de un CD)
No apropiativos
Permite utilizar los recursos aunque los esté utilizando otro usuario.
Según la forma de ejecución
Pueden ser:
Residentes
Son aquellos que están en memoria durante todo el tiempo de vida del kernel del sistema operativo. (hasta que se apague la máquina)
Intercambiables
Son aquellos procesos que por requerimientos del sistema podrían pausarse, cargar en memoria intermedia o eliminar si hiciera falta. No te cargas el SO si los eliminas.
La planificación del procesador
Objetivo de la planificación
Dar un buen servicio a todos los procesos que existan en un momento dado en el sistema. Ejecutarlos con las mejores condiciones posibles.
Niveles de planificación
Planificación a largo plazo
Es el que se denomina planificador de trabajos y es el que decide cuál es el siguiente trabajo que se va a ejecutar.
Planificación a medio plazo
Es el denominado planificador de swaping, es el que decide si un proceso que está en ejecución, bloqueado o suspendido debe ser extraído de la memoria principal y colocado en la memoria temporal.
Planificación a corto plazo
Planificación del propio procesador, el sistema decide cuál es el proceso que se tiene que ejecutar antes según la política que estemos utilizando. Aquellos que necesitan hacer interrupciones y recursos externos serán penalizados.
Criterios
Criterios para escoger el algoritmo de planificación adecuado para un proceso
- Tiempo de respuesta: la velocidad con la que el ordenador responde a una petición.
- Tiempo de servicio: El tiempo que tarda un proceso en ser ejecutado totalmente, desde que se carga en memoria hasta que es eliminado de la memoria.
- Tiempo de ejecución: Tiempo teórico que necesitaría un proceso en el caso que estuviera él solo ejecutándose.
- Tiempo de procesador: Es el tiempo que consume un proceso sin contar el tiempo que está bloqueado en espera o en operaciones de entrada y salida. El tiempo efectivo de utilización del procesador.
- Tiempo de espera: Tiempo que un proceso pasa en cola, que está activo pero no es ejecutado.
- Tiempo de eficiencia (índice medio del servicio): tiene más eficiencia aquel proceso que utiliza mejor el procesador. Todo proceso que utiliza el máximo posible del procesador.
- Tiempo de rendimiento: Número máximo de trabajos que puede realizar el procesador por unidad de tiempo.
Algoritmos de planificación
¿Cómo podríamos definir un algoritmo de planificación?
Como el grupo de características que tiene que cumplir un programa para obtener un mejor aprovechamiento de los recursos del SO.
Dependiendo del programa necesitará unos tipos de recursos u otros, del tiempo de procesador, de los datos, etc…
Los algoritmos de planificación sirven para conseguir un tiempo óptimo de ejecución.
División general de algoritmos de planificación
Políticas apropiativas
El proceso que está haciendo uso del procesador puede ser temporalmente suspendido o permitir que otro proceso se apropie del procesador. (Suspendido o desalojado), procesos en tiempo compartido y en tiempo real à en tiempo compartido puede poner un programa en la cola, etc… ->> en tiempo real el primero va el primero de la cola y punto. Un SO embebido es un SO que va en una placa, en la ROM de la placa (SO diseñados para hacer algo en concreto).
Políticas no-apropiativas
No abandona nunca el procesador hasta haber acabado su ejecución. Un ordenador en el cual carga un proceso y hasta que no se ha acabado nada de nada….
Primera política: FCFS (first come first Server)
Primero que entra es el primero que se ejecuta, tipo FIFO.
El procesador ejecuta cada proceso en el orden que llega y hasta que termina. Es no-apropiativa.
Política muy simple y sencilla pero con un pobre rendimiento (de las primeras que salieron).
El índice de servicio mejora cuanto más largos son los procesos. à si los procesos son largos como ya está todo cargado en memoria se ejecuta rápido. En cortos pierde mucho tiempo.
Tiempo de espera à el tiempo de espera de cada proceso depende de los procesos que hayan llegado antes (los procesos que tenga delante) y es independiente de las necesidades del proceso.
Características generales: Es una política no-apropiativa. Es una política predecible, se sabe cómo será su ejecución. El tiempo medio de servicio es muy variable, dependerá del número de procesos y de su duración.
ROUND-ROBIN
Quantum à Un quantum es una unidad necesaria de energía para realizar un trabajo. (medida universal para cuantificar un proceso).
La round-robin trata de repartir la CPU entre los distintos procesos, concediendo a cada uno de los procesos un tiempo “q” (quantum) transcurrido el cual si el proceso no ha finalizado vuelve a la cola de procesos y entonces concede un tiempo “q” al siguiente proceso en cola y así hasta finalizar la ejecución.
Características:
- Baja sobrecarga si el cambio de contexto es eficiente (pasar un proceso del principio de la cola al final de la cola) y los procesos siempre están en la memoria principal. (en la memoria RAM) à en el momento en que tiene que acceder a la memoria secundaria es poco eficiente y empieza a sobrecargarse el sistema.
- El tamaño óptimo del quantum se calcula con respecto al tipo de sistema operativo, con respecto a las cargas que va a soportar el sistema (si va tener colas tremendas o no), y el número de procesos en el sistema y su tipo. (a los que están en precarga pero ahora no están puestos.)
- Esta política es la más utilizada trabajando en tiempo compartido. Ofrece un índice de servicio uniforme para todos los procesos y es una política apropiativa.
SJN (shortest job next)
Primara el proceso más corto de los que tiene en memoria RAM para ser el siguiente en ejecutarse. Toma de la cola de procesos preparados el que necesita menos tiempo de ejecución para realizar su trabajo (para ello esta política necesita saber el tiempo de procesador que necesita cada proceso lo cual es muy difícil…).
Primera de las políticas que se empleó en tiempo compartido, tiene un problema y es que necesita saber el tiempo exacto de cada proceso y ¿de dónde puede sacar esta información? De la primera tarjeta del programa. -> pero era una información un poco inexacta.
Formas de saber el tiempo de ejecución
:Información proporcionada por el usuarioà tarjetas de controlInformación proporcionada por el programaà en algunos lenguajes de programación p.e. cobol à las primeras líneas de declaración era el tiempo de ejecución necesario.Basándose en los historiales de ejecuciones.Tiempo de servicio para esta política es bueno para los procesos cortos, saliendo perjudicados los procesos más largos. ( se parece a la FIFO ). à es una variante mejorada de la fifo, pero también es no-apropiativa.Caracteristicas: Es una política no-apropiativa, es poco predecible, no podemos saber el orden de ejecución. Penaliza los procesos largos. Tiene un buen tiempo de servicio, es una política muy difícil de poner en practica debido a los datos que necesita para su planificación.