Sistemas operativos: funcionamiento y conceptos para desarrolladores
Si fuera a un país donde nunca ha estado y hablen un idioma que nunca había escuchado, o tal vez hayas oído hablar de él, pero en realidad no lo hable, ¿qué cree que necesitaría para ayudarse a comunicarse con los lugareños?
Necesitaría un traductor. Su sistema operativo funciona como ese traductor en su PC. Convierte esos valores 1s / 0s, sí / no, y on / off en un lenguaje legible que comprenderá. Hace todo esto en una interfaz gráfica de usuario simplificada, conocida también como GUI, que puede moverse con el mouse, hacer clic en las cosas, moverlas y verlas ocurrir ante sus ojos.
Si bien se puede cuestionar el alcance y la profundidad del conocimiento, conocer más que los fundamentos puede ser crítico para la ejecución de su programa e incluso para su estructura y flujo.
¿Por qué? Cuando escribe un programa y se ejecuta muy lentamente, pero no ve nada malo en su código, ¿dónde más buscará una solución? ¿Cómo podrá depurar el problema si no sabe cómo funciona el sistema operativo? ¿Está accediendo a demasiados archivos? ¿Se está quedando sin memoria y el intercambio es de uso alto? ¡Pero ni siquiera sabes qué es el intercambio!
Y quiere comunicarse con otra máquina. ¿Cómo se hace eso localmente o por internet? ¿Cuál es la diferencia? ¿Por qué algunos programadores prefieren un sistema operativo sobre otro?
En el Instituto de Tecnología de Georgia hay un curso para la “Introducción a los sistemas operativos” donde enseñan las abstracciones básicas del sistema operativo, los mecanismos y sus implementaciones. El núcleo del curso contiene programación concurrente (subprocesos y sincronización), comunicación entre procesos y una introducción a los sistemas operativos distribuidos.
Quiero usar esta publicación para compartir algunas conclusiones sobre curso, que son los 10 conceptos críticos del sistema operativo que debes aprender si quieres ser bueno en el desarrollo de software.
Pero primero, definamos…
¿Qué es un sistema operativo?
Un sistema operativo (SO) es una colección de software que administra hardware de computadora y proporciona servicios para programas. Específicamente, oculta la complejidad del hardware, administra los recursos computacionales y proporciona aislamiento y protección. Lo más importante, tiene acceso privilegiado directamente al hardware subyacente.
Los componentes principales de un sistema operativo son el sistema de archivos, el planificador y el controlador del dispositivo. Probablemente haya utilizado anteriormente sistemas operativos Desktop (Windows, Mac, Linux) y Embedded (Android, iOS).
Hay tres elementos clave de un sistema operativo, que son:
- Abstracciones (proceso, hilo, archivo, socket, memoria)
- Mecanismos (crear, programar, abrir, escribir, asignar)
- Políticas (LRU, EDF).
Hay dos principios de diseño del sistema operativo, que son:
- Separación del mecanismo y la política mediante la implementación de mecanismos flexibles para apoyar las políticas
- Optimización para un caso común: ¿Dónde se utilizará el sistema operativo? ¿Qué querrá ejecutar el usuario en esa máquina? ¿Cuáles son los requisitos de carga de trabajo?
Hay tres tipos de sistemas operativos que se usan comúnmente en la actualidad. El primero es el sistema operativo monolítico, donde todo el sistema operativo funciona en el espacio del kernel y está solo en modo supervisor. El segundo es el sistema operativo modular, en el que parte del núcleo del sistema se ubicará en archivos independientes llamados módulos que se pueden agregar al sistema en tiempo de ejecución. Y el tercero es el sistema operativo micro, donde el núcleo se divide en procesos separados, conocidos como servidores. Algunos de los servidores se ejecutan en el espacio del kernel y otros en el espacio del usuario.
Ahora veamos los conceptos principales que necesita comprender con más detalle.
1. Procesos y gestión de procesos
Un proceso es básicamente un programa en ejecución. La ejecución de un proceso debe progresar de manera secuencial. Para decirlo en términos simples, escribimos nuestros programas de computadora en un archivo de texto, y cuando ejecutamos este programa, se convierte en un proceso que realiza todas las tareas mencionadas en el programa.
Cuando un programa se carga en la memoria y se convierte en un proceso, se puede dividir en cuatro secciones: pila, montón, texto y datos. La siguiente imagen muestra un diseño simplificado de un proceso dentro de la memoria principal.
- Pila (stack): la pila de proceso contiene los datos temporales, como los parámetros de método / función, la dirección de retorno y las variables locales.
- Montón (heap): es memoria asignada dinámicamente a un proceso durante su tiempo de ejecución.
- Datos (data): esta sección contiene las variables globales y estáticas.
- Texto (text): Esto incluye la actividad actual representada por el valor del Contador de programas y el contenido de los registros del procesador.
Cuando se ejecuta un proceso, pasa por diferentes estados. Estas etapas pueden diferir en los diferentes sistemas operativos, y los nombres de estos estados tampoco están estandarizados. En general, un proceso puede tener uno de los siguientes cinco estados a la vez:
- Inicio (start): el estado inicial cuando un proceso se inicia / crea por primera vez.
- Listo (ready): el proceso está esperando ser asignado a un procesador. Los procesos listos están esperando que el sistema operativo les asigne el procesador para que puedan ejecutarse. Un proceso puede entrar en este estado después del estado de Inicio, o mientras lo ejecuta pero el programador lo interrumpe para asignar la CPU a algún otro proceso.
- En ejecución (running): una vez que el programador del sistema operativo ha asignado el proceso a un procesador, el estado del proceso se establece en ejecución y el procesador ejecuta sus instrucciones.
- En espera (wait): el proceso pasa al estado de espera si necesita esperar un recurso, como esperar la entrada del usuario o esperar que un archivo esté disponible.
- Terminado o Salir (terminated): Una vez que el proceso finaliza su ejecución, o el sistema operativo lo termina, se mueve al estado terminado donde espera ser eliminado de la memoria principal.
Un bloque de control de proceso es una estructura de datos mantenida por el sistema operativo para cada proceso. La PCB se identifica mediante un ID de proceso entero (PID). Un PCB guarda toda la información necesaria para realizar un seguimiento de un proceso como se detalla a continuación:
- ID de proceso: identificación única para cada uno de los procesos en el sistema operativo.
- Estado del proceso (state): el estado actual del proceso, ya sea que esté listo, en ejecución, en espera o lo que sea.
- Puntero (pointer): Un puntero al proceso padre.
- Privilegios de proceso (priority): esto es necesario para permitir / no permitir el acceso a los recursos del sistema.
- Contador de programa (program counter): El contador de programa es un puntero a la dirección de la siguiente instrucción que se ejecutará para este proceso.
- Registros de CPU (CPU registers): varios registros de CPU donde los procesos deben almacenarse para su ejecución para el estado de ejecución.
- Información de programación de la CPU: prioridad del proceso y otra información de programación que se requiere para programar el proceso.
- Información de administración de memoria: Esto incluye la información de la tabla de páginas, los límites de memoria y la tabla de segmentos, según la memoria utilizada por el sistema operativo.
- Información contable (accounting information): Esto incluye la cantidad de CPU utilizada para la ejecución del proceso, límites de tiempo, ID de ejecución, etc.
- Información de estado (IO status information): Esto incluye una lista de dispositivos de E / S asignados al proceso.
2. Hilos y concurrencia
Un hilo es un flujo de ejecución a través del código de proceso. Tiene su propio contador de programa que realiza un seguimiento de qué instrucción ejecutar a continuación. También tiene registros del sistema que contienen sus variables de trabajo actuales y una pila que contiene el historial de ejecución.
Un subproceso comparte con sus subprocesos información diversa, como segmento de código, segmento de datos y archivos abiertos. Cuando un hilo altera un elemento de memoria de segmento de código, todos los otros hilos lo ven.
Un hilo también se llama un proceso ligero. Los subprocesos proporcionan una forma de mejorar el rendimiento de la aplicación a través del paralelismo. Los subprocesos representan un enfoque de software para mejorar el rendimiento de los sistemas operativos al reducir la sobrecarga. Un hilo es equivalente a un proceso clásico.
Cada hilo pertenece exactamente a un proceso, y no puede existir ningún hilo fuera de un proceso. Cada hilo representa un flujo de control separado. Los hilos se han utilizado con éxito en la implementación de servidores de red y servidores web. También proporcionan una base adecuada para la ejecución paralela de aplicaciones en multiprocesadores de memoria compartida.
Ventajas de los hilos:
- Minimizan el tiempo de cambio de contexto.
- Usarlos proporciona concurrencia dentro de un proceso.
- Proporcionan una comunicación eficiente.
- Es más económico crear y cambiar hilos de contexto.
- Los subprocesos permiten la utilización de arquitecturas multiprocesador a mayor escala y eficiencia.
Los hilos se implementan de las dos formas siguientes:
- Subprocesos de nivel de usuario: subprocesos administrados por el usuario.
- Subprocesos a nivel de núcleo: subprocesos administrados por el sistema operativo que actúan sobre un núcleo, un núcleo del sistema operativo.
Subprocesos de nivel de usuario (User Level Threads)
En este caso, el núcleo de gestión de subprocesos no es consciente de la existencia de subprocesos. La biblioteca de hilos contiene código para crear y destruir hilos, para pasar mensajes y datos entre hilos, para programar la ejecución de hilos y para guardar y restaurar contextos de hilos. La aplicación comienza con un solo hilo.
Ventajas:
- La conmutación de subprocesos no requiere privilegios de modo Kernel.
- El subproceso de nivel de usuario puede ejecutarse en cualquier sistema operativo.
- La programación puede ser específica de la aplicación en el subproceso de nivel de usuario.
- Los subprocesos a nivel de usuario son rápidos de crear y administrar.
Desventajas
- En un sistema operativo típico, la mayoría de las llamadas al sistema están bloqueando.
- La aplicación multiproceso no puede aprovechar el multiprocesamiento.
Subprocesos a nivel de núcleo (Kernel Level Threads)
En este caso, el kernel realiza la gestión de subprocesos. No hay código de gestión de subprocesos en el área de aplicación. Los hilos del núcleo son compatibles directamente con el sistema operativo. Cualquier aplicación puede ser programada para ser multiproceso. Todos los hilos dentro de una aplicación son compatibles con un solo proceso.
El Kernel mantiene información de contexto para el proceso en su conjunto y para los hilos individuales dentro del proceso. La programación por parte del Kernel se realiza por subprocesos. El Kernel realiza la creación, programación y gestión de subprocesos en el espacio del Kernel. Los hilos del kernel son generalmente más lentos de crear y administrar que los hilos del usuario.
Ventajas
- El Kernel puede programar simultáneamente múltiples subprocesos del mismo proceso en múltiples procesos.
- Si un hilo en un proceso está bloqueado, el Kernel puede programar otro hilo del mismo proceso.
- Las rutinas del núcleo pueden ser multiproceso.
Desventajas
- Los hilos del kernel son generalmente más lentos de crear y administrar que los hilos del usuario.
- La transferencia de control de un hilo a otro dentro del mismo proceso requiere un cambio de modo al Kernel.
3. Programación
El proceso de programación es responsabilidad del administrador de procesos que maneja la eliminación del proceso en ejecución de la CPU y la selección de otro proceso sobre la base de una estrategia particular.
La programación de procesos es una parte esencial de un sistema operativo de multiprogramación. Estos sistemas operativos permiten cargar más de un proceso en la memoria ejecutable a la vez, y el proceso cargado comparte la CPU mediante multiplexación de tiempo.
El sistema operativo mantiene todos los bloques de control de proceso (PCB) en las colas de programación de procesos. El sistema operativo mantiene una cola separada para cada uno de los estados del proceso, y los PCB de todos los procesos en el mismo estado de ejecución se colocan en la misma cola. Cuando se cambia el estado de un proceso, su PCB se desvincula de su cola actual y se mueve a su nueva cola de estado.
El sistema operativo mantiene las siguientes colas importantes de programación de procesos:
- Cola de trabajos: esta cola mantiene todos los procesos en el sistema.
- Cola lista: esta cola mantiene un conjunto de todos los procesos que residen en la memoria principal, listos y en espera de ejecución. Siempre se pone un nuevo proceso en esta cola.
- Colas de dispositivo: los procesos que están bloqueados debido a la falta de disponibilidad de un dispositivo de Entrada / Salida constituyen esta cola.
Un cambio de contexto es el mecanismo que almacena y restaura el estado o contexto de una CPU en el bloque de Control de proceso. Permite que la ejecución de un proceso se reanude desde el mismo punto más adelante. Con esta técnica, un conmutador de contexto permite que múltiples procesos compartan una sola CPU. El cambio de contexto es una característica esencial de un sistema operativo multitarea.
Cuando el planificador cambia la CPU de ejecutar un proceso a otro, el estado del proceso actual se almacena en el bloque de control del proceso. Después de esto, el estado del siguiente proceso se carga desde su propia PCB y se utiliza para configurar la PC, los registros, etc. En ese punto, el segundo proceso puede comenzar a ejecutarse.
Los cambios de contexto son computacionalmente intensivos, ya que el registro y el estado de la memoria deben guardarse y restaurarse. Para evitar la cantidad de tiempo de cambio de contexto, algunos sistemas de hardware emplean dos o más conjuntos de registros de procesador.
Cuando se cambia el proceso, la siguiente información se almacena para su uso posterior: contador de programas, información de programación, valor de registro base y límite, registro utilizado actualmente, estado modificado, información de estado de Entrada / Salida e información contable.
4. Gestión de memoria
La administración de memoria es la funcionalidad de un sistema operativo que maneja o administra la memoria primaria. Mueve procesos de ida y vuelta entre la memoria principal y el disco durante la ejecución.
La gestión de la memoria realiza un seguimiento de todas y cada una de las ubicaciones de la memoria, independientemente de si está asignada a algún proceso o es gratuita. Comprueba cuánta memoria se debe asignar a los procesos. Decide qué proceso obtendrá memoria a qué hora. Y rastrea cada vez que la memoria se libera o no se asigna, y correspondientemente actualiza el estado.
El espacio de direcciones del proceso es el conjunto de direcciones lógicas a las que un proceso hace referencia en su código. Por ejemplo, cuando se usa el direccionamiento de 32 bits, las direcciones pueden variar de 0 a 0x7fffffff; es decir, ²³¹ números posibles, para un tamaño teórico total de 2 gigabytes.
El sistema operativo se encarga de asignar las direcciones lógicas a las direcciones físicas en el momento de la asignación de memoria al programa. Hay tres tipos de direcciones utilizadas en un programa antes y después de asignar la memoria:
- Direcciones simbólicas: las direcciones utilizadas en un código fuente. Los nombres de variables, constantes y etiquetas de instrucciones son los elementos básicos del espacio de direcciones simbólico.
- Direcciones relativas: en el momento de la compilación, un compilador convierte las direcciones simbólicas en direcciones relativas.
- Direcciones físicas: el cargador genera estas direcciones en el momento en que se carga un programa en la memoria principal.
Las direcciones virtuales y físicas son las mismas en los esquemas de enlace de direcciones en tiempo de compilación y tiempo de carga. Las direcciones virtuales y físicas difieren en los esquemas de enlace de direcciones en tiempo de ejecución.
El conjunto de todas las direcciones lógicas generadas por un programa se denomina espacio de direcciones lógicas. El conjunto de todas las direcciones físicas correspondientes a estas direcciones lógicas se denomina espacio de direcciones físicas.
- Comunicación entre procesos
Hay dos tipos de procesos: independientes y cooperantes. Un proceso independiente no se ve afectado por la ejecución de otros procesos, mientras que un proceso de cooperación puede verse afectado por otros procesos de ejecución.
Puede pensar que esos procesos, que se ejecutan independientemente, se ejecutarían de manera muy eficiente. Pero en realidad, hay muchas situaciones en las que la naturaleza cooperativa de un proceso puede utilizarse para aumentar la velocidad, la conveniencia y la modularidad computacionales. La comunicación entre procesos (IPC) es un mecanismo que permite a los procesos comunicarse entre sí y sincronizar sus acciones. La comunicación entre estos procesos puede verse como un método de cooperación entre ellos.
Los procesos pueden comunicarse entre sí de dos maneras: memoria compartida y análisis de mensajes.
Método de memoria compartida
Digamos que hay dos procesos: el Productor y el Consumidor. El productor produce algún artículo y el consumidor consume ese artículo. Los dos procesos comparten un espacio común o una ubicación de memoria conocida como “búfer”, donde se almacena el artículo producido por el Productor y desde donde el Consumidor consume el artículo si es necesario.
Hay dos versiones de este problema: la primera se conoce como el problema del búfer ilimitado, en el que el productor puede seguir produciendo elementos y no hay límite en el tamaño del búfer. El segundo se conoce como el problema del búfer acotado, en el que el Productor puede producir hasta un cierto número de artículos, y luego comienza a esperar que el Consumidor los consuma.
En el problema del búfer acotado, el productor y el consumidor compartirán algo de memoria común. Entonces el Productor comenzará a producir artículos. Si el número total de artículos producidos es igual al tamaño del búfer, el Productor esperará hasta que el Consumidor los consuma.
De manera similar, el consumidor primero verifica la disponibilidad del artículo, y si no hay ningún artículo disponible, el consumidor esperará a que el productor lo produzca. Si hay artículos disponibles, el Consumidor los consumirá.
Método de análisis de mensajes
En este método, los procesos se comunican entre sí sin utilizar ningún tipo de memoria compartida. Si dos procesos p1 y p2 quieren comunicarse entre sí, proceden de la siguiente manera:
Establezca un enlace de comunicación (si ya existe un enlace, no es necesario volver a establecerlo).
Comience a intercambiar mensajes usando primitivas básicas. Necesitamos al menos dos primitivas: enviar (mensaje, destino) o enviar (mensaje) y recibir (mensaje, host) o recibir (mensaje).
El tamaño del mensaje puede ser fijo o variable. Si es un tamaño fijo, es fácil para el diseñador del sistema operativo pero complicado para el programador. Si es un tamaño variable, entonces es fácil para el programador pero complicado para el diseñador del sistema operativo. Un mensaje estándar tiene dos partes: un encabezado y un cuerpo.
El encabezado se utiliza para almacenar el tipo de mensaje, la identificación de destino, la identificación de origen, la longitud del mensaje y la información de control. La información de control contiene información como qué hacer si se queda sin espacio de búfer, el número de secuencia y su prioridad. Generalmente, el mensaje se envía utilizando el estilo FIFO.
6. Gestión de entrada / salida (E / S)
Una de las tareas importantes de un sistema operativo es administrar varios dispositivos de entrada / salida (E / S), incluidos el mouse, los teclados, el panel táctil, las unidades de disco, los adaptadores de pantalla, los dispositivos USB, la pantalla de mapa de bits, LED, analógico. convertidor digital, interruptor de encendido / apagado, conexiones de red, E / S de audio, impresoras, etc.
Se requiere un sistema de E / S para tomar una solicitud de E / S de la aplicación y enviarla al dispositivo físico, luego tomar cualquier respuesta que provenga del dispositivo y enviarla a la aplicación. Los dispositivos de E / S se pueden dividir en dos categorías:
- Dispositivos de bloque: un dispositivo de bloque es aquel con el que el conductor se comunica mediante el envío de bloques completos de datos. Por ejemplo, discos duros, cámaras USB, Disk-On-Key, etc.
- Dispositivos de caracteres: un dispositivo de caracteres es aquel con el que el controlador se comunica enviando y recibiendo caracteres individuales (bytes, octetos). Por ejemplo, puertos serie, puertos paralelos, tarjetas de sonido, etc.
La CPU debe tener una forma de pasar información hacia y desde un dispositivo de E / S. Hay tres enfoques disponibles para comunicarse con la CPU y el dispositivo.
- Instrucción especial de E / S
Utiliza las instrucciones de la CPU que están hechas específicamente para controlar dispositivos de E / S. Estas instrucciones generalmente permiten que los datos se envíen a un dispositivo de E / S o se lean desde un dispositivo de E / S.
- E / S mapeadas en memoria
Al usar E / S mapeadas en memoria, la memoria y los dispositivos de E / S comparten el mismo espacio de direcciones. El dispositivo está conectado directamente a ciertas ubicaciones de memoria principal para que el dispositivo de E / S pueda transferir bloques de datos a / desde la memoria sin pasar por la CPU.
Mientras usa E / S mapeadas en memoria, el sistema operativo asigna el búfer en la memoria e informa al dispositivo de E / S que use ese búfer para enviar datos a la CPU. El dispositivo de E / S funciona de forma asíncrona con la CPU e interrumpe la CPU cuando finaliza.
La ventaja de este método es que cada instrucción que puede acceder a la memoria se puede utilizar para manipular un dispositivo de E / S. La E / S mapeada en memoria se usa para la mayoría de los dispositivos de E / S de alta velocidad, como discos e interfaces de comunicación.
- Acceso directo a memoria (DMA)
Los dispositivos lentos como los teclados generarán una interrupción en la CPU principal después de que se transfiera cada byte. Si un dispositivo rápido, como un disco, generara una interrupción por cada byte, el sistema operativo pasaría la mayor parte de su tiempo manejando estas interrupciones. Entonces, una computadora típica usa hardware de acceso directo a memoria (DMA) para reducir esta sobrecarga.
Acceso directo a la memoria (DMA) significa que la CPU otorga al módulo de E / S autorización para leer o escribir en la memoria sin participación. El propio módulo DMA controla el intercambio de datos entre la memoria principal y el dispositivo de E / S. La CPU solo participa al principio y al final de la transferencia y se interrumpe solo después de que se haya transferido todo el bloque.
El acceso directo a la memoria necesita un hardware especial llamado controlador DMA (DMAC) que gestiona las transferencias de datos y arbitra el acceso al bus del sistema. Los controladores están programados con punteros de origen y destino (dónde leer / escribir los datos), contadores para rastrear el número de bytes transferidos y varias configuraciones. Estos incluyen los tipos de E / S y memoria y las interrupciones y estados para los ciclos de la CPU.
7. Virtualización
La virtualización es una tecnología que le permite crear múltiples entornos simulados o recursos dedicados desde un único sistema de hardware físico.
El software llamado hipervisor se conecta directamente a ese hardware y le permite dividir un sistema en entornos separados, distintos y seguros conocidos como máquinas virtuales (VM). Estas máquinas virtuales se basan en la capacidad del hipervisor para separar los recursos de la máquina del hardware y distribuirlos adecuadamente.
La máquina física original equipada con el hipervisor se llama host, mientras que las muchas máquinas virtuales que usan sus recursos se llaman invitados. Estos invitados tratan los recursos informáticos, como CPU, memoria y almacenamiento, como un hangar de recursos que se pueden reubicar fácilmente. Los operadores pueden controlar instancias virtuales de CPU, memoria, almacenamiento y otros recursos para que los invitados reciban los recursos que necesitan cuando los necesitan.
Idealmente, todas las máquinas virtuales relacionadas se administran a través de una única consola de administración de virtualización basada en la web, que acelera las cosas. La virtualización le permite determinar cuánta potencia de procesamiento, almacenamiento y memoria dar a las máquinas virtuales, y los entornos están mejor protegidos, ya que las máquinas virtuales están separadas de su hardware de soporte y entre sí.
En pocas palabras, la virtualización crea los entornos y recursos que necesita del hardware infrautilizado.
Tipos de virtualización:
Virtualización de datos: los datos que se extienden por todas partes se pueden consolidar en una sola fuente. La virtualización de datos permite a las empresas tratar los datos como un suministro dinámico, proporcionando capacidades de procesamiento que pueden reunir datos de múltiples fuentes, acomodar fácilmente nuevas fuentes de datos y transformar los datos de acuerdo con las necesidades del usuario. Las herramientas de virtualización de datos se ubican frente a múltiples fuentes de datos y permiten que sean tratadas como una sola fuente. Entregan los datos necesarios, en la forma requerida, en el momento adecuado a cualquier aplicación o usuario.
Virtualización de escritorio: se confunde fácilmente con la virtualización del sistema operativo, que le permite implementar múltiples sistemas operativos en una sola máquina, la virtualización de escritorio permite que un administrador central (o herramienta de administración automatizada) implemente entornos de escritorio simulados en cientos de máquinas físicas a la vez. A diferencia de los entornos de escritorio tradicionales que se instalan, configuran y actualizan físicamente en cada máquina, la virtualización de escritorio permite a los administradores realizar configuraciones masivas, actualizaciones y comprobaciones de seguridad en todos los escritorios virtuales.
Virtualización de servidores: los servidores son computadoras diseñadas para procesar un gran volumen de tareas específicas realmente bien, por lo que otras computadoras, como computadoras portátiles y de escritorio, pueden realizar una variedad de otras tareas. La virtualización de un servidor le permite realizar más de esas funciones específicas e implica particionarlo para que los componentes se puedan usar para servir múltiples funciones.
Virtualización del sistema operativo: la virtualización del sistema operativo ocurre en el núcleo, los administradores de tareas centrales de los sistemas operativos. Es una forma útil de ejecutar entornos Linux y Windows uno al lado del otro. Las empresas también pueden enviar sistemas operativos virtuales a las computadoras, lo que: (1) reduce los costos de hardware a granel, ya que las computadoras no requieren capacidades tan altas de fábrica, (2) aumenta la seguridad, ya que todas las instancias virtuales pueden ser monitoreado y aislado, y (3) Limita el tiempo dedicado a servicios de TI como actualizaciones de software.
Virtualización de funciones de red: la virtualización de funciones de red (NFV) separa las funciones clave de una red (como servicios de directorio, uso compartido de archivos y configuración de IP) para que puedan distribuirse entre los entornos. Una vez que las funciones de software son independientes de las máquinas físicas en las que vivían, las funciones específicas se pueden agrupar en una nueva red y asignar a un entorno. La virtualización de redes reduce la cantidad de componentes físicos, como conmutadores, enrutadores, servidores, cables y concentradores, que se necesitan para crear redes múltiples e independientes, y es particularmente popular en la industria de las telecomunicaciones.
8. Sistemas de archivos distribuidos
Un sistema de archivos distribuido es una aplicación basada en cliente / servidor que permite a los clientes acceder y procesar datos almacenados en el servidor como si estuvieran en su propia computadora. Cuando un usuario accede a un archivo en el servidor, el servidor envía al usuario una copia del archivo, que se almacena en caché en la computadora del usuario mientras se procesan los datos y luego se devuelve al servidor.
Idealmente, un sistema de archivos distribuido organiza los servicios de archivos y directorios de servidores individuales en un directorio global de tal manera que el acceso a datos remotos no es específico de la ubicación, sino que es idéntico a cualquier cliente. Todos los usuarios tienen acceso a todos los archivos del sistema de archivos global y la organización es jerárquica y está basada en directorios.
- Virtualización
La virtualización es una tecnología que le permite crear múltiples entornos simulados o recursos dedicados desde un único sistema de hardware físico.
El software llamado hipervisor se conecta directamente a ese hardware y le permite dividir un sistema en entornos separados, distintos y seguros conocidos como máquinas virtuales (VM). Estas máquinas virtuales se basan en la capacidad del hipervisor para separar los recursos de la máquina del hardware y distribuirlos adecuadamente.
La máquina física original equipada con el hipervisor se llama host, mientras que las muchas máquinas virtuales que usan sus recursos se llaman invitados. Estos invitados tratan los recursos informáticos, como CPU, memoria y almacenamiento, como un hangar de recursos que se pueden reubicar fácilmente. Los operadores pueden controlar instancias virtuales de CPU, memoria, almacenamiento y otros recursos para que los invitados reciban los recursos que necesitan cuando los necesitan.
Idealmente, todas las máquinas virtuales relacionadas se administran a través de una única consola de administración de virtualización basada en la web, que acelera las cosas. La virtualización le permite determinar cuánta potencia de procesamiento, almacenamiento y memoria dar a las máquinas virtuales, y los entornos están mejor protegidos, ya que las máquinas virtuales están separadas de su hardware de soporte y entre sí.
En pocas palabras, la virtualización crea los entornos y recursos que necesita del hardware infrautilizado.
Tipos de virtualización:
Virtualización de datos: los datos que se extienden por todas partes se pueden consolidar en una sola fuente. La virtualización de datos permite a las empresas tratar los datos como un suministro dinámico, proporcionando capacidades de procesamiento que pueden reunir datos de múltiples fuentes, acomodar fácilmente nuevas fuentes de datos y transformar los datos de acuerdo con las necesidades del usuario. Las herramientas de virtualización de datos se ubican frente a múltiples fuentes de datos y permiten que sean tratadas como una sola fuente. Entregan los datos necesarios, en la forma requerida, en el momento adecuado a cualquier aplicación o usuario.
Virtualización de escritorio: se confunde fácilmente con la virtualización del sistema operativo, que le permite implementar múltiples sistemas operativos en una sola máquina, la virtualización de escritorio permite que un administrador central (o herramienta de administración automatizada) implemente entornos de escritorio simulados en cientos de máquinas físicas a la vez. A diferencia de los entornos de escritorio tradicionales que se instalan, configuran y actualizan físicamente en cada máquina, la virtualización de escritorio permite a los administradores realizar configuraciones masivas, actualizaciones y comprobaciones de seguridad en todos los escritorios virtuales.
Virtualización de servidores: los servidores son computadoras diseñadas para procesar un gran volumen de tareas específicas realmente bien, por lo que otras computadoras, como computadoras portátiles y de escritorio, pueden realizar una variedad de otras tareas. La virtualización de un servidor le permite realizar más de esas funciones específicas e implica particionarlo para que los componentes se puedan usar para servir múltiples funciones.
Virtualización del sistema operativo: la virtualización del sistema operativo ocurre en el núcleo, los administradores de tareas centrales de los sistemas operativos. Es una forma útil de ejecutar entornos Linux y Windows uno al lado del otro. Las empresas también pueden enviar sistemas operativos virtuales a las computadoras, lo que: (1) reduce los costos de hardware a granel, ya que las computadoras no requieren capacidades tan altas de fábrica, (2) aumenta la seguridad, ya que todas las instancias virtuales pueden ser monitoreado y aislado, y (3) Limita el tiempo dedicado a servicios de TI como actualizaciones de software.
Virtualización de funciones de red: la virtualización de funciones de red (NFV) separa las funciones clave de una red (como servicios de directorio, uso compartido de archivos y configuración de IP) para que puedan distribuirse entre los entornos. Una vez que las funciones de software son independientes de las máquinas físicas en las que vivían, las funciones específicas se pueden agrupar en una nueva red y asignar a un entorno. La virtualización de redes reduce la cantidad de componentes físicos, como conmutadores, enrutadores, servidores, cables y concentradores, que se necesitan para crear redes múltiples e independientes, y es particularmente popular en la industria de las telecomunicaciones.
9. Sistemas de archivos distribuidos
Un sistema de archivos distribuido es una aplicación basada en cliente / servidor que permite a los clientes acceder y procesar datos almacenados en el servidor como si estuvieran en su propia computadora. Cuando un usuario accede a un archivo en el servidor, el servidor envía al usuario una copia del archivo, que se almacena en caché en la computadora del usuario mientras se procesan los datos y luego se devuelve al servidor.
Idealmente, un sistema de archivos distribuido organiza los servicios de archivos y directorios de servidores individuales en un directorio global de tal manera que el acceso a datos remotos no es específico de la ubicación, sino que es idéntico a cualquier cliente. Todos los usuarios tienen acceso a todos los archivos del sistema de archivos global y la organización es jerárquica y está basada en directorios.
Ventajas de la memoria compartida distribuida:
- Oculte el movimiento de datos y proporcione una abstracción más simple para compartir datos. Los programadores no necesitan preocuparse por las transferencias de memoria entre máquinas, como cuando se usa el modelo de paso de mensajes.
- Permite el paso de estructuras complejas por referencia, simplificando el desarrollo de algoritmos para aplicaciones distribuidas.
- Aprovecha la “localidad de referencia” moviendo toda la página que contiene los datos a los que se hace referencia en lugar de solo la pieza de datos.
- Más barato de construir que los sistemas multiprocesador. Las ideas se pueden implementar utilizando hardware normal y no requieren nada complejo para conectar la memoria compartida a los procesadores.
- Los programas tienen tamaños de memoria más grandes al combinar toda la memoria física de todos los nodos. Esta memoria grande no incurrirá en latencia de disco debido al intercambio como en los sistemas distribuidos tradicionales.
- Se puede usar un número ilimitado de nodos. A diferencia de los sistemas multiprocesador donde se accede a la memoria principal a través de un bus común, lo que limita el tamaño del sistema multiprocesador.
- Los programas escritos para multiprocesadores de memoria compartida se pueden ejecutar en sistemas DSM.
Hay dos formas diferentes en que los nodos pueden ser informados de quién posee qué página: invalidación y difusión. La invalidación es un método que invalida una página cuando algún proceso solicita acceso de escritura a esa página y se convierte en su nuevo propietario. De esta manera, la próxima vez que algún otro proceso intente leer o escribir en una copia de la página que creía que tenía, la página no estará disponible y el proceso tendrá que volver a solicitar acceso a esa página. Broadcasting actualizará automáticamente todas las copias de una página de memoria cuando un proceso escriba en ella. Esto también se llama actualización de escritura. Este método es mucho menos eficiente y más difícil de implementar porque se debe enviar un nuevo valor en lugar de un mensaje de invalidación.
10. Computación en la nube
Cada vez más, vemos que la tecnología se traslada a la nube. No es solo una moda: el cambio de los modelos de software tradicionales a Internet ha ganado impulso en los últimos 10 años. Mirando hacia el futuro, la próxima década de computación en la nube promete nuevas formas de colaborar en todas partes, a través de dispositivos móviles.
Entonces, ¿qué es la computación en la nube? Esencialmente, la computación en la nube es una especie de externalización de programas informáticos. Mediante el uso de la computación en la nube, los usuarios pueden acceder a software y aplicaciones desde donde lo necesiten, mientras lo aloja un tercero externo, en “la nube”. Esto significa que no tienen que preocuparse por cosas como el almacenamiento y la energía, simplemente pueden disfrutar del resultado final.
Las aplicaciones comerciales tradicionales siempre han sido muy complicadas y caras. La cantidad y variedad de hardware y software necesarios para ejecutarlos son desalentadores. Necesita un equipo completo de expertos para instalarlos, configurarlos, probarlos, ejecutarlos, protegerlos y actualizarlos. Cuando multiplica este esfuerzo en docenas o cientos de aplicaciones, no es fácil ver por qué las compañías más grandes con los mejores departamentos de TI no obtienen las aplicaciones que necesitan. Las pequeñas y medianas empresas no tienen ninguna posibilidad.
Con la computación en la nube, elimina esos dolores de cabeza que conlleva el almacenamiento de sus propios datos, ya que no está administrando hardware y software, que se convierte en responsabilidad de un proveedor experimentado como Salesforce y AWS. La infraestructura compartida significa que funciona como una utilidad: solo paga por lo que necesita, las actualizaciones son automáticas y la ampliación o reducción es fácil.
Las aplicaciones basadas en la nube pueden estar en funcionamiento en días o semanas, y cuestan menos. Con una aplicación en la nube, simplemente abre un navegador, inicia sesión, personaliza la aplicación y comienza a usarla. Las empresas ejecutan todo tipo de aplicaciones en la nube, como la gestión de relaciones con los clientes (CRM), recursos humanos, contabilidad y mucho más.
A medida que la informática en la nube crece en popularidad, miles de empresas simplemente renombran sus productos y servicios que no son en la nube como “computación en la nube”. Siempre profundice al evaluar las ofertas en la nube y tenga en cuenta que si tiene que comprar y administrar hardware y software, lo que está viendo no es realmente computación en la nube sino una nube falsa.
11. Bono
Como ingeniero de software, formará parte de un cuerpo más amplio de ciencias de la computación, que abarca hardware, sistemas operativos, redes, gestión de datos y minería, y muchas otras disciplinas. Cuanto más comprendan los ingenieros en cada una de estas disciplinas sobre las otras disciplinas, mejor podrán interactuar con esas otras disciplinas de manera eficiente.
Como el sistema operativo es el “cerebro” que gestiona la entrada, el procesamiento y la salida, todas las demás disciplinas interactúan con el sistema operativo. Una comprensión de cómo funciona el sistema operativo proporcionará información valiosa sobre cómo funcionan las otras disciplinas, ya que su interacción con esas disciplinas es administrada por el sistema operativo.