Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen Introduccion A Los Sistemas Operativos
Resumen Introduccion A Los Sistemas Operativos
Contenido
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS ............................................................................................................ 2
Definición de Sistema Operativo ............................................................................................................................... 2
Funciones de los sistemas operativos ....................................................................................................................... 2
Características de los sistemas operativos ................................................................................................................. 3
Clasificación de los Sistemas Operativos................................................................................................................... 3
Sistemas Operativos de multiprogramación (o Sistemas Operativos de multitarea). .......................................... 3
Sistema Operativo Monotareas. ........................................................................................................................... 4
Sistema Operativo Monousuario. ......................................................................................................................... 4
Sistema Operativo Multiusuario. .......................................................................................................................... 5
Sistemas Operativos de tiempo real. .................................................................................................................... 5
Sistemas Operativos de Tiempo Compartido. ....................................................................................................... 6
Sistemas Operativos Distribuidos.......................................................................................................................... 6
Sistemas Operativos de Red. ................................................................................................................................. 7
Sistemas Operativos Paralelos. ............................................................................................................................. 7
Arquitectura de los Sistema Operativo UNIX/LINUX................................................................................................. 7
GESTIÓN DE PROCESOS ............................................................................................................................................ 9
Procesos .................................................................................................................................................................... 9
El sistema operativo y los procesos........................................................................................................................... 9
Tipos de procesos y relación entre procesos concurrentes ................................................................................ 10
Estados de un proceso ............................................................................................................................................ 10
Modelo de dos estados ....................................................................................................................................... 10
Modelo de 5 estados ........................................................................................................................................... 11
Planificación de Procesos y Subprocesos. Hilos ...................................................................................................... 14
Planificación de procesos .................................................................................................................................... 14
Utilización del procesador: .................................................................................................................................. 14
Tipos de planificadores........................................................................................................................................ 15
Subproceso .......................................................................................................................................................... 16
Características de los subprocesos ...................................................................................................................... 18
Hilos ......................................................................................................................................................................... 18
Sistemas Multihilo ............................................................................................................................................... 18
GESTIÓN DE MEMORIA........................................................................................................................................... 21
¿Qué es la memoria? ............................................................................................................................................... 21
¿Quién administra la memoria? .............................................................................................................................. 21
¿Qué es la memoria real?........................................................................................................................................ 21
Gestión de Memoria Real .................................................................................................................................... 21
Memoria Virtual ...................................................................................................................................................... 25
Políticas de Asignación Local y Global ................................................................................................................. 26
Control de Carga .................................................................................................................................................. 28
Tamaño de Página ............................................................................................................................................... 29
pág. 1
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
pág. 2
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
7. Protección: Evitar que las acciones de un usuario afecten el trabajo que esta realizando otro usuario.
8. Multiacceso: Un usuario se puede conectar a otra máquina sin tener que estar cerca de ella.
9. Contabilidad de recursos: establece el costo que se le cobra a un usuario por utilizar determinados
recursos.
Habilidad para evolucionar. Un Sistema Operativo deberá construirse de manera que permita el
desarrollo, prueba o introducción efectiva de nuevas funciones del sistema sin interferir con el servicio.
Encargado de administrar el hardware. El Sistema Operativo se encarga de manejar de una mejor manera
los recursos de la computadora en cuanto a hardware se refiere, esto es, asignar a cada proceso una parte
del procesador para poder compartir los recursos.
Relacionar dispositivos (gestionar a través del kernel). El Sistema Operativo se debe encargar de
comunicar a los dispositivos periféricos, cuando el usuario así lo requiera.
pág. 3
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
tareas en segundo plano reciben tiempo de procesado durante los tiempos muertos de la tarea que se encuentra
en primer plano (por ejemplo, cuando esta aplicación está esperando información del usuario), y siempre que esta
aplicación lo permita. En los sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atención
del microprocesador durante una fracción de segundo. Para mantener el sistema en orden, cada tarea recibe un
nivel de prioridad o se procesa en orden secuencial. Dado que el sentido temporal del usuario es mucho más lento
que la velocidad de procesamiento del ordenador, las operaciones de multitarea en tiempo compartido parecen
ser simultáneas.
Se distinguen por sus habilidades para poder soportar la ejecución de dos o más trabajos activos (que se están
ejecutado) al mismo tiempo. Esto trae como resultado que la Unidad Central de Procesamiento (UCP) siempre
tenga alguna tarea que ejecutar, aprovechando al máximo su utilización.
Su objetivo es tener a varias tareas en la memoria principal, de manera que cada uno está usando el procesador, o
un procesador distinto, es decir, involucra máquinas con más de una UCP.
Sistemas Operativos como UNIX, Windows 95, Windows 98, Windows NT, Windows XP, MAC-OS, OS/2, soportan
la multitarea.
Las características de un Sistema Operativo de multiprogramación o multitarea son las siguientes:
Mejora productividad del sistema y utilización de recursos.
Multiplexa recursos entre varios programas.
Generalmente soportan múltiples usuarios (multiusuarios).
Proporcionan facilidades para mantener el entorno de usuarios individuales.
Requieren validación de usuario para seguridad y protección.
Proporcionan contabilidad del uso de los recursos por parte de los usuarios.
Multitarea sin soporte multiusuario se encuentra en algunos computadores personales o en sistemas de
tiempo real.
Sistemas multiprocesadores son sistemas multitareas por definición ya que soportan la ejecución
simultánea de múltiples tareas sobre diferentes procesadores.
En general, los sistemas de multiprogramación se caracterizan por tener múltiples programas activos
compitiendo por los recursos del sistema: procesador, memoria, dispositivos periféricos.
pág. 4
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Estos tipos de sistemas son muy simples, porque todos los dispositivos de entrada, salida y control dependen de la
tarea que se está utilizando, esto quiere decir, que las instrucciones que se dan, son procesadas de inmediato; ya
que existe un solo usuario. Y están orientados principalmente por los microcomputadores.
pág. 5
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
pág. 6
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
pág. 7
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
El módulo de planificador o sheduler asigna la CPU a los procesos. Planifica los procesos para ser ejecutados por
turno hasta que voluntariamente liberen la CPU mientras esperan un recurso o hasta que el Kernel los saca
cuando su tiempo de ejecución supera el tiempo cuantum.
Finalmente, el control de hardware es el responsable de las interrupciones y de las comunicaciones con la
máquina. Los dispositivos como los discos o terminales pueden interrumpir a la CPU mientras un proceso se está
ejecutando. Así, el Kernel debe restablecer la ejecución del proceso interrumpido después de servir a la
interrupción.
GESTIÓN DE PROCESOS
Procesos
Una definición tradicional de proceso es la de instancia de un programa en ejecución. La ejecución de tal programa
es indicada al SO mediante una acción u orden especializada.
El SO responde en ese punto creando un nuevo proceso. En general, esta actividad consiste en la creación e
inicialización de estructuras de datos en el SO para monitorizar y controlar el progreso de proceso en cuestión.
Una vez creado, el proceso pasará a estar activo y competirá por la utilización de recursos del sistema como el
procesador y los dispositivos I/O.
Un proceso evoluciona cíclicamente entre períodos de ejecución activa y de espera por la terminación de
actividades de I/O. Cuando un proceso queda inactivo por especificar una operación de I/O y quedar a la espera de
que ésta se complete, el SO puede planificar la ejecución de otro proceso.
Desde este punto de vista, un proceso es una entidad individualmente planificable, que puede ser asignada al
procesador y ejecutada por éste. El SO controla, pues, dinámicamente la evolución de los procesos registrando la
información correspondiente a sus cambios cuando éstos se produzcan. Esta información es utilizada por el SO
para sus labores de planificación y gestión sobre el conjunto de procesos que en un determinado momento
pueden coexistir en el sistema informático.
De esta forma además de la plantilla estática constituida por el programa ejecutable en que se basa, un proceso
posee ciertos atributos que ayudan al SO en su gestión.
Los atributos de un proceso incluyen su estado actual, unidad de planificación, derechos de acceso, nivel de
prioridad entre otros datos. Desde el punto de vista del usuario, un proceso no es más que la ejecución de un
conjunto de instrucciones que llevan a cabo una determinada tarea, mientras que para el SO es una entidad que
atraviesa dinámicamente un conjunto de estados y que solicita los recursos del sistema que le son necesarios. De
esta forma, el acceso a tales recursos debe ser planificado de forma que se consiga un rendimiento en la
utilización de los mismos lo más óptimo posible.
3. El SO podría tener que dar soporte a la comunicación entre procesos y ofrecer mecanismos para su creación,
labores que pueden ser de ayuda en la estructuración de aplicaciones.
Estados de un proceso
En cualquier sistema operativo, es básico conocer el comportamiento que exhibirán los distintos procesos y el
conjunto de estados que pueden atravesar.
pág. 10
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Cuando el SO crea un nuevo proceso, éste entra en el sistema en el estado de No ejecución. De este modo, el
proceso existe, es conocido por el SO y está esperando la oportunidad de ejecutarse. En un momento dado, el
sistema operativo decide otorgar el procesador a un proceso determinado con lo que dicho proceso pasará de
estado No ejecución a Ejecución.
Cada cierto tiempo, el proceso en ejecución es interrumpido y el sistema operativo seleccionará un nuevo proceso
para que tome el control del procesador. El proceso interrumpido pasa del estado de Ejecución al de No ejecución
mientras que el proceso elegido realiza la transición inversa.
Incluso en este modelo tan simple, se aprecian ya algunos de los elementos importantes en el diseño de SO. Cada
proceso debe representarse de forma que el sistema operativo tenga conocimiento de su estado actual y de su
posición en memoria.
Aquellos procesos que no estén en estado de ejecución deberán almacenarse en algún tipo de estructura de datos
mientras esperan que el sistema operativo les otorgue el control sobre el procesador. La siguiente figura propone
una estructura basada en una cola de procesos.
Dicha cola consiste en una lista enlazada de bloques en la que cada uno de estos bloques representa a un proceso.
Cada bloque consistirá en un puntero a la estructura de datos donde el SO guarda toda la información relativa al
proceso. El comportamiento del SO en este caso es similar al de un gestor de colas. Así, cada vez que el SO cree un
nuevo proceso se introducirá el correspondiente bloque al final de la cola, acción que también se llevará a cabo
cuando un proceso sea expropiado del procesador en favor de otro o cuando se bloquee en espera de que se
complete una operación de E/S. Cuando un proceso termine su ejecución, será descartado del sistema. Si todos los
procesos estuvieran siempre listos para ejecutar, la disciplina de comportamiento de cola presentada sería eficaz.
El modelo de cola sigue un comportamiento FIFO y el procesador opera siguiendo un turno rotatorio con los
procesos disponibles. De esta forma, a cada proceso de la cola se le otorga una cierta cantidad de tiempo para
ejecutar. Si no se presentan bloqueos y transcurrido éste volverá a la cola para optar de nuevo a tener control
sobre el procesador. Sin embargo, esta implementación no es adecuada debido a que algunos procesos en estado
de no ejecución estarán listos para ejecutar mientras que otros se encontrarán a la espera de obtener algún
recurso solicitado o a que se complete una operación de E/S. Así pues, el SO puede no entregar el procesador al
proceso que se encuentre al frente de la cola. Si éste está bloqueado, tendrá que recorrer la cola buscando el
primer proceso que no lo esté y que lleve más tiempo en espera.
Una forma más natural de afrontar esta situación es dividir el estado de no ejecución en dos; los estados listo y
bloqueado. Además se añadirán dos nuevos estados al sistema.
Estos estados son: nuevo y terminado, que resultan de utilidad para las labores de gestión de procesos. Así se dará
lugar al modelo de 5 estados.
Modelo de 5 estados
En este modelo un proceso puede encontrarse en cualquiera de los siguientes 5 estados.
pág. 11
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
1. Estado Nuevo: este estado corresponderá a procesos que acaban de ser definidos pero que aún no han
sido admitidos por el sistema operativo como procesos ejecutables. Para estos procesos se habrán
realizado ciertas tareas de gestión interna como la asignación de un identificador y la creación de algunas
estructuras de control. La principal motivación para la existencia de este estado es la limitación por parte
del SO del número total de procesos activos por razones de rendimiento o por las estricciones impuestas
por la capacidad de la memoria.
2. Estado Listo o Preparado: En este estado se encontrarán aquellos procesos que dispongan de todos los
recursos necesarios para comenzar o proseguir su ejecución y se encuentran a la espera de que se les
conceda el control del procesador.
3. Estado de Ejecución: En este estado se encuentra el proceso que tiene el control del procesador. Dado que
se considerarán arquitecturas que disponen de un único procesador, en un instante determinado sólo un
proceso puede encontrarse en este estado.
4. Estado Bloqueado: En este estado se encuentran aquellos procesos que carecen de algún recurso
necesario para su ejecución siendo este recurso distinto del procesador o bien se encuentran a la espera
de que tenga lugar un determinado evento.
5. Estado Terminado: A este estado pertenecen aquellos procesos excluidos por el SO del grupo de procesos
ejecutables. Un proceso alcanza este estado cuando llega al punto normal de terminación, cuando se
abandona debido a un error irrecuperable o cuando un proceso con la debida autoridad hace que termine
su ejecución. En este punto, el proceso ya no es susceptible de ser elegido para ejecutarse. Sin embargo,
el SO conserva cierta información asociada con él para su posible utilización, bien por otras aplicaciones
como programas de utilidad para el análisis de la historia y rendimiento del proceso o bien por parte del
SO con fines estadísticos. Una vez extraída esta información, el SO ya no necesita mantener más datos
relativos al proceso y éstos se borran del sistema.
En la figura presentamos el diagrama de transiciones entre estados
pág. 12
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Transición Ejecución-Preparado: La razón más común para esta transición es que el proceso que está en ejecución
ha alcanzado el tiempo máximo permitido de ejecución ininterrumpida. Hay otras causas alternativas que no están
implementadas en todos los SSOO como la expropiación de un proceso en favor de otro más prioritario.
Otra situación, muy extraordinaria, que origina esta transición es que un proceso ceda voluntariamente el control
del procesador.
Transición Ejecución-Bloqueo: Un proceso realiza esta transición cuando queda a la espera por la concesión de un
determinado recurso o por la ocurrencia de un determinado suceso.
Transición Bloqueado-Preparado: Tiene lugar si a un proceso bloqueado se le concede el recurso solicitado u
ocurre el suceso por el que estaba esperando.
Transición Preparado-Terminado: Puede ocurrir si, por ejemplo, un proceso padre decide en un momento
determinado finalizar la ejecución de sus procesos hijos. Si alguno de dichos procesos se encontraba en estado
preparado realizará esta transición. Otra razón puede ser debida a un requisito de memoria que es denegado.
Transición Bloqueado-Terminado: Un proceso hijo puede realizar esta transición por la misma razón que la
anterior. Otra causa puede ser que el proceso supere el tiempo máximo de espera por un recurso y el sistema
operativo decida entonces terminarlo (es la razón más habitual).
Este modelo de 5 estados puede implementarse igualmente mediante estructuras de tipo cola siguiendo un
esquema como se muestra en la figura
pág. 13
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
cada suceso. En tal caso, cuando se produzca un evento, la lista entera de procesos en la cola correspondiente a
ese suceso podrá pasarse a estado preparado.
Si la planificación de procesos se realiza mediante un esquema basado en prioridades, entonces es conveniente
tener un cierto número de colas de procesos listos, una para cada prioridad.
Productividad
La productividad se refiere a la cantidad de trabajo completada por unidad de tiempo.
Un modo de expresarla es definiéndola como el número de trabajos de usuario ejecutados por una unidad de
tiempo. Cuanto mayor sea este número, más trabajo aparentemente está siendo ejecutado por el sistema.
Tiempo de retorno
El tiempo de retorno TR se define como el tiempo que transcurre desde el momento en que un trabajo o
programa es remitido al sistema hasta que es totalmente completado por el mismo. Es decir, el tiempo de retorno
TR es el tiempo consumido por el proceso dentro del sistema y puede ser expresado como la suma del tiempo de
servicio o tiempo de ejecución + el tiempo de espera. TR = TS + TE.
Tiempo de espera
El tiempo de espera TE es el tiempo que un proceso o trabajo consume a la espera de la asignación de algún
recurso o de que tenga lugar algún evento. En este tiempo también se incluyen el periodo de espera por la
obtención del propio procesador debido a la competencia con otros procesos en un sistema con
multiprogramación. Este tiempo es la penalización impuesta por compartir recursos con otros procesos y puede
expresarse como el tiempo de retorno - el tiempo de ejecución efectivo. El tiempo de espera TE elimina la
variabilidad debida a las diferencias en tiempos de ejecución del trabajo.
pág. 14
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Tiempo de respuesta
El tiempo de respuesta en sistemas interactivos se define como el tiempo que transcurre desde el momento en
que se introduce el último carácter de una orden que desencadena la ejecución de un programa o transacción
hasta que aparece el primer resultado en el terminal. Generalmente también se le denomina tiempo de respuesta
de terminal.
En sistemas en tiempo real, el tiempo de respuesta es esencialmente una latencia y se define como el tiempo que
transcurre desde el momento en que un suceso interno o externo es señalado hasta que se ejecuta la primera
instrucción de su correspondiente rutina de servicio. A este tiempo suele denominársele tiempo de respuesta al
proceso.
Tipos de planificadores
En un SO complejo pueden coexistir tres tipos de planificadores: A corto, a medio y a largo plazo.
Subproceso
Ahora bien, no necesitamos que la corrección ortográfica o el reemplazo automático sea inmediato, podemos
seguir escribiendo y dejar que esta función se realice en background, “detrás” de la rutina principal. Si el
subrayado en rojo aparece luego que escribamos dos o tres letras de la próxima palabra, no modifica la
funcionalidad.
Si esto lo implementamos mediante procesos tradicionales, donde al iniciar la ejecución de un procesador de
palabras también iniciáramos un conjunto de procesos, corrector ortográfico, corrector semántico, etc., los
tiempos de cambio de proceso disminuirían drásticamente la velocidad de respuesta.
Pero esto no es necesario, los distintos procesos comparten gran cantidad de datos, el usuario, la posición en
pantalla, etc. por lo que cambiando solamente los datos específicos podemos implementarlo.
Esta es la idea básica de un sistema multihilo, cada proceso ahora, en vez de tener un solo hilo de ejecución, tiene
varios, o sea, generamos varios subprocesos dentro de cada proceso.
Para administrar esto, creamos el registro TCB, Thread Control Block, que va a tener solamente los datos que
cambian entre subproceso y subproceso, gráficamente podemos verlo así:
pág. 16
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Entonces tenemos un proceso que tiene n subprocesos, con n variando desde 1 en adelante. De esta manera, el
tiempo de cambio de un subproceso a otro es mucho menor que el tiempo de cambio de un proceso a otro, ya
que numerosos datos son compartidos.
En nuestro ejemplo del procesador de palabra, cuando el subproceso tomar tecla está en espera, puede tomar la
CPU el subproceso control de ortografía, de esta manera, mantenemos un buen tiempo de respuesta y brindamos
todas las funcionalidades deseadas.
El uso de subprocesos mejora el rendimiento de los sistemas con múltiCPU, (antes llamados sistemas
multiprocesadores, pero desde la aparición de procesadores multicore, con dos o más CPUs integradas, tuvimos
que cambiar el nombre), ya que distintos subprocesos pueden ejecutarse simultáneamente en distintas CPU,
teniendo un procesamiento en paralelo dentro del mismo proceso principal.
Ventajas
Inclusive en sistemas monoCPU la el uso de subprocesos brinda múltiples beneficios, por ej: (Tomados de Letwin)
Subproceso en primer plano y múltiples subprocesos en segundo plano: El ejemplo dado del Procesador de
palabras o una planilla de cálculo, en la que mientras el usuario ingresa un dato en segundo plano se calculan los
valores de otras celdas
Procesamiento asíncrono: Crear una copia de seguridad del texto cada minuto puede ser un subproceso.
Incremento de la velocidad de ejecución: Si un proceso debe leer datos y sumarlos, podemos dividirlo en
subprocesos, mientras uno lee, y por lo tanto libera la CPU mientras se atiende su llamada al sistema, el otro
suma.
Estructura modular de programas: Claramente al dividir en subprocesos creamos una estructura modular.
pág. 17
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Estas son solo algunas, sería imposible listar todos los usos ventajosos posibles.
Desventajas
También pueden generarse múltiples dificultades por el uso de subprocesos, dentro de ellas cabe destacar el
incremento de la necesidad de sincronización. Sistemas que generaban automáticamente exclusión mutua entre
rutinas, porque al ejecutarse una no se ejecutaba la otra, al migrarlo a sistemas con subprocesos debemos
sincronizar su funcionamiento incorporando semáforos, monitores y otras herramientas.
Hilos
A falta de una definición más formal, un hilo se puede definir como la traza de ejecución de un proceso. Esto se
refiere a la parte dinámica del proceso, la ejecución del código representada por la pila del usuario y la parte del
bloque de control del proceso que hace referencia al estado del procesador y del proceso, frente a la parte más
estática, como es la el resto del bloque de control del proceso y el código mismo.
La aparición de los hilos viene justificada desde dos pilares básicos: facilitar la sincronización entre procesos y
mejorar la eficiencia en la alternancia de procesos en el procesador. A continuación se van a desarrollar esas ideas.
En esta sección vamos a presentar el concepto de sistemas multihilo, justificando la aparición de los hilos,
presentando sus ventajas frente a la idea clásica de proceso y analizando las implicaciones que tienen en la forma
de representar los procesos en el sistema, también se presentarán los estados de los hilos y por último se
analizarán las distintas formas de implementar los hilos.
Sistemas Multihilo
El término multihilo hace referencia a la capacidad de un sistema operativo para mantener varios hilos de
ejecución. Tras la aparición de los hilos se puede considerar que en el enfoque tradicional sólo existe un hilo de
ejecución por proceso, por lo que puede ser llamado monohilo.
En la Figura se pueden observar las combinaciones posibles entre procesos e hilos. Dentro de la categoría de los
sistemas monoproceso y monohilo se puede encuadrar al sistema MS-DOS. Los sistemas UNIX genéricos se
pág. 18
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
pueden definir como sistemas multiproceso con un único hilo por proceso. Dentro de los sistemas monoproceso
multihilo se puede incluir a las máquinas virtuales Java. Los sistemas operativos más modernos se agrupan dentro
de la categoría de multiproceso.
En un entorno multihilo un proceso se define como la unidad de protección y unidad de asignación de recursos
con los siguientes elementos asociados con ellos:
Un espacio de direcciones virtuales con la imagen del proceso.
Acceso protegido a los procesadores, a otros procesos, archivos y dispositivos de E/S.
Un proceso puede tener uno o más hilos, cada uno con:
El estado de ejecución del hilo.
El contexto del procesador que se salva cuando el hilo no está en ejecución.
Una pila de ejecución de usuario (y otra para el núcleo cuando sea preciso).
Almacenamiento estático para las variables locales.
Acceso a la memoria y a los recursos del proceso, que son compartidos con todos los otros hilos del
proceso.
Todo esto se puede ver en la Figura anterior, donde se puede ver las diferencias entre la representación de
procesos monohilos y multihilos.
En un sistema multihilo continúa existiendo un solo bloque de control de proceso y un espacio de direcciones de
usuario asociado al proceso, pero ahora hay pilas separadas para cada hilo, así como distintos bloques de control
para cada hilo, que contienen los valores de los registros, prioridad y otras informaciones relativas al estado de los
hilos.
Así pues, todos los hilos de un proceso comparten el estado y los recursos del proceso, residen en el mismo
espacio de direcciones y tienen acceso a los mismos datos. Por todo esto, es fácil ver que la utilización de hilos
produce una mejora en las posibilidades de sincronización de procesos, además de una mejora en el rendimiento.
Las ventajas que se derivan de la utilización de los hilos son las siguientes:
pág. 19
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
1. Respuesta: Una aplicación multihilo puede continuar ejecutándose incluso si una parte de ella está
bloqueada o está realizando una tarea larga, incrementando de este modo el nivel de respuesta frente al
usuario.
2. Compartición de recursos: Los hilos por defecto comparten la memoria y otros recursos del proceso al que
pertenecen por lo que no hay que utilizar ningún mecanismo especial de compartición entre procesos.
Esto permite que la aplicación pueda tener distintos hilos de ejecución con la misma memoria. Además los
hilos aumentan la eficiencia de la comunicación entre programas en ejecución ya que pueden
comunicarse sin la intervención del núcleo del sistema operativo.
3. Economía: Reservar memoria y recursos en la creación de los procesos es una tarea costosa. Como los
hilos comparten los recursos del proceso al que pertenecen, resulta más económico crear hilos nuevos y
alternarlos en el procesador que hacer lo mismo con procesos. Aunque no existen medidas empíricas
definitivas, en Solaris crear un proceso es unas 30 veces más lento que crear un hilo, y realizar un cambio
de contexto entre procesos es 5 veces más lento que hacerlo entre hilos.
4. Utilización de arquitecturas multiprocesador: Los procesos multihilo pueden aprovechar fácilmente una
arquitectura multiprocesador ya que cada hilo podría ejecutarse en un procesador distinto.
Para ilustrar las ventajas de los sistemas multihilo frente a los monohilo, se puede analizar el caso mostrado en la
Figura. En este ejemplo se considera dos versiones del mismo programa que tiene que realizar dos invocaciones a
procedimientos remotos en dos servidores diferentes; en el primer caso sobre un entorno monohilo, y en un
entorno multihilo en el segundo caso. Es fácil observar que en el segundo caso se puede obtener una importante
mejora en el tiempo empleado para ello si cada RPC es realizada desde un hilo diferente.
pág. 20
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Esta ventaja también resulta evidente aunque el proceso se ejecute en un entorno monoprocesador, lo que
implica que aunque las solicitudes deben generarse secuencialmente, la espera se realiza en paralelo.
GESTIÓN DE MEMORIA
¿Qué es la memoria?
La memoria es uno de los principales recursos de la computadora, la cual debe de administrarse con mucho
cuidado. Actualmente los sistemas de cómputo cuentan con una alta capacidad de memoria, de igual manera las
aplicaciones actuales tienen también altos requerimientos de memoria, lo que sigue generando escasez de
memoria en los sistemas multitarea y/o multiusuario.
pág. 21
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
gran bloque o hueco único de memoria. Cuando llega un proceso que necesita memoria, buscamos un hueco lo
suficientemente grande para el proceso. Si encontramos uno, se asigna únicamente el espacio requerido,
manteniendo el resto disponible para futuros procesos que requieran de espacio.
Este tipo de particiones genera una gran fragmentación externa aunque eliminan la interna. Para solucionar esto,
se puede utilizar dos técnicas de compactación y asignación dinámica.
Compactación
Cuando un proceso llega y necesita memoria, el sistema operativo busca en la tabla de huecos alguno lo
suficientemente grande para el proceso. Si el hueco es muy grande, lo parte en dos. Una parte es asignada al
proceso y la otra se identifica como hueco. Cuando el proceso termina y la memoria es liberada, el espacio es
identificado como un hueco más en la tabla y si el nuevo hueco es adyacente con otro, ambos huecos se unen
formando un solo hueco más grande.
Asignación dinámica
El proceso de compactación del punto anterior es una instancia particular del problema de asignación de memoria
dinámica, el cual es el cómo satisfacer una necesidad de tamaño n con una lista de huecos libres. Las estrategias
más comunes para asignar algún hueco de la tabla son:
Primer ajuste: Consiste en asignar el primer hueco con capacidad suficiente.
Mejor ajuste: Busca asignar el espacio más pequeño de los espacios con capacidad suficiente.
pág. 23
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Peor ajuste: Asigna el hueco más grande. Una vez más, se debe de buscar en toda la tabla de huecos a
menos que esté organizada por tamaño.
pág. 24
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
h) Fragmentación
Son huecos en la memoria que no pueden usarse debido a lo pequeño de su espacio, provoca un desperdicio de
memoria principal. Tal vez en conjunto si sea espacio suficiente, pero se requeriría de un proceso de
desfragmentación de memoria o compactación para lograrlo. Esta fragmentación se denomina fragmentación
externa. Existe otro tipo de fragmentación conocida como fragmentación interna, la cual es generada cuando se
reserva más memoria de la que el proceso va realmente a usar.
Memoria Virtual
Hace ya muchos años que aparecieron los primeros programas demasiado grandes para caber en la memoria
disponible. La solución usualmente adoptada fue dividir el programa en trozos, llamados recubrimientos
(overlays). El recubrimiento 0 era el que se ejecutaba primero. Cuando terminaba, llamaba a otro recubrimiento.
Algunos sistemas de recubrimientos eran altamente complejos, permitiendo tener varios recubrimientos en
pág. 25
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
memoria a la vez. Los recubrimientos se mantenían en el disco y el sistema operativo los intercambiaba entre el
disco y la memoria, dinámicamente según se iban necesitando.
Aunque el sistema realizaba el trabajo real de intercambiar los recubrimientos, el programador tenía que
encargarse de dividir en trozos apropiados el programa. La tarea de dividir programas grandes en pequeños trozos
modulares era laboriosa y tediosa, así que no pasó mucho tiempo antes de que alguien idease una manera de
dejar todo ese trabajo para el ordenador.
El método ideado (Fotheringham, 1961) se conoce ahora como memoria virtual. La idea básica detrás de la
memoria virtual es que el tamaño combinado del programa, sus datos y su pila pueden exceder la cantidad de
memoria física disponible. El sistema operativo mantiene en la memoria principal aquellas partes del programa
que se están usando en cada momento, manteniendo el resto de las partes del programa en el disco. Por ejemplo,
un programa de 16 MB puede ejecutarse sobre una máquina de 4 MB eligiendo cuidadosamente qué 4 MB se
tendrán en la memoria en cada instante, e intercambiando partes del programa entre el disco y la memoria, según
sea necesario.
La memoria virtual puede funcionar también en un sistema multiprogramado, con diversos fragmentos de muchos
programas en memoria a la vez. Mientras un programa espera a que se traiga del disco una parte de si mismo,
está esperando por una E/S y no puede ejecutarse, por lo que debe asignarse la CPU a otro proceso de la misma
forma que en cualquier otro sistema multiprogramado.
pág. 26
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
Sustitución de páginas local y global. (a) Configuración original. (b) Sustitución de páginas local. (c) Sustitución de
páginas global.
En general, los algoritmos globales funcionan mejor, sobre todo cuando el tamaño del conjunto de trabajo puede
variar durante el tiempo de vida de los procesos. Si se utiliza un algoritmo local y el conjunto de trabajo crece,
habrá trasiego, incluso si hay muchos marcos de página desocupados. Si el conjunto de trabajo se encoge, los
algoritmos locales desperdician memoria. Si se utiliza un algoritmo global, el sistema debe decidir continuamente
cuántos marcos de página asignará a cada proceso. Una forma de hacerlo es monitorizar el tamaño del conjunto
de trabajo mediante los bits de envejecimiento (como en la Figura), pero ese enfoque no previene necesariamente
el trasiego. El tamaño del conjunto de trabajo puede cambiar en microsegundos, mientras que los bits de
envejecimiento son una medida burda que abarca varios tics de reloj.
Otro enfoque consiste en tener un algoritmo para asignar marcos de página a los procesos. Una posible vía es
determinar periódicamente el número de procesos ejecutables y repartir entre ellos a partes iguales todos los
marcos de página. Así, con 12.416 marcos de página disponibles (es decir no ocupados por el sistema operativo) y
10 procesos, cada proceso recibiría 1.241 marcos. Los 6 restantes integrarían una reserva de la que se echaría
mano para afrontar futuras faltas de página.
Aunque este método parece equitativo, no tiene mucho sentido asignar el mismo número de marcos de página a
un proceso de 10 KB y a otro de 300 KB. En vez de eso, los marcos podrían repartirse proporcionalmente al
tamaño total de cada proceso, de modo que un proceso de 300 KB obtendría 30 veces más que uno de 10 KB. Tal
vez sería prudente asignar a cada proceso una cantidad mínima para que pueda ejecutarse por pequeño que sea.
Por ejemplo, en algunas máquinas, una sola instrucción con dos operandos podría requerir hasta seis páginas en
memoria porque la instrucción misma, el operando de origen y el operando de destino podrían estar todos
atravesando fronteras de páginas consecutivas. Con una asignación de sólo cinco páginas en memoria los
programas que contuviesen tales instrucciones no podrían ejecutarse de ninguna manera.
Si se utiliza un algoritmo global, es posible iniciar cada proceso con cierto número de páginas en memoria
proporcional a su tamaño, pero la asignación deberá actualizarse dinámicamente a medida que avance la
ejecución de los procesos. Una forma de gestionar la asignación es utilizar el algoritmo de la frecuencia de faltas
de página (PFF; Page Fault Frequency). Este algoritmo determina cuándo hay que aumentar o reducir el número
pág. 27
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
de marcos asignados al proceso, pero no dice nada sobre qué página hay que sustituir concretamente si se
produce una falta de página; sólo controla el tamaño de la asignación realizada.
Se sabe que para una amplia clase de algoritmos de sustitución de páginas, incluyendo al LRU, la tasa de faltas de
página disminuye a medida que se asignan más páginas, como ya explicamos. Ésta es la suposición en la que se
basa PFF. Esta propiedad se ilustra en la Figura
La tasa de faltas de página como una función del número de marcos de página asignados.
Medir la tasa de faltas de página es sencillo: basta con contar el número de faltas de página por segundo,
calculando quizá también una media para los segundos transcurridos. Una forma fácil de hacerlo es sumar el
número de segundos presente a la media de ejecución actual y dividir el resultado entre 2. La línea de guiones
marcada con una A corresponde a una tasa de faltas de página inaceptablemente alta, por lo que se asignarían
más marcos de página a ese proceso para reducir la tasa de faltas de página. La línea de guiones marcada con una
B corresponde a una tasa de faltas de página tan baja que podría concluirse que el proceso tiene demasiada
memoria. En este caso, podríamos quitarle marcos de página. Por lo tanto, PFF trata de mantener la tasa de
paginación de cada proceso dentro de límites aceptables.
Es importante señalar que algunos algoritmos de sustitución de páginas pueden operar con una política de
sustitución local o global. Por ejemplo, FIFO puede reemplazar la página más antigua de toda la memoria
(algoritmo global) o la página más antigua del proceso actual (algoritmo local). Similarmente, LRU, o alguna de sus
aproximaciones, puede sustituir la página menos recientemente utilizada de toda la memoria (algoritmo global) o
la menos recientemente utilizada por el proceso actual (algoritmo local). En algunos casos la elección entre una
política local o global es independiente del algoritmo.
Por otra parte, hay algoritmos de sustitución de páginas para los que sólo tiene sentido una estrategia local. En
particular, los algoritmos del conjunto de trabajo y WSClock se refieren a un proceso específico y deben aplicarse
en ese contexto. En realidad no existe un conjunto de trabajo para la máquina en su totalidad, y tratar de usar la
unión de todos los conjuntos de trabajo podría hacer que se perdiera la propiedad de localidad y no funcionaría
bien.
Control de Carga
Incluso con el mejor algoritmo de sustitución de páginas y una asignación global óptima de marcos de página a los
procesos, puede suceder que el sistema tenga trasiego. De hecho, siempre que los conjuntos de trabajo
combinados de todos los procesos exceden la capacidad de la memoria, cabe esperar trasiego. Un síntoma de esta
situación es que el algoritmo PFF indica que algunos procesos necesitan más memoria, pero ningún proceso
pág. 28
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
necesita menos. En ese caso, es imposible asignar más memoria a los procesos que la necesitan sin perjudicar a
otros procesos. La única solución real es deshacerse temporalmente de algunos procesos.
La forma de reducir el número de procesos que compiten por la memoria es intercambiar algunos de ellos al disco
y liberar todas las páginas que tenían asignadas. Por ejemplo, puede intercambiarse al disco un proceso
repartiéndose todos sus marcos de página entre otros procesos que sufren trasiego. Si el trasiego cesa, el sistema
podrá operar durante un rato en estas condiciones. Si el trasiego no cesa, habrá que intercambiar otro proceso al
disco, y así hasta que desaparezca el trasiego. Entonces, incluso con paginación, sigue siendo necesario el
intercambio, sólo que ahora se utiliza para reducir la demanda potencial de memoria, en vez de para recuperar
bloques de la memoria para uso inmediato.
El intercambio de procesos al disco para aliviar la carga de la memoria es una reminiscencia de la planificación a
dos niveles, en la que algunos procesos se colocan en el disco y se utiliza un planificador a corto plazo para los
procesos restantes. Claramente, las dos ideas pueden combinarse, intercambiando a disco tan solo los procesos
suficientes para lograr que la tasa de faltas de página sea aceptable. Periódicamente, algunos procesos se
cargarán desde el disco y otros se intercambiarán al disco.
Sin embargo, otro factor a considerar es el grado de multiprogramación. Como vimos en la Figura
, cuando el número de procesos en memoria principal es demasiado bajo, la CPU puede estar ociosa durante
periodos de tiempo considerables. Esta consideración es un argumento a favor de considerar no sólo el tamaño de
los procesos y la tasa de paginación al decidir qué procesos se intercambian al disco, sino también sus
características, tales como si son intensivos en CPU o en E/S, así como las características de los demás procesos.
Tamaño de Página
El tamaño de la página suele ser un parámetro que puede elegir el sistema operativo.
Incluso si el hardware se diseñó con páginas de, por ejemplo, 512 bytes, el sistema operativo puede fácilmente ver
las páginas 0 y 1, 2 y 3, 4 y 5, etcétera como páginas de 1 KB asignándoles siempre dos marcos de página de 512
bytes consecutivos.
Determinar el tamaño de página óptimo requiere equilibrar varios factores en conflicto.
Como resultado, no existe un tamaño óptimo para todos los casos. Para comenzar, hay dos factores que favorecen
el uso de páginas pequeñas. Un segmento de código, datos o pila cualquiera no tiene porqué llenar
completamente un número entero de páginas. En promedio, la mitad de la última página estará vacía, y ese
espacio adicional se desperdicia. Este desperdicio se denomina fragmentación interna. Si hay n segmentos en la
memoria y las páginas son de p bytes, se desperdiciarán np/2 bytes debido a la fragmentación interna. Este
razonamiento nos lleva a escoger páginas pequeñas.
El otro argumento en este sentido se hace evidente si consideramos un programa que consta de ocho fases
sucesivas de 4 KB cada una. Con páginas de 32 KB, será necesario asignar al programa 32 KB todo el tiempo. Con
páginas de 16 KB, solo necesitará 16 KB. Con páginas de 4 KB o menores sólo requerirá 4 KB en cualquier instante
dado. En general, un tamaño de página grande provoca que más partes no utilizadas de los programas estén en la
memoria.
Por otro lado, el uso de páginas pequeñas significa que los programas van a necesitar muchas páginas y, por lo
tanto, una tabla de páginas más grande. Un programa de 32 KB sólo necesita cuatro páginas de 8 KB, pero 64
páginas de 512 bytes. Las transferencias entre la memoria y el disco suelen efectuarse en unidades de una página,
pág. 29
INTRODUCCIÓN A LOS SISTEMAS OPERATIVOS | 2023
invirtiéndose la mayor parte del tiempo en el posicionamiento del brazo y el retraso rotacional, por lo que
transferir una página pequeña requiere casi el mismo tiempo que transferir una grande. Podrían necesitarse 64 ×
10 milisegundos para cargar 64 páginas de 512 bytes, pero sólo 4 × 12 milisegundos para cargar cuatro páginas de
8 KB.
En algunas máquinas, la tabla de páginas debe cargarse en registros de hardware cada vez que la CPU conmuta de
un proceso a otro. En tales máquinas, el tiempo requerido para cargar esos registros aumenta a medida que
disminuye el tamaño de página. Además, el espacio ocupado por la tabla aumenta a medida que se reduce el
tamaño de página.
Este último punto permite un análisis matemático. Supongamos que el tamaño medio de los procesos es s bytes y
que el tamaño de las páginas es p bytes. Supongamos además que cada entrada de la tabla de páginas ocupa e
bytes. Por lo tanto, el número aproximado de páginas que se requieren por proceso es s/p, ocupando se/p bytes
de espacio para la tabla de páginas. El desperdicio de memoria en la última página del proceso, debido a la
fragmentación interna es p/2. Por lo tanto, la sobrecarga total debida a la tabla de páginas y a la pérdida por
fragmentación interna es la suma de esos dos términos:
sobrecarga = se/p + p/2
El primer término (tamaño de la tabla de páginas) es grande cuando el tamaño de página es pequeño. El segundo
término (fragmentación interna) es grande cuando el tamaño de página es grande. El tamaño óptimo debe estar
en algún punto intermedio. Si obtenemos la primera derivada respecto a p y la igualamos a cero, obtenemos la
ecuación
– se/p2 + 1/2 = 0
De esa ecuación podemos deducir una fórmula que da el tamaño de página óptimo (considerando sólo la memoria
que se desperdicia por fragmentación y el tamaño de la tabla de páginas). El resultado es:
p = 2se
Con s = 1 MB y e = 8 bytes por entrada de la tabla de páginas, el tamaño de página óptimo es de 4 KB. Los
ordenadores comerciales han manejado páginas desde 512 bytes hasta 64 KB. Un valor típico utilizado era 1 KB,
pero actualmente son más comunes 4 KB u 8 KB. A medida que crecen las memorias, el tamaño de página tiende a
aumentar (pero no de manera lineal).
Aumentando cuatro veces el tamaño de la RAM casi nunca se llega a duplicar el tamaño de la página.
pág. 30