Resumen de Sistemas Operativos PDF
Document Details
Uploaded by FaithfulHydrogen
IFES
Tags
Summary
Este documento resume los conceptos fundamentales de los sistemas operativos, incluyendo la descripción del firmware, boot trap, tipos de memoria, la CPU, la gestión de información, y las arquitecturas de procesadores. Se explican los diferentes tipos de registros, ejemplos de operaciones, y los avances en las arquitecturas de Von Neumann, CISC y RISC. También se abordan temas como procesos, secuencias y las arquitecturas multinúcleo. El documento es una guía informativa para aquellos interesados en la programación y la tecnología.
Full Transcript
UNIDAD I FIRMWARE El firmware es un tipo de software que está estrechamente integrado en el hardware de un dispositivo. A diferencia del software que se instala en una computadora o en un teléfono móvil, el firmware está diseñado para controlar y gestionar el hardware directamente, y suele ser esen...
UNIDAD I FIRMWARE El firmware es un tipo de software que está estrechamente integrado en el hardware de un dispositivo. A diferencia del software que se instala en una computadora o en un teléfono móvil, el firmware está diseñado para controlar y gestionar el hardware directamente, y suele ser esencial para que el dispositivo funcione correctamente. Es el que está entre el hardware y software, este es un tipo de asistente, configurando el conjunto de componentes que acompañan al CPU, ya que este no puede estar solo y necesita estar siempre acompañado BOOT TRAP El boot trap es lo que corre antes que la pantalla nos arroje el logo de entrada, es el encargado de inicializar todo el conjunto de componentes que acompañan al procesador. Este se encuentra en la memoria ROM Existe un nivel de abstracción llamado virtualización, puede ser llevada a cabo en computadoras, esto nos permite tener más de un SO, no solamente virtualiza el SO, sino que también lo hace con el hardware SISTEMAS OPERATIVOS Los sistemas operativos son conjuntos de aplicaciones o software, los softwares son aplicaciones que van a modificar los sistemas operativos No atómica significa que no se puede dividir La microinstrucción es la desatomizacion es la división de las instrucciones, no puede interrumpirse ya que mantiene vigente la esencia de la atomización La RAM puede modificarse y escribirse, en cambio, la ROM no, ya que es donde encontramos la BIOS. La BIOS es un conjunto de rutinas que se encargan de arrancar el dispositivo. El sistema operativo, puede administrar la memoria RAM, pero no la memoria ROM. TIPOS DE MEMORIA MEMORIA PRINCIPAL: Es la memoria interior, como lo es la memoria RAM MEMORIA SECUNDARIA: Es la memoria externa, como lo son los pendrives, discos, etc. MEMORIA TERCIARIA: Es la nube, como Dropbox. Para acceder a esta necesitamos recurrir a internet CPU (Unidad Central de Procesamiento) La CPU administra el SO porque debe decidir. Existe la CPU multinúcleo, que tiene varios CPU en una sola pastilla. El hecho de tener varias CPU, nos sirve para poder distribuir la carga de trabajo, como es en lo juegos. La CPU saca direcciones, ya que tiene que ser capaz de retroalimentar eso que ingresó pueda mostrar por pantalla sí es el caso de un editor de texto no yo estoy escribiendo escribo algo ese algo e ingresa un buffer sí ingresa memoria, pero a su vez se replica en la pantalla para poder yo tener la retroalimentación de lo que estoy escribiendo eso va a ser sistema operativo. GESTIÓN DE INFORMACIÓN: LECTURA Y ESCRITURA La información en un sistema transita por diferentes vías. Por ejemplo, si quiero acceder a un lugar específico en la memoria, debo indicar la ubicación. En ese lugar, hay algo almacenado, y para leerlo necesito un mecanismo adecuado. Si necesito leer o escribir datos, hay flechas que indican la dirección de la información: una flecha que sale significa que estoy leyendo, y una que entra significa que estoy escribiendo. BUS DE CONTROL: COMUNICACIÓN Y SU GESTIÓN DE DATOS EN UN PROCESADOR El bus de control es el encargado de enviar las señales necesarias. Este bus determina si la dirección en la memoria está configurada para lectura o escritura, y controla cuánto tiempo se mantiene la información en el bus de datos, ya que como sabemos, un sistema no es instantáneo. Es como abrir y cerrar compuertas: necesitas abrirlas durante un tiempo específico para leer o escribir datos. Todo esto es gestionado por el procesador a través del bus de control. Un ejemplo es que cada vez que presionamos una tecla o haces clic con el mouse, esta acción viaja por el bus de control, avisando al procesador que hay un dispositivo que quiere comunicarse. El procesador identifica el dispositivo y busca los datos en la interfaz de entrada o salida. Estos buses son los canales de comunicación que conectan al procesador con los demás componentes que controla En un procesador, las líneas del bus de direcciones y del bus de datos están relacionadas. En algunos casos, se puede utilizar una parte del bus de direcciones para actuar como bus de datos, lo que permite reducir la cantidad de conexiones físicas (o "patitas") necesarias. MANEJO DE SEÑALES E INTERRUPCIONES POR EL PROCESADOR Las señales que llegan al procesador, como las de lectura y escritura, son controladas por la unidad de control. Esta unidad maneja señales que, por ejemplo, activan o desactivan el bus en ciertos momentos o gestionan interrupciones. Las interrupciones son fundamentales para la comunicación entre el sistema operativo y los dispositivos. Por ejemplo, al presionar una tecla en el teclado, se genera una interrupción que avisa al procesador. El procesador identifica de dónde proviene la señal (por ejemplo, si es del teclado, una impresora, o un disco) y actúa en consecuencia. SISTEMA DE CONTROL El sistema de control del procesador está compuesto por una serie de registros y buses internos que vinculan sus diferentes partes. Estos componentes internos, como la unidad aritmética y lógica, se activan en respuesta a las instrucciones de un programa o proceso en ejecución. Antes, los procesadores no contaban con una unidad de punto flotante, lo que limitaba las operaciones a cálculos aritméticos básicos. Cuando el procesador recibe una instrucción, esta debe ser interpretada y ejecutada. Este proceso está codificado en una memoria ROM interna llamada microROM, que mantiene su contenido incluso cuando el procesador se apaga. Esto asegura que el procesador sepa cómo desglosar y desarrollar cada instrucción que recibe. TIPOS DE REGISTROS EN EL PROCESADOR El "registro lógico" es un componente de una base de datos que a veces se confunde con el "registro físico," que es hardware. El registro físico es una unidad de almacenamiento temporal dentro del procesador, mientras que un registro lógico es una combinación de diferentes tipos de datos, fundamentales en una base de datos. Las direcciones de estos registros cambian constantemente porque un programa las recorre de manera dinámica. Existen varios tipos de registros en un procesador. Algunos son accesibles para el programador o el sistema operativo. Esto significa que, mediante un programa, un programador puede acceder y modificar su contenido. Estos se llaman "registros accesibles al usuario." Todos los procesadores tienen registros accesibles, aunque no siempre son fáciles de manipular. Por otro lado, hay registros que son "transparentes al usuario," es decir, ni el programador ni el sistema operativo pueden modificarlos. Estos registros funcionan automáticamente bajo el control del CPU. Un ejemplo de un registro transparente es el MDR (Memory Data Register), que se conecta al bus de datos y actúa como la puerta de entrada y salida de datos entre la memoria y el procesador. Cada dato que entra o sale del procesador pasa primero por el MDR, donde se estabiliza antes de continuar. Otro registro importante es el MAR (Memory Address Register), que se conecta al bus de direcciones. Cada vez que el procesador necesita acceder a una dirección de memoria, coloca esa dirección en el MAR, que la mantiene activa en el bus de direcciones. También existe el IR (Instruction Register), que es un registro que no se puede modificar directamente. Este registro almacena un código de operación, es decir, una instrucción del programa. Cuando el procesador recibe una instrucción a través del MDR, esta se transfiere al IR, donde se mantiene mientras el procesador la interpreta y ejecuta. EJEMPLOS Por ejemplo, al sumar dos datos, ¿qué se debe hacer? Primero, el procesador recibe una instrucción que indica que hay que sumar esos datos. Esta instrucción es un "código de operación." El procesador no puede sumar los datos directamente; primero debe buscar cada uno por separado. Entonces, busca el primer dato, lo guarda en un registro interno (una especie de espacio temporal en el procesador), luego busca el segundo dato y realiza la suma. Un dato podría estar en la memoria o ser un valor inmediato. Si es un valor inmediato, como 25, el procesador lo carga en un registro antes de hacer la suma. Por ejemplo, si la instrucción fuera "add posición de memoria 1 con posición de memoria 2," el procesador primero lee los datos de esas posiciones de memoria, luego los suma, y finalmente guarda el resultado, generalmente en la posición de la izquierda de la operación. Es importante entender que cuando escribimos "mem1 = mem1 + mem2," no es una igualdad matemática, sino una asignación: el resultado de la suma se guarda en la posición de memoria de la izquierda. AVANCES EN LAS ARQUITECTURAS Para realizar estas operaciones, el procesador sigue la arquitectura de Von Neumann, que introdujo el concepto de programas almacenados. Antes de esta arquitectura, los programas se ingresaban a la máquina mediante tarjetas perforadas, y la máquina no podía tomar decisiones automáticamente; requería intervención humana para avanzar. La arquitectura de Von Neumann permitió la automatización de procesos, introduciendo estructuras como el "if" para tomar decisiones y romper secuencias de instrucciones. Hoy en día, esta arquitectura ha sido superada, y usamos arquitecturas más avanzadas como CISC y RISC, que permiten realizar múltiples operaciones en paralelo. Sin embargo, cuando trabajamos con procesadores multinúcleo, siempre debemos tener en cuenta que, aunque varios núcleos puedan trabajar en paralelo, algunos procesos siguen una secuencia lógica y deben ser gestionados cuidadosamente para optimizar el rendimiento, especialmente en tareas complejas como la ordenación de grandes cantidades de datos. PROCESO Y SECUENCIA Primero, es importante entender que todo proceso es una secuencia de acciones, y dentro de esa secuencia, algunas tareas dependen de otras. Estas dependencias pueden variar en grado; por ejemplo, si necesito una herramienta específica, como una llave inglesa, para continuar, no puedo hacer nada más hasta que la tenga. Esto es similar a cómo funciona un programa: algunas acciones dependen de que otras se completen antes de poder continuar. PROCESAMIENTO MULTINÚCLEO En un entorno de procesamiento multinúcleo, cada núcleo puede ejecutar diferentes partes de un programa al mismo tiempo, pero la velocidad de una tarea puede depender de la velocidad de otra. Por ejemplo, si estoy trabajando en un lado del coche cambiando una rueda y alguien más está en el otro lado, ambos debemos esperar a que ciertas tareas se completen antes de avanzar. En tu computadora, aunque tengas múltiples núcleos, a menudo verás que solo uno está activo por defecto. Esto no significa que sea más potente, simplemente es el que está trabajando en ese momento. Si habilitas más núcleos, el sistema puede repartir las tareas entre ellos, pero la verdadera mejora en velocidad depende de cómo esté diseñado el programa y cómo maneje las dependencias entre tareas. CONCEPTO DE PROGRAMA Un programa, normalmente, es una secuencia de acciones, como una receta donde haces una cosa después de otra. Esta secuencia se guarda en la memoria y se convierte en un proceso cuando el sistema operativo lo reconoce y está listo para ser ejecutado. Mientras está en la memoria secundaria (como un disco duro), sigue siendo un programa. Solo cuando el sistema operativo lo reconoce y lo coloca en la memoria RAM, se convierte en un proceso, listo para ejecutarse en cualquier momento. Es importante aclarar que un proceso no es un proceso solo porque se está ejecutando; se convierte en un proceso cuando el sistema operativo lo reconoce y está preparado para ejecutarse. Un programa es un conjunto estático de instrucciones, mientras que un proceso es dinámico porque está listo para ponerse en marcha y realizar esas instrucciones. Para que un proceso se ejecute, debe estar cargado en la memoria RAM. MEMORIA DE UNA COMPUTADORA La memoria de una computadora se organiza como un conjunto de direcciones, donde cada dirección contiene un valor o una instrucción. Por ejemplo, si tengo un proceso que necesita ejecutarse, las instrucciones se almacenan en secuencia en diferentes direcciones de memoria: dirección 1 contiene la primera instrucción, dirección 2 la segunda, y así sucesivamente. Cuando el sistema operativo cede el control a este proceso, carga la primera dirección en el Contador de Programa (PC), que es un registro especial del procesador. Este contador se encarga de mantener la dirección de la siguiente instrucción que debe ejecutarse. A medida que el programa avanza, el Contador de Programa se incrementa automáticamente, permitiendo al procesador ejecutar las instrucciones en el orden correcto. PILA (STACK) Ahora, supongamos que en lugar de pasar datos directamente al procesador, estos se encuentran en la pila (stack). La pila es una estructura de datos que se utiliza para almacenar temporalmente información, como datos que necesitan ser procesados o direcciones de retorno cuando se llaman subrutinas o subprogramas. SUBPROGRAMA Un subprograma o función es una parte independiente de un programa que realiza una tarea específica y que puede ser invocada (llamada) desde cualquier parte del programa. En lugar de escribir el mismo código varias veces en diferentes lugares del programa, se crea un subprograma que se puede llamar repetidamente, ahorrando espacio de memoria y facilitando el mantenimiento del código. Cuando el procesador encuentra una instrucción que llama a un subprograma, se produce una "ruptura de secuencia". Esto significa que la ejecución del programa principal se interrumpe temporalmente para ejecutar la subrutina. La dirección de retorno (donde el programa principal debe continuar después de ejecutar el subprograma) se guarda en la pila. Una vez que el subprograma termina, el procesador utiliza la dirección almacenada en la pila para continuar con la ejecución del programa principal. FUNCIONAMIENTO DE “PILA” La pila funciona con un mecanismo llamado LIFO (Last In, First Out), que significa que el último dato que se guarda es el primero en ser recuperado. Esto es crucial para que el sistema operativo mantenga el control cuando hay múltiples llamadas a subrutinas o funciones anidadas, evitando que el programa se "cuelgue" o se detenga inesperadamente. REGISTROS EN EL PROCESADOR En el procesador, además del Contador de Programa, existen otros registros, como el acumulador principal, que es donde se realizan la mayoría de las operaciones matemáticas. También hay registros auxiliares o secundarios, que ayudan en el procesamiento de datos. Estos registros son una forma de memoria interna del procesador, diferente de la memoria caché, que se usa para almacenar datos de uso frecuente. Finalmente, en los procesadores Intel y otros similares, la memoria se divide en segmentos. Cada segmento es una unidad lógica que se referencia mediante registros específicos, lo que permite al procesador acceder y gestionar la memoria de manera eficiente. TIPOS DE REGISTROS REGISTRO DE CÓDIGO (CSR): Apunta a la parte de la memoria donde se almacena el código del programa. Esto permite que el procesador acceda y ejecute las instrucciones de manera eficiente. REGISTRO DE DATOS (DSR): Apunta a la parte de la memoria donde se encuentran los datos que el programa utiliza. Es útil para manejar transferencias de tablas o bloques de datos entre diferentes partes de la memoria. REGISTRO DE PILA (SSR): Apunta a la zona de memoria donde se encuentra la pila. La pila es esencial para almacenar direcciones de retorno cuando se llaman subrutinas, y para manejar datos temporales. REGISTRO EXTRA (ESR): Se utiliza para manejar datos adicionales que pueden ser necesarios en operaciones más complejas o en transferencias de datos entre diferentes tablas. REGISTRO DE ÍNDICE (IR): Ayuda a realizar direccionamiento indirecto. Por ejemplo, si necesitas acceder a una dirección específica en la memoria, el registro de índice te indica dónde se encuentra esa dirección relativa al segmento al que apunta. REGISTRO DE ESTADO DEL PROCESADOR (PSW): Este registro es crucial, ya que contiene múltiples indicadores o "flags" (banderas) que proporcionan información sobre el estado actual del procesador y el resultado de las operaciones. Algunos de estos flags incluyen: o OVERFLOW FLAG (OF): Indica si una operación aritmética ha producido un desbordamiento, es decir, si el resultado es demasiado grande para ser almacenado en el número de bits disponible. o DIRECTION FLAG (DF): Determina la dirección en la que el procesador recorrerá una tabla, si lo hará incrementando o decrementando las direcciones. o INTERRUPT FLAG (IF): Controla la habilitación o deshabilitación de las interrupciones del sistema. Si se deshabilitan, el procesador no responderá a señales externas, como las del teclado. o SIGN FLAG (SF): Indica si el resultado de una operación es positivo o negativo, basado en el bit más significativo (el bit más a la izquierda) del resultado. o ZERO FLAG (ZF): Se activa cuando una operación aritmética o lógica da como resultado cero. o PARITY FLAG (PF): Indica si el número de bits "1" en el resultado de una operación es par o impar. o CARRY FLAG (CF): Se utiliza en operaciones de suma o resta para indicar si ha habido un acarreo (carry) o préstamo (borrow) fuera del bit más significativo. Estos registros y flags permiten al procesador manejar y procesar datos de manera eficiente, además de mantener la seguridad y estabilidad del sistema. Por ejemplo, al proteger ciertas áreas de la memoria contra escritura o lectura no autorizada, se evita que el código malicioso o defectuoso pueda modificar partes críticas del sistema. RUPTURA DE SECUENCIA Cuando hablamos de "ruptura de secuencia", nos referimos a interrumpir el flujo normal de ejecución de un programa para ejecutar un nuevo pedazo de código, como un método o una subrutina, que está ubicado en la memoria de la máquina. Después de ejecutar este código adicional, el programa regresa a donde estaba antes de la interrupción y continúa desde allí. Para lograr esto, se necesita almacenar la dirección a la que el programa debe volver, normalmente en una estructura llamada pila. TIPOS DE RUPTURAS DE SECUENCIA LLAMADA A MÉTODOS/SUBRUTINAS: Cuando se hace una llamada a un método o subrutina, el procesador necesita saber a dónde regresar después de que termine de ejecutar el código llamado. Por eso, solo se guarda la dirección de retorno en la pila. Esto es bastante predecible y controlado, porque la dirección de retorno se conoce de antemano. INTERRUPCIONES: Las interrupciones son eventos que pueden ser generados por dispositivos periféricos o por otros procesadores y que interrumpen el trabajo actual del procesador. Cuando ocurre una interrupción, el procesador deja de hacer lo que está haciendo y comienza a ejecutar una rutina especial llamada "rutina de servicio de interrupción". Esta rutina está asociada a la interrupción y está guardada en la memoria. Dado que las interrupciones pueden ocurrir en cualquier momento y no se pueden predecir, el procesador debe guardar más información que en el caso de una llamada a un método. Además de la dirección de retorno, se guarda el estado del procesador, que incluye registros y el "Registro de Estado del Procesador" (PSW), para asegurar que el programa pueda continuar correctamente después de la interrupción. Esto es necesario porque una interrupción puede cambiar el contexto del procesador y, por lo tanto, se requiere más información para poder volver a la ejecución anterior de manera adecuada. CLASIFICACIÓN DE LAS INTERRUPCIONES (HARDWARE / SOFTWARE) INTERRUPCIONES POR HARDWARE INTERRUPCIONES POR HARDWARE: Estas interrupciones son señales físicas que provienen de dispositivos externos y llegan al procesador a través de líneas eléctricas. Como solo hay una línea física para manejar estas interrupciones, se necesita un controlador adicional para gestionar múltiples interrupciones. INTERRUPCIONES NO MASCARABLES (NMI): Es un tipo especial de interrupción por hardware que no se puede desactivar o ignorar. Se utiliza para eventos críticos, como errores graves en el procesador o fallos de alimentación, que requieren una respuesta inmediata. Cuando ocurre una NMI, el procesador ejecuta una rutina especial para manejar el problema, como cerrar aplicaciones o mostrar mensajes de error. INTERRUPCIONES MASCARABLES: Son interrupciones que se pueden habilitar o deshabilitar mediante el registro de estado del procesador. Hay un bit llamado "Flag de Interrupción" que controla esto. Si el bit está activado (en 1), las interrupciones están habilitadas y el procesador las atenderá. Si el bit está desactivado (en 0), las interrupciones están deshabilitadas y el procesador las ignorará. INTERRUPCIONES POR SOFTWARE INTERRUPCIONES POR SOFTWARE: Estas interrupciones son generadas mediante instrucciones específicas dentro del programa. A diferencia de las interrupciones por hardware, las interrupciones por software son sincrónicas, lo que significa que ocurren en un momento específico del programa, según lo ordenado por el código. Estas interrupciones se utilizan para realizar tareas específicas, como acceder a funciones de bajo nivel o a la BIOS. INTERRUPCIONES DE BIOS: Estas interrupciones permiten que el sistema operativo o el programa accedan a funciones básicas del hardware, como el teclado o el ratón, sin necesidad de acceder directamente al hardware. INTERRUPCIONES DE BAJO NIVEL: Por ejemplo, en sistemas operativos como Windows, hay interrupciones asociadas a la administración de bajo nivel del sistema, que son gestionadas a través del símbolo del sistema. Las interrupciones permiten que el procesador responda a eventos importantes de manera eficiente. Las interrupciones por hardware provienen de dispositivos externos y pueden ser más o menos críticas dependiendo de si son máscarables o no máscarables. Las interrupciones por software, por otro lado, son generadas internamente por el programa para realizar tareas específicas en momentos determinados. EXCEPCIONES Las excepciones son eventos que ocurren internamente en el procesador debido a errores en el código o problemas de programación. A diferencia de las interrupciones, que son señales físicas y manejadas por hardware, las excepciones son generadas por el software y no requieren líneas físicas de hardware. TIPOS DE EXCEPCIONES FALLOS EN LA PÁGINA: En la administración moderna de memoria, no todo el código de un programa se carga en la memoria principal de una vez. En lugar de eso, solo se cargan las partes necesarias a medida que se requieren. Si el procesador intenta ejecutar una instrucción que no está en la memoria actual, se produce un fallo de página. El sistema operativo detecta que falta una parte del código (página) y la carga desde el disco a la memoria para continuar la ejecución del programa. En resumen, indican que falta una parte del código en la memoria y requieren que el sistema operativo la cargue desde el disco. TRAPS (TRAMPAS): Estas son interrupciones programadas que se colocan en puntos específicos del código para facilitar la depuración. Permiten al programador detener la ejecución del programa en esos puntos, examinar el estado de las variables y registros, y luego reanudar la ejecución. Esto es útil para analizar el comportamiento del programa en detalle. En resumen, se utilizan para depurar el programa, permitiendo detener y examinar el estado en puntos específicos. ABORTS (ABORTOS): Estos ocurren cuando un error grave en el código impide que el programa continúe. En lugar de hacer que el sistema entero se bloquee, el sistema operativo aborta el proceso problemático y muestra un mensaje de error. Esto evita que el problema afecte al resto del sistema. En resumen, son errores graves que hacen que el proceso se detenga, evitando que el sistema entero se vea afectado. El sistema operativo debe manejar correctamente estos eventos para mantener la estabilidad. Los fallos de página y los abortos son situaciones comunes que pueden ocurrir en cualquier momento. La estabilidad de un sistema operativo se mide por su capacidad para manejar estos problemas sin afectar su funcionamiento general. Un sistema operativo estable, como Linux, maneja bien estos eventos sin hacer que todo el sistema se bloquee. CLASIFICACIÓN DE LAS INTERRUPCIONES INTERRUPCIONES SINCRÓNICAS: Las interrupciones sincrónicas son aquellas cuya ocurrencia se puede prever en función del estado del programa. Por ejemplo, aunque no siempre se puede predecir el momento exacto de un fallo de página, el sistema operativo puede anticipar que, al cargar una nueva página, podría ocurrir un fallo y debe prepararse para manejarlo. INTERRUPCIONES ASINCRÓNICAS: Por otro lado, las interrupciones asincrónicas ocurren en cualquier momento, sin que el programa pueda anticiparlas. Las interrupciones por hardware, como las interrupciones no enmascarables (NMI), son típicamente asincrónicas. PRIORIDAD DE INTERRUPCIONES Cuando varias interrupciones ocurren simultáneamente, se les da prioridad en el siguiente orden: EXCEPCIONES: Incluyen fallos de página, abortos y traps. Estas tienen la mayor prioridad. INTERRUPCIONES POR SOFTWARE: Estas son generadas por instrucciones dentro del mismo programa. INTERRUPCIONES POR HARDWARE: Incluyen interrupciones enmascarables y no enmascarables. Las interrupciones no enmascarables tienen prioridad sobre las enmascarables si ocurren al mismo tiempo. COMPORTAMIENTO TRAS UNA INTERRUPCIÓN Excepciones y traps Fallos de página Aborts CICLO DE EJECUCIÓN DE UNA INSTRUCCIÓN El ciclo de ejecución de una instrucción es un proceso repetitivo que se realiza en la CPU para llevar a cabo una orden elemental del programa. A continuación, se describe cómo se ejecuta una instrucción paso a paso: 1. CONTADOR DE PROGRAMA (PC): El contador de programa (PC) mantiene la dirección de la siguiente instrucción que debe ejecutarse. Al inicio de un proceso, el PC apunta a la primera instrucción del programa. 2. BÚSQUEDA DE LA INSTRUCCIÓN: El PC señala la ubicación de la instrucción en la memoria. La CPU lee esta instrucción desde la memoria, en un proceso llamado búsqueda. 3. DECODIFICACIÓN: Una vez que la instrucción es leída, se pasa a la fase de decodificación. Aquí, la CPU interpreta qué debe hacer con la instrucción. Las máquinas tipo CISC (Complex Instruction Set Computing) pueden usar una memoria especial dentro del procesador para descomponer la instrucción en microinstrucciones. 4. EJECUCIÓN: Después de decodificar la instrucción, la CPU ejecuta la acción requerida. Esto puede incluir operaciones aritméticas, carga o almacenamiento de datos, etc. 5. INCREMENTO DEL CONTADOR DE PROGRAMA: Tras ejecutar la instrucción, el PC se incrementa automáticamente para señalar la dirección de la siguiente instrucción que debe ejecutarse. 6. VERIFICACIÓN DE INTERRUPCIONES: Al finalizar la ejecución de la instrucción, el sistema verifica si hay una interrupción. Si no hay interrupciones, el ciclo se repite con la siguiente instrucción. 7. MANEJO DE INTERRUPCIONES: Si se detecta una interrupción, la CPU realiza los siguientes pasos: GUARDAR EL ESTADO: La CPU guarda el estado actual, incluidos los registros y el PC, en una pila. Esto es para que pueda volver a este punto después de manejar la interrupción. IDENTIFICAR LA INTERRUPCIÓN: La CPU identifica la fuente de la interrupción (por ejemplo, teclado, impresora, tarjeta de red) y consulta la tabla de vectores de interrupción. Esta tabla contiene direcciones de las rutinas de servicio de interrupción asociadas. EJECUTAR LA RUTINA DE INTERRUPCIÓN: La CPU carga la dirección de la rutina de servicio de interrupción desde la tabla de vectores y la ejecuta. RESTAURAR EL ESTADO: Al finalizar la rutina de interrupción, la CPU recupera el estado guardado (incluyendo el PC) desde la pila y continúa la ejecución del programa principal desde el punto en el que se detuvo. 8. REPETICIÓN DEL CICLO: Este ciclo de búsqueda, decodificación, ejecución, incremento del PC y manejo de interrupciones se repite continuamente hasta que el programa finaliza. En resumen, el ciclo de ejecución de una instrucción involucra leer, decodificar y ejecutar la instrucción, luego incrementar el contador de programa y verificar si hay interrupciones. Si hay una interrupción, el sistema maneja la interrupción y luego vuelve a ejecutar el programa desde el punto donde se detuvo. MANEJO DE INTERRUPCIONES Y CICLO DE EJECUCIÓN En el contexto de manejo de interrupciones, la tabla de vectores de interrupción (TVI) contiene las direcciones de las rutinas que deben ejecutarse cuando ocurre una interrupción, tanto de hardware como de software. Esta tabla proporciona las direcciones donde se encuentran las rutinas de servicio para cada tipo de interrupción. COMPONENTES CLAVE PROGRAMA PRINCIPAL: El programa principal está en la memoria y se ejecuta desde direcciones específicas, por ejemplo, 1000001, 1000002, 1000003, etc. Las operaciones del programa se ejecutan en orden, y cada operación está asociada con una dirección de memoria. MEMORIA DE PILA: La memoria de pila guarda la dirección de retorno para los subprogramas o rutinas de interrupción. El puntero de pila (o contador de pila) apunta a esta área de memoria. PROCESO AL OCURRIR UNA INTERRUPCIÓN 1. EJECUCIÓN DE INSTRUCCIÓN: Supongamos que la CPU está ejecutando la instrucción en la dirección 1000004. Si se produce una interrupción mientras se está ejecutando esta instrucción, la CPU debe manejar la interrupción de manera adecuada. 2. GUARDAR EL ESTADO: Primero, la CPU guarda la dirección de retorno en la pila. En este caso, la dirección de retorno sería 1000005 (la siguiente instrucción a ejecutar después de la instrucción en 1000004). 3. BUSCAR Y EJECUTAR LA RUTINA DE INTERRUPCIÓN: Luego, la CPU consulta la tabla de vectores de interrupción para encontrar la dirección de la rutina de servicio de interrupción. Supongamos que la dirección encontrada en la TVI es 30000. - La CPU entonces carga y ejecuta la rutina de servicio de interrupción desde la dirección 30000. 4. FINALIZACIÓN DE LA RUTINA DE INTERRUPCIÓN: Al finalizar la rutina de servicio de interrupción, se encuentra una instrucción especial llamada IR (Return from Interrupt). Esta instrucción indica a la CPU que debe recuperar el estado guardado (específicamente, la dirección de retorno) desde la pila. 5. REANUDAR EL PROGRAMA PRINCIPAL: La CPU recupera la dirección de retorno (1000005 en nuestro ejemplo) desde la pila y reanuda la ejecución del programa principal a partir de esa dirección. RESUMEN DEL CICLO DE INTERRUPCIÓN GUARDAR EL ESTADO: Se guarda el estado actual del programa, incluyendo la dirección de retorno y el registro de estado (PSW), en la pila. EJECUTAR LA RUTINA DE INTERRUPCIÓN: Se busca y se ejecuta la rutina de servicio de interrupción desde la TVI. RESTAURAR EL ESTADO: Se recupera la dirección de retorno desde la pila y se reanuda la ejecución del programa principal desde esa dirección. Este ciclo asegura que el programa principal se pueda continuar de manera ordenada después de manejar una interrupción. En resumen, el proceso de interrupción incluye guardar el estado, ejecutar la rutina de interrupción, y luego volver al programa principal en la dirección donde se detuvo. MANEJO DE INTERRUPCIONES EN PROCESADORES EJEMPLO DE TABLA DE VECTORES DE INTERRUPCIÓN En procesadores más antiguos, como los de la serie Pentium, la tabla de vectores de interrupción (TVI) contiene hasta 255 vectores, cada uno asociado a un tipo específico de interrupción. Aquí se muestra un ejemplo de cómo está estructurada esta tabla: VECTOR 0: Representa una división por cero, que es una excepción causada por intentar dividir un número por cero. VECTOR 2: Está asociado a una interrupción enmascarable. Estas interrupciones son gestionadas por el procesador y tienen una dirección específica en la tabla de vectores. VECTOR 6: Representa una interrupción por hardware. VECTOR 11: Relacionado con un fallo de segmento, es decir, un acceso a una zona de memoria no disponible. Cada vector tiene una dirección en la memoria donde se encuentra la rutina de servicio correspondiente, aunque en este ejemplo solo se muestran los identificadores de las interrupciones. MANEJO DE INTERRUPCIONES POR HARDWARE Las interrupciones por hardware se comunican al procesador a través de una línea de interrupción llamada IRQ (Interrupt Request). Sin embargo, debido a que múltiples dispositivos pueden generar interrupciones, se utiliza un Controlador de Interrupciones Programable (PIC) para gestionar estas señales. El PIC organiza y prioriza las interrupciones antes de que lleguen al procesador. 1. CONTROLADOR DE INTERRUPCIONES PROGRAMABLE (PIC) En los sistemas antiguos, el PIC se conectaba externamente y podía manejar hasta 8 entradas de interrupción. Hoy en día, el PIC suele estar integrado dentro del procesador. IRQ se refiere a las interrupciones generadas por hardware. Estas interrupciones pueden ser enmascarables o no enmascarables (NMI). 2. INTERRUPCIONES ENMASCARABLES Y NO ENMASCARABLES Las interrupciones enmascarables (IRQ) tienen un número asociado (IRQ 1, IRQ 2, etc.) y pueden ser gestionadas por el PIC. Las interrupciones no enmascarables (NMI) son más críticas y no se pueden deshabilitar. 3. CONTROLADOR AVANZADO DE INTERRUPCIONES PROGRAMABLE (APIC) Los sistemas modernos utilizan el APIC, que es más avanzado que el PIC. El APIC maneja un mayor número de interrupciones y tiene funciones optimizadas para sistemas multinúcleo. El APIC se divide en APIC Local (para cada núcleo del procesador) y APIC de Entrada (para manejar interrupciones de dispositivos externos y distribuirlas entre los núcleos). RESUMEN DEL CICLO DE INTERRUPCIÓN 1. GENERACIÓN DE INTERRUPCIÓN: Un dispositivo genera una señal de interrupción que es recibida por el PIC o APIC. 2. PRIORIZACION Y ENRUTAMIENTO: El PIC o APIC organiza las interrupciones y las prioriza antes de enviarlas al procesador. 3. EJECUCIÓN DE LA RUTINA DE INTERRUPCIÓN: El procesador guarda el estado actual, ejecuta la rutina de servicio correspondiente, y luego restaura el estado y continúa con la ejecución del programa principal. ESTRUCTURA DE UN PROCESADOR MULTINÚCLEO Y MANEJO DE INTERRUPCIONES En un procesador con varios núcleos, como un procesador de cuatro núcleos, la gestión de interrupciones se organiza de la siguiente manera: ESTRUCTURA DE INTERRUPCIONES EN UN PROCESADOR MULTINÚCLEO APIC GLOBAL (I/O APIC): Es un componente que se encarga de gestionar las interrupciones provenientes del mundo exterior, como dispositivos de entrada/salida. Este APIC se conecta a todos los núcleos del procesador. APIC LOCAL (LOCAL APIC): Cada núcleo del procesador tiene su propio APIC local. Este componente maneja las interrupciones internas específicas para cada núcleo. COMUNICACIÓN ENTRE NÚCLEOS INTERRUPCIONES ENTRE NÚCLEOS: Los núcleos del procesador pueden necesitar comunicarse entre sí, especialmente si están trabajando en tareas colaborativas. Por ejemplo, un núcleo puede esperar a que otro núcleo termine una tarea antes de continuar con su propio trabajo. PROCESO DE COMUNICACIÓN: NÚCLEO A: Termina una tarea y envía una señal de interrupción al Núcleo B, notificándole que puede continuar. NÚCLEO B: Recibe la señal y procede con la tarea en función de la información proporcionada por el Núcleo A. GESTIÓN DE INTERRUPCIONES INTERRUPCIONES EXTERNAS: Cuando se produce una interrupción externa, como una señal de un dispositivo periférico, el I/O APIC recibe la señal y la distribuye a los APIC locales de los núcleos correspondientes. INTERRUPCIONES LOCALES: Cada núcleo tiene su propio Local APIC que maneja las interrupciones que llegan directamente a ese núcleo. Esto permite que cada núcleo gestione sus propias interrupciones de manera eficiente. FUNCIÓN DE LOS LOCAL APICs DISTRIBUCIÓN DE INTERRUPCIONES: El Local APIC de cada núcleo recibe las interrupciones y las procesa según la prioridad establecida. Esto permite que cada núcleo pueda gestionar múltiples interrupciones de manera simultánea, optimizando así el rendimiento general del procesador. INTEGRACIÓN CON EL APIC GLOBAL: El I/O APIC distribuye las interrupciones externas a los Local APICs. Cada Local APIC gestiona las interrupciones para su núcleo específico, y los núcleos pueden comunicarse entre sí si es necesario, utilizando interrupciones para coordinar el procesamiento de tareas. CLASIFICACIÓN DE LOS SISTEMAS OPERATIVOS Para clasificar los sistemas operativos, se pueden considerar varios criterios fundamentales. Estos criterios ayudan a entender cómo el sistema operativo maneja tareas, usuarios, procesadores y su capacidad de acoplamiento. A continuación, se detallan estos criterios: CANTIDAD DE TAREAS MONOPROCESADOR (MONOTAREA): Maneja una sola tarea a la vez. Puede cambiar entre tareas, pero solo ejecuta una tarea en un momento dado. MULTIPROCESADOR (MULTITAREA): Maneja múltiples tareas simultáneamente. Esto puede ser mediante la ejecución concurrente (intercalando las tareas) o paralela (ejecutando las tareas al mismo tiempo en diferentes núcleos). CANTIDAD DE USUARIOS MONOUSUARIO: Un solo usuario tiene acceso al sistema en un momento dado. Aunque puede ejecutar múltiples aplicaciones, solo un usuario interactúa con el sistema operativo en un momento dado. Un ejemplo es, en sistemas operativos de escritorio como Windows o macOS. MULTIUSUARIO: Varios usuarios pueden acceder al sistema simultáneamente, cada uno con su propio entorno de trabajo. Los sistemas multiusuario son típicos en servidores y sistemas de mainframe. Un ejemplo es, en sistemas operativos de servidores como Linux Server o UNIX. CANTIDAD DE PROCESADORES TIPO DE PROCESADOR MONOPROCESADOR: Administra un solo procesador o núcleo. MULTIPROCESADOR: Administra múltiples procesadores o núcleos, ya sea en una sola máquina o en una red de computadoras interconectadas. TIPOS SISTEMAS MONONÚCLEO: Sistemas operativos diseñados para un solo núcleo de procesador. SISTEMAS MULTINÚCLEO: Sistemas operativos diseñados para aprovechar múltiples núcleos de procesamiento en una sola máquina. TIPOS DE MULTITAREA MULTITAREA CONCURRENTE: Los procesos o tareas se alternan en el tiempo de ejecución, dando la impresión de que se están ejecutando al mismo tiempo, aunque en realidad están compartiendo el tiempo del procesador. Un ejemplo son los sistemas operativos antiguos o simples que cambian entre tareas rápidamente para que parezca que están ejecutando varias tareas simultáneamente. MULTITAREA PARALELA: Los procesos o tareas se ejecutan simultáneamente en diferentes núcleos de un procesador multinúcleo o en diferentes procesadores. Un ejemplo, son los sistemas operativos modernos como Windows, macOS o Linux en computadoras con múltiples núcleos. MULTITAREA EN EL CONTEXTO MODERNO MULTITAREA PSEUDOCONCURRENTE: Las tareas parecen ejecutarse simultáneamente, pero en realidad se están conmutando rápidamente entre ellas (como en sistemas con un solo núcleo que usan un esquema de conmutación rápida de contexto). MULTITAREA CONCURRENTE Y PARALELA: Los sistemas modernos que pueden manejar múltiples hilos y procesos verdaderamente simultáneos en múltiples núcleos de CPU o múltiples CPUs. MULTICOMPUTADORAS Un sistema operativo que coordina y gestiona múltiples computadoras que trabajan juntas en una red. Cada computadora puede tener su propio sistema operativo, pero todas cooperan para ejecutar tareas distribuidas. CLASIFICACIÓN SEGÚN CANTIDAD DE USUARIOS Y SEGÚN EL HARDWARE Vamos a desglosar y aclarar los conceptos de sistemas operativos según la cantidad de usuarios y según el hardware, abordando cada aspecto mencionado en tu explicación: SEGÚN LA CANTIDAD DE USUARIOS MONOUSUARIO MONOUSUARIO MONOTAREA: Un sistema operativo diseñado para manejar solo un usuario y una tarea a la vez. Solo un proceso puede estar en ejecución en un momento dado, sin capacidad para cambiar entre tareas o manejar múltiples aplicaciones simultáneamente. MONOUSUARIO MULTITAREA: Un sistema operativo para un solo usuario que permite realizar múltiples tareas simultáneamente. Aunque solo un usuario está en la máquina, este usuario puede ejecutar y cambiar entre varias aplicaciones o procesos al mismo tiempo. MONOUSUARIO CENTRALIZADO: Un sistema en el que todas las tareas se gestionan desde una sola máquina o procesador central. La capacidad de procesamiento y almacenamiento está concentrada en una sola máquina o servidor. MULTIUSUARIO MULTIUSUARIO CENTRALIZADO: Varios usuarios acceden a un único sistema operativo que controla una máquina central. Todos los usuarios comparten los recursos de una sola máquina, y el sistema operativo gestiona las solicitudes y tareas de cada usuario. MULTIUSUARIO DISTRIBUIDO: Varios usuarios acceden a un sistema operativo distribuido a través de una red, con tareas y recursos distribuidos entre múltiples máquinas. Los usuarios pueden estar trabajando en diferentes máquinas conectadas por una red, y el sistema operativo coordina las tareas distribuidas y el acceso a recursos distribuidos. MULTICOMPUTADORAS Un enfoque en el que múltiples computadoras trabajan juntas como un sistema cohesivo, a menudo a través de una red. Aunque cada computadora puede tener su propio sistema operativo, todas colaboran para completar tareas o manejar cargas de trabajo. Los usuarios pueden no saber dónde se ejecutan sus procesos o dónde se almacenan sus datos. SEGÚN EL HARDWARE MONOPROCESADO: Un sistema con un solo procesador o núcleo. Sus características son: MONONÚCLEO: Un solo núcleo maneja todas las tareas y procesos. MULTITAREA PSEUDOCONCURRENTE: El sistema puede realizar varias tareas cambiando rápidamente entre ellas, pero solo puede ejecutar una tarea a la vez de manera efectiva. MULTIPROCESADO: Un sistema con múltiples procesadores independientes que pueden trabajar en paralelo. Sus características son: SISTEMAS MULTIPROCESADORES: Utilizan varios CPUs para manejar múltiples procesos simultáneamente. PROCESADORES SIMETRICOS (SMP): Todos los procesadores son iguales y comparten la memoria y los recursos del sistema. PROCESADORES ASIMETRICOS (AMP): Un procesador principal coordina el trabajo mientras que otros procesadores manejan tareas específicas. MULTINÚCLEO: Un sistema con múltiples núcleos en un solo chip de procesador. Sus características son: VARIOS NÚCLEOS: Permiten la ejecución simultánea de múltiples procesos o hilos. EFICIENCIA: Mejora el rendimiento general y la capacidad multitarea del sistema. HYPER – THREADING (HT): Tecnología de Intel que permite a cada núcleo físico manejar dos hilos lógicos, simulando más núcleos. SISTEMAS HIPERTRADING (HYPER – THREADING): Tecnología de Intel para mejorar la eficiencia del procesamiento al permitir que cada núcleo físico ejecute dos hilos simultáneamente. Sus características son: NÚCLEOS VIRTUALES: Aunque parece haber más núcleos, estos son en realidad núcleos físicos que manejan múltiples hilos. La mejora en el rendimiento puede ser del 30% en comparación con núcleos físicos. THREADS (HILOS) Los hilos (o threads) son unidades funcionales bien estructuradas. Es posible intercalar hilos de un proceso con hilos de otro proceso, lo que permite que varias tareas se perciban como si se estuvieran ejecutando simultáneamente. Esta es una función de la administración de procesos que maneja el sistema operativo. En un sistema monoprocesado, donde solo hay un CPU, esto crea una ilusión de paralelismo, llamado pseudoparalelismo, ya que no hay paralelismo real. El paralelismo real significa que cada hilo o proceso es gestionado por un procesador distinto. SISTEMA MONOPROCESADO Y MULTIPROCESADO Un sistema monoprocesado tiene un solo CPU, lo que significa que solo puede realizar una tarea a la vez. Sin embargo, al dividir el tiempo del CPU entre varios procesos (dándoles pequeños fragmentos de tiempo de procesamiento), es posible que el CPU maneje múltiples tareas de manera intercalada. Esto permite que varios procesos se ejecuten en un sistema monoprocesado, aunque no simultáneamente. Hoy en día, la mayoría de los sistemas operativos trabajan en un entorno de multiprogramación, donde se pueden administrar múltiples procesos al mismo tiempo. El grado de multiprogramación que un sistema operativo puede manejar depende de la cantidad de tareas y procesos que puede gestionar simultáneamente. Un sistema multiprocesado, en cambio, cuenta con varios procesadores, generalmente en un entorno multinúcleo. Estos procesadores suelen ser simétricos, es decir, todos tienen la misma capacidad y carga de trabajo, y el sistema operativo se encarga de administrar este trabajo. El sistema operativo necesita comunicarse con el procesador para asignar las tareas adecuadamente. Aunque la topología de sistemas asimétricos no es común en la mayoría de los entornos, se utiliza con frecuencia en dispositivos móviles, como teléfonos celulares. En estos dispositivos, se crean clústeres de CPUs con diferentes características para administrar eficientemente la energía de la batería. Por ejemplo, algunas funciones del celular, como la comunicación y el Bluetooth, requieren más energía, por lo que se asignan a procesadores más rápidos. En cambio, tareas que demandan menos energía son manejadas por procesadores más lentos. Este es un ejemplo de CPUs asimétricos o heterogéneos, donde los procesadores se agrupan en clústeres según sus funciones. La mayoría de los celulares modernos tienen múltiples núcleos, y cada uno está dedicado a diferentes tareas, como la comunicación o el procesamiento de datos. En un sistema multiprocesador, que incluye varios procesadores, es común encontrar configuraciones multinúcleo. Es poco probable encontrar un sistema multiprocesador con un solo núcleo hoy en día. Los sistemas multiprocesador están diseñados para manejar múltiples procesos simultáneamente, y la carga de trabajo se distribuye entre los procesadores para optimizar el rendimiento. En un entorno multiprocesador, el sistema operativo gestiona varios procesos simultáneamente. Cada proceso puede tener múltiples hilos (threads) que se ejecutan en diferentes procesadores. El sistema operativo puede reasignar la carga de trabajo de un procesador a otro si uno de ellos está sobrecargado y otro está menos utilizado. Este proceso de redistribución de la carga de trabajo es crucial para mantener el rendimiento del sistema equilibrado y evitar que un procesador se sobrecargue mientras otros están infrautilizados. EVOLUCIÓN Y DESARROLLO DE PROCESADORES MULTINÚCLEO Los sistemas multinúcleo se han desarrollado dentro de un solo chip, donde varios núcleos están interconectados internamente. La evolución de los procesadores inicialmente se centró en aumentar la velocidad de cada núcleo individual, pero se alcanzó un límite debido al sobrecalentamiento. En lugar de seguir aumentando la velocidad de un solo núcleo, se optó por desarrollar procesadores con múltiples núcleos, lo que permite una mayor eficiencia y rendimiento. REFRIGERACIÓN La refrigeración es fundamental en los dispositivos con múltiples núcleos de procesadores, ya que estos generan mucho calor. En los procesadores de computadoras, se suele utilizar la tecnología CISC (Complex Instruction Set Computer), que, aunque es poderosa, genera alto consumo de energía y calor. Sin embargo, en dispositivos portátiles como celulares, que necesitan conservar la energía, se utiliza la tecnología RISC (Reduced Instruction Set Computer), la cual es más eficiente en términos de consumo energético. Algunos procesadores combinan tecnologías CISC y RISC o simulan ambas para mejorar la velocidad y reducir el calentamiento. Esto es esencial para mantener un bajo consumo energético y un alto rendimiento en dispositivos móviles. Los sistemas multiprocesadores, ya sean simétricos o asimétricos, se utilizan según las necesidades del dispositivo. En un sistema multiprocesador simétrico, el sistema operativo utiliza todos los núcleos del procesador para ejecutar múltiples tareas al mismo tiempo. SISTEMAS EMBEBIDOS En sistemas embebidos, como los de consolas de videojuegos o dispositivos especializados, es común encontrar sistemas multiprocesadores asimétricos. Estos sistemas están diseñados para manejar tareas específicas con alta eficiencia. Los celulares, por ejemplo, integran núcleos de diferentes características en un mismo chip. Algunos núcleos son potentes y consumen más energía, mientras que otros son más lentos y ahorran energía, formando clústeres de núcleos con características similares. SISTEMAS OPERATIVOS DISTRIBUIDOS Y GESTIÓN DE MULTICOMPUTADORAS En un entorno multicomputadora, cada computadora en la red se considera una unidad, pero el sistema operativo las administra como si fueran un todo. Esto permite que el sistema operativo redistribuya la carga de trabajo entre las computadoras si una está sobrecargada. En estos sistemas, las computadoras pueden estar distribuidas geográficamente y conectadas a través de redes de alta velocidad, como la fibra óptica o tecnologías como ATM o MPLS. TRANSPARENCIA A FALLOS Y ESCALABILIDAD EN SISTEMAS OPERATIVOS DISTRIBUIDOS Un sistema operativo distribuido se instala en fragmentos en cada máquina de la red, lo que permite que el sistema continúe funcionando incluso si una computadora falla. Esto es conocido como transparencia a fallos, donde el usuario no se da cuenta de los problemas porque el sistema operativo se encarga de reubicar las tareas en otras máquinas. Además, la escalabilidad permite que el sistema crezca en cantidad de usuarios sin afectar el rendimiento, y la replicación asegura que haya copias de las tareas en diferentes lugares para proteger contra fallos. La migración permite que una tarea se mueva de una máquina sobrecargada a otra con menos carga para optimizar el rendimiento, todo de manera transparente para el usuario. TAXONOMIA DE FLYNN define cuatro tipos de máquinas computacionales SISD, SIMD, MISD y MIMD, single Instruction significa que hay un cerebro que se encarga de ir secuencialmente ejecutando una única instrucción sobre un único conjunto de datos. En este modelo, el procesador realiza una operación a la vez, siguiendo un flujo de control lineal y procesando un solo dato en cada ciclo de instrucción. SISD: Un único procesador ejecuta un solo flujo de instrucciones, para operar sobre datos almacenados en una única memoria. MISD: Múltiples unidades funcionales realizan diferentes operaciones en los mismos datos SIMD: Una única unidad de control común despacha las instrucciones a diferentes unidades de procesamiento. Todas estas reciben la misma instrucción, pero operan sobre diferentes conjuntos de datos MIMD: En cualquier momento, cualquier procesador puede ejecutar diferentes instrucciones sobre distintos datos SOLO SE USAN SISD Y MIMD UNIDAD II PROCESADORES Los procesadores son la CPU, y los procesos son las aplicaciones que el usuario o el sistema operativo requieren ejecutar. Algunos procesos están relacionados con el núcleo del sistema operativo (kernel), que gestiona los recursos y permite la interacción con el usuario. Existen aplicaciones esenciales que se cargan al iniciar el sistema, mientras que otras solo se ejecutan cuando son necesarias, como mover archivos o hacer particiones de disco. KERNEL El kernel es un conjunto mínimo de programas fundamentales para que el sistema funcione. Todos los sistemas operativos tienen un kernel o un microkernel, que se encargan de gestionar los procesos. En un entorno de multiprogramación, el sistema operativo puede manejar varios procesos simultáneamente, aunque existe un límite en la cantidad que puede admitir al mismo tiempo, dependiendo del sistema. DISTRIBUCIÓN DE PROCESOS La distribución de los procesos a los procesadores busca dar la sensación de que varios procesos se ejecutan en paralelo, ya sea en un sistema con un solo procesador o en uno con múltiples núcleos. Algunos procesos tienen más prioridad que otros, dependiendo de su importancia. Esto es particularmente relevante en sistemas de propósito general como Windows o Linux, y aún más en sistemas de tiempo real, donde los tiempos de respuesta son críticos. PCB (PROGRAM CONTROL BLACK) Cuando el sistema operativo admite un proceso, crea una estructura llamada PCB (Program Control Block), que contiene la información necesaria para gestionar el proceso. Este se convierte automáticamente en un proceso al ser reconocido por el sistema, independientemente de cuántas CPU haya disponibles. Generalmente, siempre hay más procesos que CPU, lo que significa que algunos procesos estarán en ejecución y otros en espera. Contiene toda la información relacionada con un proceso, como los registros del procesador y la información que necesita el sistema operativo para continuar con el proceso después de una interrupción. Dentro del PCB se encuentra la imagen del proceso, que es un conjunto mínimo de datos necesarios para que el procesador pueda reanudar un proceso. MODELOS DE ESTADOS DE PROCESOS EN SISTEMAS MONOPROCESADOS En un sistema con un solo procesador (entorno monoprocesado), solo un proceso puede estar en ejecución a la vez, mientras que los demás estarán en diferentes estados, esperando su turno. Estos estados cambian según las condiciones del procesador, y el sistema operativo debe garantizar que todos los procesos reconocidos se ejecuten eventualmente. Existen diferentes modelos para representar los estados de un proceso. Uno sencillo, propuesto por Tanenbaum, identifica tres estados principales: listo (en espera para ser ejecutado), en ejecución y finalizado. El sistema operativo se encarga de crear y terminar procesos, que también pueden finalizar por errores o interrupciones. En modelos más avanzados, se añaden más estados, como "bloqueado", cuando un proceso no puede continuar porque espera recursos, o "suspendido", cuando se mueve temporalmente fuera de la memoria principal para liberar espacio. Estos estados permiten al sistema gestionar mejor los procesos en entornos multitarea. PROCESO Un proceso es una instancia dinámica de un programa, que utiliza recursos como memoria y registros del procesador. Cambiar de un proceso a otro implica una "conmutación de contexto", donde el sistema operativo guarda el estado del proceso actual y carga el del siguiente. Esto es como si estuvieras trabajando en una carpintería y luego cambiaras a la cocina: necesitas guardar las herramientas de un trabajo y preparar las del otro. Un proceso tiene su propia zona de memoria, utiliza ciertos registros del procesador, accede a librerías dinámicas y puede manejar archivos. Estos archivos, mientras están abiertos, son asignados al proceso por el sistema operativo. THREADS Ahora, hablando de los hilos (o "threads"), estos son una parte más pequeña y funcional de un proceso. El concepto de hilos permite dividir un proceso en unidades más manejables. Un hilo es una porción del proceso que puede ser administrada de forma independiente. Si ocurre un problema dentro de un hilo, solo afecta a ese hilo y no al proceso completo. En cambio, si el proceso no está dividido en hilos, cualquier problema afectaría al proceso en su totalidad. Además, los hilos pueden tener relaciones de dependencia: un hilo "padre" puede controlar a hilos "hijos". Si el hilo padre se bloquea, los hilos hijos también lo harán. Sin embargo, si un hilo hijo se bloquea y no tiene otros hilos bajo su control, solo ese hilo se verá afectado. Los hilos permiten que un proceso sea administrado de manera más eficiente. Por ejemplo, distintos hilos de un proceso pueden ejecutarse en diferentes procesadores, lo que acelera el procesamiento. No obstante, aunque los hilos de un mismo proceso están relacionados entre sí, son más dependientes entre ellos que los procesos completos, que tienden a ser más independientes. Una ventaja de los hilos es que son interrumpibles. Si se interrumpe un hilo, solo ese hilo es afectado, mientras que, si se interrumpe un proceso completo, toda su ejecución se detiene. Además, la conmutación de contexto (el cambio entre procesos o hilos) es más ligera con hilos, ya que comparten algunos recursos y no es necesario intercambiar tanta información. MODELO QUE VAMOS A UTILIZAR Vamos a utilizar un modelo de cinco estados, que es más intuitivo y fácil de entender. Empezamos con el estado inactivo, donde un programa aún no ha sido reconocido por el sistema operativo. Cuando el sistema operativo lo reconoce, el programa pasa a estar activo y se convierte en un proceso. Un proceso activo es temporal y luego transita a otros estados, como listo, bloqueado o en ejecución, dependiendo de las necesidades del sistema. El estado inactivo se refiere a un programa, no a un proceso. Una vez que el programa es admitido por el sistema operativo, se convierte en proceso y entra en los estados mencionados. Lo primero que un proceso intenta hacer es pasar al estado de ejecución. Si no puede hacerlo (porque ya hay otro proceso en ejecución, en un sistema con un solo procesador), entonces su siguiente opción es pasar al estado de listo. La prioridad del proceso juega un papel importante en la administración de procesos. Si un proceso tiene mayor prioridad que el que está en ejecución, desplazará a este último al estado de listo y tomará su lugar en ejecución. Sin embargo, si el nuevo proceso tiene menos prioridad, permanecerá en el estado de listo hasta que sea su turno de ejecutarse. Cuando un proceso está en ejecución y necesita realizar una operación de entrada/salida (como leer o escribir en un disco), no usa la CPU. En estos casos, el proceso entra en el estado de bloqueo. Esto significa que el proceso queda "suspendido" hasta que la operación de entrada/salida finalice y el proceso pueda continuar. Si un proceso permanece bloqueado por mucho tiempo sin ser desbloqueado, el sistema operativo puede moverlo al estado inactivo y eliminarlo del sistema. Si el proceso es desbloqueado después de completar su operación, puede regresar a ejecución o, si hay otro proceso con mayor prioridad, pasará al estado de listo. Este modelo permite una administración más eficiente de los procesos, evitando que la CPU se quede esperando por operaciones que no le conciernen, como las de entrada/salida. De esta forma, el sistema operativo puede gestionar mejor los recursos y la ejecución de procesos. ADMINISTRACIÓN DE CORTO, MEDIO Y LARGO PLAZO En la administración de procesos, contamos con un administrador de corto plazo, que se encarga principalmente de gestionar los estados de listo y ejecución, y en algunos casos el estado de bloqueado. Este administrador aplica el algoritmo de corto plazo, que es el que determina qué proceso pasa a la ejecución. Luego, está el algoritmo de largo plazo, que administra la admisión y eliminación de procesos. Los sistemas operativos, al manejar un número limitado de procesos, regulan la frecuencia con la que los procesos ingresan al estado activo. Este movimiento entre los estados de activo e inactivo ocurre con menor frecuencia en comparación con las transiciones entre los estados de listo y ejecución, que son más dinámicas. También contamos con el algoritmo de mediano plazo, que gestiona los procesos bloqueados. Este algoritmo puede sacar procesos bloqueados de la memoria temporalmente si se requiere espacio para otros procesos. Cuando el proceso es desbloqueado, se carga de nuevo en memoria y se dirige a los estados de listo o ejecución, dependiendo de las prioridades. OBJETIVOS DE LA ADMINISTRACIÓN DE PROCESOS: 1. MANTENER OCUPADA LA CPU TODO EL TIEMPO: Esto significa que siempre debe haber procesos disponibles para ejecutarse. Sin embargo, si todos los procesos están bloqueados, la CPU se queda inactiva, lo que afecta el rendimiento. 2. MAXIMIZAR EL NÚMERO DE TAREAS COMPLETADAS: Cuantos más procesos pueda ejecutar la CPU en un tiempo determinado, mejor será el rendimiento del sistema. Un procesador que ejecuta 100 tareas por minuto será más eficiente que uno que realiza solo 10. 3. MINIMIZAR EL TIEMPO DE RETORNO: El tiempo de retorno es el tiempo que transcurre desde que un proceso es admitido por el sistema operativo hasta que finaliza. Este tiempo es un indicador importante del rendimiento de los algoritmos de corto plazo. 4. MINIMIZAR EL TIEMPO DE ESPERA: Este es el tiempo que un proceso pasa en el estado de listo antes de ser ejecutado. 5. OPTIMIZAR EL TIEMPO DE RESPUESTA: En sistemas interactivos, el tiempo de respuesta es crucial. Es el tiempo que transcurre entre que se realiza una consulta y se obtiene una respuesta. Cuanto menor sea este tiempo, mejor será el rendimiento del sistema. 6. EQUITATIVIDAD: Todos los procesos deben tener la oportunidad de utilizar la CPU, no necesariamente con la misma prioridad, pero sí con la posibilidad de ejecutarse. ENTORNO MONOPROCESADO En un sistema monoprocesado, el sistema operativo gestiona un solo procesador y administra múltiples procesos. Aunque solo hay un núcleo, el sistema puede manejar varios procesos mediante una técnica llamada multiprogramación. Esto no significa que los procesos se ejecuten simultáneamente (realmente no hay simultaneidad en el sentido estricto), sino que el sistema operativo se encarga de cambiar rápidamente entre procesos para dar la ilusión de simultaneidad. ALGORITMO DE CORTO PLAZO (PLANIFICACIÓN DE PROCESOS) Este algoritmo decide qué proceso debe ejecutarse a continuación cuando el procesador está disponible. Los métodos más comunes incluyen: FIFO (FIRST IN, FIRTS OUT): Los procesos se ejecutan en el orden en que llegan al sistema. El primer proceso en entrar es el primero en salir. No hay prioridades entre procesos; simplemente se ejecutan en el orden en que fueron admitidos. MULTITAREA INTERCALADA: Este método implica dividir el tiempo del procesador entre varios procesos. El sistema operativo realiza una conmutación de contexto, ejecutando fragmentos de cada proceso en intervalos de tiempo cortos. Esto da la impresión de que los procesos se ejecutan simultáneamente. Aquí se utiliza el concepto de quantum, que es el tiempo máximo que un proceso puede utilizar el procesador antes de ser interrumpido. MULTITAREA EN TIEMPO REAL: Este enfoque se utiliza cuando ciertos procesos deben completarse dentro de un tiempo específico. Los procesos críticos tienen prioridad sobre los procesos menos importantes. Cuando un proceso de alta prioridad necesita ejecutarse, puede interrumpir el proceso actual (esto se llama preemción), asegurando que se cumplan los requisitos de tiempo real. PROCESOS BATCH Los procesos batch son aquellos que no requieren atención inmediata y se pueden ejecutar en momentos de baja demanda del sistema. Se manejan típicamente con FIFO. Ejemplos incluyen: PROCESOS DE BACKUP: Copia de seguridad de datos, que se puede realizar cuando el sistema está menos ocupado. REUBICACIÓN DE ARCHIVOS: Mover archivos de un lugar a otro para optimizar el espacio en disco. Estos procesos suelen ejecutarse durante la noche o en períodos de baja actividad, cuando la carga del sistema es menor. MULTITAREA SECUENCIAL La parte de amarillo, es la parte de código, lo verde es una operación E/S, en las operaciones E/S no interviene el procesador, si estamos en a1, el procesador no puede avanzar hasta que no se complete el proceso. Una vez terminado a1, avanza a A1. Cada actividad de E/S dura el doble que las demás, es decir si una parte de código dura 1UT, una operación E/S dura 2UT. En multitarea secuencial, vamos a ver lo siguiente: Los cuadros amarillos son uso de CPU, lo verde es tiempo de espera de la CPU. Comienza en A1, cuando termina avanza hacia a1, luego A2 y asi hasta finalizar. Una vez termina la tarea A, comenzamos la tarea B. El tiempo que tarda de pasar del estado ready (listo) al estado de ejecución, es decir, desde que termina A2 y comienza B1 vamos a considerarlo despreciable, frente a la duración de los procesos. En la tarea B vamos a tener 4 UT oseosas de la CPU, es decir mientras hace B1, termina y luego avanza a b1. Este proceso en total dura 21UT, siendo 9UT de uso de la CPU y 12UT de tiempo de espera. Para calcular el rendimiento de la CPU vamos a utilizar la siguiente formula: Siendo 9UT la cantidad de uso de la CPU y 21 el tiempo TOTAL. Como se puede ver la CPU tuvo un rendimiento del 42,85%, significa que se desperdició la CPU casi un 60%, algo muy malo. MULTITAREA INTERCALADA En este tipo de tarea, comenzamos por A1, por lo que debe producirse la operación de E/S de a1, pero a diferencia de la multitarea secuencial, mientras se ejecuta la operación E/S a1, se ejecuta B1, como se ve en la imagen. Una vez que termine de ejecutarse la operación de E/S a1, puede comenzar a ejecutarse A2, lo mismo con b1, comienza a ejecutarse B2, como se ve en la imagen Luego de esto, vemos que la CPU va a tener un tiempo ocioso, ya que no puede comenzar a ejecutarse B3, ya que b2 aún no termina, lo mismo con C4, que no puede ejecutarse hasta que termine c3, como vemos en la imagen. En este tipo de tarea tardaríamos 12UT, perdiendo asi 3UT en los espacios visibles. Por lo que si realizamos la operación de rendimiento vemos que el mismo mejoro a un 75% desperdiciando asi solo 25%.Como vemos en la imagen: MULTITAREA EN TIEMPO REAL (PRIORIDADES) Es una posibilidad donde ciertas rutinas tienen que ejecutarse en el mismo momento en que se solicita. Un ejemplo, en contexto de un sistema operativo, el SO tendría que generarle la prioridad al proceso que debe ejecutarse de forma inmediata. En la multitarea en tiempo real vamos a tener interrupciones cada cierto tiempo provocadas por eventos externos, esta interrupción va a curso a una rutina llamada P, puede ejecutarse de forma correcta o con error, que si existe algún error se invoca a una rutina A. Por último, tenemos la rutina B que es la que se encarga de realizar cálculos con las mediciones. Al comenzar se produce una interrupción, se captura la muestra llamada T0, lo que nos indica que ya hicimos 5 lecturas, por lo que ya puedo lanzar una rutina B, alcanzando a hacer solo B1 y B2. Como este tipo de tarea es prioritaria, es decir P es prioritaria, se deja de hacer B para hacer nuevamente la lectura. Esta lectura va a ser una nueva, por lo tanto, capturo otra muestra y nos sale la alarma (A), indicándonos que la lectura esta fuera de rango, por lo que no es válida. (Completar) ADMINISTRADORES DE PROCESOS ADMINISTRADOR DE LARGO PLAZO (LONG-TERM SCHEDULING): FUNCIÓN: Controla la admisión de procesos en el sistema. Su tarea es decidir cuántos y cuáles procesos pueden entrar en la memoria principal para su ejecución. FRECUENCIA DE EJECUCIÓN: Es muy baja. Se ejecuta al inicio, cuando el sistema decide qué procesos cargar en la memoria. Una vez que se admiten los procesos y la memoria está llena, este administrador no interviene más hasta que algunos procesos terminen y dejen espacio disponible. EXPULSIÓN Y ADMISIÓN: Decide qué procesos son expulsados o admitidos, dependiendo de la disponibilidad de recursos. ADMINISTRADOR DE PLAZO MEDIO (MEDIUM-TERM SCHEDULING): FUNCIÓN: Se encarga de gestionar los procesos bloqueados, que no están utilizando la CPU porque están esperando algún recurso (por ejemplo, el acceso a una base de datos). Este administrador se encarga de swappear (mover procesos entre la memoria principal y el disco) para liberar espacio y permitir que otros procesos activos utilicen la memoria. FRECUENCIA DE EJECUCIÓN: Intermedia. Se ejecuta más a menudo que el administrador de largo plazo porque los procesos pueden bloquearse o requerir recursos externos con mayor frecuencia. INTERACCIÓN CON EL ADMINISTRADOR DE MEMORIA: Aunque no realiza directamente las tareas de administración de memoria, interactúa con el administrador de memoria para liberar o asignar recursos. ADMINISTRADOR DE CORTO PLAZO (SHORT-TERM SCHEDULING): FUNCIÓN: Este es el más activo de todos, ya que administra los cambios entre procesos que están en estado de listo y estado de ejecución. Se ejecuta cuando la CPU queda libre y selecciona el próximo proceso que se ejecutará. FRECUENCIA DE EJECUCIÓN: Muy alta. Se ejecuta constantemente, ya que debe gestionar la CPU en tiempo real. ALGORITMOS UTILIZADOS: o FIFO (FIRST COME, FIRST SERVERD): Los procesos se ejecutan en el orden en que llegaron al sistema. Es un algoritmo de tipo secuencial y simple. o SJF (SHORTEST JOB FIRTS): Prioriza la ejecución de los procesos más cortos, mejorando el rendimiento en términos de tiempo de espera y tiempo de retorno. Puede ser no apropiativo (el proceso en ejecución no se interrumpe) o apropiativo, en cuyo caso el proceso en ejecución puede ser interrumpido si otro proceso de menor duración está listo para ejecutarse. o SRT (SHORTEST REMAINING TIME FIRST): Es una versión apropiativa de SJF. El proceso que tiene menos tiempo restante para completarse puede interrumpir a uno que está ejecutándose si su tiempo de ejecución es menor. o ROUND ROBIN: Distribuye el tiempo de CPU equitativamente entre los procesos, dándoles un turno fijo. Si un proceso no termina durante su turno, es suspendido y pasa al final de la cola para esperar su próximo turno. o VIRTUAL ROUND ROBIN: Mejora el rendimiento en procesos de entrada/salida (E/S), permitiendo que estos no se vean tan penalizados por la rotación de turnos. PROCESOS APROPIATIVOS o NO APROPIATIVOS: En los algoritmos apropiativos, un proceso en ejecución puede ser interrumpido si llega otro proceso con mayor prioridad (o menor tiempo de ejecución en el caso de SRT). En los no apropiativos, el proceso en ejecución no es interrumpido hasta que termine, sin importar si llegan otros procesos con mayor prioridad. INTRODUCCIÓN A LA ADMINISTRACIÓN DE PROCESOS A CORTO PLAZO Cuando trabajamos con un solo procesador, sólo un proceso puede ejecutarse a la vez. Sin embargo, si hay varios procesadores, pueden ejecutarse varios procesos simultáneamente en estado de listo. Al mismo tiempo, otros procesos pueden estar bloqueados, esperando su turno para entrar en la cola de listos. BLOQUE DE CONTROL DE PROCESOS (PCB) Cuando un proceso se activa, el sistema operativo guarda su información en un área de memoria protegida, llamada Bloque de Control de Procesos (PCB). Este espacio de memoria es inaccesible para los usuarios y está reservado exclusivamente para el sistema operativo. Tanto el PCB como el núcleo del sistema operativo están completamente protegidos. ALGORITMOS DE ADMINISTRACIÓN DE PROCESOS Existen muchos algoritmos de administración de procesos. Nos enfocaremos en los principales, que abarcan la mayoría de los casos. Cualquier otro algoritmo suele ser una variante o combinación de los que mencionaremos.. MULTITAREA SECUENCIAL Este es el algoritmo más sencillo. Los procesos se ejecutan en el orden en el que llegan o en el que el sistema operativo los planifica. Esto significa que el primer proceso que entra es el primero en terminar, siguiendo una política de "primero en entrar, primero en salir".. SHORT JOB FIRTS(SJF) El algoritmo Short Job First (SJF) prioriza los trabajos más cortos. Existen dos variantes de este algoritmo: APROPIATIVA: Un proceso puede ser interrumpido si llega otro con un trabajo más corto por completar. NO APROPIATIVA: Un proceso en ejecución no puede ser interrumpido hasta que termine.. SHORT REMAINING TIME JOB FIRST (SRTJF) La variante apropiativa de SJF se llama Short Remaining Time Job First (SRTJF), que también se conoce como SRT. En este algoritmo, el proceso con el tiempo restante más corto siempre tiene prioridad.. ALGORITMO BASADO EN TURNOS (ROUND ROBIN) En este algoritmo, cada proceso recibe un fragmento de tiempo, llamado Quantum o Slice, para ejecutarse. Si el proceso no termina dentro de su turno, vuelve a la cola para esperar el siguiente ciclo. Este algoritmo es muy eficiente para procesos interactivos, donde el tiempo de respuesta es crucial.. VIRTUAL ROUND ROBIN El Virtual Round Robin es una variante mejorada del Round Robin, especialmente adaptada para procesos que involucran operaciones de entrada y salida. Es ideal para procesos interactivos, donde hay una constante interacción entre el usuario y las aplicaciones.. ALGORITMO de PRIORIDAD SIMPLE En este algoritmo, a cada proceso se le asigna un número que representa su prioridad. Los procesos con mayor prioridad se ejecutan primero. Existen variantes: APROPIATIVA: Un proceso de menor prioridad puede ser interrumpido por otro de mayor prioridad. NO APROPIATIVA: El proceso de mayor prioridad no puede interrumpir a otro en ejecución.. COLAS MÚLTIPLES SIN REALIMENTACIÓN Este algoritmo organiza los procesos en diferentes colas según su prioridad. Sin embargo, no existe retroalimentación entre las colas, lo que puede llevar a la inanición de procesos de baja prioridad. La inanición ocurre cuando un proceso nunca se ejecuta debido a su baja prioridad, lo cual no es deseable en sistemas multiprogramados.. COLAS MÚLTIPLES CON REALIMENTACIÓN La versión con realimentación de este algoritmo es más justa, ya que evita la inanición. Los procesos pueden cambiar de cola según su comportamiento, lo que asegura que incluso los procesos de baja prioridad eventualmente se ejecuten. PROCESOS de FONDO (BACKGROUND PROCESSES) Los procesos de baja prioridad que no requieren ejecución inmediata se denominan procesos de fondo o background processes. Estos incluyen tareas como la administración de claves o los backups, que pueden ejecutarse en segundo plano sin interferir con los procesos de mayor prioridad. APROPIATIVIDAD vs NO APROPIATIVIDAD Expropiar o apropiarse de la CPU significa quitarle el procesador a un proceso que se está ejecutando. En este contexto, hablamos de algoritmos apropiativos y no apropiativos. ALGORITMOS NO APROPIATIVOS: En un algoritmo no apropiativo, si un proceso con mayor prioridad llega mientras otro se está ejecutando, el sistema operativo espera a que el proceso actual termine para luego permitir la ejecución del proceso prioritario. El proceso en ejecución no es interrumpido. ALGORITMOS APROPIATIVOS: En un algoritmo apropiativo o expropiativo, si un proceso de mayor prioridad llega, el sistema operativo interrumpe al proceso en ejecución y le cede la CPU al nuevo proceso. Este enfoque es común en sistemas operativos de tiempo real, donde las prioridades están muy marcadas. Los sistemas de tiempo real duro, por ejemplo, no toleran retrasos significativos, lo que obliga a desplazar de inmediato al proceso en ejecución. Existen sistemas que no son de tiempo real, pero que aún implementan apropiatividad. Un ejemplo es Round Robin, un algoritmo con características de apropiatividad nativa. PCB (PROCESS CONTROL BLOCK) El Process Control Block (PCB) es una zona de memoria protegida donde se almacena la información vital de cada proceso, permitiendo al sistema operativo gestionar los procesos que han sido planificados. INFORMACIÓN ALMACENADA en el PCB ID DE PROCESO: Un número único que identifica cada proceso. ESTADO DEL PROCESO: Indica si el proceso está en ejecución, bloqueado, en espera, etc. CANTIDAD DE THREADS: Si el proceso está dividido en varios threads, el PCB refleja esta información. JERARQUÍA DE THREADS: Información sobre los threads padre, hijos y nietos del proceso. CONTADOR DE PROGRAMA (PC): Un registro que apunta a la parte del programa que está siendo ejecutada. Solo el proceso en ejecución tiene un PC. ESPACIO DE DIRECCIONES: Indica las direcciones de memoria ocupadas por el proceso. PRIORIDADES: Muestra el nivel de prioridad del proceso, en función de la configuración del sistema operativo. LISTA DE RECURSOS ASIGNADOS: Incluye información sobre archivos o periféricos asignados al proceso. OTROS ASPECTOS del PCB El PCB también incluye información sobre: ESTADO DE MULTIPROGRAMACIÓN: Indica cuántos procesos puede admitir el sistema operativo, gestionado por el algoritmo de largo plazo. RELACIÓN JERÁRQUICA DE THREADS: Cada proceso puede tener varios threads, que a su vez pueden estar jerárquicamente relacionados. TIEMPO DE EJECUCIÓN: El tiempo que el proceso ha estado ejecutándose. LISTA DE RECURSOS ASIGNADOS: Archivos o dispositivos que un proceso tiene asignados durante su ejecución. IMAGEN del PROCESO La imagen de proceso es un subconjunto de la información del PCB. Esta contiene los registros de la CPU, variables de entorno, límites de memoria y permisos de acceso. La información debe ser transferida entre el PCB y la CPU cuando un proceso es suspendido o retomado, lo que es esencial para la conmutación de contexto. ARQUITECTURAS RISC y CISC Las arquitecturas de los procesadores influyen en la cantidad de información que se maneja en la imagen de proceso: RISC (REDUCED INSTRUCTION SET COMPUTER): Procesadores como ARM86 tienen más registros, lo que aumenta la velocidad, pero genera más información para transferir durante la conmutación de contexto, causando mayores delays. CISC (COMPLEX INSTRUCTION SET COMPUTER): Tienen menos registros, lo que reduce el tamaño de la imagen del proceso. COMPROMISOS en la ADMINISTRACIÓN de PROCESOS En la planificación de procesos y administración de sistemas operativos, las soluciones suelen ser de compromiso. Esto significa que se busca equilibrar los diferentes factores (velocidad, eficiencia, equidad) sin resolver completamente un solo aspecto, para no empeorar otros. ALGORITMO FCFS (FIRST COME, FIRST SERVE) El algoritmo First Come, First Serve (FCFS) es un método simple de planificación de procesos en el cual los procesos se ejecutan en el orden en el que llegan. No existe ningún criterio de prioridad ni interrupción, lo que lo hace uno de los algoritmos más fáciles de implementar.. FUNCIONAMIENTO de FCFS BASE en COLA FIFO: El FCFS funciona como una cola FIFO (First In, First Out), lo que significa que los procesos son despachados en el orden en que llegan o son admitidos por el sistema operativo. SIN INTERRUPCIONES: Una vez que un proceso comienza a ejecutarse, no puede ser interrumpido ni desplazado por otro proceso. Los nuevos procesos que llegan son añadidos al final de la cola y deben esperar su turno.. VENTANA de FCFS FÁCIL de IMPLEMENTAR: Su implementación es simple y directa, ya que solo se necesita una cola donde los procesos se alinean en el orden de llegada. EFICIENTE en ALGUNOS CASOS: Si los procesos llegan en el orden adecuado (por ejemplo, los procesos más cortos primero), el algoritmo puede mostrar un rendimiento aceptable. Sin embargo, esto sería una coincidencia y no es un comportamiento garantizado.. DESVENTAJAS de FCFS PENALIZACIÓN a PROCESOS CORTOS: Los procesos de menor duración pueden sufrir largos tiempos de espera si llegan después de procesos más largos. Esto crea un efecto de convoy: los procesos cortos deben esperar a que los procesos largos terminen, lo que impacta negativamente en el rendimiento global. EJEMPLO: Si un proceso de 1 segundo de duración llega detrás de un proceso que tarda 1 hora, el proceso corto debe esperar 1 hora antes de ejecutarse, lo cual es una penalización significativa. MALA ADECUACIÓN a PROCESOS INTERACTIVOS: Este algoritmo no es adecuado para sistemas donde los usuarios esperan respuestas rápidas (como en sistemas interactivos), debido a que los procesos pueden quedar bloqueados detrás de procesos largos.. APLICACIÓN en PROCESOS BATCH El FCFS se usa con frecuencia para planificar procesos batch: PROCESOS BATCH: Son procesos que no requieren ejecución inmediata y se ejecutan en segundo plano, como el procesamiento de datos o la ejecución de tareas repetitivas. DURACIÓN SIMILAR: En los procesos batch, la duración de los procesos suele ser homogénea, por lo que el impacto negativo de la penalización de procesos cortos es mínimo.. IMPACTO en el RENDIMIENTO El rendimiento de FCFS depende en gran medida del orden de llegada de los procesos: MEJOR RENDIMIENTO: Si los procesos más cortos llegan primero por casualidad, el algoritmo tendrá un rendimiento mejor. PEOR RENDIMIENTO: Si los procesos más largos llegan primero, los procesos más cortos sufrirán tiempos de espera largos, lo que afectará el rendimiento general del sistema.. COMBINACIÓN con OTRAS TÉCNICAS En la práctica, el algoritmo FCFS se puede combinar con otros mecanismos de planificación, como: COLAS MÚLTIPLES: En entornos más complejos, FCFS puede ser usado junto a colas de planificación múltiples. ROUND ROBIN: También puede ser combinado con el algoritmo Round Robin para mejorar la eficiencia en ciertos tipos de sistemas.. NO APROPIATIVO FCFS es un algoritmo no apropiativo, lo que significa que: NO HAY INTERRUPCIONES: Un proceso no puede ser desplazado de la CPU por otro proceso una vez que empieza su ejecución. PRIORIDAD DE LLEGADA: El único criterio de planificación es el orden de llegada. No existe un mecanismo que permita a un proceso de mayor prioridad interrumpir o adelantar a otro proceso en ejecución. EJEMPLO DE FCFS (FIRST COME, FIRST SERVED) Teniendo los siguientes datos, vamos a calcular él TE´ y TR´: El tiempo de llegada, significa que consideramos el momento en el que llegaron y fueron planificados. El sistema operativo toma como llegada la referencia para poder calcular el tiempo de espera, luego lo que hace es agarrar el orden de los procesos como P0, P1, P2 y por último P3. Como tenemos el proceso P0 = 25UT, que llego en el tiempo 0, va a ser el primero en ingresar y no espera nada. Al estar en un FCFS, el proceso debe terminar de manera completa, luego vamos con el proceso P1 = 10UT, una vez que termina P1, entra el proceso P2 = 15UT, por último, llega el proceso P3 = 5UT, durando asi un total de 55UT Para saber el tiempo de espera de cada proceso, debemos ver cuanto tardo en ingresar al sistema, en este caso sería: TEP0 = 0 TEP1 = 25 TEP2 = 35 TEP3 = 50 Para calcular el tiempo de espera promedio (TE´), vamos a sumar los cuatro valores y los dividimos en la cantidad de procesos, siendo de la siguiente manera: TE´ = (TEP0 + TEP1 + TEP2 + TEP3) / 4 TE´ = (0 + 25 + 35 + 50) / 4 TE´ = 27,5 UT Luego debemos calcular el tiempo de retorno de cada proceso, siendo este el tiempo que está en el sistema el proceso desde que es planificado, siendo de la siguiente manera: TRP0 = 25 TRP1 = 35 TRP2 = 50 TRP3 = 55 Para calcular el tiempo de retorno promedio (TR´), vamos a sumar los cuatro valores y los dividimos en la cantidad de procesos, siendo de la siguiente manera: TR´= (TRP0 + TRP1 + TRP2 + TRP3) / 4 TR´= (25 + 35 + 50 + 55) / 4 TR´= 41,25 UT Como podemos observar el tiempo de espera promedio (TE´) es muy grande, por lo que afecta a los procesos de menor duración, como lo es P3, pero en P0 no afecta ya que empieza de forma inmediata. OTRO EJEMPLO FCFS Teniendo los mismos datos, pero organizados de manera tal que el mas corto llego primero y el mas largo en último lugar. En este ejemplo, el rendimiento debería mejorar: Como tenemos el proceso P3 = 5UT, que llego en el tiempo 0, va a ser el primero en ingresar y no espera nada. Al estar en un FCFS, el proceso debe terminar de manera completa, luego vamos con el proceso P1 = 10UT, una vez que termina P1, entra el proceso P2 = 15UT, por último, llega el proceso P0 = 25UT, durando asi un total de 55UT Calculando el tiempo de espera de cada proceso, podemos calcular el tiempo de espera promedio (TE´): TEP3 = 0 TEP1 = 5 TEP2 = 15 TEP0 = 30 TE´ = (TEP3 + TEP1 + TEP2 + TEP0) / 4 TE´ = (0 + 5 + 15 + 30) / 4 TE´ = 12,5 UT Calculando el tiempo de retorno de cada proceso, podemos calcular el tiempo de retorno promedio (TR´): TRP3 = 5 TRP1 = 15 TRP2 = 30 TRP0 = 55 TR´ = (TRP3 + TRP1 TRP2 + TRP3) / 4 TR´ = (5 + 15 + 30 + 55) / 4 TR´ = 26,25 UT Mejorando asi demasiado los valores obtenidos. SFJ (SHORT FIRST JOB) En este algoritmo se ordenan los procesos de duración menor a mayor, no es apropiativo, por lo que una vez que un proceso comience, no puede ser interrumpido. Requiere de algoritmo predictor para estimar la ráfaga de cada proceso, es necesario porque no podemos conocer con certeza la duración de los procesos futuros. Es apto para procesos batch. Es una versión optimizada sobre FCFS, ya que es más eficiente en términos de tiempo de espera promedio (TE´), mientras que FCFS ejecuta los procesos en orden de llegada SFJ los ordena del más corto al más largo. EJEMPLO DE SFJ Teniendo los siguientes datos, vamos a calcular TE´ y TR´: Primero, lo que podemos observar es que el proceso P3 tiene un tiempo de llegada, lo que quiere decir que no llego mientras todos los demás procesos si, por lo que el sistema comienza por P1, siendo el 2do proceso más corto. Comienza el sistema con el proceso P1 = 10UT, y el proceso P3 no ingresa a las 5UT ya que el algoritmo no es apropiativo, por lo que ingresa cuando termina el proceso P1, una vez que termina sigue el proceso P3 = 5UT, luego el proceso P2 = 15UT, por último, el proceso P0 = 25UT Para calcular el tiempo de espera promedio, debemos sumar el tiempo de espera de los cuatro procesos y dividirlos en cuatro (ya que son cuatro procesos): TEP1 = 0, TEP3 = 5, TEP2 = 15, TEP0 = 30 TE´ = (TEP0 + TEP1 + TEP2 + TEP3) / 4 TE´ = (30 + 0 + 15 + 5) / 4 TE´ = 12,5UT Para calcular el tiempo de retorno promedio, debemos sumar el tiempo de retorno de los cuatro procesos y dividirlos en cuatro (ya que son cuatro procesos): TRP1 = 10, TRP3 = 10, TRP2 = 30, TRP0 = 55 TR´ = (TRP0 + TRP1 + TRP2 + TRP3) / 4 TR´ = (55 + 10 + 30 + 10) / 4 TR´ = 26,25UT EJEMPLO SFJ CON DISTINTOS TIEMPOS DE LLEGADA Teniendo los siguientes datos, vamos a calcular TE´ y TR´: Primero, lo que podemos observar es que el proceso P1 no tiene un tiempo de llegada, mientras que los demás procesos si, por lo tanto, el primer proceso en ejecutarse va a ser P1 = 8UT, una vez que termina el proceso P1, comienza el proceso P2 = 4UT, que en realidad debería ir en primera posición por ser el proceso más corto, pero al tener un tiempo de llegada de 1UT, siendo mayor al proceso de llegada de P1, pasa a ser el segundo proceso en entrar al sistema. Una vez que termina el proceso P2, vamos con el proceso P4 = 5UT, que por más que tenga un tiempo de llegada mayor a P3, ya se recorrieron las UT suficientes para que pueda entrar al sistema P4, por último, una vez finaliza el proceso P4, entra el proceso P3 = 9UT. Para calcular el tiempo de espera promedio, debemos sumar los cuatro tiempos de espera de los procesos y dividirlos en la cantidad de proceso, en este caso cuatro. También hay que tener en cuenta el tiempo de llegada, ya que la mayoría de los procesos tienen un tiempo de llegada, como es el caso de el proceso P2, su tiempo de espera no es 8UT, sino 7UT, ya que llego cuando iba por 1UT, lo mismo pasa con el proceso P4, el tiempo de espera no va a ser 12UT, sino 9UT, ya que llego cuando iba por 3UT, y el último es P3, que su tiempo de espera es 15UT, ya que llego cuando iban 2UT, por lo tanto: TEP1 = 0, TEP2 = 7, TEP4 = 9, TEP3 = 15 TE´ = (TEP1 + TEP2 + TEP3 + TEP4) / 4 TE´ = (0 + 7 + 15 + 9) / 4 TE´ = 7,75 Para calcular el tiempo de retorno promedio, debemos sumar los cuatro tiempos de retorno de los procesos y dividirlos en la cantidad de procesos, en este caso cuatro. En este caso, también debemos tener en cuenta el tiempo de llegada, P1 va tener un tiempo de retorno de 8UT ya que no tuvo tiempo de llegada, en P2 hay que tener en cuenta que llego cuando iba por 1UT, por lo que el tiempo de retorno es de 11UT, en P4 el tiempo de retorno es 14UT, porque llego cuando iban 3UT, por último, en P3 el tiempo de retorno es de 24UT porque llego cuando iban solo 2UT, por lo tanto: TRP1 = 8, TRP2 = 11, TRP3 = 14, TRP4 = 24 TR´ = (TRP1 + TRP2 + TRP3 + TRP4) / 4 TR´ = (8 + 11 + 14 + 24) / 4 TR´ = 14,25UT SJF: ALGORITMO DE ENVEJECIMIENTO (PREDICTOR) Siendo t = tiempo / T = tau / α = 0,5 El algoritmo siempre empieza con n = 0, por lo que el primer valor que se calcula es T1, porque T0+1 = T1, entonces la fórmula comienza con: τ1 = α * tn + (1- α) ^ n+1 * τn → τ1 = 0,5 * 4 + (1 – 0,5) ^ 1 * 4 → τ1 = 0,5 * 4 + 0,5 * 4 → τ1 = 4 Luego seguimos con τ2: τ2 = α * tn + (1- α) * α * τn-1 + (1- α) ^ n+1 * τn-2 → τ2 = 0,5 * t1 + (1 – 0,5) * 0,5 * t0 + (1 – 0,5) ^ 2 * τ0 ➔ τ2 = 0,5 * 6 + 0,5 * 0,5 * 4 + 0,5 ^ 2 * 4 → τ2 = 2,3 Luego seguimos con τ3: τ3 = α * tn + (1- α) * α * τn-1 + (1- α) ^ n * τn-2 + (1- α) ^ n+2 * τ0 → τ3 = 0,5 * 1 + 0,5^2 * 6 + 0,5^3 * 4 + (0,5) ^ 4 * 4 → τ3 = 2,75 SRTF (SHORTEST REMAINING TIME FIRST) O SJF APROPIATIVO Es una versión apropiada del SJF, significa que puede interrumpir un proceso en ejecución si llega un proceso con un tiempo de ejecución menor al restan del proceso actual, el proceso actual se interrumpe y se coloca nuevamente en la cola de procesos listos. En lugar de seleccionar al proceso con tiempo de ejecución mas corto al inicio, se selecciona el proceso con el menor tiempo restante en cada momento, es decir, constantemente se está comparando el tiempo restante de todos los procesos y se elige el de menor tiempo restante para asi ejecutarlo. Utiliza el algoritmo de envejecimiento para evitar el hambre (starvation) de procesos. A medida que un proceso espera en la cola, su tiempo de ráfaga estimado se ajusta para reflejar su antigüedad, asegurando que los procesos de larga duración tengan la oportunidad de ejecutarse EJEMPLO DE SRTF vs SJF. PRIMERO VAMOS A CALCULAR PARA EL ALGORITMO SRFT Teniendo en cuenta los siguientes datos: PROCESO // TIEMPO DE LLEGADA // RÁFAGA P1 // 0UT // 8UT P2 // 1UT // 4UT P3 // 2UT // 9UT P4 // 3UT // 5UT Como podemos ver, el único proceso que llega de manera inmediata es el proceso P1 = 8UT, ya que llega en 0UT, en el 1UT llega el proceso P2 = 4UT, y se compara cual tiene mayor tiempo restante entre el proceso en ejecución y el que llegó (entre P1 = 7UT restantes y P2 = 4UT), como P2 tiene menor tiempo restante, pasa a ejecutarse mandando a P1 a la cola de procesos listos, faltándole asi 7UT, en el 2UT llega P3 = 9UT, por lo que se compara con el proceso en ejecución, como P2 = 3UT restantes, tiene menor tiempo restante que P3 = 9UT sigue ejecutándose y P3 vuelve a la cola de procesos listos. En el 3UT llega P4 = 5UT, se compara con el proceso en ejecución, que sigue siendo P2, pero ahora P2 = 2UT restantes, al tener menor tiempo restante que P4 = 5UT, P4 vuelve a la cola de procesos listos, ahora P2 se termina de ejecutar y se compara entre los 3 procesos restantes cual tiene menor tiempo restante, siendo este P4 = 5UT, una vez que termina de ejecutarse, se compara entre P1 y P3 cual es el de menor tiempo restante, siendo este P1, se completa P1 y entra P3, finalizando asi el sistema. Para calcular el tiempo medio de finalización, debemos sumar lo que tardan los cuatro procesos en terminar, teniendo en cuenta su tiempo de llegada y debemos dividirlo en 4, de la siguiente manera: (TFP1 = 17 – 0 = 17), (TFP2 = 5 – 1 = 4), (TFP3 = 26 – 2 = 24), (TFP4 = 10 – 3 = 7) TF´ = (TFP1 + TFP2 + TFP3 + TFP4) / 4 TF´ = (17 + 4 + 24 + 7) / 4 TF´ = 13UT Para calcular el tiempo de espera promedio, debemos sumar los cuatro tiempos de espera, teniendo en cuenta su tiempo de llegada, por último, dividirlo en la cantidad de procesos, en este caso cuatro: (TEP1 = 0 + (10 – 1) = 9), siendo tiempo en empezar = 0, tiempo en volver = 10, tiempo ya ejecutado = 1 (TEP2 = 1 – 1 = 0), siendo tiempo en empezar = 1, tiempo de llegada = 1 (TEP3 = 17 – 2 = 15), siendo tiempo en empezar = 17, tiempo de llegada = 2 (TEP4 = 5 – 3 = 2), siendo tiempo en empezar = 5, tiempo de llegada = 3 TE´ = (TEP1 + TEP2 + TEP3 + TEP4) / 4 TE´ = (9 + 0 + 15 + 2) / 4 TE´ = 6,5UT Para calcular el tiempo de retorno promedio, debemos sumar los cuatro tiempos de espera, teniendo en cuenta su tiempo de llegada, por último, dividirlo en la cantidad de procesos, en este caso cuatro: (TRP1 = 17), siendo el tiempo que demoró en completarse = 17 (TRP2 = 5 – 1 = 4), siendo el tiempo que demoró en completarse = 5, tiempo de llegada = 1 (TRP3 = 26 – 2 = 24), siendo el tiempo que demoró en completarse = 26, tiempo de llegada = 2 (TRP4 = 10 – 3 = 7), siendo el tiempo que demoró en completarse = 10, tiempo de llegada = 3 TR´ = (TRP1 + TRP2 + TRP3 + TRP4) / 4 TR´ = (17 + 4 + 24 + 7) / 4 TR´ = 13UT. SEGUNDO CALCULAMOS PARA EL ALGORITMO SJF Teniendo en cuenta los mismos datos vamos a calcular TE´ y TR´: PROCESO // TIEMPO DE LLEGADA // RÁFAGA P1 // 0UT // 8UT P2 // 1UT // 4UT P3 // 2UT // 9UT P4 // 3UT // 5UT SJF, lo que hace es ordenar los procesos en menor a mayor duración, por lo que el orden será P2, P4, P1, P3, pero los procesos también tienen tiempo de llegada por lo que no pueden comenzar a ejecutarse de manera automática, y como sabemos SJF no es apropiativo, por lo que los procesos no son interrumpidos. Entonces el nuevo orden será P1, P2, P4, por último, P3. Para calcular el tiempo medio de finalización, debemos sumar lo que tardan los cuatro procesos en terminar, teniendo en cuenta su tiempo de llegada y debemos dividirlo en 4, de la siguiente manera: (TFP1 = 8 – 0 = 8), (TFP2 = 12 – 1 = 11), (TFP4 = 17 – 3 = 14), (TFP3 = 26 – 2 = 24) TF´ = (TFP1 + TFP2 + TFP3 + TFP4) / 4 TF´ = (8 + 11 + 24 + 14) / 4 TF´ = 14,5UT Para calcular e