Resumen de Sistemas Operativos PDF
Document Details
Uploaded by Deleted User
Tags
Summary
Este documento resume los diferentes tipos de sistemas operativos, sus funciones principales y clasificaciones. Se enfoca en conceptos básicos para un examen de sistemas operativos.
Full Transcript
CONCEPTOS EXAMEN Un sistema operativo (SO) es un conjunto de programas que gestionan los recursos de hardware y software de una computadora o dispositivo. Su función principal es actuar como intermediario entre los usuarios y el hardware, facilitando la ejecución de aplicaciones y tareas del sistem...
CONCEPTOS EXAMEN Un sistema operativo (SO) es un conjunto de programas que gestionan los recursos de hardware y software de una computadora o dispositivo. Su función principal es actuar como intermediario entre los usuarios y el hardware, facilitando la ejecución de aplicaciones y tareas del sistema. Funciones principales de un sistema operativo: 1. Gestión del hardware: Controla el procesador, la memoria, los dispositivos de entrada/salida (como teclado, ratón, pantalla) y otros componentes físicos. 2. Gestión de procesos: Organiza la ejecución de programas o procesos, asegurando que se utilicen los recursos de manera eficiente y se gestionen las tareas concurrentes (como multitarea). 3. Gestión de memoria: Administra la memoria RAM, asignando y liberando espacio para los procesos en ejecución y asegurando que no haya conflictos. 4. Gestión de archivos: Proporciona una estructura para organizar, almacenar, acceder y manipular archivos y directorios en dispositivos de almacenamiento (discos duros, SSD, etc.). 5. Interfaz de usuario: Facilita la interacción entre el usuario y la máquina, a través de interfaces gráficas (GUI) o de línea de comandos (CLI). 6. Seguridad y protección: Controla los accesos y asegura que los usuarios y programas no realicen acciones no autorizadas, protegiendo los datos y el sistema. Ejemplos de sistemas operativos: Windows: Usado principalmente en PC de escritorio y portátiles. macOS: Sistema operativo de Apple para sus computadoras. Linux: Un sistema operativo de código abierto que se usa en servidores, computadoras de escritorio y dispositivos embebidos. Android y iOS: Sistemas operativos móviles para smartphones y tabletas. En resumen, un sistema operativo es esencial para el funcionamiento de cualquier dispositivo informático, ya que proporciona el entorno necesario para ejecutar aplicaciones y gestionar los recursos de manera eficiente. Los sistemas operativos se pueden clasificar de diversas formas según diferentes criterios. A continuación, se presentan las principales clasificaciones según el número de usuarios, el número de procesos y el número de procesadores: 1. Según el número de usuarios: Los sistemas operativos pueden estar diseñados para ser utilizados por un único usuario o por varios usuarios al mismo tiempo. Sistemas operativos monousuario: Solo permiten que un único usuario utilice el sistema en un momento dado. Ejemplo: Windows 10, macOS. Sistemas operativos multiusuario: Permiten que varios usuarios accedan al sistema de manera concurrente. Cada usuario tiene su propio espacio de trabajo, pero todos comparten los recursos del sistema. Ejemplo: Unix, Linux, Windows Server. 2. Según el número de procesos: Los sistemas operativos también se pueden clasificar según su capacidad para manejar procesos (instancias de programas en ejecución). Sistemas operativos de un solo proceso: Son capaces de ejecutar un solo proceso a la vez. En general, no permiten la multitarea. Ejemplo: Algunos sistemas embebidos y sistemas muy simples. Sistemas operativos multiproceso: Pueden gestionar múltiples procesos simultáneamente, proporcionando la capacidad de ejecutar varios programas a la vez (multitarea). Ejemplo: Windows, Linux, macOS. Sistemas operativos de multiprogramación: Aunque se centran en la ejecución de varios programas, pueden no ejecutar todos los procesos al mismo tiempo, sino que el sistema operativo cambia de contexto rápidamente entre procesos. Ejemplo: Linux, Unix. Sistemas operativos de multitarea: Ejecutan múltiples procesos a la vez, ya sea por medio de multitarea cooperativa (donde los procesos deben ceder el control al sistema operativo) o multitarea preventiva (donde el sistema operativo interrumpe los procesos para asignarles tiempos de CPU). Ejemplo: Windows, Linux. 3. Según el número de procesadores: Esta clasificación se refiere a la capacidad del sistema operativo para gestionar múltiples procesadores (o núcleos) en un sistema. Sistemas operativos de un solo procesador (monoprocesador): Están diseñados para funcionar en una sola CPU o núcleo, y no pueden aprovechar múltiples procesadores simultáneamente. Ejemplo: Algunos sistemas embebidos o versiones antiguas de sistemas operativos como MS-DOS. Sistemas operativos multiprocesador: Estos sistemas están diseñados para aprovechar múltiples procesadores, distribuyendo los procesos entre ellos para mejorar el rendimiento. Ejemplo: Linux, Windows Server, macOS (en servidores y estaciones de trabajo de alto rendimiento). Sistemas operativos de multiprocesamiento simétrico (SMP): Todos los procesadores son tratados de manera igual, es decir, el sistema operativo distribuye las tareas y gestiona la comunicación entre ellos de forma equilibrada. Ejemplo: Linux, Windows Server, macOS. Sistemas operativos de multiprocesamiento asimétrico (AMP): Solo uno de los procesadores es responsable de gestionar los recursos y el control del sistema, mientras que los demás procesadores ejecutan tareas específicas bajo la supervisión del principal. Ejemplo: Algunos sistemas embebidos y antiguos. Resumen: Número de usuarios: Monousuario vs. Multiusuario. Número de procesos: Un solo proceso, Multiproceso, Multiprogramación, Multitarea. Número de procesadores: Monoprocesador, Multiprocesador, SMP, AMP. Cada tipo de sistema operativo está optimizado para diferentes necesidades y entornos, desde computadoras personales hasta grandes servidores o dispositivos embebidos. Las principales funciones de los sistemas operativos son esenciales para el correcto funcionamiento de cualquier dispositivo informático. Estas funciones permiten que el sistema operativo gestione los recursos de hardware, coordine la ejecución de tareas y proporcione una interfaz de usuario, entre otras tareas. A continuación, te detallo las funciones más importantes: 1. Gestión de procesos El sistema operativo se encarga de crear, ejecutar, y terminar procesos. Un proceso es un programa en ejecución, y la gestión de procesos incluye: Planificación de procesos: Asignar recursos de la CPU a diferentes procesos, tomando decisiones sobre qué proceso debe ejecutarse en un momento dado. Conmutación de contexto: Cambiar de un proceso a otro, guardando el estado del proceso actual y recuperando el del siguiente. Sincronización de procesos: Coordinar la ejecución de varios procesos para evitar conflictos o errores, especialmente en sistemas multitarea. Interbloqueo (Deadlock): Manejo de situaciones en las que los procesos están esperando indefinidamente unos a otros para obtener recursos. 2. Gestión de memoria El sistema operativo administra la memoria RAM de manera eficiente: Asignación de memoria: Asigna bloques de memoria a los procesos según lo necesiten. Segmentación y paginación: Técnicas que dividen la memoria en partes más pequeñas para hacer un uso eficiente del espacio y proteger la memoria de un proceso de otro. Memoria virtual: Permite que los procesos utilicen más memoria de la que realmente tiene la máquina, utilizando almacenamiento secundario (disco duro o SSD) como memoria adicional. 3. Gestión de archivos El sistema operativo proporciona un sistema de archivos para organizar, almacenar y acceder a los datos de manera eficiente: Creación, lectura, escritura y eliminación de archivos: Facilita las operaciones básicas con archivos. Estructuración del sistema de archivos: Organiza los archivos en directorios y subdirectorios para su fácil acceso y manejo. Seguridad de archivos: Controla los permisos de acceso a los archivos y directorios, asegurando que solo los usuarios autorizados puedan modificarlos. 4. Gestión de dispositivos (Entrada/Salida) El sistema operativo controla todos los dispositivos conectados al sistema, como teclado, ratón, impresoras, discos duros, etc. Esto se logra mediante: Controladores de dispositivos (drivers): Programas que permiten que el sistema operativo interactúe con el hardware específico. Interrupciones: Permite que el sistema operativo reciba señales de eventos externos, como la pulsación de una tecla o la llegada de datos desde una red. Buffers y colas: Técnicas para gestionar las transferencias de datos entre dispositivos y la memoria de manera eficiente. 5. Seguridad y protección El sistema operativo protege tanto los datos como los recursos del sistema frente a accesos no autorizados o dañinos: Autenticación y autorización: Utiliza contraseñas, huellas dactilares u otros métodos de autenticación para verificar la identidad de los usuarios. Control de acceso: Define permisos para acceder a archivos, dispositivos y otras áreas del sistema, asegurando que solo los usuarios con permisos adecuados puedan modificar o ejecutar ciertos recursos. Cifrado: Protege los datos sensibles mediante técnicas de encriptación, garantizando que solo los usuarios autorizados puedan acceder a ellos. 6. Gestión de redes El sistema operativo gestiona la comunicación entre computadoras a través de redes, ya sea LAN (Local Area Network) o WAN (Wide Area Network): Conexiones de red: Configura y administra las interfaces de red (Ethernet, Wi-Fi, etc.), estableciendo y gestionando conexiones. Protocolos de red: Soporta protocolos de comunicación, como TCP/IP, que permiten el intercambio de datos entre dispositivos. Una licencia de software es un acuerdo legal que establece los términos y condiciones bajo los cuales un software puede ser utilizado, distribuido y modificado. Es un contrato entre el creador o titular de los derechos del software y el usuario final, especificando qué está permitido hacer con el software y qué no. Las licencias de software regulan aspectos como: Derechos de uso: Cuántas copias del software se pueden instalar y en cuántos dispositivos. Distribución: Si el software puede ser compartido o distribuido a otros usuarios. Modificación: Si se pueden hacer cambios en el código fuente (si el software es de código abierto) o si se puede adaptar para otros usos. Soporte y actualizaciones: Qué tipo de soporte o actualizaciones están disponibles. Responsabilidad: Exoneración de responsabilidad del desarrollador en caso de problemas con el software. Tipos de licencias de software Existen varios tipos de licencias, y los desarrolladores pueden elegir una licencia específica según sus objetivos (por ejemplo, limitar el uso comercial o permitir la modificación libre). 1. Licencia propietaria (o comercial) Descripción: El software con licencia propietaria es de propiedad exclusiva de su creador o empresa. Los usuarios compran el derecho de usar el software, pero no tienen acceso al código fuente ni la posibilidad de modificarlo. Restricciones: Generalmente, no se permite la redistribución ni la modificación. Ejemplos: Microsoft Windows. Adobe Photoshop. 2. Licencia de código abierto (Open Source) Descripción: Con esta licencia, el software está disponible de manera que cualquier persona puede ver, modificar y distribuir el código fuente. Existen diversas licencias dentro de este grupo, y cada una tiene diferentes restricciones o permisos sobre el uso y distribución del código. Ejemplos: GNU General Public License (GPL). MIT License. Apache License. 3. Licencia freeware Descripción: El software es gratuito para el usuario, pero no necesariamente de código abierto. El creador mantiene los derechos de autor y puede restringir el uso o distribución del software. Ejemplos: Skype (en sus primeras versiones). Adobe Acrobat Reader. 4. Licencia shareware Descripción: El software se distribuye de manera gratuita por un período de tiempo limitado, después del cual se requiere una compra para continuar usándolo o acceder a funcionalidades adicionales. Ejemplos: WinRAR. Trialware de muchas aplicaciones de pago. 5. Licencia Creative Commons Descripción: Licencia que permite que los creadores otorguen ciertos derechos de uso y distribución bajo condiciones específicas. Aunque no es estrictamente para software, se usa en algunas aplicaciones y contenido multimedia. Ejemplos: Contenido multimedia, imágenes, y a veces aplicaciones web que usan estas licencias. Las licencias de software más conocidas 1. GNU General Public License (GPL) Descripción: Es una de las licencias de código abierto más estrictas. Permite a los usuarios modificar y distribuir el software, pero exige que cualquier software derivado también esté bajo la misma licencia. Esto garantiza que el software siga siendo libre y accesible. Ejemplos de software bajo GPL: Linux. GIMP. 2. Licencia propietaria de software Descripción: Esta es la licencia bajo la cual se distribuye la mayoría del software comercial. Los usuarios pueden usar el software bajo ciertas restricciones y generalmente deben pagar por el uso o la licencia. Ejemplos de software con licencias propietarias: Microsoft Office. Adobe Creative Cloud. AutoCAD. 3. Licencia BSD Descripción: Esta licencia permite la redistribución y modificación del código fuente con pocas restricciones. Es ampliamente usada en el desarrollo de software libre y se encuentra en proyectos como FreeBSD. Ejemplos de software bajo BSD: FreeBSD. OpenBSD. Conclusión Las licencias de software son esenciales para proteger los derechos de autor y definir cómo puede utilizarse, modificarse y distribuirse un software. Al elegir una licencia, los desarrolladores pueden decidir el nivel de acceso y control que desean tener sobre su software, y los usuarios deben comprender las limitaciones que cada tipo de licencia impone. Las licencias más comunes incluyen GPL y BSD para código abierto, y propietarias para software comercial. ¿Quién es Richard Stallman? Richard Stallman es un programador y activista estadounidense, conocido por ser uno de los principales defensores del software libre. Nació el 16 de marzo de 1953 en Nueva York. Stallman es famoso principalmente por haber fundado el Movimiento del Software Libre y la Free Software Foundation (FSF), una organización dedicada a promover la libertad de los usuarios de software para usar, estudiar, modificar y distribuir programas. ¿Qué fundó Richard Stallman? 1. Movimiento del Software Libre: En 1983, Stallman inició este movimiento con la intención de desarrollar software que pudiera ser usado libremente por todos. Para él, "libre" no se refería al precio del software, sino a la libertad que los usuarios tienen para controlarlo. El lema del movimiento es: "Libertad para los usuarios, no precio gratuito". 2. GNU (GNU's Not Unix): En 1983, Stallman lanzó el proyecto GNU con el objetivo de crear un sistema operativo completamente libre, similar a UNIX. A lo largo de los años, este proyecto resultó en el desarrollo de una serie de herramientas y programas que forman el núcleo de muchos sistemas operativos basados en software libre, como Linux. Aunque GNU fue el proyecto inicial, el kernel Linux, creado por Linus Torvalds, es el que suele asociarse más comúnmente con estos sistemas operativos, como GNU/Linux. 3. Free Software Foundation (FSF): En 1985, Stallman fundó la FSF para apoyar el desarrollo del software libre y defender los derechos de los usuarios frente a las restricciones impuestas por las licencias propietarias. La FSF ha promovido campañas contra el software privativo y ha apoyado el desarrollo de licencias como la GPL (General Public License), que garantiza que el software libre mantenga su libertad a lo largo del tiempo. Stallman es también un crítico feroz de las tecnologías que restringen las libertades de los usuarios, como el software propietario, y ha sido una figura clave en la lucha por la privacidad y los derechos digitales. COMPONENTES DE LA CPU La Unidad Central de Procesamiento (CPU) es el componente principal de un ordenador que se encarga de ejecutar las instrucciones de los programas y gestionar los datos. La CPU está formada por varios componentes internos que trabajan juntos para realizar estas funciones. Los principales componentes de la CPU son: 1. Unidad de Control (CU) La Unidad de Control es responsable de dirigir y coordinar las actividades dentro de la CPU. Se encarga de interpretar las instrucciones del programa y de enviar señales a otras partes de la CPU o del sistema para que ejecuten las operaciones necesarias. También controla el flujo de datos entre los distintos componentes de la computadora y asegura que se sigan los pasos del ciclo de ejecución de instrucciones (búsqueda, decodificación, ejecución). 2. Unidad Aritmético-Lógica (ALU) La ALU realiza todas las operaciones aritméticas y lógicas del ordenador. Operaciones aritméticas: como sumas, restas, multiplicaciones y divisiones. Operaciones lógicas: como comparaciones (igualdad, mayor que, menor que), y operaciones bit a bit (AND, OR, NOT, XOR). La ALU es esencial para realizar las tareas de procesamiento que hacen funcionar las aplicaciones y los sistemas operativos. 3. Registros Los registros son pequeñas unidades de memoria de acceso extremadamente rápido que se encuentran dentro de la CPU. Los registros se utilizan para almacenar datos temporales y resultados intermedios de los cálculos. Estos son cruciales para la rapidez y eficiencia del procesamiento. Algunos registros comunes incluyen: Registro de Instrucción (IR): Almacena la instrucción actual que está siendo procesada. Contador de Programa (PC): Almacena la dirección de la siguiente instrucción a ejecutar. Acumulador (ACC): Almacena el resultado de operaciones aritméticas y lógicas realizadas por la ALU. 4. Caché de la CPU La caché es una memoria de acceso ultrarrápido que almacena datos e instrucciones que son frecuentemente usados o que se predice que serán necesarios próximamente. Existen diferentes niveles de caché (L1, L2, L3): Caché L1: Es la caché más rápida y está integrada directamente en la CPU. Caché L2: Es más grande que la L1 y se encuentra cerca de la CPU, pero con un acceso ligeramente más lento. Caché L3: Es la más grande y lenta, pero sigue estando mucho más cerca de la CPU que la memoria principal (RAM). La caché mejora el rendimiento al reducir la cantidad de veces que la CPU necesita acceder a la memoria RAM, que es más lenta. 5. Bus de Datos El bus de datos es el canal de comunicación a través del cual los datos fluyen entre los diferentes componentes de la CPU y entre la CPU y otros componentes del ordenador (como la memoria RAM, la tarjeta gráfica o los dispositivos de almacenamiento). Su propósito es asegurar que los datos se muevan de manera eficiente entre los registros, la ALU y otras partes del sistema. 6. Decodificador de Instrucciones El decodificador de instrucciones interpreta las instrucciones que provienen de la memoria y las convierte en señales que la CPU puede ejecutar. Este componente traduce las instrucciones en acciones específicas, como mover datos entre registros, realizar cálculos, acceder a la memoria, etc. 7. Reloj de la CPU (Clock) El reloj de la CPU es un generador de señales de temporización que coordina las operaciones dentro de la CPU. Las instrucciones en la CPU se ejecutan en ciclos de reloj. La velocidad del reloj (medida en Hertz o GHz) determina cuántos ciclos de reloj la CPU puede completar por segundo, lo que está directamente relacionado con su rendimiento. Resumen de los componentes principales de la CPU: 1. Unidad de Control (CU): Coordina y dirige la ejecución de instrucciones. 2. Unidad Aritmético-Lógica (ALU): Realiza operaciones aritméticas y lógicas. 3. Registros: Memoria ultrarrápida para almacenar datos temporales y resultados intermedios. 4. Caché de la CPU: Memoria rápida para almacenar datos frecuentemente utilizados. 5. Bus de Datos: Canal de comunicación entre la CPU y otros componentes del sistema. 6. Decodificador de Instrucciones: Interpreta las instrucciones para la CPU. 7. Reloj de la CPU: Genera señales de temporización para coordinar las operaciones. Estos componentes trabajan en conjunto para permitir que la CPU ejecute programas y realice los cálculos y operaciones que dan lugar a las funcionalidades de un ordenador. El software libre y el software propietario son dos tipos de licencias de software que se diferencian principalmente en el grado de libertad que tienen los usuarios para modificar, distribuir y utilizar el programa. Aquí te presento las principales diferencias entre ambos: 1. Licencia y derechos del usuario Software Libre: El software libre está basado en los principios de la libertad del usuario. Los usuarios tienen libertad para usar, estudiar, modificar y distribuir el software. El código fuente está disponible para cualquier persona, lo que permite a los usuarios examinar cómo funciona el software y modificarlo según sus necesidades. Las libertades clave del software libre son: 1. Libertad para usar el software para cualquier propósito. 2. Libertad para estudiar el código y adaptarlo a las necesidades del usuario. 3. Libertad para distribuir copias del software. 4. Libertad para modificar el software y distribuir las versiones modificadas. Software Propietario: El software propietario, también conocido como software comercial o privativo, es aquel cuyo código fuente no está disponible para el público. Los usuarios solo tienen acceso a la versión compilada del programa. El propietario del software (la empresa o el creador) mantiene todos los derechos sobre el código y limita lo que los usuarios pueden hacer con el programa. Por lo general, no se permite modificarlo, distribuirlo o, en algunos casos, siquiera compartirlo. La licencia de software propietario establece restricciones, como el número de instalaciones o el tipo de uso permitido (por ejemplo, uso personal o comercial). 2. Acceso al código fuente Software Libre: El código fuente está disponible y puede ser consultado, modificado y distribuido por cualquier persona. Esto fomenta la colaboración entre los usuarios y desarrolladores, mejorando la seguridad, la calidad y la personalización del software. Software Propietario: El código fuente no está disponible para los usuarios. Solo el desarrollador o la empresa que lo creó puede acceder y modificar el código. Los usuarios no pueden realizar cambios ni ver cómo funciona el software en su interior. 3. Distribución y modificación Software Libre: Los usuarios tienen libertad para distribuir el software (en su forma original o modificada) sin restricciones significativas. Pueden hacer modificaciones para adaptarlo a sus necesidades y compartir esas modificaciones con otros. Software Propietario: No se permite la distribución ni la modificación del software sin el permiso explícito del titular de los derechos de autor. Los usuarios solo pueden instalar y usar el software de acuerdo con los términos establecidos en el contrato de licencia. 4. Costo Software Libre: El software libre puede ser gratis o de pago. La clave es que, aunque sea de pago, siempre se respetan las libertades de uso, modificación y distribución del código. Muchos programas libres son gratuitos, pero el precio no está relacionado con las restricciones de libertad. Software Propietario: El software propietario generalmente tiene un costo asociado con la compra de licencias. Aunque algunos programas propietarios pueden ofrecer versiones gratuitas (por ejemplo, pruebas o ediciones limitadas), el acceso total generalmente requiere un pago. 5. Seguridad y privacidad Software Libre: Al ser accesible el código fuente, cualquier persona puede auditar el software en busca de vulnerabilidades de seguridad o problemas de privacidad. Esto suele generar un entorno más transparente y con una comunidad activa que se ocupa de identificar y corregir errores. Las mejoras y parches de seguridad pueden implementarse rápidamente por la comunidad o los desarrolladores. Software Propietario: El software propietario no permite a los usuarios auditar el código fuente, lo que genera una falta de transparencia en cuanto a su seguridad y privacidad. El proveedor del software es el único responsable de corregir errores o vulnerabilidades, lo que puede llevar más tiempo dependiendo de sus políticas de actualización. 6. Ejemplos de Software Libre Sistema Operativo GNU/Linux (distribuciones como Ubuntu, Debian, Fedora). Navegador web Mozilla Firefox. Aplicaciones de oficina como LibreOffice. Editor de imágenes GIMP. Servidor web Apache. 7. Ejemplos de Software Propietario Sistema operativo Microsoft Windows. Paquete de oficina Microsoft Office. Navegador web Google Chrome (basado en Chromium, que es libre, pero Google Chrome es propietario). Software de edición de imágenes Adobe Photoshop. Resumen de las diferencias clave: Característica Software Libre Software Propietario No disponible, cerrado al Código fuente Disponible, accesible y modificable público Limitadas, dependiendo de la Libertades Usar, estudiar, modificar, distribuir licencia Permite compartir el software y las No se permite distribuir o Distribución modificaciones modificar sin permiso Puede ser gratuito o de pago, pero siempre Generalmente tiene un costo por Costo libre en cuanto a derechos licencia Seguridad y Más transparencia y control por parte de la Menos transparencia, depende privacidad comunidad del proveedor En resumen, la principal diferencia radica en la libertad que otorgan: el software libre pone énfasis en la libertad del usuario para modificar y distribuir el programa, mientras que el software propietario limita esos derechos a favor del titular del software. DIFERENCIAS PRINCIPALES ENTRE LA GPL Y LA AGPL: Las licencias GPL (General Public License) y AGPL (Affero General Public License) son ambas licencias de software libre creadas por la Free Software Foundation (FSF) para asegurar que el software permanezca libre y accesible, pero tienen diferencias clave en cuanto a las condiciones para el uso y distribución del software, especialmente cuando se trata de software accesible a través de redes. Aquí te explico las diferencias principales entre la GPL y la AGPL: 1. Licencia GPL (General Public License) La GPL es una licencia muy conocida y ampliamente utilizada para software libre. Fue diseñada para garantizar que el software permanezca libre y que los usuarios tengan las libertades de usar, estudiar, modificar y distribuir el código. Existen diferentes versiones de la GPL, siendo las más comunes la GPLv2 y la GPLv3. Condiciones clave de la GPL: Distribución: Si redistribuyes el software (ya sea original o modificado), debes hacerlo bajo la misma licencia GPL. Código fuente: Si distribuyes el software, debes proporcionar acceso al código fuente o hacerlo disponible de alguna manera. Modificación: Puedes modificar el software, pero si lo distribuyes, también debes distribuir el código fuente de las modificaciones bajo la misma licencia GPL. Software ejecutado en servidores: Si usas software con licencia GPL en un servidor, no estás obligado a compartir el código fuente de las modificaciones a menos que redistribuyas el software. Por ejemplo, si modificas el software y lo usas en un servidor, los usuarios del servidor no tienen acceso al código fuente modificado a menos que tú lo distribuyas directamente. 2. Licencia AGPL (Affero General Public License) La AGPL es una variante de la GPL que agrega una cláusula adicional para cubrir específicamente los casos de software que se ejecuta en servidores a través de redes. La AGPL fue diseñada para cerrar una brecha importante en la GPL, que no cubría el uso de software en servidores sin distribución directa. Condiciones clave de la AGPL: Distribución: Al igual que la GPL, si redistribuyes el software (original o modificado), debes hacerlo bajo la misma licencia AGPL. Código fuente: Debes proporcionar el código fuente cuando redistribuyes el software o haces modificaciones. Modificación: Si modificas el software, debes poner el código fuente de las modificaciones a disposición de los usuarios que reciban el software (como en la GPL). Software ejecutado en servidores: La gran diferencia entre la AGPL y la GPL es que la AGPL requiere que si usas el software modificado en un servidor y permite que otros usuarios interactúen con él a través de una red (por ejemplo, un servidor web), debes poner a disposición el código fuente completo de las modificaciones, incluso si no distribuyes el software. En otras palabras, si alguien interactúa con tu software modificado en un servidor (por ejemplo, accediendo a través de un navegador), tú debes hacer disponible el código fuente del software modificado a esa persona, lo que no es necesario bajo la GPL. Resumen de las diferencias clave: Característica GPL AGPL No requiere compartir código Requiere compartir el código fuente si el Uso en servidores fuente si no se redistribuye el software se usa en servidores accesibles a software través de una red Modificaciones deben estar Modificaciones deben estar disponibles Condiciones de disponibles si se distribuye el incluso si solo se usa el software en modificación software servidores Solo necesitas distribuir el Siempre que el software se use en una red, Distribución del código fuente si distribuyes el el código fuente debe estar disponible para código fuente software los usuarios Ejemplo práctico: GPL: Supongamos que usas un software con licencia GPL, lo modificas y lo implementas en un servidor, pero no lo distribuyes. No tienes obligación de compartir el código fuente modificado con los usuarios que interactúan con el software a través de la red. AGPL: Si usas el mismo software con licencia AGPL, lo modificas y lo implementas en un servidor accesible por otros, debes ofrecer el código fuente modificado a los usuarios que interactúan con él, incluso si no distribuyes el software directamente. Conclusión La principal diferencia entre GPL y AGPL radica en el tratamiento del uso en servidores. Mientras que la GPL solo requiere que se comparta el código fuente cuando se redistribuye el software, la AGPL obliga a compartir el código fuente si el software se usa en un servidor accesible a través de una red, incluso si no se distribuye el software. Esto hace que la AGPL sea más estricta en términos de asegurar que las modificaciones hechas al software sean compartidas con la comunidad, incluso si no se distribuye el software, pero se pone a disposición en línea. LA CONVERSIÓN DE CÓDIGO BINARIO A DECIMAL, OCTAL Y HEXADECIMAL La conversión de código binario a decimal, octal y hexadecimal (y viceversa) es una parte fundamental de la informática, ya que estos sistemas numéricos se utilizan para representar datos de diferentes formas. A continuación, te explico cómo hacer estas conversiones, con ejemplos: 1. Conversión de Binario a Decimal El sistema binario es un sistema de numeración en base 2, mientras que el sistema decimal es en base 10. Para convertir un número binario a decimal, se deben seguir estos pasos: Método: Paso 1: Escribe el número binario. Paso 2: Asocia a cada dígito binario una potencia de 2, comenzando desde 0 para el dígito más a la derecha. Paso 3: Multiplica cada dígito binario por la potencia de 2 correspondiente. Paso 4: Suma todos los resultados de las multiplicaciones. Ejemplo: Convierte el número binario 1011 a decimal. 1. Escribe el número binario: 1011. 2. Asocia cada dígito binario a una potencia de 2: 1 × 2³ = 1 × 8 = 8 0 × 2² = 0 × 4 = 0 1 × 2¹ = 1 × 2 = 2 1 × 2⁰ = 1 × 1 = 1 3. Suma los resultados: 8 + 0 + 2 + 1 = 11. Por lo tanto, 1011₂ (binario) es igual a 11₁₀ (decimal). 2. Conversión de Binario a Octal El sistema octal es un sistema en base 8. Para convertir un número binario a octal, primero se agrupan los bits del número binario en grupos de tres, comenzando desde la derecha. Luego, cada grupo de tres bits se convierte a su equivalente octal. Método: Paso 1: Escribe el número binario. Paso 2: Agrupa los bits en bloques de tres, comenzando desde la derecha. Si el número no es múltiplo de 3, agrega ceros a la izquierda. Paso 3: Convierte cada grupo de tres bits a su valor octal. Paso 4: Escribe el número octal. Ejemplo: Convierte el número binario 110101 a octal. 1. Escribe el número binario: 110101. 2. Agrupa los bits en bloques de tres: 110 101. 3. Convierte cada grupo a octal: 110₂ = 6₈ 101₂ = 5₈ 4. El número octal es 65₈. Por lo tanto, 110101₂ (binario) es igual a 65₈ (octal). 3. Conversión de Binario a Hexadecimal El sistema hexadecimal es un sistema en base 16. Para convertir un número binario a hexadecimal, se agrupan los bits en bloques de cuatro, comenzando desde la derecha. Luego, cada grupo de cuatro bits se convierte a su equivalente hexadecimal. Método: Paso 1: Escribe el número binario. Paso 2: Agrupa los bits en bloques de cuatro, comenzando desde la derecha. Si el número no es múltiplo de 4, agrega ceros a la izquierda. Paso 3: Convierte cada grupo de cuatro bits a su valor hexadecimal. Paso 4: Escribe el número hexadecimal. Ejemplo: Convierte el número binario 101101110 a hexadecimal. 1. Escribe el número binario: 101101110. 2. Agrupa los bits en bloques de cuatro: 0101 1011 1010. 3. Convierte cada grupo a hexadecimal: 0101₂ = 5₁₆ 1011₂ = B₁₆ 1010₂ = A₁₆ 4. El número hexadecimal es 5BA₁₆. Por lo tanto, 101101110₂ (binario) es igual a 5BA₁₆ (hexadecimal). 4. Conversión de Decimal a Binario Para convertir un número decimal a binario, se utiliza el método de división sucesiva por 2: Método: Paso 1: Divide el número decimal entre 2. Paso 2: Anota el residuo. Paso 3: Divide el cociente entre 2 y anota el residuo. Paso 4: Repite este proceso hasta que el cociente sea 0. Paso 5: El número binario es el conjunto de los restos leídos de abajo hacia arriba. Ejemplo: Convierte el número decimal 13 a binario. 1. 13 ÷ 2 = 6, residuo 1 2. 6 ÷ 2 = 3, residuo 0 3. 3 ÷ 2 = 1, residuo 1 4. 1 ÷ 2 = 0, residuo 1 Por lo tanto, 13₁₀ es 1101₂ en binario. 5. Conversión de Octal a Binario Para convertir de octal a binario, se convierte cada dígito octal en un número binario de tres bits. Método: Paso 1: Escribe el número octal. Paso 2: Convierte cada dígito octal a su equivalente binario de 3 bits. Paso 3: Junta todos los grupos de bits binarios. Ejemplo: Convierte el número octal 65₈ a binario. 1. Convierte cada dígito octal: 6₈ = 110₂ 5₈ = 101₂ 2. Junta los grupos binarios: 110101₂. Por lo tanto, 65₈ es 110101₂ en binario. 6. Conversión de Hexadecimal a Binario Para convertir de hexadecimal a binario, se convierte cada dígito hexadecimal en un número binario de 4 bits. Método: Paso 1: Escribe el número hexadecimal. Paso 2: Convierte cada dígito hexadecimal a su equivalente binario de 4 bits. Paso 3: Junta todos los grupos de bits binarios. Ejemplo: Convierte el número hexadecimal 5BA₁₆ a binario. 1. Convierte cada dígito hexadecimal: 5₁₆ = 0101₂ B₁₆ = 1011₂ A₁₆ = 1010₂ 2. Junta los grupos binarios: 010110111010₂. Por lo tanto, 5BA₁₆ es 010110111010₂ en binario. Resumen: Binario a Decimal: Se multiplica cada bit por la potencia de 2 correspondiente. Binario a Octal: Se agrupan los bits en bloques de tres y se convierten a octal. Binario a Hexadecimal: Se agrupan los bits en bloques de cuatro y se convierten a hexadecimal. Decimal a Binario: Se usa la división sucesiva por 2. Octal a Binario: Se convierte cada dígito octal en un grupo de tres bits binarios. Hexadecimal a Binario: Se convierte cada dígito hexadecimal en un grupo de cuatro bits binarios. Cada sistema numérico (binario, octal, decimal y hexadecimal) tiene su aplicación y su propia forma de interaccionar con las computadoras, especialmente en la representación de datos y la memoria. ¿QUÉ ES UN PROCESO EN INFORMÁTICA? En informática, un proceso es un programa en ejecución. Es una instancia de un programa que se está ejecutando en un sistema operativo. Un proceso tiene su propio espacio de memoria, sus propios recursos del sistema y puede ejecutarse en paralelo con otros procesos. Un proceso es más que solo el código del programa, ya que también incluye: El código ejecutable: Las instrucciones que el procesador debe ejecutar. El contexto del proceso: Incluye el valor de los registros, el contador de programa (que indica qué instrucción ejecutar a continuación) y otros elementos de estado necesarios para reanudar la ejecución cuando el proceso es interrumpido. El espacio de memoria: Un área de memoria dedicada a las variables y estructuras de datos que el proceso necesita para su ejecución. Los recursos del sistema: Archivos abiertos, conexiones de red, etc. Cada vez que un programa se ejecuta, el sistema operativo crea un proceso para gestionar su ejecución. Posibles estados de los procesos Los procesos pueden encontrarse en varios estados a lo largo de su ciclo de vida, dependiendo de lo que están haciendo en un momento dado. Los estados más comunes de un proceso son los siguientes: 1. Nuevo (New): Este es el estado en el que un proceso se encuentra cuando es creado, pero aún no ha comenzado su ejecución. El proceso aún no ha sido cargado en la memoria ni asignado a un procesador. 2. Listo (Ready): El proceso está cargado en la memoria y está esperando para ser asignado a un procesador. En este estado, el proceso está esperando su turno para ejecutarse en la CPU. Puede estar en una cola de procesos listos esperando ser ejecutado. 3. Ejecutándose (Running): El proceso está siendo ejecutado por la CPU en ese momento. En este estado, el proceso tiene control total sobre la CPU y está ejecutando su código. 4. Bloqueado o Esperando (Blocked or Waiting): El proceso está esperando algún evento o condición, como la entrada/salida (I/O) o la disponibilidad de un recurso. Mientras esté en este estado, no puede continuar su ejecución hasta que el evento que espera se complete. 5. Terminado o Finalizado (Terminated or Exit): El proceso ha completado su ejecución o ha sido finalizado por alguna otra razón (como un error o una interrupción). En este estado, el proceso ya no está activo y ha liberado todos sus recursos. Diagrama de los estados del proceso: PLANIFICADOR DE PROCESOS El planificador de procesos es una parte del sistema operativo responsable de la gestión y asignación de la CPU entre los diferentes procesos listos para ejecutarse. Su tarea es decidir qué proceso se ejecutará en un momento dado, lo que se conoce como planificación de la CPU. El planificador toma decisiones basadas en varios criterios, como la prioridad de los procesos, el tiempo de CPU utilizado, o la política de planificación del sistema operativo. Tipos de planificación de procesos: Planificación de procesos por prioridades: Algunos procesos pueden tener más prioridad que otros. El planificador ejecutará primero los procesos con mayor prioridad. Planificación por turnos (Round Robin): Cada proceso recibe una cantidad de tiempo (un "quantum") para ejecutarse antes de ser interrumpido y permitir que otro proceso ocupe la CPU. Planificación de procesos por prioridades dinámicas: Las prioridades de los procesos pueden cambiar a medida que se ejecutan, dependiendo del tiempo que hayan estado en ejecución o de sus necesidades de recursos. Planificación basada en el tiempo de llegada: Los procesos se programan para ejecutarse en el orden en que llegan al sistema. Funciones del planificador de procesos: 1. Selección de procesos listos: El planificador selecciona qué proceso de la cola de procesos listos debe ser asignado a la CPU. 2. Asignación de la CPU: El planificador asigna la CPU a un proceso, y el proceso comienza a ejecutarse. 3. Interrupción y cambio de contexto: El planificador puede interrumpir un proceso en ejecución (por ejemplo, cuando su tiempo asignado ha expirado) y realizar un cambio de contexto para guardar el estado del proceso interrumpido y restaurar el estado de otro proceso que será ejecutado. 4. Manejo de procesos bloqueados: Si un proceso está esperando recursos, el planificador puede asignar la CPU a otro proceso hasta que el proceso bloqueado esté listo para continuar. Resumen Proceso: Es un programa en ejecución con su propio espacio de memoria y contexto. Estados de los procesos: Incluyen Nuevo, Listo, Ejecutándose, Bloqueado y Terminado. Planificador de procesos: Es responsable de gestionar la ejecución de procesos, asignando la CPU a los procesos listos para ejecutarse mediante diferentes políticas de planificación. El planificador juega un papel clave en la gestión de la CPU y garantiza que los recursos del sistema se utilicen de manera eficiente. PRINCIPALES ALGORITMOS DE PLANIFICACIÓN DE PROCESOS: 1. First-Come, First-Served (FCFS) - Primero en Llegar, Primero en Servir Este es el algoritmo de planificación más sencillo. Los procesos se ejecutan en el orden en que llegan a la cola de procesos listos, es decir, el proceso que llega primero se ejecuta primero. Características: Ventaja: Es fácil de implementar y entender. Desventaja: No es eficiente si los procesos tienen tiempos de ejecución muy diferentes, ya que puede generar un fenómeno conocido como "convoy de procesos", donde los procesos más largos retrasan a los más cortos. No tiene en cuenta prioridades ni tiempos de ejecución. Ejemplo: Si los procesos llegan en el orden P1, P2, P3 y tienen tiempos de ejecución 5, 3 y 2 unidades de tiempo, respectivamente, el orden de ejecución será: P1 (5 unidades) P2 (3 unidades) P3 (2 unidades) 2. Shortest Job Next (SJN) o Shortest Job First (SJF) - El Trabajo Más Corto Primero Este algoritmo selecciona el proceso con el tiempo de ejecución más corto (o el tiempo de CPU más corto restante) para ejecutarlo primero. Es ideal para minimizar el tiempo de espera promedio. Características: Ventaja: Minimiza el tiempo de espera promedio y la espera total de los procesos. Desventaja: No siempre es práctico, porque se necesita conocer de antemano el tiempo de ejecución de los procesos, lo cual no siempre es posible. Problema: Si un proceso largo sigue llegando al sistema, puede "prevenir" que los procesos cortos se ejecuten, lo que lleva a la injusticia (un fenómeno llamado "starvation"). Ejemplo: Si los procesos tienen tiempos de ejecución 4, 1, 3, el algoritmo SJF selecciona el proceso con el tiempo más corto primero: P2 (1 unidad) P3 (3 unidades) P1 (4 unidades) 3. Round Robin (RR) - Rotación Cíclica El algoritmo Round Robin (RR) es una de las formas más comunes de planificación para sistemas interactivos. Cada proceso recibe una cuota de tiempo fija (o quantum) para ejecutarse. Si un proceso no termina dentro de su quantum, se coloca al final de la cola y el planificador selecciona el siguiente proceso en la cola. Características: Ventaja: Es equitativo, ya que cada proceso recibe un turno de ejecución de igual duración. Desventaja: Si los quanta de tiempo son demasiado grandes, el comportamiento se parece más a FCFS; si son demasiado pequeños, el sistema puede tener un alto costo por cambio de contexto. Ideal para sistemas multitarea con muchos procesos pequeños. Ejemplo: Supongamos que los procesos P1, P2 y P3 tienen tiempos de ejecución 5, 3 y 2, respectivamente, y un quantum de 2 unidades de tiempo: P1 ejecuta 2 unidades, luego se pasa a P2. P2 ejecuta 2 unidades, luego se pasa a P3. P3 ejecuta 2 unidades, luego se pasa a P1. P1 ejecuta las 3 unidades restantes. P2 finaliza. P3 finaliza. El orden sería P1, P2, P3, P1, y luego los procesos restantes. 4. Planificación con Algoritmo de Estimación de Tiempo de Ejecución (Shortest Remaining Time First - SRTF) Este algoritmo es una variante preemptiva del Shortest Job First (SJF). En lugar de esperar a que un proceso termine, el planificador interrumpe el proceso en ejecución si llega un proceso con un tiempo de ejecución restante más corto. Características: Ventaja: Minimizando el tiempo de espera promedio de todos los procesos. Desventaja: Requiere que el sistema operativo sepa cuánto tiempo le queda a un proceso para completar su ejecución, lo cual no siempre es posible. Resumen de los algoritmos Algoritmo Ventaja Desventaja FCFS Sencillo de implementar Puede generar tiempos de espera largos (convoy) Minimiza el tiempo de espera Requiere conocer el tiempo de ejecución con SJF promedio antelación Round Equidad en la asignación de Puede generar sobrecarga de cambio de contexto si el Robin la CPU quantum es muy pequeño Minimizando el tiempo de Requiere estimación precisa del tiempo de ejecución SRTF espera restante ¿QUÉ ES LA VIRTUALIZACIÓN? La virtualización es la creación de una versión virtual de un recurso de hardware, como una máquina, un sistema operativo, almacenamiento o red. En computación, la virtualización permite ejecutar varias máquinas virtuales (VM) sobre un único hardware físico. Esto significa que múltiples entornos operativos pueden compartir los recursos de un solo servidor, creando la ilusión de que cada máquina virtual tiene su propio hardware dedicado. En virtualización, un software especial llamado hypervisor se encarga de gestionar las máquinas virtuales y su interacción con el hardware físico. Ejemplos de virtualización: 1. Virtualización de máquinas (VM): Ejemplo: Si tienes un servidor físico con múltiples recursos, puedes crear varias máquinas virtuales sobre ese servidor. Cada máquina virtual puede tener su propio sistema operativo (Windows, Linux, etc.) y funcionar de manera independiente. Un ejemplo práctico sería crear máquinas virtuales para probar aplicaciones en diferentes entornos sin necesidad de comprar hardware adicional. 2. Virtualización de servidores: Ejemplo: Usar un servidor físico para alojar varios servidores virtuales. Esto es común en centros de datos, donde un único servidor puede ejecutar diferentes instancias de sistemas operativos para diversas aplicaciones o servicios web. 3. Virtualización de escritorio (VDI - Virtual Desktop Infrastructure): Ejemplo: Las empresas pueden crear escritorios virtuales para sus trabajadores. Estos escritorios virtuales se ejecutan en servidores centrales y se pueden acceder desde cualquier dispositivo con conexión a la red, como portátiles, tabletas o móviles. Esto facilita la gestión de sistemas y la seguridad de los datos. 4. Virtualización de red: Ejemplo: Crear redes virtuales (VLANs) dentro de la misma infraestructura de red física, de forma que las máquinas virtuales puedan comunicarse como si estuvieran en redes separadas, a pesar de compartir el mismo hardware de red. Ventajas de la virtualización: 1. Ahorro de costos de hardware: Permite ejecutar varias máquinas virtuales en un solo servidor físico, reduciendo la necesidad de adquirir hardware adicional. 2. Mejor aprovechamiento de los recursos: La virtualización permite que los recursos del servidor físico (CPU, memoria, almacenamiento) sean utilizados de manera más eficiente, ya que las máquinas virtuales pueden compartir estos recursos de manera dinámica. 3. Aislamiento de las máquinas virtuales: Cada máquina virtual es independiente, por lo que si una falla, no afecta a las demás. Esto mejora la seguridad y fiabilidad del sistema global. 4. Facilidad en la creación de copias de seguridad y recuperación: Las máquinas virtuales se pueden clonar fácilmente y hacer copias de seguridad de todo el sistema, lo que facilita la recuperación en caso de incidentes. 5. Escalabilidad y flexibilidad: Las máquinas virtuales se pueden crear y eliminar rápidamente, lo que permite una gran flexibilidad para adaptarse a las necesidades del sistema o la carga de trabajo. 6. Pruebas y desarrollo: Permite crear entornos de prueba y desarrollo que imitan el entorno de producción sin necesidad de hardware dedicado para cada caso. ¿Qué es el hypervisor? Un hypervisor es un tipo de software que gestiona la creación, ejecución y administración de máquinas virtuales sobre el hardware físico. También se le conoce como gestor de máquinas virtuales. El hypervisor se encarga de asignar los recursos del sistema físico (como la CPU, memoria, almacenamiento, etc.) a las máquinas virtuales. Hay dos tipos principales de hypervisor: Hypervisor de tipo 1 (bare-metal): Este tipo de hypervisor se ejecuta directamente sobre el hardware físico del servidor, sin necesidad de un sistema operativo intermedio. Algunos ejemplos son: VMware ESXi Microsoft Hyper-V Xen Hypervisor de tipo 2 (hosted): Este hypervisor se ejecuta sobre un sistema operativo ya existente (el "host") y se gestiona como una aplicación más. Algunos ejemplos son: VirtualBox VMware Workstation Parallels Desktop Ejemplo: Un hypervisor de tipo 1 como VMware ESXi se instala directamente sobre un servidor físico. Luego, puedes crear múltiples máquinas virtuales, cada una con su propio sistema operativo, y ESXi gestiona los recursos y el aislamiento entre ellas. Limitaciones por hardware físico A pesar de que la virtualización es una tecnología poderosa, tiene algunas limitaciones que dependen del hardware físico: 1. Limitaciones de la CPU: Los procesadores físicos tienen un número limitado de núcleos y potencia de cálculo. Aunque la virtualización permite compartir la CPU entre varias máquinas virtuales, si estas tienen cargas de trabajo pesadas, puede producirse una contención de CPU y pérdida de rendimiento. 2. Memoria RAM: La memoria física disponible también es limitada. Aunque se pueden crear múltiples máquinas virtuales, cada una necesita cierta cantidad de memoria RAM. Si el sistema físico no tiene suficiente memoria para satisfacer las necesidades de todas las máquinas virtuales, puede producirse un desbordamiento de memoria o un rendimiento lento. 3. I/O de almacenamiento: Los recursos de almacenamiento (discos duros, SSD) también son limitados. Si muchas máquinas virtuales realizan operaciones de entrada/salida (I/O) de manera intensiva, el rendimiento puede decaer debido a la competencia por los recursos de almacenamiento compartidos. 4. Requerimientos de red: Si las máquinas virtuales necesitan comunicarse entre ellas o con sistemas externos, las redes físicas pueden ser un cuello de botella, especialmente si el sistema no está diseñado para manejar el tráfico intenso generado por múltiples VMs. 5. Compatibilidad de hardware: Algunos dispositivos de hardware (por ejemplo, dispositivos USB o tarjetas gráficas especializadas) pueden no ser totalmente compatibles con las máquinas virtuales. Algunas máquinas virtuales no pueden acceder directamente al hardware físico, como las GPU para tareas intensivas de gráficos. 6. Rendimiento gráfico: Las máquinas virtuales pueden tener dificultades para acceder a recursos gráficos avanzados (por ejemplo, para aplicaciones que requieren mucha potencia gráfica) debido a las limitaciones en la virtualización de GPUs. Resumen Virtualización: Permite ejecutar múltiples entornos (máquinas virtuales) sobre un solo hardware físico, mejorando la eficiencia y ahorrando recursos. Hypervisor: Software que gestiona las máquinas virtuales, permitiendo la compartición de recursos entre ellas. Ventajas: Ahorro de costos, mejor aprovechamiento de recursos, mayor seguridad, flexibilidad y escalabilidad. Limitaciones: El hardware físico tiene limitaciones en términos de CPU, memoria, almacenamiento, I/O de red, etc., que pueden afectar el rendimiento en entornos virtualizados. La virtualización es una herramienta poderosa, pero es importante tener en cuenta las limitaciones del hardware para garantizar que el sistema funcione de manera eficiente.