jueves, 16 de febrero de 2023

2. Administración de Procesos y del procesador

2.1. Concepto de proceso


Un proceso es un conjunto de actividades planificadas que implican la participación de un número de personas y de recursos materiales coordinados para conseguir un objetivo previamente identificado.

En un sistema operativo, un proceso es un programa en ejecución, incluyendo el valor program-counter, los registros y las variables. En palabras mas simples, se refiere a cualquier programa o aplicación que utilicemos y ejecute el sistema.

2.2. Estados y transiciones de los procesos

Los principales estados de los hilos son: Ejecución, Listo y Bloqueado. Si un proceso está expulsado de la memoria principal (RAM), todos sus hilos deberán estarlo ya que todos comparten el espacio de direcciones del proceso. Las características de estos estados son:

  • Creación: Cuando se crea un proceso se crea un hilo para ese proceso. Luego, este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un puntero de instrucción y los argumentos del nuevo hilo.

  • Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea. Ahora el procesador podrá pasar a ejecutar otro hilo que esté al principio de los Listos mientras el anterior permanece bloqueado
  • Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce, el mismo pasa a la final de los listos.
  • Terminación: Cuando un hilo finaliza se liberan tanto su contexto como sus columnas.


Normalmente siempre que utilizamos nuestra computadora se nos ha aconsejado abrir los programas uno a la vez y no abrirlos todos al mismo tiempo, esto se debe a que los procesos se van turnando uno a uno para ejecutarse, dependiendo de lo que le tome al procesador poder ejecutarlo y pasar al siguiente.
En cuanto las transiciones, son 4 las posibles:
  • La transición 1 se realiza cuando el sistema operativo determina que el proceso no puede continuar justo en ese momento, en algunos sistemas se puede hacer una llamada al sistema "pause" para pasar al estado bloqueado.
  • La transición 2 se da cuando el planificador de procesos decide que el proceso ya estuvo el tiempo suficiente en ejecución y debe dar paso a la ejecución de otros procesos.
  • La transición 3 se realiza cuando todos los procesos han ocupado tiempo del procesador y debe retomarse el primer proceso.
  • La transición 4 ocurre cuando se produce un evento externo por el que un proceso estaba en espera, por ejemplos, introducir datos desde la terminal. Si no hay otro proceso en ejecución en ese instante, la transición 3 se activa y el proceso comienza a ejecutarse; también podría pasar al estado de "listo" y esperar un momento para iniciar la ejecución.

2.3 Procesos ligeros: Hilos o hebras

Los procesos ligeros nacieron principalmente para reducir la estructura de un proceso el cuál ayudaría a mantener un ritmo rápido y eficaz al momento de ejecutarlo, y también para simplificarlo de una manera que sea más sencilla de comprenderlos.

Lo anterior mencionado no significa que los procesos ligeros reemplacen a los procesos normales, ya que en algunas ocasiones se necesita crear procesos que se ejecuten de manera concurrente o paralela, debido a que, por ejemplo, cuando un proceso finaliza, sea cual sea la razón, los procesos ligeros que lleva dentro también finalizan, en cambio esto no sucede así con los procesos hijo.

El funcionamiento de los hilos

La creación de un nuevo hilo es una característica que permite a una aplicación realizar varias tareas a la vez. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esto ayuda a simplificar alguna aplicación que lleve a cabo distintas tareas a la vez. 

Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos.

El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado. Asimismo, en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.



2.4 Concurrencia y secuencialidad

La concurrencia de procesos es cuando dos o más procesos pueden coincidir en el acceso a un recurso compartido o que requieran coordinarse al ejecutarse.

Cuando tenemos un solo procesador se producirá un intercalado de las instrucciones de ambos procesos, de tal forma que tendremos la sensación de que hay un paralelismo en el sistema.

Para que dos actividades, sean concurrentes, es necesario que tengan relación entre sí, como puede ser la cooperación en un trabajo determinado o el uso de información compartida.

Los archivos secuenciales son un tipo de archivo en los que la información puede leerse y escribirse empezando desde el principio del archivo.

Se refiere al procesamiento de los registros, no importa el orden en que se haga, para eso los registros están organizados en forma de una lista y recuperarlos y procesarlos uno por uno al principio a fin.

2.5 Niveles, objetivos y criterios de planificación 

La planificación es el proceso por el cual el sistema operativo selecciona que procesos ejecutar. la selección de estos se basas en algunos de los algoritmos de planificación.

La planificación de la CPU es una de las funciones del sistema operativo. Este despacho es llevado a cabo por un pequeño programa llamado planificador a corto plazo o "dispatcher".
  • Planificación a largo plazo. Este planificador está presente en algunos sistemas que admiten, además de procesos interactivos, trabajos por lotes. Usualmente, se les asigna una prioridad baja a los trabajos por lotes, utilizándose estos para mantener ocupados a los recursos del sistema durante períodos de baja actividad de los procesos interactivos.
  • Planificación a medio plazo. En los sistemas de multiprogramación y tiempo compartido varios procesos residen en la memoria principal. El tamaño limitado de ésta hace que el número de procesos que residen en ella sea finito. Puede ocurrir que todos los procesos en memoria estén bloqueados, desperdiciándose así la CPU.
  • Planificación a corto plazo. Se ejecuta cuando ocurre un suceso que puede conducir a la interrupción del proceso actual o que ofrece la oportunidad de expulsar de la ejecución al proceso actual en favor de otro.
Los objetivos del planificador se resumen en:
  • Reparto equitativo del tiempo de procesador
  • Eficiencia en el uso del procesador
  • Menor tiempo de respuesta en uso interactivo
  • Cumplir plazos de ejecución de los sistemas de tiempo real
2.6 Técnicas de administración del planificador

El planificador es una parte fundamental del sistema operativo que se encarga de asignar recursos del sistema a diferentes procesos y tareas. Para administrar el planificador, es necesario utilizar técnicas que permitan garantizar un uso eficiente de los recursos del sistema, asegurar la justicia en la asignación de recursos y maximizar el rendimiento general del sistema, como, por ejemplo:

Algoritmo FIFO (First In First Out) o FCFS (First Come First Serve).

Los ciclos de CPU asignados a cada proceso se asignan en función de una cola FIFO. Al primer proceso que llega se le asignan tiempos o ciclos de CPU hasta que termina completamente. A continuación, se ejecuta completo el siguiente proceso que hay en la cola FIFO y así sucesivamente hasta terminar con el último proceso. Este algoritmo de planificación normalmente se utiliza para la gestión de trabajos en colas de impresión, respecto de los trabajos que van llegando a la impresora.

Planificación por Prioridad al más corto (SJF, Short Job First).

El algoritmo de planificación de procesos primero el trabajo mas corto, supone que los tiempos de ejecución se conocen de antemano, es decir, los procesos que se tomen menos tiempo en ejecutarse o llevar a cabo su tarea, se ejecutarán de primer plano. Algunas de sus características podrían ser:
  • Asociar a cada proceso el tiempo de ráfaga de CPU: una vez llega cada proceso se le asigna tiempo de ráfaga de CPU, que son las unidades de tiempo que requieren para que el proceso se ejecute completamente.
  • Selecciona el proceso con menor ráfaga de CPU: antes de ejecutar cada proceso el algoritmo prioriza cual es el proceso más corto a ejecutar.
  • En caso de empate aplicar FIFO: si llega a presentarce empate en dos o mas procesos de rafaga de CPU, el algoritmo cambia a priorizar primero en entrar primero en salir, algoritmo FIFO.
  • Algoritmo no expulsivo: una vez se empieza a ejecutar cada proceso no será interrumpido hasta finalizar.
Un ejemplo gráfico sería:



Planificación por Prioridad al Tiempo Restante más Corto (SRTF, Short Remaining Time First).

Es similar al SJF, con la diferencia de que si un nuevo proceso pasa a listo se activa el "dispatcher" para ver si es más corto que lo que queda por ejecutar del proceso en ejecución. Si es así, el proceso en ejecución pasa a listo y su tiempo de estimación se decremento con el tiempo que ha estado ejecutándose.

En SRTF se penaliza a las ráfagas largas (como en SJF). Un punto débil de este algoritmo se evidencia cuando una ráfaga muy corta suspende a otra un poco más larga, siendo más larga la ejecución en este orden al ser preciso un cambio adicional de proceso y la ejecución del código del planificador.

Su funcionalidad es:
  • Los procesos llegan a la cola y solicitan un intervalo de CPU
  • Si dicho intervalo es inferior al que le falta al proceso en ejecución para abandonar la CPU, el nuevo proceso pasa a la CPU y el que se ejecutaba a la cola de preparados.
Por ejemplo:

Planificación el Siguiente con Relación de Respuesta Máxima (HRN,  

HIGHEST RESPONSE RATIO NEXT)


Esta planificación corrige algunas deficiencias de SJF, particularmente, el retraso excesivo de trabajos largos, y el favoritismo excesivo por los trabajos cortos. HRN es una disciplina de planificación no apropiativa en la cual la prioridad de cada proceso no sólo se calcula en función del tiempo de servicio, sino también del tiempo que ha esperado para ser atendido. Cuando un trabajo obtiene el procesador, se ejecuta hasta terminar.

La decisión de planificación se basa en una estimación del tiempo de retorno normalizado.
Este método es atractivo porque tiene en cuenta la edad del proceso. Aunque se favorece a los trabajos más cortos (un denominador menor produce una razón mayor), el envejecimiento de un proceso sin que haya sido servido incrementa el valor de la razón, de forma que los procesos más largos puedan pasar, en competición con los más cortos. 

El tiempo esperado de servicio debe estimarse antes de emplear la técnica de la mayor tasa de respuesta.


Planificación Round Robin (RR)
Es uno de los sistemas utilizados por los CPU más viejo, que es utilizado por los sistemas de tiempos compartidos, los cuales ayudan a que el procesador no se "monopolice" y pueda ser usados sin mayor problema, su forma de trabajar es asignando fracciones de tiempo corto a los procesos o dividirlos por secciones de tiempo, lo cual ayuda a tener un control y que un solo proceso no abarque todo el tiempo del proceso a efectuar.

Se puede interpretar así:
  • A todos los procesos se les asigna el mismo tiempo de ejecución.
  • Si el tiempo asignado de ejecución no es suficiente el CPU lo regresa a la cola, para asignarle otro slot de tiempo y pueda terminar.
  • Su base, es conforme al primer algoritmo, sin embargo, no toma en cuenta el tiempo que tarda cada uno de los programas en ser procesados


Planificación Multi-Level FreedBack Queues

El algoritmo de planificación mediante colas multinivel realimentadas permite mover un proceso de una cola a otra. La idea es separar los procesos en función de las características de sus ráfagas de CPU. Si un proceso utiliza demasiado tiempo de CPU, se pasa a una dé prioridad más baja. Este esquema deja los procesos limitados por E/S y los procesos interactivos en las colas de prioridad más alta. Además, un proceso que este esperando demasiado tiempo en una cola de baja prioridad puede pasarse a una cola de prioridad más alta. Este mecanismo de envejecimiento evita el bloqueo indefinido.

Cuando un proceso obtiene la CPU, sobre todo cuando todavía no ha tenido oportunidad de establecer un patrón de comportamiento, el planificador no tiene idea de la cantidad de tiempo de CPU que necesitará el proceso. Los procesos limitados por la E/S normalmente usan la CPU sólo un momento antes de generar una solicitud de E/S; los procesos limitados por la CPU pueden usar el procesador durante horas si está disponible en forma no apropiativa.




Estas planificaciones son esenciales para que el usuario, al momento de ejecutar algún programa o proceso, sea más rápido para más comodidad.






miércoles, 1 de febrero de 2023

1. Introducción a los Sistemas Operativos

1.1 ¿Qué son los sistemas operativos? 

Un sistema operativo se puede definir como el "software" el cuál se encarga de administrar cada una de las partes de la computadora que se esté utilizando, tanto hardware como software, logrando así la conexión entre el equipo y el usuario que lo está usando.

Algunos ejemplos de sistemas operativos son:

  • Microsoft Windows. Es el sistema operativos mas reconocido del mundo y el cual todos hemos utilizado alguna ves o seguimos utilizando, permite realizar varias aplicaciones a la vez y contiene una forma fácil de realizar más rápido las tareas, al ser guiado paso a paso. Su característica de masivo hace que permanentemente sea repensado en función de hacerlo más intuitivo.
  • Mac OS X. Mayormente conocido como el sistema operativo que podemos encontrar en los dispositivos y plataformas Apple, también muy conocido atreves del mundo, tratando de ofrecer, a su manera, la misma satisfacción de su competidor Windows.
  • GNU/Linux El software libre más importante, que soporta el trabajo con más de un microprocesador y permite que toda la memoria pueda utilizarse como caché.

  • SolarisSistema operativo certificado como una versión de UNIX, caracterizado por ser muy adecuado para el procedimiento simétrico por soportar un gran número de CPUs.
  • FreeBSDSistema también basado en una versión de UNIX, que tiene como principal característica ser un verdadero sistema abierto porque todo su código fuente lo está. El tamaño de los programas es reducido por tener ‘librerías compartidas’.

  • OpenBSDSistema operativo libre, que funciona con varios tipos diferentes de plataforma de hardware, reconocido por muchos profesionales de la seguridad informática como el sistema UNIX más seguro.

1.2 ¿Cuáles son las funciones y características de los sistemas operativos? 

Como anteriormente mencionado, la función de un sistema operativo es administrar los recursos que un equipo de cómputo contiene, lo que conlleva a crear una interfaz la cual el usuario puede interactuar, por consiguiente, hace una gestión de archivos y administración de tareas, consiguiendo el procesamiento de diversos programas y tareas de segundo plano que ayudan al buen funcionamiento de la computadora.

Algunas características de los sistemas operativos es que son el intermediario entre el usuario y hardware, son necesarios para el funcionamiento de computadoras, tabletas y teléfonos móviles, están diseñados para ser amigables con el usuario y en su mayoría son fáciles de usar y entender, algunos de estos sistemas operativos se ven sujetos a un pago por licencia pero con o sin ella aun permiten el uso del dispositivo.

Varios de estos sistemas operativos funcionan para algunas tareas en especifico, en algunos de ellos estos te permiten libre acceso a su programación o tienen código abierto, mientras que otros sistemas pueden utilizarse para un uso mas personal como el uso de ciertos programas, jugar videojuegos, ver contenido multimedia, trabajos de oficina, etc.

1.3 ¿Cómo han ido evolucionando los sistemas operativos a través de la historia? 

La creación de sistemas operativos fue más que nada por necesidad y por hacer que algunos procesos se automaticen o hagan tareas más fáciles,         
es por ello que en 1801, el francés Joseph Marie Jacquard, inventor de "telar programable" aunque no es en si el creador de la programación, si no que creó el primer sistema de instrucciones para los computadores, en el cuál consistía en unas tarjetas perforadas donde se almacenaban información de manera automatizada para los primeros computadores creados por Charles Babbage.


De 1842 1843 Ada Lovelance tradujo las memorias de Luigi Menabrea, en el cual se basó para crear un lenguaje de programación a mano con el fin de calcular la serie de números de Bernoulli con la máquina de Babbage.

En 1944, un grupo de científicos en Bletchley Park, Inglaterra, entre los que se encontraba Alan Turing, construyó el computador Colossus, cuyo modelo más conocido, el Colossus Mark 2, utilizaba 2400 tubos de vacío. Este computador, si bien, tampoco era Turing-complete (lo que demuestra que no basta tener a Alan Turing para ser Turing-complete) ya que fue diseñado para una tarea criptográfica particular, sí era programable mediante cintas de papel.




Luego en 1955, la creación de los transistores revolucionó la construcción de los dispositivos electrónicos reduciendo drásticamente las tasas de falla respecto al hardware construido con tubos de vacío y aumentando la velocidad de respuesta. Se empezaron a construir grandes computadores basados en transistores, conocidas como mainframes. Debido a su costo de construcción, un computador de este tipo era solamente accesible para grandes corporaciones, gobiernos y universidades.

 


Los mainframes de IBM (International Business Machines Corporation), una compañía constructora de equipamiento computacional más importante de la época, requerían cada uno un software y periféricos distintos para funcionar, ya que las instrucciones no eran compatibles, por lo que se dieron a la tarea de hacer múltiples sistemas los cuales acataran una tarea cada uno y así eliminar ese problema.


Hasta hoy en la actualidad, puedes tener hasta un sistema operativo en la palma de tu mano, ya sea por medio de un USB o un disco duro, por lo cual el avance de la tecnología informática ha evidenciado un gran cambio, tanto en nuestra vida cotidiana como en el mundo.


1.4 Clasificación
Los sistemas operativos se clasifican según el uso o necesidad que se requieren dependiendo del usuario, por ejemplo:
  • Administración de tarea
            Se clasifican en:
    • Monotarea: Los que permiten usar solo un programa a la vez.
    • Multitarea: Los que permiten ejecutar varias tareas o programas a la vez.   
                   
  • Administración de usuarios
    • Monousuario: Son los cuales solo dejan trabajar a un usuario, ya sea en algún computador personal o de un área específica de trabajo.

    • Multiusuario: Estos permiten a varios usuarios a la vez trabajar y ejecutar programas a la vez.



  • Manejo de recursos o acceso a servicios  
    • Centralizados: Permite usar los recursos de un solo computador.
    • Distribuidos: Permite usar los recursos de más de un computador (CPU, memoria, periféricos
      , etc.)

1.5. Estructura: niveles o estratos de diseño
Como se ha mencionado antes, los sistemas operativos deben presentarse de manera amigable a los usuarios (que sean fáciles de utilizar, den confianza, etc.) y también que el propio sistema operativo cumpla con las funciones para lo que fue diseñado.

Hay 3 posibles diseños de sistemas.
  • Sistema Monolítico. Estos sistemas no presentan un estructura bien definida, ya que estos son escritos como una colección de procedimientos donde cualquier procedimiento puede llevar a otro. 

  • Sistema en capas. Como su nombre lo menciona, este sistema funciona por un jerarquía de capas, donde los servicios que brinda una capa son consumidos solamente por la capa superior. La capa 0 es del Hardware y la N es la de los procesos de Usuario. Estos sistemas tienen como ventaja que son modulares y la verificación se puede hacer a cada capa por separado. Sin embargo el diseño es muy costoso y es menos eficiente que el sistema monolítico ya que pierde tiempo pasando por cada capa.

  • Sistema con micronúcleo. La idea de este sistema consiste en un núcleo que se encargue de los servicios mínimos de manejos de procesos, memoria y que provea la comunicación entre procesos. los servicios restantes pasa como procesos separados del micronúcleo, que ejecutan en modo usuario.
1.6. Núcleo
También conocido como Kernel, es la interfaz entre el software y el hardware. supervisa la organización de procesos y datos de cada ordenador en un segundo plano. Este también controla los accesos al procesador y a la memoria, es responsable de los drivers (controladores) mas importantes y puede acceder directamente al hardware.

Un núcleo siempre tiene la misma estructura y consta de varias capas (de la mas baja a la mas alta):
  1. Interfaz con el hardware. Esta realiza tareas como la de controlador de red o controlador de PCI Express. 

  2. Gestión de la memoria. Distribuye la memoria RAM y la memoria virtual. 

  3. Gestor de procesos. Se encarga de la gestión del tiempo y permite el multitasking. 

  4. Gestor de dispositivos. Asigna un espacio en la memoria principal (cache, RAM, etc.) o secundaria (disco duro, USB, etc.) a los procesos. 


El principal cometido del núcleo es el procesamiento paralelo de diferentes tareas, el multitasking. Para ello debe, por un lado, cumplir con los tiempos establecidos y, por otro, permanecer disponible para tareas adicionales.