You are on page 1of 67

lOMoARcPSD|3375621

Guia - Pratical practice for all the assigment.

Arquitectura De Sistemas Operativos (Universidad Abierta Interamericana)

StuDocu no está patrocinado ni avalado por ningún colegio o universidad.


Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)
lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

GUIA DE REVISION
CUESTIONARIOS SOBRE LOS TEMAS TRATADOS

UNIDAD 1

1. Concepto de sistema operativo.

Es un programa que actúa de intermediario entre el usuario y el hardware porque crea un entorno de
ejecución de aplicaciones de usuario y administra el hardware de una computadora, las principales
funciones que debe tener un sistema operativo son:

 Ofrecer una interfaz amigable: El objetivo primario de un Sistema Operativo es la comodidad del
usuario ya que existen porque se supone que es mas fácil la ejecución de aplicaciones con ellos que
sin ellos.

 Brindar un entorno de ejecución de aplicaciones: El objetivo principal de las computadoras es la


ejecución de aplicaciones de usuario y facilitar la solución de los problemas del usuario, ejecutar sus
programas de usuario asignándoles recursos con la capacidad de detectar errores y mejorar el uso de
la CPU. El Sistema Operativo crea un entorno dentro del que otros programas pueden realizar un
trabajo útil.

 Administrar recursos: Un Sistema Operativo es similar a un gobierno, si los componentes de un


sistema de computación son su Hardware, Software y Datos, entonces debe proporcionar los medios
para aprovechar adecuadamente esos recursos. Podemos ver al Sistema Operativo como un asignador
de recursos, dentro de un sistema de computación existen varios recursos (hardware y software) que
pueden ser necesarios para la resolución de un problema como el tiempo del CPU, espacio en memoria,
espacio para almacenamiento de archivos, dispositivos de E/S y demás. El Sistema Operativo actúa
como gestor de dichos recursos y los asigna a programas y usuarios según los necesiten.

 Gestionar almacenamiento: Describe cómo se gestiona el sistema de archivos, el almacenamiento


masivo y las operaciones de E/S en un sistema informático moderno. El sistema de archivos
proporciona el mecanismo para el almacenamiento, acceso a datos y programas que residen en disco.

 Prever mecanismos de seguridad y protección: Un Sistema Operativo debería garantizar la proteccion


(acceso a procesos, acceso de los usuarios a los recursos) y seguridad (defender al sistema de ataques
internos y externos) del sistema para que se preserve la integridad del sistema y de sus datos.

 Ofrecer mecanismos de comunicación y sincronización entre procesos: El Sistema Operativo puede


proporcionar medios para que procesos cooperativos1 se comuniquen entre si a traves de mecanismos
de comunicación. Debido a que el acceso concurrente a datos compartidos por muchos procecsos
puede dar pie a inconsistencia en los datos, para eso existen mecanismos de sincronizacion que
aseguran la ejecución ordenada de procesos cooperativos que comparten un espacio de direcciones
logico, con el fin de mantener la consistencia de datos.

2 . Recursos que administra un SO.

 Procesador: En el caso del procesador, el recurso que el Sistema Operativo debe asignar es el tiempo
de ejecución del procesador y la forma de asignarlo es la planificación para satisfacer varios objetivos
que incluyen equidad, uso eficiente del tiempo del procesador y poca sobrecarga.

 Memoria: Una tarea central del Sistema Operativo es la gestión de memoria, lo que implica traer y
llevar bloques de datos de memoria secundaria y la gestión de transferencias entre memoria principal y
secundaria. Debido a los largos tiempos de las operaciones E/S, el Sistema Operativo debe asignar la

1
Los procesos cooperativos son procesos que pueden afectar o ser afectados por otros procesos que se ejecutan.

Resumen de sistemas operativos Página 1 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

memoria para asegurar una cantidad de procesos listos que consuman el tiempo disponible del
procesador.

 Dispositivos de entrada y salida: Un Sistema Operativo debe ofrecer muchas funcionalidades a las
aplicaciones para que ellas puedan controlar todos los aspectos de los dispositivos y optimizar la E/S de
modo que la concurrencia sea máxima.

 Archivos: Para que los usuarios puedan acceder a los archivos, guardarlos y mantener la integridad de
sus contenidos, los Sistemas Operativos proporcionan programas que se ejecutan como aplicaciones
privilegiadas. Los archivos necesitan servicios especiales del Sistema Operativo.

3 . Procesos por lotes.

Los sistemas operativos que trabajaban con procesos por lotes eran sencillos, su principal obligación era
transferir el control de un trabajo (un único programa) al siguiente, con la llegada del disco rigido, los
procesos por lotes incorporaron el spooling y esto logro que cuando el sistema necesitara realizar una
salida de datos de un trabajo se podia iniciar la entrada de datos de otro trabajo. La idea central bajo el
esquema de procesamiento por lotes sencillo es el uso de una pieza de software denominada monitor
(primera implementacion conocida de un sistema operativo) que controla la secuencia de eventos y los
programas de usuario, para ello gran parte del monitor debe estar residente en memoria.

4 . Aplicaciones del JCL.

JCL significa Job Control Language, lenguaje de control de trabajos, es un lenguaje de programación de
órdenes para un sistema operativo. Un sistema operativo puede ordenar que se comience o finalice un
trabajo, para ejecutar programa, solicitar una lectura o escritura de memoria, etc.

5 . Concepto de Spooling.

Su nombre proviene de acrónimo de operación periferica simultanea en linea, donde el disco se utiliza
como buffer para poder leer lo mas posible de los perifericos de entrada y para guardar los archivos de
salida hasta que los dispositivos de salida puedan aceptarlos. Esto permite funcionar con alto
rendimiento al procesador y a los dispositivos de entrada y salida. El spooling se comenzo a utilizar en
los sistmas por lotes sencillos que permitian discos rigidos, de modo que cuando un trabajo tenia que
realizar una salida, se podia realizar el ingreso de otro trabajo ya que el disco rigido trabajaba como un
buffer que almacenaba cosas para que el receptor pudiera tomar esos datos sin importar el tiempo que
transcurra.

8 . Diferencias entre monoprogramacion y multiprogramación

Monoprogramacion Multiprogramacion

 Solo se tiene un proceso que ocupa el procesador  Una aplicación puede dividirse en varios

Resumen de sistemas operativos Página 2 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

y es el unico que se encuentra en memoria procesos.


debido a que no hay otros procesos  Varios procesos pueden estar almacenados en
ejecutandose, una vez que termino de ejecutarse memoria esperando a utilizar el procesador.
la memoria es liberada.  Según las politicas de planificación del
 Predominaba en las computadoras con sistemas procesador, un proceso puede ser despojado del
operativos de un solo usuario y una sola tarea. procesador para que otro proceso que esta
 Los procesos de una aplicación acaparaban la esperando a ser ejecutado lo ocupe.
CPU hasta su finalización.  Permite ofrecer servicios a varios usuarios a la
vez.

Con la multiprogramacion se incrementa el aprovechamiento de la CPU y logra reducir los tiempos que la
CPU se encuentra ociosa.

9 . Describir los sistemas de programación por lotes, tiempo compartido y tiempo real.

Sistemas de programación por lotes: Existen dos tipos principales de sistemas por lotes:

 Sistemas de lotes sencillos: En estos sistemas se mantiene en memoria un solo trabajo que es el que se
esta ejecutando. El funcionamiento de lsistema de procesamiento de un sistema por lotes sencillo está
garantizado por una pieza de software llamada monitor, cuya gran parte se encuentra siempre en
memoria, disponible para su ejecución. El monitor lee de uno en uno los trabajos desde el dispositivo de
entrada, una vez leído un trabajo, ese trabajo se coloca en el area en memoria dedicada a los programas
de usuario y se le pasa el control, antes de que el trabajo se termine de ejecutar los resultados se
muestran en dispositivos de salida, luego el monitor retoma el control que inmediatamente lee otro
trabajo. Una variante de los sistemas de lotes sencillos consistia en la incorporación de un disco, en vez
de leer las tarjetas desde el lector y llevarlas a memoria, se las llevaban al disco, asi mismo cuando el
trabajo requería realizar la salida de datos, esa salida de datos se almacenaba primero en disco antes de
enviarlo al dispositivo de salida. Esta forma de procesamiento se llama Spooling, en donde el disco se
utiliza como un gran buffer para leer por adelantado hasta donde sea posible de los dispositivos de
entrada y para guardar archivos de salida hasta que los dispositivos de salida puedan aceptarlos.

 Sistemas de lotes multiprogramables: En los sistemas en lotes sencillos el procesador se encuentra


ocioso frecuentemente debido a que los dispositivos de E/S son mas lentos que el procesador, pero eso
puede evitarse albergando varios trabajos en memoria al mismo tiempo con el fin de que la CPU siempre
tenga un trabajo que ejecutar, para esto se requiere nuevas formas de planificación de memoria y
procesador para que se decida cuál de los trabajos se debe ejecutar. En los sistemas de programación
por lotes multiprogramables, al procesar un trabajo, tarde o temprano éste tendrá que usar un
dispositivo de E/S, sin embargo el Sistema Operativo selecciona otro trabajo, lo ejecuta y así
sucesivamente hasta que el primer trabajo termine de usar un dispositivo de E/S y recupere la CPU, de
esta manera, siempre que haya un trabajo que ejecutar, la CPU nunca estará ociosa. La
multiprogramacion se ha convertido en el primer caso en que el Sistema Operativo debe tomar una
decisión por el usuario: cuál de los trabajos procesar. Un sistema de lotes multiprogramados, al ser
compatible con la multiprogramación requiere formas de gestión de memoria para poder tener varios
programas en memoria principal al mismo tiempo. Tambien requiere de formas de formas de
planificación de la CPU si varios procesos están listos para ejecutarse al mismo tiempo, ya que el Sistema
Operativo debe escoger a cual de ellos le pasa el control.

Los sistemas de tiempo compartido han surgido de la incapacidad que el usuario tenía para interactuar
con el trabajo en el momento de su ejecución ya que los sistemas operativos por lotes eran apropiados
para ejecutar trabajos grandes que casi no necesitan interaccion ya que el usuario solo presentaba un
trabajo y luego esperaba un tiempo para obtener los resultados. En solucion a dicha poca interactividad,
surgen los sistemas de tiempo compartido, una extensión lógica de la multiprogramación, en la que la
CPU puede ser compartida por varios procesos, es tan frecuente la conmutación entre los procesos que
permite que el usuario pueda interactuar con cada programa durante su ejecución, pueda darle
instrucciones al programa para que éste las reciba y de una respuesta rapida. Los sistemas de tiempo
compartido permiten una comunicación directa entre el usuario y el sistema y ofrecen una ventaja a los
programadores por la flexibilidad y libertad que generaba desarrollar programas ya que debido a la alta

Resumen de sistemas operativos Página 3 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

interactividad con el usuario y el sistema es facil la deteccion de errores y mas rapida la obtención de
resultados, lo que en ocaciones se hace a traves de un mecanismo de intercambio, donde los procesos
entran y salen de la memoria principal a la memoria secundaria (disco) permitiendo la ejecución de
programas que no entran completamente en la memoria principal, substituyendola desde el punto de
vista logico por una matriz uniforme de almacenamiento de gran tamaño, separando asi la memoria
fisica de la logica, esta ultima es como la ve el usuario, esta disposición libera a los programadores de
preocuparse por las limitaciones de almacenamiento en memoria principal. Los sistemas de tiempo
paralelo permite a multiples usuarios compartir la computadora simultáneamente siendo que cada
usuario necesita un poco de tiempo del CPU. En los sistemas de tiempo compartido para que los
usuarios puedan acceder con comodidad tanto a los datos como al codigo de los programas, deben
contar con un sistema de archivos en linea, por lo general los archivos representan datos y programas,
los archivos se organizan en grupos logicos o directorios para facilitar la localizacion y el acceso a ellos
ya que es deseable controlar quién puede acceder a los archivos y de qué formas puede hacerlo.
Los sistemas de tiempo compartido son mas complejos que los sistemas por lotes multiprogramados y
necesitan lo siguiente:
 Gestion y protección de memoria: Al igual que en la multiprogramacion, es necesario tener varios
trabajos simultáneamente en memoria.
 Memoria virtual: Es una técnica que permite ejecutar un trabajo que tal vez no está en su totalidad en
memoria principal, se usa para lograr un buen tiempo de respuesta a la hora de intercambiar trabajos
desde la memoria principal y el disco y tambien para que las aplicaciones no estén limitadas al tamaño
de memoria principal
 Planificación de CPU: Debido a los mecanismos de de ejecución concurrente de procesos.
 Gestión de discos: Lo necesita debido a que el sistema de archivos reside en una colección de discos.
 Sincronizacion y comunicación de procesos: Para asegurar que los trabajos no se atasquen en un
bloqueo mutuo, esperando cada uno a que el otro termine.

Sistemas de tiempo real: Son sistemas que deben ejecutar procesos en un tiempo estrictamente definido,
solo sistema solo funciona correctamente si produce los resultados correctos en el tiempo estipulado, de
manera contraria fallara. Esto contrasta con los sistemas por lotes en donde no hay restricciones de
tiempo y predomina la monoprogramacion y los sistemas de tiempo compartido en los que es deseable
responder de forma rapida pero no es obligatorio como en los sistemas de tiempo real. En estos
sistemas el uso del almacenamiento secundario es muy limitado y el sistema operativo busca separar
aun mas al usuario del hardware.

1 0 . Multiprocesamiento.

Es una caracteristica de los sistemas multiprocesador, que permite la existencia de varios procesadores
que pueden comparir el bus, reloj, a veces la memoria y los periféricos que fisicamente forman parte de
una computadora. Al incrementar el número de procesadores aumenta el rendimiento, aunque al llevar a
cabo una tarea existe cierto gasto del rendimiento para mantener todos los componentes funcionando
correctamente.

Las ventajas del multiprocesamiento son las siguientes:


 Mejor rendimiento: Si bien la mejora en la velocidad con n procesadores no es una multiplicación por n,
sino que es menor que tal resultado, se realiza mayor cantidad de trabajo en menos tiempo, parte de
trabajo que se emplea es para conseguir que los n procesadores funcionen correctamente y para
garantizar el correcto funcionamiento del sistema en la contienda por los recursos compartidos por
todos los procesadores.
 Economía de escala: Resultan más economicos que tener multiples sistemas con un solo procesador ya
que comparten perifericos (procesamientos masivos, fuentes de alimentación, etc).
 Mayor fiabilidad: si solo un procesador falla, el resto no deja de funcionar pero si ocurre una baja en el
rendimiento.

Hay dos tipos de multiprocesamiento:

Resumen de sistemas operativos Página 4 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Multiprocesamiento asimetrico: Cada procesador se asigna a una tarea especifica, un procesador


maestro controla el sistema y el resto de los procesadores esperan a que el maestro les de instrucciones
o tienen asignadas tareas definidas.
 Multiprocesamiento simetrico: Es el tipo de multiprocesamiento mas comun, cada procesador realiza
todas las tareas correspondiente al sistema operativo, sin existir una relacion exclavo maestro entre los
procesadores.

La diferencia entre procesamiento simetrico y asimetrico puede deberse tanto al hardware (el hardware
diferencia los multiples procesadores) como software (se puede programar el software para que solo
haya un mastro y multiples esclavos).

El multiprocesamiento permite la multitarea, que es una tecnica en la cual una aplicación en ejecución
(proceso) se divida en una seria de hilos que pueden ejecutarse concurrentemente.

Hilo Proceso
Es una unidad de trabajo, incluye el contexto de la Es una colección de 1 o más hilos y sus recursos de
CPU (que contiene el contador del programa y el sistema asociados (codigo, datos, memoria, etc),
puntero de pila) y su propia area de datos para una esto corresponde al concepto de programa en
pila (para posibilitar el salto a subrutinas), un hilo ejecución.
se ejecuta secuencialmente y se puede interrumpir
de forma que el procesador pueda dar paso a la
ejecución de otro hilo.

La diferencia entre hilos y procesos es que los hilos comparten el espacio de memoria del proceso en el
que viven, excepto la pila.

1 1 . Señalar diferencias entre proceso distribuido y multiproceso.

Proceso distribuido
 Se distribuye un proceso entre varios procesadores que no comparten la memoria ni el reloj, cada
procesador cuenta con su propia memoria pero se comunican entre si a través de cables de red.
 Se puede distribuir la ejecución de un proceso en varios procesadores que lo ejecutan de forma
concurrente.
 Si un procesador falla el resto de los procesadores pueden seguir funcionando siempre que no haya
dejado de ejecutar algun proceso critico en el sistema.
 Consta de un conjunto de maquinas fisicamente separadas.
 Una computadora puede ejecutar un sistema operativo de red, esta computadora se comunica con
otras que se encuentran en la misma red.

Multiproceso:
 Varios procesadores comparten el bus, reloj, a veces la memoria y los periféricos de la computadora.
 Los procesadores se encuentran fisicamente en una misma maquina.

UNIDAD 2

1 . Estructuras que presentan los SO.

Estructura simple y por niveles.

2 . Características fundamentales de la estructura monolítica

Resumen de sistemas operativos Página 5 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Los sistemas operativos con estructura monolítica suelen ser mas simples y pequeños, no es dividido en
niveles, por lo tanto incluso una aplicación puede utilizar rutinas del sistema operativo para realizar
operaciones de entrada y salida sin ningún tipo de restricción, lo que hace que sea vulnerable a cuando
fallan las aplicaciones de usuario. La estructura monolitica usada en Unix era solo el kernel acompañado
por los programas de sistema, pero como el kernel se encargaba de la gran mayoria de las funciones del
sistema era difícil de implementar y mantener.

3 . Características de la estructura jerárquica

La estructura jerárquica de un sistema operativo es por niveles o módulos, esto significa que el sistema
operativo se divide por capas. El conjunto de rutinas de mas bajo nivel lo tiene el kernel que es el
encargado de cumplir con la funcionalidad del sistema operativo (solicitudes a dispositivos E/S,
planificación de procesos, gestion de memoria, sistemas de archivos, paginación, etc). Cuando una capa
superior realiza una solicitud de algun servicio del sistema operativo, ese servicio es brindado por una
capa inferior, esto sucede para que se oculten los detalles de implementacion del sistema operativo a las
capas superiores, porque solo es necesario que las capas superiores sepan que cosas puedan solicitar,
eso significa que lo visible para cada capa superior a una capa inferior es la interfaz de ésta ultima. El
nivel mas bajo de un sistema operativo es el kernel, que es la parte del sistema operativo que mas en
contacto está con el hardware, un nivel superior al kernel son las bibliotecas del sistema, interpretes de
comando y compiladores y a un nivel aun mas alto estan los usuarios.

4 . Concepto de máquina virtual.

Es un software que crea un entorno virtual entre la plataforma de la computadora y el usuario final,
permitiendo que este ejecute un software determinado. Este entorno visual es lo que aísla al usuario del
funcionamiento interno de la máquina que puede resultar ser muy complejo. En realidad la idea principal
es la de permitir ejecutar varios sistemas operativos simultáneamente sobre el mismo hardware. Para
ello, separa las dos funciones básicas que realiza un sistema de tiempo compartido: multiprogramación
y abstracción del hardware.

Una característica esencial de las máquinas virtuales es que los procesos que ejecutan están limitados
por los recursos y abstracciones proporcionados por ellas. Estos procesos no pueden escaparse de este
"ordenador virtual". Una máquina virtual es un software que emula a un ordenador y puede ejecutar
programas como si fuese un ordenador real.

5 . Función del núcleo en un SO del tipo cliente- servidor.

Un sistema del tipo Cliente-Servidor es un tipo especializado de un sistema distribuido en el que el


sistema Cliente realiza peticiones a un sistema Servidor para que este ultimo pueda realizar lo que el
cliente pide en caso de que si se pueda.

Un servidor proporciona una interfaz a la que el cliente le envia una solicitud para realizar una accion,
este mensaje es manejado por el núcleo y se llama Request. Si el servidor puede realizar lo que el cliente
le pide le envia una respuesta que tambien es un mensaje manejado por el núcleo y se llama Reply.
Entonces la funcion del núcleo en un sistema operativo Cliente-Servidor es permitir que ambos se
puedan comunicar entre si enviándose mensajes.

6 . Servicios que debe proporcionar un SO.

Debido a que un sistema operativo proporciona un entorno para la ejecución de aplicaciones, presta
servicios a los programas y usuarios de dichos programas. Los servicios que resultan utiles al usuario
son:

Resumen de sistemas operativos Página 6 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Proveer una interfaz de usuario: Puede tratarse de una interfaz de linea de comando (interprete de
comando, shell) o interfaz gráfica de usuario (GUI).
 Ejecución de programas: Cargar programas en memoria, ejecutarlos y terminar con su ejecución de
forma normal o anormal.
 Controlar los dispositivos de E/S: Todo proceso puede realizar una E/S y por cuestiones de proteccion
el sistema operativo debe llevarlo a cabo.
 Manipulación de sistemas de archivo: Permitir definir permisos para manipular el sistema de archivos,
incluidos los programas de usuario para acceder a los archivos, permitir leerlos, modificarlos, escribirlos,
borarrlos, etc.
 Comunicaciones: Proporcionar medios por los cuales procesos puedan comunicarse entre si mediante
paso de mensajes o utilizando memoria compartida, dicha comunicación puede tener lugar entre
procesos que están en la misma computadora o diferentes computadoras conectadas a una red.
 Deteccion de errores: Necesita detectar constantemente los posibles errores, estos errores pueden
producirse en el hardware (procesador, memoria, dispositivos e/s) o en el software (programas de
usuario), para cada tipo de error, el sistema operativo debe llevar a cabo la accion apropiada para
asegurar el correcto funcionamiento del sistema.

Los servicios que brindan los sistemas operativos pero que no se relacionan con el usuario sino con el
correcto funcionamiento del sistema son:
 Asignación de recursos: Cuando hay varios usuarios y varios procesos a ejecutar, se debe asignar los
recursos necesarios y liberarlos a cada ellos como los ciclos de cpu, memoria principal, espacio de
almacenamiento de archivos, etc. Por lo tanto debe contener politicas para la planificación de los
procesos, su sincronizacion, memoria principal, etc.
 Proteccion y seguridad: La proteccion implica que el sistema operativo asegure todos los accesos a
recursos del sistema (proteccion de la cpu para que no entre en ciclos infinitos, acceso de un programa
de usuario a una era de memoria que le corresponde al sistema operativo, etc), la seguridad implica
asegurar el acceso al sistema (mediante contraseñas, permisos de usuario, etc).

7 . Manejo de las interrupciones

Una interrupción es una suspensión temporaria de la ejecución de un proceso para llamar a subritunas
del sistema operativo o de la ROM BIOS. Puesto que una interrupción es una forma de llamado a
subrutina, tambien comprende mecanismos para el uso de una pila para almacenar direcciones de
retorno y contenido de los registros, la pila es necesaria porque es comun que la subrutina llamada por
una interrupción a su vez sea interrumpida para llamar a otra subrutina y esta sengunda tambien puede
sufrir interrupciones y asi sucesivamente.
Existen tres dos basicos de interrupciones:
 Interrupción por software: Es una interrupción interna, por medio de una instrucción específica
presente en un proceso, se interrumpe la ejecución del proceso para llamar a subrutinas del sistema
operativo.
 Interrupción por hardware: Ocurren en el exterior del CPU, tienen lugar cuando una interfaz activa su
señal de solicitur de interrupción (IRQ).

Una interrupción por software sucede cuando en la ejecución de un proceso hay una instrucción que
solicita llamara a una subrutina específica del sistema operativo que brinda un servicio. A diferencia de
las interrupciones por hardware, queda establecido en que momento de la ejecución de un proceso
ocurrirá ya que se trata de una instrucción que está presente en un programa, dicha instrucción es la que
solicita llamara a las rutinas del sistema operativo, por ejemplo abrir o cerrar un archivo, acceder a disco,
imprimir, visualizar información en pantalla y todo lo relacionado con manejo de perifericos.

Resumen de sistemas operativos Página 7 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

1) La ejecución del proceso debe solicitar una llamada a una subrutina del sistema operativo con la
instrucción INT21, según cuantas posiciones de memoria ocupe cada vector, el sistema operativo
multiplica el numero de la interrupción por ese numero de posiciones (en este caso son 4) para
acceder a la direccion de la rutina que atiende a esa interrupción.
2) El resultado obtenido en el punto 1 es el desplazamiento dentro del primer segmento donde
comienza la memoria principal denominada zona interrupcion, en esta direccion obtenida por medio
de una calculo se encuentra la direccion CS:IP de la subrutina que aitnede a la interrupcion.
3) La unidad de control apila el registro de estado (que contiene el contenido de los flags) y luego la
direccion de la proxima instrucción a la interrupcion.
4) Comienza la ejecución de la subrutina que atiende a la interrupcion.
a. Las primeras instrucciones apilan el contenido de los registros del procesador que tenia antes
del llamado a la subrutina que atiende la interrupcion.
b. Se ejecuta el codigo de la subrutina.
c. En las ultimas instrucciones de la subrutina se ordena desapilar el contenido de los registros
que se apilaron en 4a.
5) La ultima instrucción de la subrutina necesariamente debe ser IRET y ordena desapilar la dirección de
la siguiente instrucción de la interrupcion del programa llamador.

Una interrupcion por hardware sucede cuando a la CPU le llega una señal IRQ por medio de un cable
proveniente de la placa interfaz de un dispositivo con el objetivo de solicitarle al sistema operativo que
atienda la señal que envió dicha placa interfaz del dispositivo. La placa interfaz de un dispositivo envia
una señal IRQ a la CPU cuando el periferico conectado a esa interfaz concretó algo, por ejemplo se pulsó
una tecla en el teclado, se liberó una tecla, una impresora está lista para recibir mas datos, se terminó de
leer o escribir en disco, mostrar un aviso de estado del dispositivo en pantalla, generar la hora y los
minutos que se ven en pantalla, etc. Notese como estos eventos (tecla pulsada, fin de acceso directo a
memoria, reloj, etc) a diferencia de las interrupciones por software no pueden ser previstos cuando
ocurriran.

Resumen de sistemas operativos Página 8 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

1) La linea IRQ de la interfaz 1 envia una


señal a un chip donde se encuentra el
arbitro de interrupciones, en caso de que
hayan mas señales IRQ provenientes de
otras interfaces simultáneamente, el arbitro
le otorga la petición de interrupcion a la IRQ
que mas prioridad tiene, en el grafico es a
la menor subíndice.
2) En correspondencia a la linea IRQ con
mayor prioridad, el arbitro activa la linea
INTR que va a la CPU para que la Unidad de
Control verifique (según el valor del flag i),
si el procecso en ejecución puede ser
interrumpido o no.
3) Luego de terminar de ejecutar cada
instrucción, la Unidad de Control censa que
la linea INTR que le llega desde el arbitro
esté activada, si no está activada, ejecuta la
siguiente instrucción, pero si está activada,
como en este caso, se acepta la solicitud.
4) El flag i vale 1 y se acepta la solicitud de
interrupcion que llegó al activarse INTR, la
Unidad de Control le envia al arbitro de
instrucciones una señal llamada INTA
(aceptación) pasando la CPU de modo
usuario a modo kernel.
5) El arbitro envía hacia la Unidad de
Control por el bus de datos la direccion en
memoria donde está el vector interrupcion
que contiene la direccion de la subrutina
del sistema operativo que está preparada
exclusivamente a atender la interrupcion.
6) La Unidad de Control ordena escribir en la pila (como en las interrupciones por software) el IP y CS de
la próxima instrucción a ejecutar del proceso interrumpido (direccion de retorno) y el valor de los flags
(RE).
7) La Unidad de Control direcciona la primera instrucción de la subrutina que atiende a la interrupcion,
las primeras instrucciones de la subrutinas ordenan apilar contenidos de los registros mientras que las
ultimas ordenan desafilarlos.
8) se ejecuta la ultima instrucción (IRET) de la pila de la Unidad de Control, desafila el valor del registro
RE del proceso interrumpido y luego el IP y CS de la direccion de retorno y se reanuda la ejecución del
proceso interrumpido.

La interrupcion tratada es enmascarable porque según el valor del flag i, a la interrupcion se le acepta la
petición de interrumpir el programa en ejecución para llamar a una subrutina del sistema operativo. Una
interrupcion enmascarable es aquella a la cual según el valor del flag i se le puede conceder la solicitud
de interrupcion o no. El flag i se establece por software y la interrupcion no puede ocurrir si tiene una
instrucción CLI (que hace i=0) y al terminar debe hacer i=1 mediante la instrucción STI (que hace i=1).

Las interrupciones por hardware no enmascarables son por medio de una linea NMI, una interrupcion no
puede ser enmascarada por el flag i, ocurre sin importar si el proceso en ejecución se puede interrumpir,
por ejemplo cuando la fuente de alimentación deja de producir tension.

Las interrupciones son tratadas por el sistema opearativo a traves de llamadas al sistema porque, por
medio de las llamadas al sistema provee mencanismos para que un proceso pueda realizar una llamada a
subrutinas del sistema operativo que brindan determinados servicios.

Si se produce una interrupcion, el procecsador lleva a cabo un cambio de contexto y pasa el control al
sistema operativo que debe contar con una rutina de tratamiento de interrupciones, que suele ser un
programa corto que determina la naturaleza de la interrupcion y realiza las acciones que sean necesarias

Resumen de sistemas operativos Página 9 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

para saber cual es la rutina que atiende a la interrupcion. Luego de atenderse la interrupcion y ejecutar
las rutinas necesarias, se invoca al planificador a corto plazo del sistema operativo para que seleccione
un proceso para su ejecucion. En caso de que ocurra un error en el tratamiento de una excepcion, un
gestor de interrupciones detecta el error en la comprobación de condiciones de error y la rutina de
tratamiento de interrupciones puede enviar una señal al proceso que solicito originalmente la operación
de e/s.

usualmente los programas utilizan llamdas a biblioteca para realiar llamadas al sistema, estas rutinas de
biblioteca comprueban los argumentos proporcionados por la aplicacion, construyen una estructura de
datos para entregar esos argumentos al kernel y luego ejecutan una instruccion especial llamada
interrupcion software que tiene un operando que identifica el servicio del kernel adecuado. Cuando el
proceso ejecuta la interrupcion por sw, el hw de interrupcion guarda el estado del codigo de usuario,
conmuta a modo supervisor y realiza el despacho a la rutina del kernel que implementa el servicio
solicitado. La interrupcion software tiene una prioridad de interrupcion relativamente baja comparada a
las interrupciones por hardware.

8 . ¿En qué consiste una llamada al SO y cómo se ejecuta? Interfaces de llamadas de usuario, etc.

Una llamada al sistema es el mecanismo usado por un programa para solicitar un servicio al sistema
operativo, aunque para ejecutar la llamada al sistema, el proceso de usuario debe ejecutarse en modo
privilegiado. Las llamadas al sistema operativo proporcionan una interface entre la aplicación que se está
ejecutando y los servicios que brinda el sistema operativo.

En los sistemas operativos multitarea, puede haber varios procesos ejecutándose concurrentemente, el
acceso a los recursos debe ser administrado por el sistema operativo para garantizar su correcto uso y
evitar problemas de seguridad. Por eso mismo la única forma de acceder al hardware es a través de las
llamadas al sistema, que están perfectamente definidas. Las llamadas al sistema pueden agruparse en
control de procesos, manipulación de archivos, manipulación de dispositivos, mantenimiento de la
información y comunicaciones y todas aquellas tareas que pertenecen a los servicios que el sistema
operativo presenta.

Para ejecutar los servicios del sistema operativo (llamadas al sistema) 2


 Los servicios se solicitan guardando los parametros en lugares bien definidos (registros o pilas).
 Se ejecuta una instruccion especial de trampa: Llamada al nucleo o llamada al supervisor.3
o La instruccion de la llamada al supervisor cambia la maquina de modo usuario a modo
privilegiado o modo supervisor o modo nucleo.
o La instrucción de la llamada al supervisor le transfiere el control al sistema operativo para
que lleve a cabo uno de sus servicios.
 El sistema operativo examina los parámetros de la llamada para determinar cuál de ellas se desea
realizar.
 El sistema operativo analiza una tabla que contiene en la entrada "k" un apuntador al procedimiento
que realiza la "k-esima" llamada al sistema: Identifica al procedimiento de servicio llamado.
 La llamada al sistema termina y el control reegresa al programa de usuario.

Las Llamadas al supervisor hacen el trabajo más importante en una llamada al sistema: Invocar o comunicarse con el
sistema operativo para solicitarle uno de sus servicios y cambiar el modo de ejecución de modo usuario a modo
privilegiado o núcleo.

Una llamada al supervisor es generalmente una instruccion especializada del hardware dedicada a invocar el sistema
operativo, toda implementacion de esta instruccion tiene al menos un operando que es la identidad del servicio del
sistema operativo que se solicita. La llamada al administrador siempre provee un punto de entrada al sistema
operativo y el servicio solicitado puede ser invocado por medio de un salto a una posicion de memoria del sistema
operativo o por medio de una tabla de indices.

2
Según el libro Sistemas Operativos de David Luis
3
David Luis define las Llamadas al Administrador como interrupciones especiales de trampa porque no se pueden enmascarar
(interrupción por hardware).

Resumen de sistemas operativos Página 10 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Debido a que la instruccion SVC siempre le transfiere el control al supervisor (kernel), la instruccion SVC puede
cambiar el modo de ejecucion a modo privilegiado, en ese momento, un cambio de contexto tambien puede ocurrir
si es necesario o cuya orden de hacer el cambio de contexto se encuentre en el codigo de la instruccion SVC.

Cuando un proceeso hace una llamada al sistema, se salva el contexto del procesador para este proceso para que
con la llamada al administrador el modo de ejecucion pase al modo nucleo. El sistema operativo tiene su propia
region de memoria y su propia pila del sistema oara controlar las llamadas y retornos de procedimientos. El sistema
operativo puede llevar a cabo cualquier funcion deseada y luego restaurar el contexto del proceso interrumpido para
reanudarlo.

Algunos ejemplos de llamadas al sistema pueden ser la solicitud de los siguientes servicios:

Control de procesos:
 Terminarlos, abortarlos
 Cargarlos, ejecutarlos
 Crearlos, terminarlos
 Obtener atributos del proceso, definir atributos del proceso
 Esperar suceso, señalar suceso
 Asignar y liberar memoria.

Administración de archivos:
 Crearlos, borrarlos.
 Abrirlos, cerrarlos
 Leerlos, escribirlos, reposicionarlos.
 Obtener atributos del archivo, definir atributos del archivo.

Administración de dispositivos:
 Crearlos, borrarlos, liberarlos.
 Obtener atributos del dispositivo, definir atributos del dispositivo
 Conectarlos, desconectarlos lógicamente.

Mantenimiento de información:
 Crearlos, borrarlos, liberarlos.

9 . ¿Qué entiende por normas POSIX?

POSIX es un tipo de API que se utiliza en Linux y Mac OS X, una API es el conjunto de funciones y
procedimientos (o métodos, si se refiere a programación orientada a objetos) que ofrece cierta biblioteca
para ser utilizado por otro software como una capa de abstracción, esto facilita el desarrollo de
aplicaciones multiplataforma. Una API representa una interfaz de comunicación entre componentes
software. Se trata del conjunto de llamadas a ciertas bibliotecas que ofrecen acceso a ciertos servicios
desde los procesos y representa un método para conseguir abstracción en la programación,
generalmente (aunque no necesariamente) entre los niveles o capas inferiores y los superiores del
software. Uno de los principales propósitos de una API consiste en proporcionar un conjunto de
funciones de uso general, por ejemplo, para dibujar ventanas o iconos en la pantalla. De esta forma, los
programadores se benefician de las ventajas de la API haciendo uso de su funcionalidad, evitándose el
trabajo de programar todo desde el principio.

System V tambien es un tipo de Api y se utiliza en UNIX, se diferencia con POSIX en la forma de
implementar la sincronizacion entre procesos, en POSIX los semáforos pueden incrementarse o
decrementarse en 1, mientras que en System V los puede incrementa o diminuye a una cantidad
numerica mayor a 1 y POSIX no permite manipular los permisos de los semáforos.

1 0 . Protecciones en un SO.

Para el correcto funcionamiento de un sistema operativo se requieren medidas de proteccion y seguridad.

Resumen de sistemas operativos Página 11 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Seguridad: Un Sistema Operativo debe ofrecer mecanismos de seguridad para controlar el acceso de
los programas, procesos o usuarios a los recursos definidos por el sistema de computación, estos
mecanismos permiten especificar los controles que se aplicarán y que se deben cumplir.
 Proteccion: El sistema operativo debe proveer mecanismos de protección para evitar que un proceso
intervenga en otros, protección de CPU para evitar que un proceso malicioso se acapare de la CPU,
protección de memoria para evitar que las aplicaciones no accedan o modifiquen lo que se encuentra en
el segmento donde esta almacenado el sistema operativo.

Por ejemplo en UNIX Todo archivo está controlado por múltiples niveles de protección, que especifican
los permisos de acceso al mismo.

UNIDAD 3

1 .Definir el concepto de proceso.

Un proceso es un programa de ejecución cargado en memoria principal, que necesita recursos como por
ejemplo tiempo del CPU, archivos y dispositivos de entrada y salida para realizar su tarea. Es una unidad
de trabajo en un sistema.
 Proceso monohilo: Proceso que tiene un contador de programa que especifica cual es la siguiente
instrucción a ejecutar, las instrucciones de un proceso se ejecutan secuencialmente, una después de otra,
hasta completar la ejecución del proceso.
 Proceso multihilo: Proceso que tiene muchos contadores de programa, apuntando cada uno de ellos a
la siguiente instrucción que haya que ejecutar para una hebra determinada.

Por el tipo de instrucciones que ejecutan, podemos diferenciar a los procesos en dos grupos:
 Proceso del Sistema Operativo: Ejecuta codigo de un proceso que forma parte del sistema operativo.
 Procecsos de ususario: Es un proceso creado por el sistema operativo como respuesta a una ejecución
que orenó el usuario, los procesos de usuario ejecutan codigo de las aplicaciones de usuario.

Cuando un sistema operativo ejecuta un programa, se carga el código ejecutable en una zona libre de
memoria y el sistema operativo reserva para ese proceso un espacio en el que almacenará las siguientes
partes del proceso que se ejecutará:

Como se puede ver un proceso no es un simple programa cargado en memoria, un programa no es un


proceso, un programa es una entidad pasiva, mientras que un proceso es activo y dinamico al poder
ejecutarse, poseer atributos que cambian y cuyo estado puede cambiar (nuevo, en ejecución, bloqueado,
etc).

Resumen de sistemas operativos Página 12 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

2 . Concepto de bloque de control de proceso.

El Bloque de Control de Proceso es una estructura de datos con campos para registrar información acerca
de un proceso que el Sistema Operativo necesita acerca de un proceso particular para poder conocer el
proceso y para administrar su procesamiento (por ejemplo poder asignarle recursos). Cada vez que se
crea un proceso, el sistema operativo crea el bloque de control de proceso correspondiente para que
sirva como descripción en tiempo de ejecución durante toda la vida del proceso. Este registro contiene
los siguientes elementos básicos:

Identificador del proceso.


 Identificador del proceso (PID) Consiste en un número entero asignado por el sistema, tal numero debe
ser unico para poder identificar al proceso.
 El identificador del proceso que lo creó (proceso padre).
 La identificación del usuario.

Información del estado del microprocesador.


 Registros del procesador: Cuáles son los registros quee utilizan para los datos de entrada, calculos o
resultados.
 Contador de programa: Indica cual es la proxima direccion a ejecutar.
 Registros de control y estado: Cuáles son aquellos registros entre los cuales se encuentran el contador
de programa, los registros con iniciadores de habilitacion o inhabilitación de interrupciones y el modo de
ejecución (modo usuario o modo kernel).
 Puntero a la pila del proceso: Hace referencia a las posiciones de la pila del proceso (Snack) que
almacena parámetros y direcciones de retorno.

Información de planificacion y estado: Esta información es necesaria para que el sistema operativo
lleve a cabo sus funciones de planificacion. Los elementos típicos de esta información son los siguientes.
 Estado del proceso: Pueden ser estado de ejecución, preparado, etc.
 Prioridad de planificación: Se utiliazan algoritmos de planificación que usarán esta planificación.
 Información para la planificación: Información que depende del algoritmo de planificación utilizado.
 Suceso por el que se encuentre esperando el suceso para reanudar su ejecución.

Información de gestion y control.


 Estructuracion de datos: Puede contener un puntero a otro proceso con la finalidad de formar una cola
de procesos u otra estructura de datos en la que se encuentran Bloques de Control de Procesos que
estan en un mismo estado y se encuentran enlazados según el nivel de prioridad de cada uno de ellos
(cola de procesos listos, cola de procesos bloqueados, etc).
 Comunicación del proceso: Figuran indicadores, señales y mensajes asociados con la comunicación
entre dos procesos.
 Privilegios del proceso: Figuran aquellos privilegios que puede tener un proceso, esos privilegios
pueden consistir en poder acceder a determinadas zonas de memoria, los tipos de instrucciones que
pueden ejecutar, los servicios que puede usar y las utilidades del sistema que puede solicitar.
 Gestion de memoria: Incluye punteros a la tabla de pagina y/o segmentos que describen la memoria
asignada al proceso.
 Recursos asignados al proceso: Figuran cuáles son los procesos que están siendo asignados al proceso
como por ejemplo los archivos que abre, si está usando la CPU o un dispositivo de E/S. En algunos
sistemas operativos, en los Bloques de Control de Proceso se almacenan historicos donde figura cada
recurso que ocupo el proceso.

3 . Cambio contexto. Cambio de modo.

Cambio de modo es cuando el proceso cambia de modo (de nuevo a listo, de listo a ejecutando, de
ejecutando a bloqueado E/S, etc.).

Resumen de sistemas operativos Página 13 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Cambio de contexto consiste en la ejecución de una rutina del kernel cuyo proposito es el de detener un
proceso (o hilo) en ejecución para enviar a ejecutar otro proceso, la rutina de cambio de contexto trata
una interrupción por hardware ya que un proceso no ordenara dejar de ejecutarse voluntariamente, sino
que, en realidad lo que se quiere es que el proceso sea despojado por motivos ajenos a ese proceso en
particular. Debido a que las interrupciones hacen que el sistema operativo obligue a la cpu a abandonar
su tarea actual, cuando se produce la interrupción, el sistema tiene que suspender el proceso que se
ejecuta actualmente y después reanudarlo, el sistema operativo entonces ejecuta inmediatamente la
rutina de cambio de contexto que consiste en guardar el contexto actual del proceso que se está
ejecutando en la cpu, de modo que pueda restaurar dicho contexto luego de que concluya la ejecución
del proceso por el que fue despojado.

El contexto se almacena en el Bloque de Control de Proceso e incluye:


 Los registros del microprocesador que necesita el proceso para ejecutarse correctamente.
 Estado del proceso (nuevo, listo, ejecutando, bloqueado, etc).
 Información de gestion de memoria.
 La información de la pila.

Cuando se reanuda la ejecución de ese proceso, se toma el estado previamente copiado en la memoria
principal, se carga los registros al procesador y se ejecuta la instrucción que estaba pendiente de
ejecutar en el programa previamente despojado (eso tambien figura en el Bloque de Control de Proceso
ya que tambien almacena el contador de programa).

Cuando ocurre un cambio de contexto, el proceso que se encuentra en estado de ejecución es cambiado
a estado listo, pero si no hay mas memoria principal suficiente para albergar al proceso, pasa a estado
de suspendido al ser almacenado en la memoria secundaria por falta de espacio. El tiempo dedicado al
cambio de contexto es tiempo desperdiciado dado que el sistema no realiza ningun trabajo util durante
la conmutación.

4 . Estados activo de un proceso.

En nivel de multiprogramacion, es el proceso cuyo Bloque de Control de Proceso se encuentra en cola de


listo o ejecución:
 Se encuentra en la cola de procecsos listos: El proceso se encuentra en la memoria RAM, sólo le falta la
CPU para seguir ejecutándose.
 Se encuentra en la cola de procesos en ejecución: Cuando la CPU esta disponible, el proceso la ocupa.

5 . Transiciones de estado.

Modelo de transición de estados:

Resumen de sistemas operativos Página 14 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Nulo  Nuevo: Se crea un nuevo proceso para ejecutar un programa.


 Nuevo  Listo: Cuando el sistema operativo está preparado para recibir un proceso mas, pasara un
proceso de estado Nuevo a estado Listo.
 Listo  Ejecución: Cuando es momento de enviar a ejecutar un proceso listo, el sistema operativo hace
que un proceso pase de estado listo a ejecución según el criterio de planificación de procesos que tenga.
 Ejecución  Terminado: El proceso que se está ejecutando es finalizado por el sistema operativo
cuando haya terminado de ejecutarse.
 Ejecución  Listo: El proceso que está en ejecución ha alcanzado el tiempo maximo permitido de
ejecución ininterrumpida, si el sistema operativo le asigna diferentes niveles de prioridad a los diferentes
procesos, entonces puede darse el caso de que el proceso que se ejecuta tenga menor prioridad que un
proceso en la cola de procesos listos y por ese motivo debe dejar de ejecutarse para que se ejecute el
proceso con mayor prioridad, tambien puede suceder que un proceso deje de ejecutarse voluntariamente.
 Ejecución  Bloqueado: Un proceso obtiene el estado de bloqueado si realiza una llamada al sistema
solicitando algo por lo que tiene que esperar (un suceso, un dispositivo de e/s, un recurso, que un
proceso termine de ejecutarse o le de una entrada, etc).
 Bloqueado  Listo: Se produce el suceso que el proceso bloqueado estaba esperando y se le concede
la cpu para que siga ejecutandose.
 Listo  Terminado: En algunos sistemas un proceso padre puede terminar con un proceso hijo en
cualquier momento, tambien puede ocurrir que el proceso padre se termine, de tal manera que sus
procesos hijos puedan ser terminados tambien.
 Bloqueado  Terminado: Según William Stallings esto tambien sucede cuando el proceso padre finaliza
al proceso hijo. Cuando se produce un suceso, todos los procesos que estaban en la cola de espera a
que ese suceso ocurra pueden pasar a estado listo o terminado (para un uso mas eficiente del sistema,
se implementa una cola de espera de suceso por cada suceso por el que los procesos puedan esperar).
 Bloqueado  Bloqueado y suspendido: Si no hay procesos listos por falta de espacio en memoria
principal, un proceso bloqueado puede ser suspendido para que uno o varios procesos puedan pasar al
estado de proceso listo con el objetivo de dejar que otros procesos puedan ejecutarse y asi mantener un
rendimiento adecuado.
 Bloqueado y suspendido  Listo y suspendido: Ocurre el suceso por el cual ha estado esperando el
proceso suspendido, para que el proceso bloqueado y suspendido pase al estado listo y suspendido el
sistema operativo debe tener acceso a la información acerca de ese proceso.
 Bloqueado y suspendido  Bloqueado: Esta transición ocurre si un proceso bloqueado y suspendido
posee una prioridad mayor a cualquier otro proceso, de esta menera se supone que el suceso por el que
esta esperando el proceso bloqueado y suspendido ocurra pronto.
 Listo y suspendido  Listo: Cuando no hay procesos listos, el sistema operativo debe traer un proceso
para que se ejecute, incluso traer aquellos procesos que han sido despojados de la memoria principal

Resumen de sistemas operativos Página 15 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

por falta de espacio. Puede ocurrir también que aunque hayan procesos listos hay un proceso listo que
tenga mas prioridad que ellos y tenga que ejecutarse primero.
 Listo  Listo y suspendido: Suele suceder menos veces que Bloqueado  Bloqueado y suspendido
porque un proceso que está listo puede ejecutarse en cualquier momento, en cambio un proceso
bloqueado ocupa espacio en la memoria principal y no se puede ejecutar, por ese motivo es mas
frecuente esta ultima transición. De todas maneras puede suspenderse un proceso listo si este ocupa
mucha memoria principal o tiene menor prioridad que el resto de los procesos bloqueados y listos.
 Nuevo  Listo y suspendido, Nuevo  Listo: Cuando se crea un nuevo proceso se lo puede agregar a
la cola de procesos listos o la cola de procecsos listos y suspendidos, en aquel momento el sistema
operativo crea el Bloque de Control de Proceso y le asigna el espacio de direcciones que corresponda, en
caso de no hubiese espacio para un nuevo proceso en memoria principal, aun asi el sistema operativo
puede crear el proceso y enviarlo a la cola de procesos listos y suspendidos.
 Varios  Terminado: Normalmente los procesos terminan cuando se están ejecutando ya sea porque
su ejecución se completo, por alguna terminacion erronea, por haber finalizado el proceso que lo creó o
por finalizar cuando el proceso padre finalizó.

6 . Operaciones sobre un proceso.

Los sistemas que administran procesos deben ser capaces de realizar ciertas operaciones sobre y con los
procesos. Tales operaciones incluyen:

 Crearlos y terminarlos
 Suspenderlos y reanudarlos
 Proporcionar mecanismos para que se comuniquen.
 Sincronizarlos
 Cambiarles la prioridad
 Bloquear y desbloquearlos
 Planificar un proceso (asignarle la cpu)
 Tratar interbloqueos.
1) Creación de procesos:

En terminos de ejecución, existen dos posibilidades cuando un proceso padre crea un proceso hijo:
 Luego de que se creó el proceso hijo, tanto el proceso padre como su hijo se ejecutan
concurrentemente.
 El padre termina hasta que uno de sus hijos termine.

Con respecto a los recursos cuando un proceso padre crea a un proceso hijo:
 El proceso hijo obtiene recursos directamente del sistema operativo.
 Los recursos recibe el proceso hijo está restringido a un subconjunto de los recursos del proceso padre.

Existen dos posibilidades en funcion del espacio de direcciones del proceso hijo:
 El proceso hijo es un duplicado del proceso padre (usa el mismo programa y los mismos datos que el
padre).
 El proceso hijo carga un nuevo programa.

En un sistema operativo que deriva de UNIX, un proceso puede crear otros procesos nuevos cuando se
ejecuta una llamada al sistema especifica para la creación de procesos. Los procesos se identifican por
un PID (Identificador de proceso).

Resumen de sistemas operativos Página 16 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

El proceso padre al realizar una llamada al sistema Fork( ), solicita clonarse en el espacio de memoria
que ocupará su proceso hijo. El proceso padre Bash solicita clonarse en su hijo y lo define como Ls, de
esta menra el proceso padre puede comunicarse fácilmente con su proceso hijo. Luego, uno de los dos
proceesos utiliza la llamada al sistema Exec( ) con el fin de sustituir el espacio de memoria del clon del
proceso padre por el codigo del proceso hijo, el proceso padre puede realizar la llamada al sistema
Wait( ) para sincronizarse con su hijo para esperar que su proceso hijo termine.

Si el proceso padre no tiene nada que hacer mientras se ejecuta el hijo (no tiene que crear mas hijos,
tampoco tiene que ejecutar), entonces realiza la llamada al sistema Wait( ) para auto-excluirse de la cola
de procesos listos hasta esperar que su hijo termine. La llamada al sistema Exit ( ) la realiza el proceso
hijo cuando termina su ejecución o si se ejecutó la ultima instrucción para que el sistema operativo lo
termine, la llamada al sistema Exit( ) le dice al Wait( ) del proceso padre que la ejecución de su proceso
hijo ha terminado.

Para la creación de procesos, en un sistema operativo Windows, los procesos se crean en la API de Win32
mediante una funcion CreateProcess( ) que es similar a Fork( ) pero con la diferencia de que el hijo no
hereda el espacio de direcciones de su padre sino que requiere cargar un programa especifico en el
espacio de direcciones del proceso hijo durante su creación.

2) Terminacion de procesos:

Un proceso finaliza cuando termina de ejecutar su ultima instrucción y pide al sistema operativo que lo
termine usando la llamada al sistema Exit( ), en ese momento el proceso puede enviarle su bit de estado
al proceso padre a traves de la llamada al sistema Wait( ), luego el sistema operativo libera todos los
recursos que ocupaba el proceso (incluyendo memoria fisica, virtual, archivos abiertos, buffers e/s, etc).

Un proceso padre puede terminar con la ejecución de sus hijos por las siguientes razones:
 El proceso hijo ha excedido el uso de algunos recursos que se le han asignado, para determinar si eso
ha ocurrido, el proceso padre debe disponer de mecanismos que le permitan inspeccionar el estado de
sus procesos hijos.
 La tarea asignada al proceso hijo ya no es necesaria.
 Si su proceso padre deja de existir y el sistema operativo no permite que el proceso hijo se siga
ejecutando cuando su padre ya terminó entonces cuando el padre abandona el sistema el hijo tambien.

Resumen de sistemas operativos Página 17 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

En un sistema UNIX todas las cosas que han sido mencionadas son validas con la caracteristica adicional
que si un proceso padre ha terminado, a todos sus procesos hijos se le asigna el proceso init como su
nuevo padre, de manera que los procesos hijo todavía tengan un padre a quien proporcionarle su estado
y estadisticas de ejecución.

3) Proporcionar mecanismos para que se comuniquen.

Los procesos que se ejecutan concurrentemente pueden ser procesos independientes o procesos
cooperativos:
 Proceso independiente: No comparte datos con otros procesos o no puede afectar o ser afectado por
los restantes procesos que se ejecutan en el sistema.
 Proceso cooperativo: Puede afectar y ser afectado por los demas procesos que se ejecutan tambien
puede compartir datos con otros procesos.

Las razones por las cuales el sistema operativo debe proporcionar mecanismos para que los procesos se
puedan comunicar son las siguientes:
 Compartir información: Si varios usuarios están interesados en la misma información (por ejemplo un
archivo compartido), entonces el sistema operativo debe proporcionar un entorno que permita el acceso
concurrente a dicha información.
 Acelerar calculos: En caso de que el sistema sea compatible con multiprocesamiento o posea varios
canales de e/s, si queremos que una tarea se ejecute mas rapido, deberiamos dividirla en subtareas con
tal de que cada una de ellas pueda ejecutarse en paralelo con las demas.
 Modularidad: En un sistema operativo con arquitectura jerarquica o en cualquier otra forma de
implementacion en la que el sistema operativo se construya de forma modular, existen modulos que se
comunican entre sí, cada modulo contiene funcionalidades del sistema divididos en hilos y procesos que
deben comunicarse entre si.
 Convivencia: Un solo usuario puede trabajar en muchas tareas al mismo tiempo (por ejemplo un
usuario puede estar editando, imprimiendo y compilando en paralelo):

Para que los procesos puedan intercambiar datos e información entre si, el sistema operativo debe
contar con mecanismos de comunicación interprocesos cuyos modelos fundamentales son:

 Memoria compartida: Se establece una región de la memoria para que sea los procesos cooperativos
puedan intercambiar información escribiendo o leyendo datos en dicha region compartida. La memoria
compartida permite una velocidad maxima y una mejor comunicación ya que si
los procesos se encuentran en una misma maquina, la comunicación puede
realizarse a velocidades de memoria, esto requiere de llamadas al sistema pero
son pocas ya que son necesarias solo para establecer zonas de memoria
compartida.

Debido a que una region de memoria compartida reside en el espacio de


direcciones del proceso que crea el segmento de memoria compartida, la region
de memoria para que dos procesos puedan comunicarse es creada por uno de
esos dos procesos, que ademas de crearla, define el formato de los datos, su
ubicación y los procesos son responsables de verificar que no escriben en la
misma posición simultáneamente (en estas actividades no interviene el control del
sistema operativo), cualquier otro proceso que desee comunicarse usando este
segmento de memoria, deben conectarse a su espacio de direcciones. Para que
esto suceda, uno o mas procesos deben violar la restricción que existen en los
sistemas operativos de que un proceso no puede acceder a la memoria de otro
proceso.

Dentro del concepto de memoria compartida se distinguen procesos productivos y procesos


consumidores, donde el proceso productor genera información que consume el proceso consumidor (por
ejemplo un compilador genera codigo ensamblado para que el ensamblador lo consuma), esto se
relaciona mucho con el paradigma del cliente y el servidor, por ejemplo un servidor web proporciona
codigo html e imágenes y un explorador web cliente le solicita recursos.

Resumen de sistemas operativos Página 18 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Para permitir que un proceso consumidor y productor se ejecuten de forma concurrente, debemos tener
disponible un buffer que pueda rellenar el productor al escribir y vaciar el consumidor al ir leyendo lo
que escribió el productor, considerando todo lo comentado hasta ahora, es evidente que dicho buffer se
encuentra en la zona de memoria compartida. Pueden implementarse dos tipos de buffers, el buffer no
limitado no pone limites al tamaño de esa memoria compartida, el consumidor puede tener que esperar
para obtener elementos nuevos, pero el productor puede generar nuevos elementos, el buffer limitado
establece un tamaño de bufer fijo, en este caso, el consumidor debe esperar si el buffer está vacio y el
productor tiene que esperar a que el consumidor lo vacie si el buffer está lleno.

 Paso de mensajes: El sistema operativo proporciona medios por los cuales los procesos cooperativos
puedan comunicarse entre si a traves de envíos de mensajes. Es util para
intercambiar pequeñas cantidades de datos ya que no existe la posibilidad de que
se genere conflictos, al ser mas simple es mas facil de implementar que el modelo
de memoria compartida, el paso de mensaje se implementa mediante llamadas al
sistema , por lo tanto requiere mas intervención del kernel y mas tiempo.

Un mensaje puede contener datos, ordenes de ejecucion, ncluso codigo a


transmitir entre dos o mas procesos. Aunque, en general, el contenido de un
mensaje quedara
dividido en dos campos bien separados, por un lado, la cabecera (que
habitualmente tiene un formato fijo para cada sistema operativo) y el cuerpo del
mensaje (que contiene el mensaje en sı y cuya longitud puede variar incluso
dentro de un mismo sistema operativo).

El modelo de paso de mensajes se utilizan en sistemas distribuidos debido a que


los procesos que se comunican no se encuentran en una misma computadora, por
lo tanto no comparten el mismo espacio de direcciones para que los procesos se comuniquen y
sincronicen sus acciones.

Para que dos procesos puedan comunicarse entre si debe existir un medio por el cual puedan
reverenciarse entre si, debe existir un enlace de comunicaciones entre ellos, los metodos para
implementar lógicamente un enlace y las operaciones de envio y recepcion son las siguientes:
Comunicación directa o indirecta, comunicación sincronica o asincronica y almacenamiento en buffer
explicito o automatico. En caso de una comunicación directa, cada proceso transmisor o receptor que
desea establecer una comunicación debe nombrar de forma explicita al receptor o transmisor de la
comunicación por ejemplo, donde el mensaje Send (P, mensaje) envia un mensaje al proceso P , mientras
que el mensaje Recibe (Q, mensaje) recibe un mensaje del proceso P.

Un enlace de comunicaciones, según el sistema se puede asociar con exactamente dos procesos o que
entre cada par de procesos exista un enlace o se establecen de forma automatica entre cada par de
procesos que quieran comunicarse. Los procesos solo tienen que conocer la identidad del otro para
comunicarse.

Cuando un intercambio de mensajes es sıncrono, tanto el emisor como el receptor deben proceder
juntos para completar la transferencia. En sistemas sıncronos la operacion de envıo es bloqueante, es
decir, cuando un proceso emisor desea enviar un mensaje para el que no se ha emitido el
correspondiente receive() por parte del proceso receptor. El emisor que dara bloqueado hasta que el
receptor acepte el mensaje. Como consecuencia solo puede haber un mensaje pendiente como m aximo
por cada emisor/receptor.

En el intercambio asıncrono de mensajes, el emisor no queda bloqueado cuando no hay un receive( )


pendiente. El envıo en un sistema asıncrono se implementa haciendo que el SO almacene temporalmente
los mensajes pendientes hasta que se emita el correspondiente receive( ). Como resultado, el proceso
emisor puede continuar su ejecucion despues de enviar un mensaje y no necesita quedar bloqueado.

En modelo de paso de mensajes, los mensajes pueden ser de tamaño fijo o variable.

3) Sincronizacion de procesos

Resumen de sistemas operativos Página 19 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

La sincronizacion entre procesos tiene lugar a traves de las llamadas a las primitivas Send( ) y Recieve( ),
el paso de mensajes entre procesos puede ser:
 Envio con bloqueo (sincronico): El proceso se bloquea hasta que el proceso receptor o el buzon de
correo reciben el mensaje.
 Envio sin bloqueo (asincrono): El proceso transmisor envia el mensaje y continua operando.
 Recepcion con bloqueo (sincronica): El receptor se bloquea hasta que hay un mensaje disponible.
 Recepcion sin bloqueo (asincrono): El receptor extrae un mensaje valido o un mensaje nulo.

Si los mensajes intercambiados por los procesos que se están comunicando residen en una cola
temporal. Básicamente, tales colas se pueden implementar de tres maneras:
 Cola con capacidad cero: La cola tiene una longitud maxima de 0, no puede haber ningun mensaje
esperando en el enlace, por eso en este caso el transmisor debe bloquearse hasta que el receptor reciba
el mensaje.
 Capacidad limitada: La cola tiene una longitud definida, por lo tanto puede haber en ella una cantidad
limitada de mensajes como maximo. Si la cola no se llena cuando se envia un mensaje, el mensaje se
introduce en la cola (se copia el mensaje o se almacena un puntero al mismo), y el transmisor puede
continuar la ejecución sin esperar. Si el enlace esta lleno, el transmisor debe bloquearse hasta que haya
espacio disponible en la cola.
 Capacidad ilimitada: La capacidad de la cola no tiene limites, por lo tanto puede haber cualquier
cantidad de mensajes esperando en ella y el proceso transmisor nunca se bloquea.

7 . Interrupciones, excepciones, llamados al supervisor.

Un cambio de proceso puede producirse en cualquier momento en que el sistema operativo haya
cambiado el control a partir del proceso que esta actualmente ejecutandose. Interrupciones o llamadas al
supervisor pueden ser causas por las cuales se cambie un proceso en ejecucion por otro.

 Interrupciones: Stallings diferencia dos tipos de interrupciones basicas, las interrupciones ordinarias,
traps y las excepciones.
o Interrupcion: Es originada por un suceso externo asincrono (independiente al proceso que
está ejecutandose) como por ejemplo, se pulsó una tecla, se terminó de realizar una
operacion de e/s. En una interrupcion ordinaria, el control se transfiere primero a un
gestor de interrupciones, quien lleva a cabo las tareas basicas y luego se salta a una rutina
del sistema operativo que se ocupa de la interrupcion para determinar la naturaleza de la
interrupcion para luego definir que subrutina del sistema operativo la atiende.
o Trap: Es originado por un suceso interno, por lo tanto es sincrono (se produce porque el
codigo del programa que se ejecuta presenta una instrucción que solicita un servicio del
sistema operativo). Son las interrupciones por software que hemos estado viendo.
o Excepcion: Las excepciones tienen que ver con una condicion de error o de una condicion
no deseada generada dentro del proceso que está ejecutandose, como por ejemplo, un
intento ilegal de acceso a un archivo, una division por 0, un bucle infinito que busca
acapararse de la CPU. En las excepciones, el sistema operativo determina si el error es
fatal. Si lo es, el proceso que se estaba ejecutando pasa al estado de terminado y se
produce un cambio de proceso, si no es fatal, la accion del sistema operativo dependerá
de la naturaleza del error y del diseño del sistema operativo.
 Llamada al supervisor: El sistema operativo es invocado durante una llamada de supervisor ya que
desde el programa llamador se solicitan servicios del sistema operativo. Por ejemplo, un proceso de
usuario se está ejecuntado y se alega a una instruccion que solicita una operacion de e/s, tal como abrir
un archivo. Esta llamada provoca la transferencia a una rutina que forma parte del codigo del sistema
operativo. Por lo general, el uso e una llamada al sistema hace que el proceso de usuario pase al estado
de Bloqueado.

Resumen de sistemas operativos Página 20 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

8 . Conceptos de hilos (threads) funcionalidad, multihilos

Un hilo es una unidad basica de utilización del CPU, es el camino de ejecución en un proceso, aunque al
igual que los procesos, los hilos tambien tienen un estado de ejecución, hilos de un mismo proceso
pueden compartir recursos entre ellos y sincronizarse para que el compartimiento de recursos no genere
problemas entre los hilos, contienen un contador de programa, un conjunto de registros y un espacio de
stack (pila).

Los estados de los hilos pueden ser: Ejecución, listo y bloqueado, no es necesario que exista el estado
suspendido como los que tienen los procesos ya que si un proceso se encuentra en memoria secundaria,
todos sus hilos deberian de estarlo tambien ya que todos comparten el mismo espacio de direcciones.

Refiriendonos a la funcionalidad de un hilo, las operaciones que se realizan con un hilo son las
siguientes:
 Creación: Cuando un proceso se crea, un hilo perteneciente a ese proceso es creado. Luego, este hilo
puede crear otros hilos dentro del mismo proceso, proporcionando un puntero de instrucción y los
argumentos del nuevo hilo. El hilo tendrá su propio contexto y su propio espacio de la columna, y pasara
a la final de los listos.
 Bloqueo: Cuando un hilo debe esperar por un suceso se bloquea (salvando sus registros de usuario,
contador de programa y punteros de pila). Sin embargo, que un hilo se encuentre bloqueado no quiere
decir que el resto tambien lo esté, por lo tanto el procesador puede pasar a ejecutar otro hilo que se
encuentre en estado listo mientras el anterior se encuentra bloqueado.
 Desbloqueo: Cuando el suceso por el que esperaba el hilo se produce, el hilo pasa a estado listo.
 Terminacion: Cuando un hilo termina, se libera tanto su contexto como el resto de sus campos.

El uso de hilos comprende muchas ventajas


 La ventaja mas evidente que señala Stallings es que la creación de un hilo tarda mucho menos que la
creación de un proceso, por lo tanto tarda menos tiempo en terminarse y tambien menos tiempo para
cambiar entre dos hilos en un mismo proceso.
 La comunicación entre hilos es más rapida que la comunicación entre procesos, esto es porque la
comunicación entre procesos independientes requiere la intervención del núcleo para ofrecer proteccion
y para proporcionar los mecanismos necesarios para la comunicación. Sin embargo debido a que los
hilos de un mismo proceso comparten memoria y archivos, pueden comunicarse entre si sin la
intervención del núcleo.

Generalmente, cada hilo tiene una tarea especifica y determinada, como forma de aumentar la eficiencia
del uso del procesador. Al igual que los procesos, los hilos poseen un estado de ejecución y pueden
sincronizarse entre ellos para evitar problemas de compartimiento de recursos ya que cualquier
modificación de un recurso desde un hilo afecta al entorno del resto de los hilos del mismo proceso. Por
lo tanto, es necesario sincronizar la actividad de los distintos hilos para que no interfieran unos con
otros o corrompan estructuras de datos, por eso, es probable que los hilos requieran de operaciones
atómicas para impedir que los datos comunes sean cambiados o leídos mientras estén siendo
modificados, para lo que usualmente se utilizan los semáforos. El descuido de esto puede generar
interbloqueo.

Resumen de sistemas operativos Página 21 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Se supone que un proceeso es un programa en ejecución con solo un hilo de control, pero en la
actualidad, la mayoria de los sistemas operativos proporcionan caracteristicas que permiten que un
proceso pueda tener multiples hilos:
 Proceso tradicional (o proceso pesado): Es un proceso liviano que solo tiene un hilo de control.
 Proceso multihilo: Es un proceso pesado que puede tener multiples hilos, por lo tanto puede realizar
mas de una tarea simultáneamente.

Las ventajas que presenta la programación multihilo son las siguientes:


 Capacidad de respuesta: Si parte de los hilos del proceso están bloqueados, el resto de sus hilos
pueden continuar ejecutandose podiendole responder al usuario aunque ciertos hilos no se hayan
terminado de ejecutar.
 Compartision de recursos: Los hilos comparten memoria y lo recursos del proceso al que pertenecen.
 Economía: Es mas economico realizar cambios de contexto entre unos y otros hilos.
 Utilización sobre arquitectura multiprocesador: Los hilos pueden ejecutarse en paralelo en los
diferentes núcleos.

9 . Hilos a nivel núcleo y a nivel usuario

Las posibilidades en la gestion de hilos comprende dos niveles:


 Hilos a nivel de usuario: Todo el trabajo de gestion de hilos lo realiza la aplicación y el kernel no es
conciente de la existencia de hilos. El intercambio de los hilos no necesita los privilegios del modo kernel,
porque todas las estructuras de datos estan en el espacio de direcciones de usuario de un mismo
proceso. Por lo tanto, el proceso no debe cambiar a modo kernel para gestionar hilos.
 Hilos a nivel de núcleo: Todo el trabajo de gestion de hilos lo realiza el kernel. En el area de la
aplicación no hay codigo de gestion de hilos, unicamente un API para la gestion de hilos en el núcleo.

Con respecto al modo de ejecución de los hilos, los modos de ejecución basicos que permiten diferenciar
entre la ejecución de procesos del sistema operativo o ejecución de procesos de usuario son el modo
supervisor y el modo usuario, es decir, el hilo cuyo codigo es ordenado a ejecutar por el sistema
operativo y el hilo que es ordenado a ejecutar por aplicaciones de usuario, por lo tanto cuando un
proceso solicita ejecutar algun servicio del sistema operativo, el hilo de ejecución debe pasar de modo
usuario a modo kernel o núcleo ya que para que el sistema operativo cumpla las solicitudes de servicios
de los procesos de usuario, el sistema operativo debe tomar el control de la computadora (en ese
entonces se dice que el proceso pasa a modo kernel).
 Hilos en modo usuario: No pueden acceder a ciertas areas de memoria y no puede ejecutar
instrucciones privilegiadas que puedan causar algun daño.
 Hilos en modo kernel: Pueden acceder a areas de memoria protegidas y pueden ejecutar instrucciones
privilegiadas, en este modo se ejecutan las instrucciones del sistema operativo.

La instrucción para cambiar de modo de usuario a modo kernel es un ejemplo de instrucción privilegiada
(como por ejemplo control de e/s, gestion del temporizador y gestion de interrupciones), las
instrucciones privilegiadas son aquellas que pueden generar daño a otros procesos o usuarios, como por
ejemplo una operación de e/s, actualizacion de reloj, deshabilitar interrupciones, acceder a memoria del
sistema operativo, etc. Según Galvin la existencia de ambos modos de ejecución sirve para proteger al
sistema operativo de los usuarios que pueden causar errores y proteger a los usuarios de otros usuarios.

El modo de ejecución de usuario y de kernel tienen como consecuencia la existencia de diferentes modos
de funcionamiento de hardware, el hardware tiene que hacer que aquellas instrucciones privilegiadas se
ejecuten en modo kernel y si se quiere ejecutar en modo usuario, entonces el hardware no ejecuta la
instrucción, la trata como ilegal y le envia una excepcion al sistema operativo. Una vez que se dispone de
proteccion por hardware, el hardware detecta los errores de violacion de modo y normalmente el sistema
operativo se encarga de tratar dichos errores (por ejemplo acceder a un espacio de memoria que no le
corresponde o que no forma parte del espacio de memoria del usuario, ejecutar una instrucción ilegal,
etc).

En la actualidad el hardware tiene la capacidad de detectar qué proceso es de usuario y cual el de


supervisor por el bit de modo, en caso de que una aplicación de usuario quiera solicitarle un servicio al

Resumen de sistemas operativos Página 22 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

sistema operativo (o realizar una llamada al sistema), el modo de ejecución debe pasar de modo usuario
a modo supervisor para satisfacer la solicitud.

Existen distintos tipos de relaciones entre hilos de usuario e hilos de kernel:

1 0 . ¿Qué se entiende por micronucleo?

Es un tipo de núcleo de un sistema operativo que provee un número de llamadas al sistema minimas,
para implementar servicios basicos como espacios de direcciones, comunicación entre procesos y
planificación basica, etc. Contiene los componentes minimos y esenciales en un sistema operativo y el
resto se implementan como programas de sistema y de nivel de usuario. Microkernel es un modo de
estructura del sistema que surgió para evitar que el kernel siga creciendo mientras se hace mas robusto
y difícil de mantener, todos los componentes no esenciales del kernel se implementan como programas
del sistema, resultando de esta manera un kernel mas pequeño.

La funcion que cumple el microkernel es proporcionar comunicacion entre el programa que hace el
llamado al sistema y los distintos servicios que como bien dijimos antes son programas de sistema que
se ejecutan tambien en el espacio de usuario. Debido a la existencia del microkernel, los sistemas
operativos son mas faciles de mantener y ampliar, tambien son mas estables debido a que si un servicio
falla, el resto del sistema operativo no se ve afectado.

UNIDAD 4

1 . ¿Qué entiende por planificación del procesador?

La planificación del procesador es el conjunto de políticas y mecanismos incorporados al sistema


operativo que gobiernan el orden en que se ejecutan los trabajos que deben ser ejecutados. Los
mecanismos que llevan a cabo la planificación del procesador están basados en algoritmos de
planificación, en un ambiente multiprogramacion el sistema operativo debe decidir a qué proceso le da la
CPU entre los que están listos para ejecutarse, la selección de un algoritmo apropiado depende del
criterio por el cual se prefiere la ejecución de un proceso sobre otros.

Resumen de sistemas operativos Página 23 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

El planificador (Scheduler) es el modulo del sistema operativo que selecciona el siguiente trabajo a
admitir en el sistema y el siguiente proceso que tomara el control sobre el procesador según el criterio
adoptado por el diseñador del sistema operativo. Siendo la CPU uno de los principales recursos y la
planificación ser una de las actividades mas importantes de un sistema operativo, planificar el uso de
cpu es sumamente importante.

2 . Planificación a largo, medio y corto plazo.

El sistema operativo se encarga del proceso de selección de procesos que se encuentran en colas a
través de planificadores, según la selección de procesos que se tenga que hacer de los procesos que
estén en las colas, la selección se debe realizar mediante un planificador apropiado.

Hay distintos planificadores que participan en diferentes momentos:


 El planificador de largo plazo (planificador de trabajos): Elije entre la cola de procesos nuevos para
cargarlo en memoria. El planificador de largo plazo controla el grado de multiprogramacion, si el grado
de multiprogramacion es estable, entonces la tasa promedio de creación de un proceso debe ser igual a
la tasa promedio de salida de un proceso del sistema, por lo tanto, el procesador de largo plazo se
debería ejecutar cada vez que un proceso termina o queda suspendido ya que otro puede ocupar
memoria.
 El planificador de corto plazo (planificador de CPU): Elije un proceso entre los que estan en la cola de
procesos listos para darle la CPU. Normalmente el planificador de corto plazo se ejecuta cada 100
milisegundos debido al poco tiempo que hay entre las ejecuciones de cada proceso, por ese motivo el
planificador de corto plazo debe ser rapido.
 El planificador de mediano plazo: Selecciona un procecso entre los que están en memoria para llevarlo
temporalmente a memoria secundaria por necesidades de espacio en memoria (swapping), el
intercambio puede suceder por falta de memoria o espera de un suceso, etc. El planificador de mediano
plazo suspende procesos para luego volverlos a llevar a memoria principal.

3 . Objetivos de las políticas de planificación del procesador.

Los objetivos de la planificación del procesador son:


 Evitar que la CPU se mantenga ociosa
 Maximizar el uso de la CPU
 Productividad
 Minimizar los tiempos de retorno, respuesta y espera
 Equidad, que es que los procesos sean asignados a la CPU de forma de que ninguno sufra inanición.
 Recursos equilibrados, que la politica de planificación de procesos mantenga ocupados los recursos
del sistema, favoreciendo a los procesos que no abusan de los recursos asignados. .

Al añadir politicas de planificación significa que se busca que un solo proceso no acapare todo el
procesador durante un tiempo indefinido y tambien puede permitirle la ejecución de un proceso de alta
prioridad que llega a la cola de listos y despojar al que esta siendo usado por la CPU.

4 . Criterios para la elección de un algoritmo de planificación

 Utilización de CPU: Se desea mantener la CPU tan ocupada como sea posible para disminuir los
tiempos de ejecución.
 Tasa de procesamiento: Es el numero de procesos que se completan por unidad de tiempo, para
procesos de muy larga duracion, este valor puede ser de un proceso por hora, para transacciones cortas,
puede ser de 10 procesos por segundo.
 Tiempo de ejecución: El intervalo va desde el instante en el que se ordena la ejecución de un proceso
hasta que se completa en tiempo de ejecución (es decir tambien abarca el tiempo que tarda en cargarse
en memoria, estar en cola de listos, etc).
 Tiempo de espera: Es la suma del tiempo de espera de un proceso, por e jemplo en cola de listo.
 Tiempo de respuesta: En un sistema interactivo, el tiempo de ejecución puede no ser el mejor criterio,
un proceso puede generar parte de una salida con relativa rapidez y puede continuar calculando nuevos

Resumen de sistemas operativos Página 24 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

resultados mientras que los resultados previos se envian a la salida para ponerlos a disposición del
usuario.

El objetivo consiste en maximizar la utilización de la CPU y tasa de procesamiento y minimizar el tiempo


de ejecución, el tiempo de espera y el tiempo de respuesta.

5 . Medidas que se utilizan para el analisis de la planificación

Cada algoritmo de planificación de CPU le da mas prioridad de ejecución a una clase de procesos que
otros, frente a una situación particular, el diseñador del sistema operativo debe optar por un algoritmo
apropiado considerando las distintas prioridades existentes en los algoritmos.

Los criterios para comparar un planificador de otros o para crear un planificador que le de prioridad a un
determinado tipo de proceso son los siguientes:
 Utilización de CPU: Debido a que es tan importante mantener la CPU ocupada como sea posible, este
es un criterio que todos los algoritmos de planificación tienen en cuenta. La utilización de la CPU se
define en el rango comprendido entre 0% y 100%.
 Tasa de procesamiento: Esta tasa comprende el promedio del numero de procecsos que se completan
por unidad de tiempo.
 Tiempo de ejecución: Es la suma de los periodos que el proceso invierte en esperar para cargarse en
memoria, esperar en la cola de proceesos preparados, ejecutarse en la CPU y realizar operaciones de e/s
hasta completarse, es decir, es el tiempo desde que cada proceso individual espera a cargarse en
memoria hasta que se termina de ejecutar.
 Tiempo de espera: No afecta a la cantidad de tiempo que un proceso se ejecuta o hace una operación
de e/s, sino que afecta solo al periodo de tiempo que un proceso invierte en esperar en la cola de
procesos listos.
 Tiempo de respuesta: Es el tiempo que el proceso tarda en responder, no el tiempo que tarda en
terminar, sino que es el tiempo en que el proceso realiza una e/s como respuesta a su ejecución, es por
eso que generalmente el tiempo de respuesta está limitado por la velocidad del dispositivo de salida.

Como se respondió en la pregunta anterior, el objetivo es maximizar la utilización de CPU y la tasa de


procesamiento y minimizar el tiempo de ejecución, el tiempo de espera y el tiempo de respuesta. No
existe un algoritmo perfecto, ya que según lo que hemos estado viendo anteriormente cada planificador
solo le da prioridad a un tipo de procesos y es el trabajo del diseñador decidir cual planificador es
adecuado para el sistema, por ejemplo, en los sistemas interactivos (como los sistemas de tiempo
compartido) es mas importante el tiempo de respuesta que el tiempo de ejecución o tiempo de espera,
porque justamente esos sistemas estan diseñados para mantener una interaccion alta con el usuario.

6 . Defina política apropiativa, y no apropiativa.

Silberchatz dice que puede ser necesario tomar desiciones sobre la planificación de CPU en las siguientes
cuatro circunstancias:
1- Cuando un proceso cambia del estado de ejecución al estado de bloqueado e/s (por ejemplo si
realizó una solicitud de e/s o espera a que se dispare un suceso).
2- Cuando un proceso cambia de estado en ejecución a estado listo (por ejemplo cuando se produce
una interrupción).
3- Cuando un proceso cambia de estado de bloqueado e/s a estado listo (por ejemplo se completó
la operación de e/s o se disparó el suceso por el cual el proceso esperaba).
4- Cuando un proceso termina.

En las situaciones 1 y 4 siempre se debe seleccionar un nuevo proceso de la cola de listos para su
ejecución, en las situaciones 2 y 3 seleccionar un nuevo proceso es una opción. Cuando las decisiones de
planificación solo se dan en las circunstancias 1 y 4 el esquema de planificación es no apropiativo, pero
si las decisiones de planificación abarcan las situaciones 1 y 4 entonces el esquema es apropiativo.
 Politica apropiativa: Es aquella en que cuando hay un proceso que se está ejecutando puede ser
interrumpido y pasado a estado de listo por decisión del sistema operatio, esta decisión puede darse por
ejemplo si llego a la cola de procesos listos un proceso que tiene mayor prioridad o cuenta con una

Resumen de sistemas operativos Página 25 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

caracteristica que según el criterio de planificación hace que tenga mayor prioridad. Si la politica es
apropiativa, entonces el sistema operativo debe estar preparado para desplazar en cualquier momento
un proceso.
 Politica no apropiativa: Es aquella en la que una vez que se le da la CPU a un proceso, éste se ejecuta
hasta que termina o hasta que se bloquea (esperando la ocurrencia de un suceso, o solicitando una
operación de e/s).

7 . Las técnicas FCFS, RR. SJF, Ejercicios.

Existen ciertos algoritmos que tratan sobre la decisión de elegir a cual de los procesos que están en la
cola de listos se le asignara la CPU.

 FCFS (First Come, First Serve): Es la disiplina de planificación mas simple, se maneja a través de una
cola FIFO donde la carga de trabajo se procesa en orden de llegada, esto quiere decir que al primer
proceso que solicita tiempo de CPU se le concede la solicitud, cuando un proceso obtiene el estado listo,
su PCB se coloca al final de la cola y cuando la CPU queda libre, se le asigna el recurso al proceso que
está al principio de la cola. Este tipo de planificación ignora la importancia de la prioridad en los
procesos, no tiene en consideración el estado del sistema ni las necesidades de recursos de los procesos
individuales, este tipo de planificación puede dar lugar a pobres rendimientos debido a los largos
tiempos de espera.
- La politica del FCFS es no apropiativa. Cuando se le da la CPU a un proceso, éste la mantiene
hasta que decide liberarla, porque termino o porque requiere e/s.

 RR (Round Robin): Es el algoritmo por reparto circular de tiempo. El tiempo del procesador se divide en
cuotas o cuantos que son asignados a los procesos, mientras el Quantum es el tiempo definido por el
diseñador del algoritmo que determina lo que tarda cada cuota o cuanto. Ningún proceso puede
ejecutarse durante más tiempo que el establecido por ese cuanto si hay más procesos esperando en la
cola de preparados. Al igual que FCFS la cola de procesos listos es una cola FIFO, si un proceso necesita
más tiempo para completarse después de agotar su cuota de tiempo, se colocará al final de la cola de
procesos listos. Este algoritmo de planificación es similar a FCFS pero se le agrega la planificación
apropiativa en la que se conmutan los procesos cada un determinado periodo de tiempo.
- La politica de planificación de Round Robin es apropiativa ya que si el procecso excede el tiempo
asignado, hay una interrupcion para asignarle la CPU a otro proceso.
- Si un proceso no va a usar todo el cuanto (quantum) de tiempo en ejecución, entonces usa lo
necesario de CPU y se libera voluntariamente.
- Si un proceso necesita mas tiempo de ejecución que se le permite y hay otros procesos en la cola
de procesos listos, entonces cuando se le termina el cuanto ocurre una interrupcion y un proceso
que se encuentre en la cola de listo pasa a ejecutarse.
- Cuando se usa un planificador Round robin la performance depende del quantum que se
determinó, aunque el tiempo de espera puede ser largo, por lo tanto es mas adecuado para
sistemas de tiempo compartido.
- El objetivo principal en este tipo de planificación es el requisito principal es proporcionar tiempos
de espera razonablemente buenos y, en general, compartir los recursos del sistema
equitativamente.

 SJF (Shortest Job First o planificación con selección del proceso con tiempo mas corto): En este
algoritmo se elije entre los procesos de la cola de listos aquel proceso que tiene la proxima ráfaga de
CPU mas corta para asignarle la CPU. La planificación SJF se utiliza como mecanismo de planificación a
largo plazo, no puede implementarse como planificador de corto plazo porque en realidad no hay forma
de saber cuanto durará la duración de la siguiente ráfaga de CPU de un proceso, pero existe un metodo
que consiste en intentar aproximar la duracion de la siguiente ráfaga de CPU en un proceso y es a traves
de pronosticos basados en la historia de ejecución del proceso, ya que según como se ha comportado el
proceso, se sabrá cuál es la naturaleza de éste (si es un proceso que suele hacer muchas e/s, si es un
proceso que usa mucha CPU, etc). De este modo, calculando una aproximación de la duracion de la
siguiente ráfaga de varios procesos podemos tomar el proceso que tenga menor cantidad de CPU
predicha. Generalmente, la siguiente ráfaga de CPU se predice como la media exponencial de las
duraciones medidas de las anteriores ráfagas de CPU.

Resumen de sistemas operativos Página 26 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

- El algoritmo SJF es probablemente el mas optimo, en el sentido de que proporciona un tiempo de


espera minimo, pero incrementa el tiempo de espera en procesos largos.
- Si la duracion de las ráfagas de CPU de los procesos que están listos son iguales, entonces se le
asignará la CPU al proceso que se encuentre primero en la cola de listos (se usa el algoritmo FCFS
para romper el empate).
- En SJF con politica apropiativa, mientras un proceso se esté ejecutando y llega un proceso a la
cola de listos cuya proxima ráfaga de CPU es más corta que lo que queda de ejecutar del proceso
que se encuentra ejecutandose, entonces el proceso en ejecución se despoja de la CPU y el
proceso que llegó a la cola de procesos listos pasa a ejecutarse.
- En SJF sin politica apropiativa, en lugar de darle la CPU al nuevo proceso, se lo colocará primero
en la cola de procesos listos.

8 . Técnica de prioridad, y de colas múltiples. Características.

 Planificación por prioridades: En este caso especial a cada proceso se le asocia una prioridad y la CPU
es asociada al proceso que mas prioridad tiene, los valores iniciales de cada proceso son asignados por
el usuario o el sistema operativo en el momento de creación del proceso. Un problema habitual en este
tipo de planificación es que los procesos con prioridad mas baja quedan siempre esperando a los
procesos de prioridad mas alta.
- Los procesos con la misma prioridad se planifican en orden FCFS.
- Las prioridades definidas internamente utilizan un valor para calcular la prioridad de un proceso.
Para calcular las prioridades se usan limites de tiempo, requisitos del sistema, numero de
archivos abiertos y la relacion entre la ráfaga e/s y ráfaga de CPU promedio.
- Las prioridades definidas externamente son definidos externamente a los criterios del sistema
operativo. Por ejemplo la importancia del proceso.
- En la planificación por prioridades apropiativa, si mientras se está ejecutando un proceso llega un
proceso a la cola de listos con mayor prioridad que el proceso que se está ejecutando, el proceso
que se ejecuta es despojado de la CPU y en su lugar entra el proceso de menor prioridad.
- En la planificación por prioridades no apropiativa, si mientras se ejecuta un proceso llega otro
proceso a la cola de listos con mayor prioridad, éste ultimo se coloca al principio en la cola de
listos.

 Planificación por colas multiples: En este tipo de planificación se divide la cola de procesos listos en
distintas colas según el tipo de proceso, de esta manera varios procesos del mismo tipo establecen una
competencia entre si. Cada cola puede tener un planificador diferente, por ejemplo la cola de los
procesos por lotes (procesos de segundo plano) pueden ser planificados por un algoritmo FCFS y la cola
de procesos interactivos (procesos de primer plano) por un Round Robin porque ambos tipos de
procesos tienen requisitos diferentes de tiempos de respuesta y pueden tener distintas necesidades de
planificación.

Según Galvin y Silberchatz, debe definirse una planificación entre colas que suele implementarse como
una planificación apropiativa y prioridad fija. Por ejemplo, la cola de procesos en primer plano puede
tener prioridad absoluta sobre la cola de procesos de segundo plano, si tenemos una planificación por
colas multiples de 5 colas entonces el orden de las prioridades deberia ser la siguiente:
1- Procesos del sistema
2- Procesos interactivos
3- Procesos de edicion interactivos
4- Procesos por lotes
5- Procesos de estudiantes

En un esquema de planificación por colas multiples sin repartimiento de CPU, ningun proceso de la cola
de procesos por lotes deberia ejecutarse hasta que se hayan vaciado completamente la cola de procesos
del sistema, de procesos interactivos y de procesos de edicion interactivos. Si un proceso por lotes se
está ejecutando y llega un proceso de edicion interactivos a al cola de procesos de edicion interactivos
listos, entonces el proceso por lotes es despojado de la CPU.

Resumen de sistemas operativos Página 27 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

En un esquema de planificación por colas multiples con repartimiento de CPU, cada cola obtiene cierta
porcion de tiempo de CPU para que los procesos que están en colas con menos prioridad no sufran
inanición.

 Planificación por colas multiples con retroalimentación: En este tipo de planificación un proceso según
convenga puede llegar a asignarse a otra cola. Los procecsos se separan de acuerdo a la ráfaga de CPU
que usan, Si esta usando mucha CPU se lo puede bajar a una cola de menor prioridad. Se trata de
mantener los procesos interactivos y de mucha e/s en las colas de mayor prioridad.

UNIDAD 5

1 . Diferencias entre multiprogramación, multiproceso y proceso distribuido.

Los temas fundamentales del diseño de sistemas operativos están realcionados con la gestión de
procesos:
 Multiprogramación: Es la gestion de varios procesos que se encuentran en memoria principal y dentro
de un sistema multiprocesador.
 Multiproceso: Es la gestion de varios procesos dentro de un sistema multiprocesador.
 Proceso distribuido: Es la gestion de varios procesos que se ejecutan en varias computadoras remotas
pero conectadas en red.

2 . Paralelismo y concurrencia entre procesos.

Puede verse la concurrencia es la existencia simultanea de varios procesos o actividades en ejecución, es


la ejecución simultánea de varios procesos, en la actualidad, la conmutación entre procesos en sistemas
multiprogramables (que permiten tener varios procesos en memoria principal) es tan frecuente que da la
ilusion de que los procesos se ejecutaran simultáneamente, aunque esto no es del todo asi, solo hay una
verdadera concurrencia entre procesos en sistemas que soportan el paralelismo, que es la ejecución
simultanea de varios procesos en varios procesadores.

La concurrencia es un concepto muy importante en la multiprogramacion y multiprocesamiento, es


fundamental para el diseño del sistema operativo la existencia de mecanismos que logren concurrencia
entre los procesos de una forma eficaz, para tal fin dichos mecanismos deben brindar una solucion a las
siguientes cuestiones entre otras:
- Permitir que los procesos puedan comunicarse entre si.
- Sincronizar los procesos
- Proveer mecanismos para prevenir, detectar y corregir problemas de comunicación y
sincronizacion.
- Gestion y proteccion de memoria.
- Memoria virtual
- Planificación de CPU
- Gestion de medios de almacenamiento.

La concurrencia puede presentarse en tres contextos diferentes:


 Varias aplicaciones: En este caso el tiempo de procesador de una computadora es compartido
dinámicamente entre varios procesos.
 Aplicaciones estructuradas: Como consecuencia del diseño modular de una aplicación y la division de
la misma en tareas explicitas estas pueden ser ejecutadas de forma concurrente.
 Estructura del sistema operativo: Como resultado de la aplicación de la estructuracion en el diseño del
propio sistema operativo, de forma que este se implemente como un conjunto de procesos.

3 . Fundamentos de la exclusión mutua.

Resumen de sistemas operativos Página 28 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

La exclusión mutua es un mecanismo de control que se utiliza en la comunicación entre los procesos. En
el procecsamiento concurrente, muchos procesos se pueden encontrar en memoria principal esperando a
ejecutarse, pueden surgir problemas de comunicación y sincronizacion entre procesos, se plantean las
siguientes dificultades:
 La compartición de recursos globales requiere que el orden en que ejecutan la lectura y escritura sobre
una misma variable global sea cuidadosamente establecido protegiendo los valores globales compartidas
controlando el codigo que accede a la variable global.
 Se debe gestionar la asignación de recursos de manera optima, esto incluye prevenir que un proceeso
solicite un canal de e/s, cuyo control se le concede pero el proceeso es suspendido antes de utilizar
dicho canal, en este caso no es deseable que el sistema operativo bloquee el canal e impida su
utilización a otros procesos que esperan por el, esto puede conducir a una condicion de interbloqueo
(abrazo mortal), siatuacion en la cual dos o mas procesos no son capaces de actuar porque cada uno de
ellos está esperando que alguno de ellos haga algo.

Se pueden clasificar la manera en que los procesos se comunican entre si en los siguientes grupos:
Procesos que no se perciben entre si: Son procecsos independientes que no trabajan juntos sino que
son procesos independientes. El sistema operativo debe ocuparse de la competencia por los recursos de
los procesos independientes y evitar anomalias en la actualizacion y acceso al mismo recurso unico, una
posible solucion es que el sistema operativo le asigne el recurso a uno de ellos y que el otro proceso
espere a que termine de utilizarlo. Al recurso unico compartido entre dos procesos se lo conoce como
recurso critico y el codigo del proceso que utiliza dicho recurso se llama seccion critica del proceso o
programa, la seccion critica tambien puede ser considerada como la actualización de una variable
compartida. La exclusión mutua hace que solo se permita un proceso por vez en su seccion critica, asi
cuando un proceeso esté en una seccion critica que accede a recursos compartidos, ningun otro
proceeso pueda estar en una seccion critica que acceda a ninguno de esos recursos compartidos.

 Interbloqueo: Un proceso necesita acceder a dos recursos, rA y rB, rA ha sido


asignado al proceso pero rB ha sido asignado a otro proceso, que para realizar parte
La aplicación
de su funcion, necesita acceder a rA que está asociado al primer proceso. En síntesis,
de la exclusión
el interbloqueo se da cuando dos o masp roceesos son incapaces de actuar porque
mutua crea dos
cada uno está esperando que un proceso bloqueado haga algo.
problemas de
 Inanición: El proceso bloqueado puede que nunca pueda conseguir acceder al
control:
recurso si hay otros procesos que requieren accesos periodicos al recurso.

 Procesos que se perciben indirectamente entre si: Los proceesos comparten accesos a algun objeto
como un buffer de e/s, cooperan en la comparticion del recurso en comun. En este caso de
comunicación entre procesos, los procesos pueden usar y actualizar los datos compartidos sin
referenciar a otros objetos, pero saben que otros procesos tienen acceso a los datos compartidos, en
este caso son los mismos procesos los que deben cooperar para asegurar que los datos compartidos
sean manipulados correctamente, hay que asegurarse de que el acceso de los procesos a las variables
compartidas sea ordenado y que debe haber mecanismos de control (como la exclusión mutua) deben
asegurar la integridad de los datos compartidos. Debido a que los datos compartidos se encuentran en
recursos (dispositivos de e/s, memoria) tambien se hace uso de la exclusión mutua y tambien pueden
presentarse problemas de interbloqueo e inanición, la unica diferencia es que los datos compartidos
pueden ser accedidos de dos formas diferentes: Lectura y Escritura, donde solo los accesos de escritura
son mutuamente exclusivos (solo un proceso puede escribir en los datos compartidos al mismo tiempo y
mientras otros procesos no pueden leerlo), todas aquellas funciones de un proceso que modifican los
datos compartidos se deben encontrar en la seccion critica y deben ser atomicas (o que mas de una
seccion critica puedan ser accedidas concurrentemente), sin que puedan ser interrumpidas por el
sistema operativo u otros procesos los cuales tienen prohibido acceder a la seccion critica
manteniendose bloqueados. .
 Procesos que se perciben directamente entre si: Estos procesos exhiben cooperación y pueden
comunicarse entre si porque contienen referencias del PID de cada proceso con los que se comunican. La
comunicación proporciona una manera de sincronizar o coordinar actividades y consiste en mensajes de
algun tipo cuya capacidad de enviar y recibir mensajes entre ellos debe ser proporcionada por el sistema
operativo o como parte del lenguaje de programación. Debido a que el acto de pasar mensajes los
procesos no comparten nada, la exclusión mutua no es un requisito de control en este tipo de

Resumen de sistemas operativos Página 29 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

comunicación aunque los problemas de interbloqueo (dos procesos esperan una comunicación de otro
que tambien espera una comunicación de uno de ellos) e inanición están presentes.

Para una colección de procesos cooperativos que comparten datos, es necesario proporcionar
mecanismos de exclusión mutua, una solucion consiste en garantizar que una seccion critica de codigo
solo sea utilizada por un proceso o hilo por vez. Para una colección de procesos independientes tambien
se necesita de la exclusión mutua para que un solo proceso utilice un recurso por vez, cuando se
permita la entrada de un proceso en una de estas secciones críticas, dicho proceso deberá completar
todas las instrucciones que consituyen su región crítica antes de que se permita la entrada a otro
proceso a la suya. De este manera, sólo el proceso que ejecuta la sección crítica tiene permitido el
acceso a la variable compartida. Los restantes proceso tendrán prohibido el acceso a dicha variable
quedando en situación
de bloqueado si intentan acceder a su región crítica. A esta forma de acceso se la denomina acceso en
exclusión mutua. El acceso en exclusión mutua es una forma de acceso en la que un proceso excluye
temporalmente a todos los demás de utilizar un recurso compartido con el fin de asegurar la integridad
del sistema. Si el recurso compartido es una variable, la exclusión mutua asegura que, como máximo, un
proceso tendrá acceso a ella durante las actualizaciones críticas.

Para cualquier mecanismo o tecnica que vaya a proporcionar la exclusión mutua debe cumplir con los
siguientes requisitos:
1- En un tiempo determinado solo debe haber un proceso dentro de su seccion critica entre todos
los procesos que tienen secciones criticas para el mismo recurso u objeto compartido.
2- Un proceso que se pare en su seccion no critica debe hacerlo sin interferir con otros procesos.
3- Un proceso que solicita acceso a una seccion critica no puede ser bloqueado indefinidamente
(inanición o interbloqueo).
4- Si ningun proceso esta en una seccion critica, a cualquier proceso que solicite entrar en su
seccion critica se lo debe permitir sin demora.
5- No se hacen suposiciones sobre las velocidades relativas de los procesos o sobre el numero de
procesadores.
6- Un proceso permanece dentro de su seccion critica solo por un tiempo finito.

4 . Necesidad de la sincronización entre procesos.

La sincronización entre procesos puede definirse como la necesidad que tienen algunos procesos de
bloquearse en determinadas circunstancias y ser despertados cuando ocurren ciertos eventos. Un caso
típico que muestra la necesidad de sincronización entre procesos es cuando un proceso inicia una
lectura y va a utilizar en la siguiente instrucción la información leída.

Independientemente del tipo de interacción existente entre los distintos procesos activos, en un sistema
con multiprogramación estos comparten un conjunto de elementos que deben ser accedidos de forma
controlada para evitar situaciones de inconsistencia. Estos elementos compartidos ya sean dispositivos
de E/S o zonas de memoria comunes son considerados como críticos y la parte del programa que los
utiliza se conoce como región o sección crítica.

Es muy importante que sólo un programa pueda acceder a su sección crítica en un momento
determinado. Por esta razón, el sistema operativo debe ofrecer mecanismos que hagan posible una
correcta sincronización de los distintos procesos activos en los accesos a los recursos que comparten, un
buen ejemplo de sincronizacion es aplicar la exclusión mutua en los procesos cooperativos como lo
vimos anteriormente, en ese caso muchos procesos pueden leer una zona de memoria compartida, pero
cuando uno escribe el resto no puede escribir ni leer, si esta sincronizacion entre procesos no se
cumpliera, los procesos que leen tomarian datos desactualizados, erroneos o con inconsistencias.

5 . Algoritmos diseñados para asegurar la exclusión mutua.

Algunos algoritmos software se han diseñado para aseurar la exclusión mutua, pero según Galvin y
Silberchatz no es correcto decir que los siguientes algoritmos solo aseguran la exclusión mutua, sino
que tambien proveen solucion al resto de los problemas o requisitos de la seccion critica:

Resumen de sistemas operativos Página 30 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Exclusión mutua: En un instante de tiempo solo un proceso debe estar en su seccion critica y el resto
de los procesos no pueden ejecutar sus secciones criticas.
 Progreso: SI ningun proceso está ejecutando su seccion critica y algunos procesos quieren entrar en su
seccion critica, solo aquellos procesos que no estan ejecutando sus secciones restantes pueden
participar en la decisión de cuál será el proximo proceso que acceda a la seccion critica y ésta selección
no puede posponerse indefinidamente.
 Espera limitada: Existe un numero limitado de veces que varios procesos esperen a acceder a su
seccion critica y que un proceso entre en sus secciones criticas.

Para conseguir la exclusión mutua se han desarrollado algoritmos software que a pesar de que tengan
una alta sobrecarga de procesamiento y riesgo de errores logicos, solucionan problemas en la
sincronizacion entre procesos concurrentes que se ejecutan en un solo procesador o en una maquina de
multiples procesadores.

 Algoritmo de Dekker: Se reserva una ubicación de memoria global etiquetada como turno, un proceso
(En este ejemplo solo exiten dos procesos, P0 y P1) que desee ejecutar su seccion critica examina
primero el contenido de turno, si el valor de turno coincide con el numero del proceso, entonces quiere
decir que se le concede el acceso a su seccion critica, en caso contrario está forzado a realizar una
espera activa donde el proceso no logra entrar en la seccion critica y no hace nada productivo hasta que
objene los permisos para entrar en su seccion critica. En caso de que el proceso haya entrado en su
seccion critica, después de haber completado dicha seccion, debe actualizar el valor de la variable turno
para el resto de los procesos.

Algoritmo de Dekker, tentativa de diseño 1


/* Proceso 0 */ /* proceso 1 */ Esta solucion garantiza la exclusión mutua.
While (turno != 0) While (turno != 1) Pero presenta dos problemas, los dos
/*no hacer nada*/ /*no hacer nada*/ procesos estan obligados a alternarse cada
/*Seccion critica*/ /*Seccion critica*/ vez que uno ejecuta su seccion critica y el
Turno = 1; Turno = 0; proceso mas rapido tiene que seguir el ritmo
de ejecución del proceso mas lento. Otro
problema es el de si uno de los dos falla el
otro quedará completamente bloqueado ya
que turno no recibirá su numero de proceso.

Algoritmo de Dekker, tentativa de diseño 2


/* Proceso 0 */ /* proceso 1 */ El problema de la anterior tentativa es que
While (estado[1]) While (estado[0]) turno almacena el nombre del proceso al
/*no hacer nada*/ /*no hacer nada*/ que se le concede el acceso a la seccion
estado[0] = True; estado[1] = True; critica, cuando en realidad se necesita
/*Seccion critica*/ /*Seccion critica*/ información de estado sobre ambos
estado[0] = False; estado[1] = False; procesos. Se define un vector booleano cuya
cantidad de posiciones es la cantidad de
procesos que solicitan acceder a la seccion
critica, cada proceso puede examinar el
estado de otro proceso pero no alterarlo,
cuando un proceso desee entrar en su
seccion critica, periódicamente comprueba el
estado del otro hasta que tenga el valor
False, lo que indica que el otro proceso no se
encuentra en su seccion critica, entonces el
proceso que comprueba inmediantamente
establece su propio estado a Trae y procede
a acceder a su seccion critica. Si un proceso
falla fuera de la seccion critica, el otro
proceso no se queda bloqueado ya que leerá
que el otro proceso tiene estado False,
aunque si falla dentro de la seccion critica el

Resumen de sistemas operativos Página 31 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

otro proceso queda permanentemente


bloqueado. Debido a que un proceso puede
cambiar de estado después de que otro
proceso haya cambiado, el codigo no
garantiza la exclusión mutua, ambos pueden
estar en estado True sin restricciones.

Algoritmo de Dekker, tentativa de diseño 3


/* Proceso 0 */ /* proceso 1 */ Aquí se ve que como una vez que un proceso
Estado[0] = True; Estado[1] = True; Una vez que un proceso ha puesto su señal
While (estado[1]) While (estado[0]) en cierto, el otro no puede entrar a su
/*no hacer nada*/ /*no hacer nada*/ sección crítica hasta que salga de ella. Se
/*Seccion critica*/ /*Seccion critica*/ garantiza la exclusión mutua, sin embargo,
estado[0] = False; estado[1] = False; se generará interbloqueo si ambos procesos
ponen su señal a cierto antes de ambos
hayan ejecutado el While, cada uno de los
procesos considerará que ha entrado en la
seccion critica.

Algoritmo de Dekker, tentativa de diseño 4


/* Proceso 0 */ /* proceso 1 */ El interbloqueo se había originado porque
Estado[0] = True; Estado[1] = True; ada proceso establecía su señal sin conocer
While (estado[1]) While (estado[0]) el estado del otro proceso. Para solucionarlo
{ { haremos que los procesos activen y
Estado[0] = False; Estado[1] = False; desactiven su señal, cada proceso establece
/*Retraso*/ /*Retraso*/ su estado para indicar su deseo de entrar en
Estado[0] = True; Estado[1] = True; la seccion critica pero está preparado para
} } cambiar su estado si otro desea entrar. Aun
/*Seccion critica*/ /*Seccion critica*/ asi si los procesos entran al While en
estado[0] = False; estado[1] = False; verdadero, luego comprueban sus estados y
estan en verdadero, los dos se haran falso
para dejar al otro entrar en su seccion critica,
luego pasan a verdadero de nuevo y ambos
vuelven a estar verdadero, luego se ponen
falso para dejar al otro, luego verdadero y asi
sucesivamente se va formando un circulo
vicioso.

Algoritmo de Dekker, tentativa de diseño 5


Este caso se trata de una combinación
Boolean estado[2]; entre la tentativa de diseño 5 y 1. Ahora
Int turno; se vuelve a usar la variable turno pero
Void P0() para establecer cual de los procesos
{ tiene prioridad para entrar a su seccion
While (true) critica. En caso de que ambos procesos
{ esten en verdadero, se usa la variable
estado[0] = True; turno para romper el empate entre
While(estado[1]) ellos.
If (turno == 1)
{
estado[0]= False ;
While (turno == 1)
/* no hacer nada */
estado[0] = True;
}
/* Seccion critica */
turno = 1;

Resumen de sistemas operativos Página 32 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

estado[0] = false;
/* resto */
}
}
Void P1()
{
While(true)
{
estado[1] = True;
While(estado[0])
If(turno == 0)
{
estado[1] = False;
While(turno == 0)
/* no hacer nada */
estado[1] = True;
}
/* seccion critica */
turno=0;
estado[1] = False;
/* reamainder */
}
}
Void main()
{
estado[0] = False;
estado[1] = False;
turno = 1;
paralelos (P0,P1);
}

 Algoritmo de Peterson: Es una solucion mas simple que la de Dakker y se puede aplicar al caso de n
procesos en la que una vez que el estado de un proceso está en verdadero, el resto no puede entrar en
su seccion critica. Si se ejecuta la seccion critica de un proceso (P0) y el estado de otro proceso vuelve a
verdadero al igual que su turno (P1), entonces P1 es el que ejecuta su seccion critica, P0 puede volver a
ejecutar su seccion critica cuando estado[1] se vuelva falso o el turno se vuelva 0. En este algoritmo
ningun proceso abusa del acceso a la seccion critica porque un proces, antes de cada intento por entrar
a su seccion critica, le da una oportunidad al otro proceso, estableciendo un turno para este ultimo.

Algoritmo de Peterson

Boolean estado[2];
Int turno;
Void P0()
{
While(True)
{
Estado[0] = True;
Turno = 1;
While(estado[1] && turno == 1)
/*no hacer nada*/
/*seccion critica*/
estado[0] = False;
/* resto */
}
}
Void P1()
{
While(True)

Resumen de sistemas operativos Página 33 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

{
estado[1] = True;
turno = 0;
While(estado[0] && turno == 0)
/*no hacer nada*/
/* seccion critica */
estado[1] = False;
/* resto */
}
}

Void main()
{
estado[0] = False;
estado[1] = False;
paralelos (P0,P1);
}

6 . Semáforos. Técnica. Aplicación al modelo Productor Consumidor.

Un semáforo es una variable que se utiliza para solucionar problemas de concurrencia al ser un elemento
que sirve para la comunicación entre procesos (aunque su uso se limita a la comunicación de eventos a
traves de señales) y tambien sirve para la sincronizacion para establecer un orden entre la ejecución de
los procesos, en el que según el valor del semaforo compartido por un conjunto de procesos se definirá
a que proceso se le permite su ejecución. El semaforo es una variable y como tal tiene un tipo definido
por el programador (ya sea binario, entero o entero que puede inicializarse a un valor negativo) que
además de su inicialización se lo debe acceder de dos maneras diferentes que son por medio de las
operaciones atómicas e indivisibles conceptualmente llamadas Verhogen (incrementar) y Proberen
(probar) que solo deben ser ejecutadas por un proceso al mismo tiempo:
 Verhogen (Incrementar): En la implementacion se suele llamar Signal() e incrementa el valor que
contiene la variable semáforo, hace disponible a un recurso después de usarlo.
 Proberen (Probar): En la implementacion se suele llamar Wait() y disminuye el valor que contiene la
variable semáforo, sucede cuando un proceso reclama acceder a su seccion critica.

Los semáforos conforman un mecanismo que proveen una solución a los problemas de concurrencia,
mas precisamente se usan para controlar el acceso de los programas a un mismo recurso (como un
archivo, variables, etc). Tratando de solucionar de solucionar los problemas o requisitos de la sección
critica, la utilización de los semáforos es utilizada en la cooperación de procesos o en los procesos que
se perciben indirectamente y comparten un objeto, en donde dos o mas procesos pueden cooperar por
medio de señales4, tales que un proceso pueda ser obligado a parar en un lugar especifico hasta que
haya recibido una señal especifica (por ejemplo que el semáforo esté en 0).

Comprender el funcionamiento de los semáforos es fácil. Existen diversos tipos de semáforos, los mas
básicos son:
 Semáforos binarios: son variables binarias (cuyos valores que acepta son 1 ó 0). El semáforo debe valer
0 cuando un proceso accede a la sección crítica, antes de eso el proceso debe ejecutar la funcion Wait()
para decrementar el semaforo y quede en 0 (que es la señal que significa que el recurso está en uso y
otros no pueden acceder a el quedandose bloqueados), cuando un proceso finalmente libera un recurso
ejecuta la funcion Signal() que incrementa el semaforo dejandolo en 1 de nuevo, listo para que otro
proceso use el recurso.
 Semaforo contador: Es una variable entera que se inicializa con el numero disponible de instancias de
un recurso que está disponible, si las instancias son n, se inicializará el semáforo al número n. Así, cada

4
Las señales estan dadas por los diferentes valores que puede adoptar un semáforo, cada valor significa si un proceso puede o
no acceder a su seccion critica (por ejemplo 0 es que no hay recursos disponibles, 2 es dos instancias disponibles), debido a que
las señales son valores que adquiere la variable semaforo, solo puede cambiar con un Verhogen o Probaren ademas de cuando
se lo inicializa.

Resumen de sistemas operativos Página 34 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

proceso, al ir solicitando un recurso, verificará que el valor del semáforo sea mayor de 0; si es así es que
existen recursos libres, seguidamente acaparará el recurso y decrementará el valor del semáforo. Cuando
el semáforo alcance el valor 0, significará que todos los recursos están siendo utilizados, y los procesos
que quieran solicitar un recurso deberán esperar a que el semáforo sea positivo, dicho de otra manera,
que los procesos que dejan de usarlo ejecute un Signal() incrementando en 1 el semaforo.

/* Proceeso 1 */ Como dijimos anteriormente, ademas de solucionar los problemas de


InstrP11; exclusión mutua, los semáforos tambien sirven para resolver problemas de
... sincornizacion, cuando queremos que un procecso se ejecute después que otro,
InstrP1n; podemos tener un semaforo compartido por los dos procesos (al que podemos
Signal(Synch); llamar Synch) para que nos sirva de solucion en la sincronizacion. En el codigo
del Proceso 1 se ejecutan sus instrucciones, cuando se terminan de ejecutar
/* Proceeso 2 */ otra, hace Signal() al semaforo Synch que utiliza el Proceso 2 para ingresar a su
Wait(Synch); seccion entrante que es el Wait() que pone a 0 el semaforo significando que se
InstrP22;
está usando, cuando el Proceso 2 termina de ejecutar su seccion restante (el
...
resto de sus instrucciones) ya no podra volver a pasar por su seccion entrante
InstrP2n;
para ejecutar su seccion restante ya que el semaforo Synch está en 0 y necesita
del proceso 1 para su ejecución y hacer el cambio de señal que el Proceso 2
requiere para ingresar a su seccion entrante.

El principal obstáculo que se nos presenta al implementar semáforos son las esperas activas en las que
un proceso no hace otra cosa que verificar el contenido de una variable para poder actuar
desperdiciando de esta manera ciclos de CPU. Para evitar las esperas activas, cuando un proceso ejecute
la operación Wait() y determina que el valor del semaforo no es positivo, tiene que bloquearse a si mismo
en lugar de esperar. La operación de bloqueo coloca al proceso en una cola de espera FIFO asociada al
semaforo al que espera, en la cual el proceso que lleva mas tiempo bloqueado se reinicia a traves de una
instrucción WakeUp() cuando algun otro proceso ejecuta una operación Signal() que sirve para pasar un
proceso de la lista de suspendidos (que espera acceder a su seccion critica) a estado de procesos listos.
Esto requiere que cada semaforo tenga un puntero a la lista de procesos bloqueados que en cada
posición guarda el PCB de los procesos que esperan por el cambio de señal en ese semaforo.

El problema que surge entre un proceso productor y consumidor es que al tener un objeto en memoria
compartida no deben acceder al recurso compartido al mismo tiempo. Cuando un escritor está
preparado debe iniciar la lectura tan pronto como sea posible, cuando un escritor espera a escribir,
ningun proceso lector podrá iniciar la lectura. Como solucion a este problema, se pueden utilizar
semáforos para bloquear el acceso al recurso en comun como lo hemos visto antes (usando wait y signal)
para que solo un agente (productor o consumidor) pueda acceder al objeto compartido (como un buffer)
en un momento dado.

En caso de que el tamaño del buffer sea infinitom, el proceso productor puede generar datos y
almacenarlos en el buffer a su propio ritmo, el consumidor procede de una forma similar pero debe
asegurarse de que no intenta leer de una entrada vacia del vector (una zona que el consumidor no ha
escrito aun), por eso el productor deberia asegurarse que el consumidor no haya avanzado mas que el.
Para solucionar este problema necesitamos usar una variable entera que guarde el número desde que el
consumidor consumió y el productor escribió, dicho de otra manera, la cantidad de posiciones que el
proceso consumidor puede leer.
0 1 2 3 4
B[1] B[2] B[3] B[4 B[5]
Vacia Escrita Escrita Escrita Vacia

Consume Escribe

Se requiere que:
 El proceso productor sea libre de escribir en el buffer siempre cuando no hayan otros productores o
consumidores que acceden a el, para garantizar la exclusión mutua podemos usar un semaforo llamado
s tal que el proceso productor tenga que hacer Wait(s) para acceder al buffer y escribirlo y Signal(s)
luego de haberlo escrito para que otros procesos puedan acceder al buffer.
 El proceso consumidor no deberia leer espacios que el productor no ha escrito aun, los espacios
marcados en gris son espacios que el consumidor no ha leido y vaciado, para que el consumidor sepa

Resumen de sistemas operativos Página 35 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

hasta cuantas posiciones debe consumir, tanto el proceso consumidor como el productor deberian
compartir una variable que se puede llamar CantPos en la que se almacene la cantidad de posiciones que
el proceso consumidor puede leer sin acceder a espacios vacios, cuando el proceeso productor escriba
una posicion en el buffer, en su seccion critica tambien debe incrementar la variable CantPos en 1 y
cuando el proceso consumidor accede a su seccion critica para leer una posicion del buffer debe
decrementar la variable CantPos en 1 de manera de que si la variable CantPos vale 0 es porque ya no hay
espacios que el proceso consumidor pueda leer porque aun no han sido escritos por el productor,
CantPos tambien puede ser un semaforo contador que se va incrementando en 1 conforme el proceso
productor escriba una posicion en el buffer.
 El proceso consumidor no es libre de leer en cualquier momento, si el proceso productor no escribió
nada en el buffer, el proceso consumidor podrá leer datos erroneos que han quedado en memoria
principal o espacios vacios, lo cual no es algo deseable que suceda. Para garantizar esto usamos otro
semaforo llamado retardo, el proceso consumidor lo usa primero haciendo Wait(retardo) esperando
a que el proceso productor haga Signal(retardo) cambiando su señal a 1 para indicarle al proceso
consumidor que ya escribió una posicion del buffer y que puede comenzar a leer.

En caso de que el buffer sea de espacio limitado, para evitar el interbloqueo se agrega lo siguiente:

Proceso Debe bloquearse cuando Debe desbloquearse cuando


Productor Al intentar escribir cuando el buffer está El proceso consumidor leyó y vació el buffer.
lleno.
Consumidor Al leer cuando el buffer está vacío. EL proceso productor escribió en el buffer.

Es necesario que las funciones Wait() y Signal() sean atomicas, una manera de que sean atomicas (para
que sus instrucciones siempre se ejecuten consecutivamente) e indivisibles (para que solo un proceso al
mismo tiempo pueda manipular un semaforo) es implementarlas en hardware o firmware, una alternativa
es por software y consiste en utilizar los algoritmos de Dekker o Peterson, otra alternativa es por
hardware al utilizar sus esquemas para la exclusión mutua o inhibir interrupciones si el sistema es de
plataforma monoprocesador, multiprogramable.

7 . ¿Qué se entiende por Semáforo Robusto?

Si se quiere solucionar las esperas activas en los semáforos se los debe implemntar de manera diferente,
un semaforo pasa a ser una simple variable a una estructura que tambien almacena un enlace a una cola
de procesos que esperan a que el semaforo obtenga un valor positivo.
 Semaforo robusto: Es una politica en la que la cola de procesos que esperan que el semaforo obtenga
un numero positivo es una cola FIFO en la que el proceso que lleva mas tiempo bloqueado esperando por
una señal del semaforo sea el primero en cambiar a estado de proceso listo para que pueda acceder a su
seccion critica.
 Semaforo debil: A diferencia del semaforo robusto no especifica el orden en que son extraidos los
procesos de la cola de procesos que esperan al semaforo.

En este ejemplo los procesos A,


D, E y C están bloqueados
esperando a que el semaforo
tenga un numero positivo,
notese como la ejecución de
dichos procesos depende del
proceso B que está accediendo a
su seccion critica. Cuando B
termina de ejecutar su seccion
critica, hace un Signal(s) para
dejar el semaforo en 1 asi otros
procesos pueden acceder a su
seccion critica. Siguiendo el
concepto de semaforo robusto,
el proceso bloqueado cuyo PCB

Resumen de sistemas operativos Página 36 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

se encuentre al principio de la cola de procesos bloqueados que esperan acceder a su seccion critica es
el que primero debe pasar a la cola de procesos listos cuando el semaforo tenga un valor positivo y
ademas, el proceso que termina de ejecutar su seccion critica y tiene que ejecutarla nuevamente, si hay
otros procesos esperando por el recurso, ese proceso se bloquea a si mismo y se coloca su PCB al final
de la cola de procesos bloqueados. En el paso 3 el proceso C ejecuta su seccion critica y pone Wait(s)
en el semaforo con el objetivo de dejar el semaforo en 0 y que otros procesos no puedan utilizar el
recurso o dicho de otra manera no puedan acceder a su seccion critica.

8 . ¿Qué se entiende por semaforo debil?

A diferencia del semaforo robusto no especifica el orden en que son extraidos los procesos de la cola de
procesos que esperan al semaforo.

9 . Técnicas de hardware. Inhibición de interrupciones.

Para conseguir la exclusión mutua se han desarrollado algoritmos software, que a pesar de que tengan
una alta sobrecarga de procesamiento y riesgo de errores logicos, solucionan problemas en la
sincronizacion entre procesos concurrentes.
 Inhibición de interrupciones: Para garantizar la seccion mutua se impide que un proceso sea
interrumpido cuando se encuentra ejecutando su seccion critica, para esto, el sistema operativo debe
contar con mecanismos para deshabilitar y habilitar interrupciones. Un proceso puede cumplir la
exclusión mutua deshabilitando las interrupciones tantes de que un proceso acceda a su seccion critica,
la seccion critica no puede ser interrumpida y se garantiza la exclusión mutua, aunque esta solucion no
funciona sobre una arquitectura multiprocesador.

While(True)
{
/* Codigo que solicita deshabilitar las interrupciones */
/* Codigo de seccion critica */
/* Codigo que solicita rehabilitar las interrupciones */
/* Seccion restante */
}

 Instrucciones de maquina especiales: En una arquitectura multiprocesador, el acceso, lectura o


escritura a una posición de memoria debe excluir cualquier otro acceso a la misma posición.
- Instrucción Test and Set: Provee una variable compartida llamada cerrojo que se inicializa en 0, el
unico proceso que puede acceder a su seccion critica es aquel que contiene la variable cerrojo
igual a 0, el resto de los proceso que intentan entrar en u seccion critica caen en un modo de
espera activa, es decir, que no puede hacer otra cosa que ejecutar una instrucción que
ecomprueba el valor de una variable (en este caso el cerrojo) hasta obtener su permiso para
entrar en su seccion critica. Cuando un procecso abandona su seccion critica reestablece el
cerrojo a 0, esto hace que solo a uno de los procesos en espera se lo coloca en la seccion critica,
la eleccion de dicho proceso depende de cual de los procesos es el siguiente que ejecuta la
instrucción TestSet.

Const Int n = /* Numero de procesos */; Boolean TestSet(Int i)


Int Cerrojo; {
Void P(Int i) If(i==0)
{ {
While(True) i=1;
{ Return True;
While(!Testset(cerrojo)) }
/* No hacer nada */ Else
/* Seccion critica */ {
Cerrojo = 0; Return False;
} }

Resumen de sistemas operativos Página 37 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

} }

Void Main()
{
Cerrojo = 0;
Paralelos(P(1); P(2); P(3) … P(n));
}

- Instrucción Exchange: La instrucción Exchange se usa en el ejemplo de los cerrojos visto


anteriormente. Intercambia los contenidos de un registro con los de una posición de memoria,
generalmente no hay que escribir el codigo de la funcion Exchange() para que funcione ya que
muchas arquitecturas presentan una instrucción XCHG que hace ese trabajo. Si el cerrojo es igual
a 0, ningun proceso está en la seccion critica, si el cerrojo es igual a 1 entonces exactamente hay
un proceso que está en su seccion critica, ese proceso es aquel cuya variable local Llavei=0.

Const Int n = /* Numero de procesos */ Void Exchange(Int registro, int


Int Cerrojo; memoria)
Void P(Int i) {
{ Int temp;
Int llavei = 1; Temp = memoria;
While(True) Memoria = registro;
{ Registro = temp;
Do exchange(llavei, cerrojo) }
While (llavei !=0)
/* Seccion critica */
Exchange(llavei,cerrojo);
/* Seccion restante */
}
}

Void Main()
{
cerrojo = 0;
Paralelos (P1(1), P2(2) … P(n));
}

1 0 . Tuberías (pipes). Paso de mensajes.

Un pipe o tubería es un buffer circular, el uso de pipes es el metodo mas basico de comunicación entre
procesos ya que permite a dos procesos comunicarse56 entre si, enviarse datos y sincronizarse siguiendo
el modelo de proceso productor-consumidor y la politica de acceso FIFO, en donde lo primero que fue
agregado por el proceso productor es lo primero que el consumidor lee, dicho de otra manera, el

5
La comunicación se realiza por medio de un buffer porque es mas eficiente ya que el productor podrá generar mas datos de lo
que el proceso consumidor puede leer inmediatamente, de este modo, el proceso que trabaja más rapido no tiene que depender
del ritmo que trabaja mas lento sino que toda la comunicación lo guarda en un compartimiento para que los procesos
consumidores puedan leerlos cuando tengan la necesidad de hacerlo.
6
Con los semáforos tambien podiamos comunicar procesos a traves de señales, pero dichas señales solo indicaban que se ha
disparado un evento o que un proceso puede acceder a su seccion critica, los motivos de la comunicación entre procesos usando
pipes son muy diferentes, por ejemplo los pipes se usan generalmente para enviarle la salida de un proceso (productor) a otro
proceso, hacer direccionamientos (pasar la salida de un proceso a un archivo) por ejemplo al escribir el comando ls -l >
archivos.txt en Linux, la salida del procedimiento Ls es el resultado de listar los archivos de un directorio que se pasan
mediante un pipe a un archivo de texto que es archivos.txt.

Resumen de sistemas operativos Página 38 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

proceso productor escribe datos en un extremo del pipe y los procesos consumidores pueden leer estos
datos en el otro extremo.

Un Pipe provee un canal unidireccional para el flujo de datos entre dos procesos y solo puede ser usado
entre procesos con un antecesor común que es el que crea el pipe, entonces, en la mayoria de estos
casos es el padre el proceso productor y un proceso hijo un proceso consumidor.

Gracias a los Pipes podemos redireccionar la entrada estándar, la salida estándar y/o la salida de error de
un programa a un archivo, de modo que podamos obtener dicha salida para posteriormente procesarla
como queramos.

El sistema operativo es el que define el tamaño fijo que tienen los pipes y según Stallings, el sistema
operativo es el que garantiza la exlcusion mutua para que solo un proceso pueda acceder a la tubería en
un unico momento:
 Si el proceso productor intenta escribir y no hay espacio suficiente para lo que quiere ingresar en el
pipe, el proceso se bloquea a si mismo esperando que los procesos lectores lean y posteriormente vacien
el pipe.
 Si el proceso consumidor quiere leer mas bytes que los que escribio el proceso productor, se bloquea a
si mismo, esperando a que el proceso productor escriba nuevos datos.

#Include <unistd.h> La seccion critica mas comun que tienen procesos que se comunican
IInt Pipe(Int Des[2]); entre si son aquellas que escriben o leen un Pipe. En Linux, una tubería
puede ser creada con la llamada al sistema Pipe que realiza el proceso
padre asi sus procesos hijos pueden usarlo tambien. La variable Des[2]
contiene los 2 descriptores para acceder al pipe, uno para acceder para escribir: Des[1] y otro para
acceder para leer: Des[0], de esta manera el proceso consumidor siempre tendrá que leer lo que el
proceso productor escribió accediendo por medio de el contenido del descriptor de lectura que es
Des[0].

Un Pipe es creado por el proceso padre al realizar una llamada al sistema para crearlo, cuando un
proceso padre crea a un proceso hijo que también pueda usar el Pipe sucede lo siguiente:
 El proceso padre realiza una llamada al sistema y crea un Pipe.
 El proceso padre crea a su hijo realizando una llamada al sistema Fork() por lo tanto el proceso hijo
será una replica del código en memoria del padre (incluido los descriptores para acceder al Pipe), aunque
por ahora lo único diferente que hay entre ellos es el valor de la variable que retorna Fork().
 Aquí se establece la direccion del flujo de datos de ambos procesos en el pipe.
o Si el proceso padre es el que escribe en el pipe, entonces cierra su descriptor de lectura y
si el proceso hijo solo lee del pipe, este ultimo cierra su descriptor de escritura.
o Si el proceso hijo es el que escribe en el pipe, entonces cierra su descriptor de lectura y si
su proceso padre solo lee del pipe, este ultimo cierra su descriptor de ecritura.
o Si ambos procesos pueden leer o escribir entonces no queda ningún descriptor cerrado,
como aparece en el grafico, todos los descriptores apuntan al Pipe.

Resumen de sistemas operativos Página 39 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Para cerrar los descriptores cuando se terminan de usar solo se tiene que realizar la llamada al sistema
Close y pasarle el descriptor que se desea cerrar, por ejemplo, si se desea cerrar el descriptor de lectura
entonces se escribiría Close(Des[1]). Notese como para trabajar con el pipe utilizamos las mismas
llamadas que para los archivos: Open(), Close(), Read() y Write().

La gran desventaja de utilizar pipes para la comunicación de procesos es que éstos deben tener un
proceso padre en común. Lo anterior se debe a que un pipe es pasado de un proceso a otro mediante la
utilización de la instrucción fork, la cual hace que el proceso hijo herede todos los archivos, del padre,
abiertos antes del llamado a la función.

Para solucionar la desventaja de que los Pipes solo sean utilizados por procesos que tengan relacion de
parentesco o que tengan un ancestro comun, se le puede dar nombres a los pipes para que cada los
procesos que no mantienen relaciones de parentesco puedan efectuar lecturas o escrituras en el Pipe
para comunicarse. A estos pipes a los que se les asigna un nombre se les conoce como Named Pipes o
FIFOS que son similares a los Pipes sin nombre pero éstos si son archivos, pero un poco especiales ya
que su politica de manipulación es FIFO, se encuentran en el sistema de archivos y para acceder a un
Pipe con nombre hay que hacerlo por medio de una ruta a la entrada del directorio que lo contiene.

Para crear un Fifo con nombre se suele utilizar una llamada al sistema, en Unix esto se realiza por medio
de la llamada al sistema Mkfifo de la siguiente forma: Int Mkfifo(Const Char *Path, mode_t Mode)
 Int Indica que la llamada devuelve un entero, devuelve 0 si la llamada fue concretada o -1 si hubo
error.
 Path contiene el nombre del Pipe con nombre y la ruta a la entrada del directorio donde se encontrará.
 Mode especifica el tipo de archivo (en este caso un Pipe), atributos y permisos de acceso al archivo.

Una vez creado el Pipe es necesario abrirlo usando la llamada al sistema Open() de la misma forma en
la que se abre un archivo ordinario, asi para que los procesos puedan comunicarse, uno de ellos debe
abrir el Pipe para escribir en el y otro para leer, aunque el Open() para abrir Pipes con nombres
comprende un comportamiento diferente al de los archivos:
 Si el proceso productor es el primero que abre el Pipe con nombre para escribir en el, se bloquea hasta
que haya un proceso que abra el pipe para leer lo que el productor escriba en el Pipe con nombre.
 Si el proceso consumidor es el primero que abre el Pipe con nombre para leer en el, se bloquea hasta
que algun proceso lo abra para escribir.
Esto tiene sentido ya que solo se escribe en el Pipe con nombre cuando haya otro proceso que consuma
lo que se escribe y que solo se lea del Pipe con nombre cuando haya otro proceso que escriba en el.

Si hay varios lectores y consumidores es necesario implementar mecanismos de sincronización para


garantizar la exclusión mutua.

Comunicación bidireccional usando Pipes

/u
sr
e1

/l
il

oc
/f

al
mp

/t
m
/t

p/
al

fi
oc

le
/l

2
sr
/u

En caso de que la comunicación sea entre procesos


que no tienen parentesco, se usan los pipes sin

Resumen de sistemas operativos Página 40 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

El flujo de datos en los pipes es unidireccional, nombre, incluso pudeden proveer comunicación a
si la comunicación de los procesos tiene que ser procesos distribuidos. Al igual que los Pipes sin
bidireccional, entonces se pueden usar dos nombre son unidireccionales, en caso de que existan
Pipes, uno que vaya de un proceso hijo a un muchos procesos clientes que realizan solicitudes a un
proceso padre y otro que vaya del proceso padre proceso servidor localizado en otra computadora, el
a un proceso hijo. flujo de datos hacia el servidor que consisten en las
peticiones debe hacerse por medio de un Pipe sin
nombre y el flujo de datos que va del servidor al
cliente enviandole una respuesta a su petición debe
hacerse por medio de otro Pipe sin nombre.

Paso de mensajes

Las tecnicas mas comunes para garantizar la exclusión mutua son:


 Semáforos: Utilizan señales entre procesos comunicando si puede o no acceder a su seccion critica.
 Paso de mensajes: Son utiles para hacer cumplir la exclusión mutua y proporcionar un mecanismo
eficiente para que los procesos puedan interactuar entre si.

Para que los procesos puedan interactuar entre ellos deben satisfacerse dos requisitos fundamentales
 Sincronizacion: Para conseguir la exclusión mutua y definir ordenes de ejecución.
 Comunicación: Para el intercambio de información.

El paso de mensajes provee ambos requisitos y pueden ser utilizados en sistemas multiprocesador,
monoprocesador y sistemas distribuidos. La funcionalidad para que los procesos puedan comunicarse
mediante mensajes está dada por los siguientes mecanismos:
 Un proceso puede envíar información en forma de mensaje a otro proceso designado como Destino
por medio de la llamada Send(Destino, Mensaje).
 Un proceso puede recibir información en forma de mensaje proveniente de otro proceso, la fuente del
mensaje es designado como Origen por medio de la llamada al sistema Receibe(Origen, Mensaje).

Se sincronizan los mensajes para garantizar la exclusión mutua, tal que el proceso receptor no pueda
recibir un mensaje mientras que otro proceso no le haya enviado uno.

Implementación de la sincronización de procesos que se envían mensajes


Cuando un proceso envía un mensaje Cuando un proceso quiere recibir un mensaje con Receive() hay
con Send() hay dos posibilidades: dos posibilidades:
 Envío bloqueante: El proceso que  El mensaje que se espera recibir ya ha sido enviado, entonces el
envía el mensaje se bloquea hasta mensaje es recibido y la ejecución del proceso continúa.
que el mensaje es recibido.  El mensaje que se espera recibir no ha sido enviado aun, por lo
 Envío no bloqueante: El proceso tanto hay dos posibilidades:
que quiere enviar un mensaje no se o Recepcion bloqueante: El proceso receptor se bloquea
bloquea y puede seguir hasta que el mensaje por el que se espera es enviado.
ejecutándose. o Recepcion no bloqueante: El proceeso receptor abandona
su intento de recepción y continúa ejecutándose (ya sea
realizando otra tarea o reanudando su intento de recepción).

 Envío bloqueante, recepcion bloqueante: Ambos emisor y receptor se bloquean


hasta que el mensaje se entrega.
La sincronización se
 Envió no bloqueante, recepcion bloqueante: Aunque el emisor pueda continuar, el
puede implementar
receptor se bloqueará hasta que el mensaje llegue.
de 3 maneras
 Envió no bloqueante, recepcion no bloqueante: Ninguna de las partes se bloquea
o tiene que esperar.

La implementación de la sincronización más normal es:


 El envió no bloqueante o Send() no bloqueante: Un proceso puede utilizar Send()para enviar un
mensaje de solicitud para realizar una operación de salida, debido a que el envío no es bloqueante, se

Resumen de sistemas operativos Página 41 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

realiza la petición y luego el proceso puede continuar ejecutándose sin que tenga que esperar que el
proceso receptor lo reciba, en la implementacion el proceso receptor recibió el mensaje porque los
envíos no bloqueantes emplean mensajes de respuesta para que el proceeso emisor pueda reconocer la
recepción de los mensajes.
 La recepcion bloqueante o Receive() bloqueante: Generalmente un proceso que quiere recibir un
mensaje necesita esperar el mensaje antes de continuar, en caso de un sistema distribuido el mensaje
puede perderse.
o Problema de la recepcion bloqueante: Ante el caso de que falle el proceso que debe enviar el
mensaje que espera el proceso receptor y que este ultimo quede bloqueado indefinidamente, se
utiliza la recepcion no bloqueante.
o Problema de la recepcion no bloqueante: Si un mensaje se envía luego de que el receptor haya
realizado el correspondiente Receive() para recibir, el mensaje se pierde.

La solución del problema de la recepción bloqueante y no bloqueante es hacer que el proceso receptor
pueda comprobar si hay un mensaje en espera antes de realizar el Receive() y permitir al proceso
especificar mas acerca del origen.

Hay dos formas por las cuales un proceso puede definir a que proceso le envía el mensaje (Destino) o
cual es el proceso que envía el mensaje (Origen).
 Direccionamiento directo: Se envía el mensaje directamente de un emisor a un receptor ya que la
llamada Send() incluye un identificador directo del proceso Destino. Receive() puede ser manipulada
de dos maneras:
o La primera opcion es que el proceso receptor designe explícitamente a el proceso emisor del
mensaje (Origen) conociendo anticipadamente que proceso le debe enviar un mensaje, aunque en
algunos casos es imposible saber con anticipación el proceso de origen.
o La segunda opcion consiste en el direccionamiento implicito en el que el parámetro de origen de
Receive() toma un valor devuelto (PID del origen) por la operación de recepcion cuando se
completa.
 Direccionamiento indirecto: Los mensajes son enviados a una estructura de datos compartida que
consiste en colas que almacenan mensajes hasta que finalmente son recibidos, dichas colas se las
conoce como buzones (mailboxes). De esta manera para que los procesos se comuniquen un proceeso le
envia un mensaje al buzon apropiado y el proceso receptor toma el mensaje del buzon.

El direccionamiento indirecto permite mayor flexibilidad en el paso de mensajes y una mayor cantidad de
realciones entre emisores y receptores:

Relación entre emisores y receptores


 Un emisor a Un receptor: Permite  Muchos emisores a Un receptor: Un proceso proporciona
establecer un enlace entre los dos procesos servicios o le puede enviar mensajes a varios procesos, en
para que puedan enviarse mensajes entre este caso el buzon es un puerto.
ellos.

 Un emisor a Muchos receptores: Un emisor  Muchos emisores a Muchos receptores: Permite a muchos
puede enviar mensajes a múltiples procesos servidores proporcionar servicios
receptores ante la necesidad de un proceso concurrentemente a muchos clientes.
de poder difundir un mensaje a muchos
procesos.

La asociación de procesos a buzones puede ser estática o dinámica. En las relaciones de Muchos a Uno,
el puerto se crea y se asigna a un proceso permanentemente, lo mismo sucede con los buzones cuando

Resumen de sistemas operativos Página 42 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

la relacion entre procesos que se comunican es de Uno a Uno. Pero cuando hay varios emisores, la
asociación de un emisor a un buzon puede ocurrir dinámicamente.

Un puerto tipicamente es creado por el proceso receptor y tambien es de su propiedad, tal que cuando el
proceso se destruye, tambien se elimina el puerto. Un buzón tambien puede ser propiedad del proceso
que lo crea y se destruye junto al proceso, pero una alternativa en esto es que el sistema operativo
ofrezca un servicio para crear buzones y al ser de su propiedad, el sistema operativo tambien cuenta con
operaciones para destruir un buzón.

Hay dos tipos de formato de mensajes:


 Longitud fija: En algunos sistemas operativos se define una longitud fija para
los mensajes con el objetivo de que estos sean cortos y se minimice la
sobrecarga de procesamiento y almaceenamiento. Si hay mensajes que
necesitan transferir una gran cantidad de datos, para evitar dicha sobrecarga ,
los datos del mensaje se almacenan en un archivo y de esta manera el mensaje
solo tiene que indicar la ruta en donde se encuentra el archivo.
 Longitud variable: EL mensaje se divide en una cabecera que contiene
información acerca del mensaje (por ejemplo el tipo de mensaje, el destino, el
origen, longitud del mensaje, un puntero que sirve para armar una cola de
mensajes, numero de secuencia para definir el numero de mensajes y el orden
de los mensajes intercambiados entre el origen y el destino, un campo de
prioridad, etc) y un cuerpo que contiene el contenido del mensaje. Si se necesita
que haya una cola de mensajes, quizas la politica FIFO no sea la mas adecuada
para la manipulación de la cola ya que pueden interesar otros criterios para definir cuales mensajes se
leen primero, puede ser un numero de orden de mensaje, puede ser prioridad, puede ser el tipo de
mensaje.

Si se usa el paso de mensajes para la sincronizacion, un procecso que quiera acceder a su seccion critica
primero intenta recibir un mensaje. La implementacion mas comun del paso de mensajes para la
sincronizacion es la recepcion bloqueante y el envio no bloqueante, si hay muchos procesos que puede
unsar un buzon tanto para leer como para escribir, el buzon compartido se inicializa con un unico
mensaje de contenido nulo, en caso de que el proceso quiera acceder a su seccion critica, intenta recibir
un mensaje, pero si el buzon está vacio, el proceso se bloquea, cuando el proceso pueda conseguir el
mensaje, realiza su seccion critica y luego devuelve un mensaje al buzon avisando que terminó de
ejecutar su seccion critica. .

Para garantizar la seccion critica en la sincronizacion de procecsos por envio de mensajes en c aso de
que mas de un proceso realice la operación Receive() concurrentemente para recibir, entonces:
 Si hay un mensaje, se lo entregará solo a uno de los procesos y los otros se bloquearán.
 Si la cola de mensajes está vacia, todos los procesos que esperan un mensaje se bloquearán, cuando
haya un mensaje dispone solo uno de los procesos se activará y tomará el mensaje.

11. Interbloqueo. Condiciones para el interbloqueo.

El interbloqueo es uno de los problemas de procesamiento concurrente junto a la inanición. El


interbloqueo es el bloqueo permanente de uno o un conjunto procesos que estan esperando un evento
(por ejemplo la liberación de un recurso) que solo puede realizar otro proceso bloqueado del conjunto, el
interbloqueo es permanente porque no puede producirse ninguno de los dos eventos.

Generalmente en los interbloqueos los eventos por lo que esperan los procesos bloqueados son la
liberación de un recurso o una señal que eso indique. Por como son utilizados por los procesos, los
recursos pueden diferenciarse en dos grupos:
 Recursos prentivos: Son recursos que se pueden desalojar, los procesos que usan dichos recursos
pueden abandonarlos si el sistema operativo los obliga.
 Recursos no prentivos: No se puede obligar al proceso que usa el recurso a que lo libere, hay que
esperar que el proceso libere el recurso.

Resumen de sistemas operativos Página 43 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Existen dos categorías de recurso:


 Recurso reutilizable: Es un recurso que solo puede ser usado en forma segura por solo un proceso al
mismo tiempo y no se destruye después de su uso, sino que el proceso que lo usa lo libera cuando lo
termina de usar, por ejemplo unidades de tiempo de CPU, memoria principal, secundaria, dispositivos,
archivos, bases de datos, semáforos, etc. Los procesos reutilizables pueden estar involucrados en un
interbloqueo cuando un proceso A utiliza un recurso A y un proceso B utiliza un recurso B, si el proceso
B solicita el recurso reutilizable A, se bloquea y si el proceso A solicita el recurso B tambien se bloqueará,
ninguno de los dos liberará el recurso que el otro proceso necesita, los dos se bloquean
permanentemente y ocurre el interbloqueo.
 Recurso consumible: Es un recurso que puede crearse y destruirse, no hay limites en la cantidad de
recursos consumibles de un determinado tipo. Recursos consumibles son interrupciones, señales,
mensajes, información en buffers de e/s, etc. Los recursos consumibles pueden estar involucrados en un
interbloqueo cuando por ejemplo si la recepcion de mensajes es bloqueante y un proceso A espera
recibir un mensaje de otro proceso B que espera recibir un mensaje del proceso A, ambos se mantienen
bloqueados permanentemente.
o Un proceso productor puede producir ilimitados recursos consumibles.
o Cuando un proceso consumidor adquiere el recurso, el recurso deja de existir.

 Exclusión mutua: Solo un proceeso puede usar un recurso por vez, si otro solicita el
recurso tendrá que esperar a que el recurso sea liberado.
Condiciones
 Mantener y esperar: Un proceso debe estar usando al menos un recurso y esta
necesarias
esperando para adquirir otros recursos adicionales que esten usando otros procesos.
para el
interbloqueo  Sin desalojo (no prentivo): Los recursos no pueden ser liberados, un recurso solo debe
ser liberado voluntariamente por el proceso que lo usa.
 Espera Circular: Cada proceso bloqueado solicita recursos que son ocupados por otros
procesos.

Las tres primeras condiciones son realmente deseables, se necesita la exclusión mutua para asegurar la
coherencia de datos y el correcto funcionamiento del sistema, se necesita la retencion y espera para que
un proceso tenga asignado recursos y cuando necesite otro tenga que esperar a que el proceso que esta
asignado a ese otro recurso lo libere porque lo dejó de utilizar, tambien es necesario que los procesos
no sean desalojados de un recurso por los mismos motivos que en la exclusión mutua y para garantizar
el correcto funcionamiento de los recursos y el sistema y para evitar recuperaciones mediante retroceso
donde se restaura el proceso y sus recursos a un estado previo.

Las tres primeras condiciones son necesarias para el interbloqueo, pero no son suficientes, por eso hay
una cuarta razon que es una consecuencia de las tres primeras, no es una consecuencia directa, sino que
si se cumplen las 3 primeras condiciones, se puede producir una secuencia de eventos (o secuencia de
solicitudes a recursos) que conduzca a una espera circular. Las cuatro condiciones de forma conjunta
constituyen condiciones suficientes para el interbloqueo.

Posibilidad Exclusión mutua Existencia de Exclusión mutua


de Sin desalojo interbloqueo Sin desalojo
interbloqueo Retención y espera Retención y espera
Espera circular

12. Problema de la cena de filósofos. Solución.

Resumen de sistemas operativos Página 44 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

13. Acciones para prevenir, detectar y/o corregir el interbloqueo.

Estrategia Política de reserva de Esquemas Principales ventajas Principales desventajas


recursos alternativos
Prevención Conservadora; Solicitud  Adecuada para  Ineficiente.
Infrautiliza recursos simultanea de procesos que realizan  Retrasa la iniciación
todos los una sola ráfaga de del proceso.
recursos actividad.  Los proceso deben
 No es necesaria la conocer sus futuros
expropiación. requisitos de recursos.

Expropiación  Conveniente cuando  Expropia con mas


se aplica a recursos frecuencia de lo
cuyo estado se puede necesario.
guardar y restaurar
fácilmente.
Ordenamiento  Es posible asegurarlo  Impide solicitudes
de recursos mediante graduales de recursos.
comprobaciones en
tiempo de
compilación.
 No necesita cálculos
en tiempo de
ejecución ya que el
problema se resuelve
en el diseño del
sistema.
Predicción A medio camino Asegura que  No es necesaria la  El sistema operativo
entre la detección y existe al expropiación. debe conocer los
la prevención. menos un futuros requisitos de
camino seguro. recursos de los
procesos.
 Los procesos se
pueden bloquear
durante largos
periodos.
Detección Muy liberal; los Se invoca  Nunca retrasa la  Perdidas inherentes
recursos solicitados periódicamente iniciación del proceso. por expropiación.
se conceden en caso para  Facilita la gestión en
de que sea posible. comprobar si línea.
hay
interbloqueo.

Prevención de interbloqueos

Se realiza la prevención de interbloqueos asegurándose de que no se cumpla unas de las 4 condiciones


que originan un interbloqueo, la prevención de interbloqueos se clasifican en dos tipos:
 Método indirecto: Consiste en impedir la aparicion de una de las tres primeras condiciones para el
interbloqueo (exclusión mutua, mantener y esperar, sin desalojo).
 Método directo: Consiste en impedir la aparición de la ultima condición para el interbloqueo (espera
circular.

Estamos previniendo los interbloqueos asegurándonos de que una de las siguientes condiciones no se
cumplan:
 Exclusión mutua: No se puede prevenir interbloqueos negando la exclusión mutua ya que es necesaria
para que los procesos puedan utilizar procesos compartidos. Algunos recursos como los archivos,

Resumen de sistemas operativos Página 45 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

pueden permitir nuevos accesos de lectura sin respetar la exclusión mutua, pero se necesita el acceso
exclusivo para escritura pudiendo ocurrir un interbloqueo si más de un proceso solicita escribir.
 Retención y espera: Hay que evitar que cuando un recurso solicite recursos adicionales no retenga sus
recursos ya asignados, podemos proporcionar dos soluciones:
o Todo proceso solicita todos sus recursos antes de comenzar su ejecución, esto tiene la desventaja
de que todos los recursos que necesita el proceso pueden asignarse pero no utilizarse durante un
largo periodo de tiempo y si los recursos que solicita son muy utilizados, entonces tendrá que
esperar indefinidamente.
o Las llamadas al sistema que solicitan los recursos para un proceso preceden a todas las demas
llamadas al sistema, esto tiene la desventaja de que acapara todos los recursos desde el comienzo
de la ejecución.
 Sin desalojo: Existen dos soluciones:
o Si un proceso mantiene varios recursos y se le deniega una petición posterior, el proceso debe
abandonar todos sus recursos y si es necesario los tendrá que solicitar de nuevo.
o Si un proceso solicita un recurso que otro proceso tiene, el sistema operativo puede obligarle al
segundo proceso que libere todos sus recursos si este segundo proceso tiene menor prioridad.
Este esquema solo impediría el interbloqueo si hay dos procesos que tienen la misma prioridad y
esperan a que el otro proceso libere un recurso para poder seguir.
 Espera circular: Se asocia a cada tipo de recurso un índice, cuando un proceso se le asigna un recurso y
quiere solicitar otro recurso, no se le concede la petición si el
índice del recurso que pide es menor al tipo de recurso que ya
esta asignado al proceso. En este ejemplo el proceso B no puede
solicitar el recurso Ri porque el proceso B tiene asignado un
recurso con un subindice mayor. De esta manera se permite que
uno de los dos procesos que ya tenga asignado recursos
siempre tenga que abandonar su solicitud de otro
recursocuando el indice que posee el recurso asignado a el
tenga un subindice mayor, esto siempre va a ser asi ya que los tipos de recursos no pueden tener iguales
subindice, por lo tanto siempre va a haber un recurso con un mayor subindice y otro con un menor
subindice. La prevension de espera circular puede ser ineficiente al denegar ocasionalmente el acceso a
un recurso de forma innecesaria.

La prevención de interbloqueo conlleva un uso ineficiente de los recursos y una ejecución ineficiente de
los procesos.

Prediccion (o evasión) del interbloqueo

La predicción del interbloqueo permite las tres primeras condiciones necesarias para el interbloqueo,
pero se encarga de tomar decisiones para asegurarse de que el sistema se encuentre en un estado
seguro donde nunca ocurra un interbloqueo, dichas decisiones se toman cuando la petición actual de un
recurso pueda causar un interbloqueo. Para la predicción de los interbloqueos, el sistema operativo debe
conocer las futuras solicitudes de recursos de cada proceso y al conocer la secuencia completa de
solicitudes y liberaciones de cada proceso, el sistema operativo puede decidir para cada proceso, si el
proceso debe bloquearse con el fin de evitar un interbloqueo. Para eso, aquellas cosas que el sistema
operativo debe saber acerca de las asignaciones de recursos son:
 La cantidad total de instancias por cada recurso en el sistema, se puede implementar con un vector.
 La cantidad total de instancias de cada recurso disponibles, tambien se puede implementar con un
vector.
 Las necesidades de cada proceso con respecto a los recursos existentes en cada instante dado,
proporciona los requisitos maximos de cada proceso con respecto a cada recurso, tambien se
implementa como una matriz en la que las filas son los procesos y las columnas son las instancias de
cada recurso que el proceso necesita para su ejecución.
 La asignación de recursos a cada proceso en un instante dado, proporciona la asignación actual de
cada proceso, tambien se implementa como una matriz en la que cada fila es dedicada a un proceso y la
información acerca de cuales recursos solicita el proceso se define con anticipación para que la
prediccion del interbloqueo pueda funcionar.

Para establecer una política de predicción del interbloqueo se cumplen las siguientes relaciones:

Resumen de sistemas operativos Página 46 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Todos los recursos están disponibles o asignados.


 Ningun proceso puede necesitar mas que la cantidad de recursos existentes en el sistema. La
necesidad debe ser menor o igual a la cantidad de instancias para ese recurso que el proceso necesita.
 Ningun proceso tiene asignado mas recursos (sin importar su tipo) que sus necesidades originales de
ese recurso. La asignación debe ser menor o igual a los requerimientos maximos del proceso.

Denegacion de la iniciacion del proceso


 Las politicas de prediccion del interbloqueo para denegar la iniciación de un proceso consisten en
hacer que solo pueda iniciarse un proceso si se pueden satisfacer las necesidades maximas de todos los
procesos actuales más las del nuevo proceso. La matriz de necesidad debe ser menor o igual a la matriz
de disponibles, en caso contrario se le deniega la iniciación al proceso que hara que hayan procesos que
no puedan satisfacer sus necesidades maximas y que si dependan de las solicitudes de otros procesos
para no entrar en un interbloqueo.

Denegacion de asignación de recursos.


 Algoritmo del banquero: Es un algoritmo que comprueba si el estado del sistema es seguro o no, dado
un sistema con un numero fijo de procesos y recursos, en un determinado momento un proceso puede
tener 0 o mas recursos asignados, el estado del sistema refleja como es la asignación de los recursos a
los procesos en un momento dado.

 Estado seguro: Estado de asignación de recursos donde el sistema puede asignarle


recursos a cada proceso, incluso hasta sus necesidades máximas, sin que esto produzca
Estados del un interbloqueo. Es un estado en el que existe una secuencia segura en donde las
sistema solicitudes de los procesos puedan ser satisfechas por los recursos disponibles.
 Estado inseguro: Estado de asignación de recursos en el que puede llevar a que
aparezca un interbloqueo. En un estado inseguro, el sistema operativo no puede impedir
el interbloqueo denegando asignaciones de recursos a los procesos, el sistema operativo
puede evitar los estados inseguros solo cuando el estado sea seguro.

El verdadero objetivo de las estrategias de predicción o evasión de interbloqueos es mantener al sistema


en un estado seguro, si el sistema operativo predice que un proceso puede hacer que el sistema entre en
un estado inseguro con sus solicitudes de recursos, entonces el proceso es bloqueado, sin embargo, las
solicitudes de un proceso siempre se conceden si el estado del sistema se mantiene seguro.

El algoritmo del banquero conoce la totalidad de procesos y recursos existentes. En un momento dado,
ante la solicitud de un proceso a recursos, el algoritmo del banquero es el que decide si se le denciega la
asignación de recursos a un proceso si hay riesgo de que el sistema quede en estado inseguro, o dicho
de otra manera, se quede sin recursos suficientes para satisfacer las solicitudes maximas de todos los
procesos.

Resumen de sistemas operativos Página 47 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Cuando un proceso solicita un conjunto de recursos, se le concede que pueda realizar


la petición, se actualiza el estado del sistema incluyendo las necesidades maximas de
todos los procesos y se determina si el resultado es un estado seguro:
 Si es seguro: El recurso es asociado al proceso.
 Si es inseguro: El proceso se bloquea hasta que se le pueda asignar el recurso.

Ejemplo: Se tiene la siguiente situación.

N (Necesidad) =
{P1, P2, P3,
R1(cantidad de
instancias = 2),
R2 (cantidad de
instancias = 2),
R3 (cantidad de
instancias = 1)}

A (asignación) =
{(R1, P1), (R1, P2),
(R2, P2), (R2, P3),
(P1, R2), (P3, R1)}

Si P2 libera R1 y R2 no hay abrazo mortal, pero si P2 no los liberam P3 y P1 quedarán bloqueados hasta
que P2 libere R1 y R2 ya que:
 Para que P3 siga ejecutandose, necesita a R1 cuyas instancias son retenidas por P1 y P2.
 Para que P1 siga ejecutandose necesita a R2, cuyas instancias son retenidas por P2 y P3.

Entonces, mientras P2 retenga R1 y R2, ambos P1 y P3 quedarán bloqueados esperando a que el otro
proceso libere el recurso asignado a el, dicho evento no sucederá ya que ambos se mantienen
bloqueados y solo si P2 libera las instancias de ambos recursos, P1 y P3 se desbloquearán y continuarán
su ejecución.

Problema:
 En el ejemplo hay estado inseguro porque no todos los procesos pueden ejecutarse por completo, el
sistema no puede complacer las necesidades maximas de todos los procesos ya que P1 y P3 se bloquean
si P2 no libera R1 y R2.
 Hay espera circular: P1 ~ P2 ~ P3 ~ R1 ~ P1… Debido a que P2 no está en espera circular, no cumple
con la condición de retensión y espera, por lo tanto no está bloqueado y va a terminar con normalidad.
 En este ejemplo hay abrazo mortal si P2 se bloquea y no libera R1 y R2.

Solución:
 Se soluciona el estado inseguro si P2 libera voluntariamente R2 y R1.

En caso de que P2 se bloquee y haya abrazo mortal, no hay solución ya que en teoría el sistema
operativo no puede expropiarle un recurso a un proceso para solucionar el interbloqueo, sino que para
evitar el estado inseguro, cuando el sistema esta en estado seguro se debe bloquear un proceso que
cause estado inseguro.

Algoritmo del banquero


 Algoritmo de seguridad: Es un algoritmo que sirve para  Algoritmo de solicitud de recursos:
averiguar si un sistema se encuentra en modo seguro o no. Determina si las solicitudes pueden
concederse de forma segura.
La variable temporal Trabajo[m] acumula los recursos de Siendo Solicitudi el vector de solicitud
los procesos que pueden evolucionar (¿?)  del proceso i. Si Solicitudi[j]==K,
La variable temporal Terminado[n] contiene un booleano en entonces el proceso i desea K numero de
cada posición indicando True cuando un proceso ha instancias del tipo de recurso j, cuando el

Resumen de sistemas operativos Página 48 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

terminado. proceso i hace una solicitud de recursos,


se toman las siguientes acciones:

En la estrategia de predicción de interbloqueos no es necesario expropiar procesos ni retroceder su


ejecución, pero cuenta con las siguientes desventajas:
 Debe establecerse por anticipado los requisitos o necesidades máximas de recursos de cada proceso
sumando el contenido de la fila de ese proceso en la matriz asociación y el contenido de la fila de ese
proceso en la matriz necesidad (requerido), esto causa un mayor tiempo de procesamiento.
 Los procesos involucrados deben ser independientes, el orden en que se ejecutan no debe estar
restringido por ningún requisito de sincronización.
 El sistema operativo debe saber cual es el número fijo de recursos a asignar.
 Ningún proceso puede terminar mientras mantenga recursos.

Deteccion del interbloqueo

Esta estrategia a diferencia de las estrategias de prediccion no deniega la asignación de recursos y a


diferencia de las estrategias de prevension no limita el acceso a los recursos ni restringe las acciones de
los proceesos, con la deteccion del interbloqueo los recursos solicitados son asignados a los procesos
siempre que sea posible. La estrategia de deteccion de interbloqueo consisten en un algoritmo que sirve
para detectar la condicion de espera circular, dicho algoritmo es ejecutado frecuentemente por el
sistema operativo para verificar de que la condicion de espera circular no se dé, se puede ejecutar con
tanta frecuencia como una vez por cada petición de recurso o cada vez que haya posibilidad de que
ocurra un interbloqueo, la ventaja de esto es que permite detectar el interbloqueo antes de que ocurra y
el algoritmo siempre es sencillo debido a que está basado en cambios de estado del sistema (al igual que
las tecnicas de prediccion de interbloqueos).

Resumen de sistemas operativos Página 49 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

En el algoritmo se usan los siguientes arrays:

El algoritmo actúa marcando los procesos que no están en interbloqueo, inicialmente todos los procesos
nuevos están sin marcarse, pero se marcan inmediatamente de la siguiente manera:
1) Se marca el proceso que tenga una fila de la matriz Asignación completamente en 0.
2) Se inicia un vector Temporal asignandole el vector Disponibles.
3) Se busca un registro de proceso (Pn) tal que ese proceso no esté marcado actualmente y que la
fila de solicitud de recursos sea menor o igual que Temporal.
- Si no encuentra ninguna fila, el algoritmo termina.
- Si encuentra alguna fila que lo cumpla, se marca el proceso y se suma la fila
correspondiente de la matriz Asignación a Temporal y luego se vuelve al tercer paso.

Ejemplo

1) Se debe marcar P4 porque no tiene recursos asignados.


2) Se asigna el vector Disponible al vector Temporal que contendrá los siguientes valores
T=(0,0,0,0,1).
3) La petición de P3 es menor o igual que T, así que se marca P3 y se ejecuta
Temporal+Asignacion de P3(0,0,0,1,0)=0,0,0,1,1.
4) Ningun otro proceso sin marcar tiene una fila de Solicitud que sea menor o igual a Temporal, por
lo tanto el algoritmo termina.

El algoritmo concluye sin marcar P1 ni P3 indicando que estos procesos están en un interbloqueo. La
estrategia de este algoritmo es determinar si existe interbloqueo encontrando un proceso cuyas
peticiones de recursos puedan satisfacerse con los recursos disponibles y a continuación asumir que se
conceder estos recursos y el proceso se ejecute hasta que finalice y libere todos sus recursos.

Recuperación del interbloqueo

El algoritmo de deteccion de interbloqueo solo detecta esperas circulares, pero no realiza nada para
recuperar el sistema del interbloqueo. Una vez que se detectó el interbloqueo, se necesita alguna de las
siguientes estrategias para la recuperacion:
 Abortar todos los procesos involucrados en el interbloqueo, esta es una de las estrategias de
recuperación mas utilizadas.
 Hacer una recuperación mediante retroceso a un punto de control (checkpoint) y restaurar todos los
recursos. Esta solucion requiere que se implementen en el sistema mecanismos de retroceso y de
arrancar procesos y el riesgo de esta solucion es que aunque los procesos se recuperen a un estado

Resumen de sistemas operativos Página 50 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

anterior y se rearranquen procesos, aun se puede dar la situación de que vuelva a ocurrir el interbloqueo
original, aunque en el procesamiento concurrente eso es menos probable.
 Seleccionar procesos en el interbloqueo a un determinado orden para abortarlos hasta que el
interbloqueo deje de existir. El orden de aborto de los procesos están basados en criterios que implican
una cantidad minima de procesos afectados, después de cada aborto se debe ejecutar de nuevo el
algoritmo de deteccion del interbloqueo para comprobar si todavía hay interbloqueo y hay que abortar
un proceso bloqueado mas, asi sucesivamente hasta que el interbloqueo desaparezca.
 Sucesivamente desasignar los recursos de los procesos hasta que el interbloqueo deje de existir, luego
de cada expropiación, se invoca nuevamente el algoritmo de detección del interbloqueo. El proceso al
que se le expropió el procecso debe retroceder a un estado anterior a la desasignacion.

Cualquiera sea la estrategia de recuperacion del interbloqueo elegida (salvo el que aborta todos los
procesos), siempre hay que considerar abortar el proceso que tiene menor costo7, para luego verificar
de nuevo si el resto de los procesos involucrados siguen en espera circular. Interrumpir un proceso que
tiene asignados recursos no es facil ya que se debe violar la exclusión mutua considerando que el
proceso es despojado del recurso sin importar si lo puede estar utilizando o no, si dicho proceso estaba
actualizando un archivo, su terminacion hará que el archivo quede en un estado incorrecto, de forma
similar, si un proceso estaba utilizando una impresora, el sistema debe reiniciar la impresora para que
vuelva a un estado correcto antes de imprimir el siguiente trabajo.

7
Un proceso con menor costo puede ser por distintos criterios: Aquel proceso con la menor cantidad de tiempo del procesador
consumida, el que menor cantidad de salidas realizó, el de mayor tiempo restante estimado, el de menor prioridad o el de mayor
número total de recursos asignados a el.

Resumen de sistemas operativos Página 51 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos


 Eliminar la exclusión mutua No se puede.
 Prevención del
interbloqueo: Se adopta - Proceso solicita todos los recursos antes de su ejecución.
 Eliminar la retención y espera - Las llamadas al sistema de la solicitud de recursos para un proceso
una política que elimina
una de las condiciones preceden a todas las demás llamadas al sistema para solicitar el
para que se produzca el recurso en cuestión.
interbloqueo. - Si se le deniega una petición, libera todos los recurso que fueron
 Eliminar sin desalojo asignados al proceso.
- Si un proceso A solicita un recurso que retiene el proceso B, si el proceso B
tiene menos prioridad, libera todos los recursos.

- Solo un proceso bloqueado del conjunto libera el recurso por el que


 Eliminar la espera circular otros esperan.

 Evasión o predicción  Denegación de asignación del - Rechaza iniciar un nuevo proceso si sus solicitudes de
del interbloqueo: Se recurso si este conduce a un recursos o necesidades pueden conducir al interbloqueo. Sólo
Tratar predice el interbloqueo estado inseguro. puede iniciarse el proceso si se pueden satisfacer las
interbloqueos tomando decisiones necesidades máximas de todos los procesos actuales mas los
apropiadas basándose del nuevo proceso.
en el estado actual del
sistema de asignación  Denegación de asignación del - Algoritmo del banquero: - Algoritmo de solicitud de
de recursos, la recurso si este conduce a un Verifica si el estado del recursos: Si lo que pide el
disponibilidad de los estado inseguro. sistema es inseguro al proceso no está disponible,
recursos y solicitudes verificar el estado de entonces el proceso es
futuras de los procesos. asignación de recursos a bloqueado.
procesos. - Algoritmo de seguridad: Verifica
si el sistema está en estado
seguro o no.

Detención del  Detección - El algoritmo de detección verifica constantemente el estado del sistema de
interbloqueo: Se detecta asignación de recursos a procesos para detectar la condición de espera circular.
la presencia del
interbloqueo para luego  Recuperación - Abortar todos los procesos involucrados en el interbloqueo.
realizar acciones para - Restaurar todos los procesos a un estado anterior mediante retroceso.
recuperarse del mismo. - Abortar proceso por proceso que estan en el interbloqueo hasta que éste
desaparezca.
- Desasignar los recursos a los procesos sucesivamente hasta que el interbloqueo
 Ignorar el problema desaparezca.

Resumen de sistemas operativos Página 52 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

UNIDAD 6

1 . Gestión de memoria relacionada con sistemas monoprogramados, y con los multiprogramados.

La gestión de memoria es la tarea de asignar espacios en memoria para que en cada uno de ellos se
ubiquen procesos. Las actividades que se realizan en la gestión de memoria son las siguientes:
 Controlar qué partes de memoria están en uso.
 Decidir qué datos y procesos (o partes de procesos) añadir.
 Asignar y liberar la asignación del espacio de memoria según sea necesario.

Hay distintos tipos de gestion de memoria como tipos de programación (monoprogramacion,


multiprogramacion).

Gestión de memoria en sistemas monoprogramados: La memoria se divide entre el sistema


operativo (núcleo, monitor residente) y otro espacio de memoria donde sólo puede haber un
proceso de usuario. En este tipo de sistemas, el usuario escribe un comando en el interprete
de comando.
 Si el proceso se encuentra en memoria, el sistema operativo ejecuta dicho proceso que
corresponde a la solicitud del usuario.
 Si el proceso no se encuentra en memoria, el sistema operativo lo carga desde el disco y
realiza sus operaciones, cuando el proceso termina, la memoria es liberada y muestra al
resultado el indicador de comando.

En la monoprogramación se hace un mal uso de la capacidad de memoria y el tamaño de los programas


que pueden ejecutarse están limitados al tamaño de la memoria principal.

Getión de memoria en sistemas multiprogramados: La gestión de memoria en sistemas


multiprogramados es vital ya que es necesario asignar memoria para asegurar una cantidad
de procesos listos para que consuman el tiempo del procesador disponible y éste no se
mantenga ocioso. El concepto de gestion de memoria en sistemas multiprogramados tiene
una semántica diferente a la gestion de memoria en sistemas monoprogramados ya que en
este ultimo la gestión consistia unicamente en cargar un proceeso de usuario en memoria
para su ejecución y luego liberar ese espacio, en cambio la gestion de memoria en un
sistema multiprogramable consiste en almacenar o en acomodar multiples procesos en los
distintos segmentos donde en cada uno de ellos se puede almacenar un proceso de usuario.

Los requisitos que la gestión de memoria multiprogramable debe satisfacer son los siguientes:
 Reubicación: En el intercambio (swap) se intercambian procesos en la memoria principal para que el
sistema operativo pueda ejecutar otro proceso (que no entra en memoria sin que salga un proceso) y
mantener ocupada la CPU. Cuando un proceso vuelve a memoria principal es posible que el proceso no
se almacene en el mismo lugar que antes si ese lugar en memoria está siendo ocupado por otro proceso,
entonces es necesario reubicar en un area de memoria diferente al proceso que vuelve a memoria
principal cuyo espacio que ocupaba ahora esta ocupado por otro proceso, para eso, el sistema operativo
necesita saber para cada proceso lo siguiente:
o La ubicación del bloque de control del proceso.
o La ubicación de la pila del proceso.
o El punto de entrada que utilizará el proceso para iniciar la ejecución.
Las direcciones mencionadas anteriormente son fáciles de obtener ya que el sistema operativo se
encarga de gestionar la memoria, por lo tanto, es responsable de traer los procesos a memoria principal,
y si es necesario, reubicarlos. El hardware del procesador y el software del sistema operativo deben
poder traducir las referencias de memoria encontradas en el código del programa (instrucciones de salto,
referencias a datos, etc) en direcciones de memoria físicas que reflejan la ubicación actual del programa
en memoria principal.

Resumen de sistemas operativos Página 53 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Protección: El programa de un proceso no debe ser capaz de referenciar sin permiso posiciones de
memoria de otro proceso, tanto como en modo lectura o modo escritura, aunque referenciar código de
un mismo proceso (por medio de instrucciones de salto, referenciar datos) es mas difícil por satisfacer
las necesidades de reubicación, por lo tanto, todas las referencias de memoria generadas por un
proceeso deben generarse en tiempo de ejecución para asegurar que se refieran solo al espacio de
memoria asignado a dicho proceso. Por ejemplo la mayoria de los lenguajes de programación permite el
calculo dinamico de direcciones en tiempo de ejecución al calcular un indice de posición de un vector o
un puntero a una estructura de datos. Los requisitos de proteccion de memoria debe ser satisfecho por
el procesador (hardware) en lugar del sistema operativo (software), esto es porque el sistema operativo
no puede anticipar todas las referencias de memoria que un programa hará, si la anticipación fuera
posible llevaria demasiado tiempo calcularlo para cada programa y comprobar que se cumplan las
restricciones de referencias de la memoria. Es el hardware del procesador el que evalua la solicitud de
acceso a datos o salto por medio de referencias en tiempo de ejecución de la instrucción que realiza
dicha referencia, por ejemplo un proceso de usuario no puede acceder a cualquier proción del sistema
operativo y sin tratos especiales un programa de un proceso no puede acceder al area de datos de otros
procesos y el procesador debe ser capaz de abortar dichos accesos.
 Comparticion: Si varios procesos quieren acceder a la misma porción de memoria principal, por
ejemplo a otro proceso, o que los dos procesos compartan el acceso a una estructura de datos, es
ventajoso que ambos puedan acceder a la misma copia del objeto y no tener una copia de esta para cada
uno de ellos. El sistema de gestion de memoria debe permitir el acceso a ese programa en comun o
estructura de datos controlando que no se viole la protección.
 Organización logica: La memoria principal se organiza como un espacio de almacenamiento lineal y no
corresponde a la manera en que los programas se construyen y organizan en modulos, algunos de los
cuales no se pueden modificar (se acceder en modo solo-lectura, solo-ejecucion) y otros que contienen
datos que se pueden modificar, las ventajas del hardware y el sistema operativo que tratan los
programas de usuario y los datos en forma de modulos son los siguientes:
o Cada modulo se puede escribir y compilar independientemente. EN caso de que el codigo
de un modulo haga referencia a otro modulo, el sistema resuelve la referencia en tiempo
de ejecución.
o Se puede proporcionar diferentes grados de proteccion a los modulos (por ejemplo solo-
lectura, solo-ejecucion).
o Comparticion a nivel de núcleo, se puede introducir mecanismos para que los modulos se
puedan compartir entre los procecsos.

Resumen de sistemas operativos Página 54 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Organización fisica: La organización del flujo de información entre la memoria primaria y secundaria es
muy importante y debe ser una responsabilidad del sistema, no del programador por los siguientes
motivos:
o Cuando la memoria principal disponible para un programa mas sus datos es insuficiente,
no debe ser responsabilidad del programador usar la tecnica de superposición
(overlaying) para asignar a una misma región de memoria varios modulos y que haya un
programa principal responsable de intercambiar los modulos entre memoria secundaria y
primaria según las necesidades. La programación con overlays malgasta tiempo del
programador incluso con la ayuda de herramientas de compilación.
o En un entrono multiprogramado, el programador en tiempo de codificacion no conoce
cuanto espacio estará disponible o dónde se localizará fisicamente un proceso.

2 . Particiones contiguas de tamaño variable y particiones de tamaño fijo.

La operación principal de la gestion de memoria es traer procesos a la memoria principal para su


ejecución, este proceso abarca el uso de varias tecnicas, una de ellas es el particionamiento que ya ha
quedado obsoleto y ha sido sustituido por otros mecanismos como la paginación y segmentación.

Partición de tamaño fijo: Es el esquema más simple para gestionar la memoria, consiste en dividir la
memoria en fragmentos con tamaños establecidos para que en cada uno de esos espacios en memoria
que esten disponibles puedan almacenarse un proceso para su ejecución. Existen dos tipos de partición
de tamaño fijo que se diferencian por el modo en que establecen los tamaños de los segmentos:
 Particionamiento de tamaño fijo de igual tamaño: La memoria es dividida lógicamente en segmentos de
igual tamaño, en este caso:
o Si hay espacio disponible, el sistema operativo toma en consideración los requisitos de
memoria del proceso, cualquier proceso cuyo tamaño sea menor o igual que el tamaño de
los segmentos puede almacenarse en cualquier partición disponible, cuando el proceso
termina, el sistema operativo libera esa partición de memoria que podrá rellenar a
continuación con otro proceso que requiera ejecutarse.
o Si no hay espacio disponible y tampoco hay procesos en estado de listo o ejecución, el
sistema operativo puede mandar por medio de swap a un proceso que se encuentre
ocupando espacio en memoria principal y cargar otro procecso de manera que el
procesador siempre tenga un proceso que ejecutar.
El sistema operativo mantiene una tabla que indica qué procesos de la memoria están disponibles, cuáles
son los segmentos disponibles (huecos) y la dirección donde inicia cada segmento. En este tipo de
particionamiento de tamaño fijo las particiones son fijas y no cambian mientras la computadora está
encendida.

La partición de tamaño fijo de igual tamaño presenta dos dificultades:


1- Si un programa es muy grande para caber en un segmento, el programador debe diseñar
el programa con el uso de overlays de forma que solo necesite una porción o módulo del
programa en un segmento de memoria en un momento determinado.
2- La utilización de memoria principal es muy ineficiente ya que cualquier programa, sin
importar lo pequeño que sea ocupa una partición entera, lo cual el tamaño de la partición
no se aprovecha si en el se almacena un proceso con una capacidad mucho mas pequeña.

Resumen de sistemas operativos Página 55 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

El espacio que queda inutilizable dentro de una partición se denomina fragmentación


interna.

 Particionamiento de tamaño fijo de distinto tamaño: La memoria se divide lógicamente en segmentos


de distintos tamaños, esto mejora pero no soluciona los problemas de la partición de tamaño fijo e igual
tamaño. Hay dos maneras posibles de asignar los procesos a las particiones:
o Asignar cada proceso a la partición más pequeña dentro de la cual cabe, calculando lo que
ocupa el proceso por medio de esquemas de overlays o el uso de memoria virtual. Para
esto se necesita una cola de planificación por cada partición en la que procesos que están
esperando a cargarse en el segmento de memoria al que corresponde la cola. De esta
manera sólo se asignan a los procesos particiones que sean iguales o levemente mas
grandes, lo cual genera una desventaja ya que puede darse la situación de que hayan
procesos en colas que esperen segmentos pequeños como ellos y los segmentos mas
grandes se mantengan sin utilizar, por lo tanto esta técnica limita a los procesos que
tengan que ejecutarse en los mismos segmentos.

o Emplear una cola sola para todos los procesos y al momento de cargar un proceso en la
memoria principal se selecciona la partición más pequeña disponible que puede llegar a
albergar dicho proceso. Si todas las particiones están ocupadas, se debe llevar a cabo una
decisión para enviar a swap a algún proceso. Tiene preferencia a la hora de ser expulsado
a disco el proceso que ocupe la partición mas pequeña que pueda albergar al proceso
entrante. Esta modalidad de asignar los procesos a las particiones es mas optima.

El desalojo de procesos de memoria se puede realizar por diferentes criterios, se puede


desalojar el proceso que ocupe la partición mas pequeña, el proceso con prioridad mas
baja o cualquier proceso que esté bloqueado.

Ventajas de la partición física:


 Es relativamente sencilla de implementar, no requiere mucho soporte por parte del sistema operativo y
la sobrecarga de procesamiento es minima.
Desventajas de la partición fija:
 El numero de particiones existente limita la exisatencia de procesos activos (no suspendidos) del
sistema.
 La existencia de fragmentacion interna consiste en espacios desaprovechados de memoria que
aparecen porque los trabajos no suelen utilizar todo el espacio de las particiones.

Particionamiento dinamico: Las particiones son de longitud y numero variables y son particionadas
dinámicamente, es decir que cuando se lleva a un proceso a memoria principal, se le asigna exactamente
tanta memoria como requiera el proceso y no mas, lo que significa que las particiones pueden cambiar
con el objetivo de que cada proceso ocupe lo justo. Una situación que se da muy seguido en este tipo de
particionamiento es que muchos procesos se encuentren en memoria y no haya huecos entre ellos, sin
embargo, si por ejemplo uno de los procesos que se encuentra en memoria ya no requiere ser ejecutado,

Resumen de sistemas operativos Página 56 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

desaparece de memoria y deja un espacio libre equivalente al espacio que ocupaba el proceso, si un
nuevo proceso que necesita cargarse en memoria entra en ese espacio libre, es muy probable de que no
ocupe todo ese espacio libre sino una parte de el y que el resto del espacio quede libre, ese espacio libre
se lo llama fragmentación externa. Siempre que hay un proceso que quiere entrar en memoria, el
sistema operativo analiza los espacios libres en memoria para saber si hay alguno que tenga un tamaño
suficiente como para contener el proceso y cuando un proceso ya no necesite ejecutarse mas, el espacio
que ocupaba queda libre, a medida que pase el tiempo la memoria se fragmenta mas porque es muy
probable que los espacios que ocupaban los procesos grandes sean ocupados por uno o mas proceesos
mas pequeños dejando fragmentacion externa cada vez mas pequeña, de esta manera medida que pasa
el tiempo la cantidad de huecos demasiado pequeños para que los procesos entren en ellos aumentan y
la utilización de memoria se decrementa.
En este tipo de particionamiento, a medida que pasa el
tiempo los espacios libres que dejan los procesos que ya
no se ejecutan son ocupados por procesos que necesitan
cargarse en memoria y que raramente ocupan todo el
espacio libre, sino que son mas pequeños y generan
fragmentación externa. En caso de que haya tanta
fragmentacion externa tal que los espacios libres sean
muchos y demasiado pequeños, cuando un proceso
requiera cargarse en memoria y no haya ningun espacio
libre donde pueda cargarse, el sistema operativo realiza
una tecnica llamada compactación para eliminar la fragmentación externa que consiste en desplazar los
procesos que están en memoria de manera que queden continuos, sin espacios libres de por medio, de
este modo todos los espacios libres se encontrarán unidos en un solo espacio libre.

La compactación intenta relocalizar todos los procesos de manera que ocupen espacio contiguo en
memoria y no haya fragmentación externa entre ellos y así obtener mas espacio en memoria disponible
para los nuevos procesos que requieren cargarse en memoria. La compactación requiere de la capacidad
de reubicación dinamica, es decir que debe ser posible mover un programa desde una region a otra en la
memoria principal sin invalidar las referencias de memoria de cada programa. Unas de las desventajas de
la compactación es que consume mucho tiempo y malgasta tiempo de procesador.
La compactación consume mucho tiempo y hay que buscar alternativas para que el sistema operativo le
asigne la memoria a los procesos de tal manera que no queden fragmentaciones externas tan pequeñas
que los procesos no puedan entrar en ellos y se necesite de la compactación para que al menos uno
pueda entrar. Los algoritmos de asignación de los procesos a memoria son los siguientes:
 Primer ajuste: El algoritmo comienza a analizar la memoria desde el principio y escoge el primer
bloque disponible que sea lo suficientemente grande como para que el proceso entre en el. El primer
ajuste es el algoritmo más rápido ya que este algoritmo carga el proceso en el primer hueco disponible
mas grande que el proceso que encuentra.
 Mejor ajuste: Se explora la lista de particiones buscando el hueco más pequeño suficientemente
grande para asignarle el proceso, este algoritmo se llama mejor ajuste porque se carga en un hueco de
memoria el proceso que mejor se ajuste al tamaño de dicho hueco. Este no siempre es el mejor
algoritmo a elegir ya que los procesos al ajustarse mejor a los huecos generan una fragmentación
externa muy pequeña, a veces demasiado pequeña como para que pueda entrar un proceso en ella, esto
significa que al pasar el tiempo se generan fragmentaciones externas tan pequeñas que se cargan que
generan pequeños espacios de memoria desaprovechados porque son demasiado pequeños y ningún
proceso puede entrar en ellos, sin embargo, una ventaja de este algoritmo es que los huecos mas
grandes son ocupados por los procesos grandes, lo que hace más difícil que haya que realizar la
compactación por motivo de que haya un proceso grande o mediano que no entre en ningún hueco y al
haber muchas fragmentaciones externas pequeñas, algunas pueden ser utilizadas por procesos
pequeños.

Resumen de sistemas operativos Página 57 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

 Peor ajuste: Se asigna el agujero de mayor tamaño. Se busca en la lista la partición que mayor tamaño
ocupa y que esté libre, este algoritmo trata de solucionar el problema del mejor ajuste en el que los
procesos al ajustarse tan bien a los huecos, estos generan fragmentaciones muy pequeñas y en caso de
los procesos que ocupan poco espacio, fragmentos demasiado pequeños y por consiguiente varios
espacios e memoria desaprovechados. En este algoritmo del peor ajuste es raro que se generen
particiones externas tan pequeñas, pero si es frecuente que al pasar el tiempo no queden huecos para
que procesos grandes puedan cargarse en ellos y por ese motivo haya que compactar, al asignarse los
agujeros de gran tamaño, los agujeros grandes pueden sufrir muchas fragmentaciones.
 Siguiente ajuste: Analiza la memoria desde la ultima colocación y elige la siguiente partición disponible
que sea suficientemente grande.

La elección de cuál de los algoritmos de ubicación del particionamiento dinámico es mejor depende de la
secuencia de procesos y del tamaño de cada uno de ellos, el algoritmo del primer ajuste no solo es el
mas sencillo sino también el mas rápido. El algoritmo del siguiente ajuste tiende a producir resultados
levemente peores, pero llevará frecuentemente una asignación del bloque libre al final de la memoria y al
final de la memoria se suele fragmentar aun más hasta que se divide en pequeños fragmentos y se
puede requerir más frecuentemente la compactación. El algoritmo del mejor ajuste normalmente es el
peor porque el algoritmo busca el bloque libre mas pequeño que satisfaga la petición, garantiza que el
bloque libre sea lo mas pequeño posible y la memoria queda con muchos espacios que compactar.

El particionamiento dinamico posee las siguientes ventajas:


 Mejora el rendimiento para el usuario.
 Reubica en función de la prioridad.
 Se hace un uso mas eficiente de la memoria que en la partición fija.
El particionamiento dinamico posee las siguientes desventajas:
 Aumenta la complejidad del algoritmo.
 El sistema operativo tiene menos memoria que administrar.
 La compactación lleva mucho tiempo y se hace uso de la cpu.

Sin embargo la desventaja del particionamiento dinamico y el particionamiento fijo es la existencia de


fragmentación externa e interna respectivamente, si bien se ha implementado métodos para cargar
modulos por separado, tampoco se puede cargar un proceso que supere en capacidad a la memoria
principal y los métodos de cargar modulos por separado como el Overlay tampoco son eficientes.

3 . Concepto de memoria virtual

Según Galvin y Silberchatz, la memoria virtual es una técnica que permite la ejecución de procesos que
no se encuentran completamente en memoria principal y tambien permite que los programas puedan
tener un tamaño mayor que la misma memoria principal física al poder almacenar fragmentos de
procesos en el disco rigido, al igual que los datos para que cuando se requieran se envíen a memoria
principal para su ejecución.
La ventaja principal del uso de memoria virtual, además de permitir que procesos tengan un tamaño
mayor que el espacio físico de la memoria principal, también abstrae la memoria principal,
transformándola en una matriz uniforme y muy grande, con muchas posiciones de almacenamiento. El
concepto de memoria virtual marca una diferencia entre la memoria lógica (como la ve el usuario) de la
memoria física, también permite que procesos compartan los archivos e implementen mecanismos de
memoria compartida y proporciona mecanismos eficientes para la creación de procesos.

Resumen de sistemas operativos Página 58 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

4 . Diferencia entre dirección física y dirección lógica.

 Direccion logica: Es una dirección virtual que es generada por la CPU.


 Direccion física: Es una dirección recibida por la electrónica de la memoria principal, por medio de
dicha dirección, la memoria principal accede a la posición que corresponde ya que es una ubicación real
en la memoria principal. La traducción de una dirección lógica a una dirección física se lleva a cabo antes
de que se alcance el acceso a memoria y la realiza el mecanismo de hardware que convierte direcciones
lógicas a direcciones físicas llamada Unidad de Gestion de Memoria (MMU). El registro de reubicación es
Memoria el registro base que se suma a todas las direcciones
Registro de generadas por un proceso de usuario en el momento
reubicacion
CPU de enviarlas a memoria. Por ejemplo si la base de un
14000
proceso se encuentra en la dirección 14000,
cualquier intento del usuario de direccionar la
+
Dir. Logica = 346 Dir. Fisica posición de memoria 0, se reubicará dinámicamente
=14346
en la dirección 14000, de la misma manera un
acceso a la ubicación 346 se convertirá en la
dirección física 14346.
Asi, el proceso de usuario no ve las direcciones físicas reales, el programa de usuario solo maneja
direcciones lógicas (como 346) y el hardware de conversión (mapeo) de memoria convierte esas
direcciones lógicas en direcciones físicas.

5 . Concepto de paginación, criterios de reemplazo de página.

La paginación es un esquema de gestión de memoria que permite que el espacio de direcciones físicas
de un proceso no sea contiguo. Este esquema es una solución mas eficiente a los problemas de
fragmentación interna del particionamiento fijo y fragmentación externa de la fragmentación dinámica,
la paginación consiste en lo siguiente:
 Se divide lógicamente la memoria principal en particiones de tamaño fijo relativamente pequeños
llamados marcos o marcos de pagina.
 Se dividen los procesos en porciones llamadas paginas que poseen el mismo tamaño fijo que los
marcos de pagina.
De esta manera la paginación implica descomponer la memoria física en bloques de tamaño fijo que son
los marcos y descomponer la memoria lógica en bloques del mismo tamaño que los marcos llamados
paginas. En la paginación toda direccion generada por la CPU está dividida en dos partes: Un numero de
pagina y un desplazamiento de pagina. El numero de pagina se utiliza como indice para una tabla de
paginas, dicha tabla contiene la direccion base de cada pagina en memoria fisica, esta direccion base se
combina con el desplazamiento de página para definir la direccion fisica a la que se quiere acceder.

Para cargar procesos en memoria para que puedan ejecutarse y descargar procesos de memoria, el
sistema operativo gestiona lo que se llama MMU o Unidad de Administración de Memoria, el cual es un
dispositivo hardware que transforma las direcciones logicas en fisicas.
El tamaño fijo de las paginas (por lo tanto de marcos tambien) está definido por hardware y su tamaño
generalmente es una potencia de 2, esto es asi para que la traducción de una direccion logica a un
numero de pagina y a un desplazamiento de pagina resulte mas facil. El tamaño de las paginas varia
entre 512 bytes y 16 Mb por pagina dependiendo de la arquitectura de la computadora.

Resumen de sistemas operativos Página 59 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Como ejemplo, supóngase que el tamaño de pagina es de 4 bytes y


la memoria fisica es de 32 bytes, por lo tanto puede dividirse
lógicamente en 8 marcos. Debido a que cada direccion logica
generada por un programa en el CPU y es dividida en dos partes, un
numero de pagina y desplazamiento, el numero de pagina nos sirve
como indice para ingresar al numero de marco que le corresponde
en memoria principal, esta dirección es combinada con el
desplazamiento de pagina para definir la dirección exacta que se
anda buscando. La combinación es como sigue:

Direccion fisica = (Número de cuadro * Número de


palabras por pagina + desplazamiento de pagina)

Por ejemplo: La dirección lógica 0 consiste a un acceso al primer


byte de la pagina 0, dicha dirección lógica se traduce como Pagina 0
y debido que se trata a un acceso al primer byte de la pagina, el
Desplazamiento es 0. Cuando se accede a la tabla de paginas por
medio del número de pagina, se sabe que para ese numero de
pagina que es 0 le corresponde el marco 5, entonces ahora podemos
calcular la direccion fisica que es 20 ((5*4)+0).
La direccion fisica 3 consiste en el acceso a la pagina 0 y al cuarto
byte dentro de la pagina, dicha direccion se corresponde con la
direccion fisica 23 ((5*4)+3).
La direccion logica 4 corresponde a la Pagina 1 y Desplazamiento 0
porque es un acceso al primer byte de la Pagina 1, la memoria fisica
que corresponde a la direccion logica 4 es 24((6*4)+0).
Cuando usamos un esquema de paginación, no tenemos fragmentacion externa, sin embargo, lo que si
podemos llegar a tener es fragmentación interna pero solamente puede ocurrir en solo una fracción de la
ultima pagina de un proceso cuando esta es menor al tamaño definido de la pagina, situación que se
presenta muchas veces. Un ejemplo de cómo el ultimo marco o pagina de un proceso pueda no estar
completamente lleno es que, por ejemplo, si el tamaño de pagina sea de 72.226 Bytes, necesitará 32
paginas completas mas 1.086 bytes, por lo tanto a este proceso se le asignarían 36 marcos lo que dará
como resultado una fragmentacion interna de
(Tamaño de pagina = 2048 – Ultima pagina
del proceso = 1086 = 962 Bytes llenos en la
ultima pagina).
En la paginación cuando llega un proceso al
sistema para ejecutarlo, sus paginas se
cargan desde el almacen de respaldo (disco)
en los marcos de memoria disponibles,
previamente el sistema operativo examina su
tamaño expresado en paginas y si el sistema
no soporta memoria virtual, dadas n paginas
de un proceso, el sistema operativo verifica si
hay n marcos disponibles para que el proceso
se pueda ejecutar, si esto es cierto, la primera
pagina del proceso se carga en uno de los
marcos asignados y se incluye el numero de
marco en la tabla de paginas para ese proceso, la siguiente pagina se carga en otro marco disponible y
su numero de marco se coloca en la tabla de paginas y asi sucesivamente.
En la paginación hay una clara separacion entre la vision de la memoria que tiene el usuario y la memoria
fisica real, como bien se dijo antes la paginación permite que un programa de usuario pueda estar
disperso por toda la memoria fisica, sin necesidad de que se encuentre en direcciones contiguas. La
diferencia entre la vision de la memorai que tiene el usuario y la memoria fisica real se resuelve mediante
el hardware de traducción de direcciones. Las direcciones logicas se traducen a direcciones fisicas y esta
conversión queda oculta a los ojos del usuario, siendo controlado por el sistema operativo.

Resumen de sistemas operativos Página 60 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Debido a que el sistema operativo debe gestionar la memoria, debe mantener información acerca de la
memoria y los procesos asignados a ella, para eso el sistema operativo mantiene una tabla de marcos
que contiene detalles relativos a la asignacion de memoria fisica y posee una entrada por cada marco
fisico que indica si el marco está libre o asignado y en caso de estar asignado, a qué pagina de qué
proceso ha sido asignado, la tabla de marcos contiene la siguiente información:
 Los marcos que han sido asignados al proceso.
 En caso de que el marco esté asignado a un proceso, se indica a qué pagina del proceso está asignado.
 El numero total de marcos.
Ademas, el sistema operativo debe ser consciente de que los procesos de usuario operan en el espacio
de usuario y de que todas las direcciones logicas deben ser convertidas con el fin de generar direcciones
fisicas. Por ejemplo, si un usuario hace una llamada al sistema (por ejemplo, para realizar una operación
de e/s) y proporciona una direccion como parámetro (por ejemplo un buffer), dicha direccion deberá ser
convertida para obtener la direccion fisica correcta.

Los procesos de usuario son incapaces de acceder a la memoria que nos les pertenece, no tienen forma
de direccionar la memoria situada fuera de su tabla de paginas y esa tabla incluye unicamente aquellas
paginas que sean propiedad del proceso y en qué marco de pagina se encuentra cada una de esas
paginas. La tabla de paginas generalmente posee los siguientes datos:
 Numero de pagina.
 Numero de marco asociado a la pagina.
 Bit de fallo: Indica si la pagina se encuentra en memoria principal.
 Bit de modificacion: Indica si la pagina ha sido modificada o no desde que la pagina se cargo por
primera vez en memoria principal, pero si no hay ningun cambio no es necesario escribir la pagina
cuando llegue el momento de reemplazarla por otra pagina en el marco de pagina que actualmente
ocupa.
 Bit de referenciado: Indica si la página ha sido recientemente referenciada.
 Bit de proteccion: Indica las operaciones permitidas.
 Bit de bloqueo: Indica si el marco de página está o no bloqueado.
El sistema operativo mantiene una copia del la tabla de paginas de cada proceso, al igual que mantiene
una copia del contador de instrucciones de los contenidos de los registros. Esta copia se utiliza para
traducir las direcciones logicas a direcciones fisicas cada vez que el sistema operativo deba convertir
manualmente una direccion logica a una direccion fisica.

 Soporte hardware: Las instrucciones para cargar o modificar los registros de la tabla de pagina son
privilegiadas, de modo que solo el sistema operativo puede cambiar las tablas de paginas y la tabla de
marcos. Cada sistema operativo posee sus propios metodos para almacenar tablas de paginas, la
mayoria de ellos asignan una tabla de paginas para cada proceso, almacenandose en el bloque de
control de procesos un puntero a la tabla de paginas junto con otros valores de los registros (como por
ejemplo el contador de instrucciones). Cuando el despachador del sistema operativo ejecuta un nuevo
proceso, debe cargar los registros de usuario y definir los valores correctos de la tabla de paginas
hardware a partir de la tabla almacenada de paginas de usuario. Debido a que cada acceso a la memoria
principal debe pasar a traves de tablas de paginación, éstas se deben implementar de manera que
resulten eficientes.
o Registros dedicados: En el caso mas simple, la tabla de pagnas se implementa como un
conjunto de registros dedicados y que deben construirse con lógica de muy alta velocidad
para hacer que el proceso de traducción de direcciones basado en la paginación sea rapido y
eficiente. En la actualidad se permite que la tabla de paginas sea tan grande como de un
millon de entradas, para estas computadora, el uso de registros de alta velocidad para
implementar la tabla de paginas resulta muy costoso.
o La tabla de paginas se almacena en memoria RBTP: La tabla de paginas se mantiene en
memoria principal, utilizandose un registro base de la tabla de paginas (PTBR, page-table
base register) que apunta a la tabla de paginas del proceso de ejecucion. Para cambiar las
tablas de paginas, solo hace falta cambiar este unico registro, reduciendose asi el tiempo de
cambio de contexto. Sin embargo el problema con esta tecnica es el tiempo requerido para
acceder a una ubicación de memoria de usuario ya que requiere de dos accesos, por ejemplo
si queremos acceder a la ubicación i, primero tenemos que realizar una indexación en la tabla
de paginas, utilizando el valor del registro PTBR, desplazado según el número de página, para
obtener el número de marco correspondiente y luego acceder a la ubicación de memoria, el

Resumen de sistemas operativos Página 61 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

acceso a la memoria consiste en dos accesos a memoria y se divide a la mitad generando


mucho retardo en el acceso a la ubicación deseada.
o Buffer de consulta de traducción: Esta solucion consiste en utilizar un cache especial de
pequeño tamaño y con capacidad de acceso rápido llamado bufer de consulta de traducción
(TLB, translation look-aside buffer). Este bufer TLB es administrado por la MMU y puede
localizarse entre la CPU y la cache de la misma o entre la memoria principal y el cache de CPU,
este cache contiene partes de la tabla de paginación, mas precisamente, relaciones entre
paginas y marcos, posee un numero fijo de entradas, tal que cuando la CPU genera una
direccion logica y busca el número de pagina en el TLB, si encuentra el numero de pagina el
marco que le corresponde estará inmediatamente disponible y se utilizará para acceder a la
ubicación de memoria, pero si no se encuentra la entrada buscada, se deberá revisar la tabla
de paginación y tardará varios ciclos mas, sobre todo si la memoria virtual está soportada y la
dirección buscada no está en memoria principal y originará un fallo de página. En caso de que
se encuentre el número de pagina en el buffer TLB, se puede añadir el numero de pagina y el
numero de marco al TLB para poder encontrar los correspondientes valores rapidamente en la
siguiente referencia que se realice. Si el TLB ya está lleno, el sistema operativo deberá
seleccionar una de las entradas para substituirla utilizando la politica de asignacion LRU (least
recently used).

La proteccion de memoria en la paginación se consigue mediante una serie de bits de protección


asignados con cada marco, normalmente, estos bits se mantienen en la tabla de paginas, los bits de
proteccion pueden ser los siguientes:
o Bit de permiso: Uno de los bits puede definir una pagina como de lectura-escritura o de solo
lectura, tal que al momento de acceder a una pagina solo-lectura, se verifique si el acceso es
de solo lectura y no de escritura, porque si es de escritura se generará una interrupcion
hardware al sistema operativo o una violacion de proteccion de memoria. Como medida
alternativa de proteccion, podemos diseñar un hardware que proporcione proteccion de solo
lectura, de lectura-escritura o solo ejecución u otros permisos, asignandole un bit distinto a
cada tipo de proteccion de pagina.
o Bit valido-invalido: Cuando se configura este bit como valido, la pagina asociada se encontrará
en el espacio de direcciones logicas del proceso y será, por tanto, una pagina real (o valida).
Cuando se configura el bit como inválido, la pagina no se encuentra en el espacio de
direcciones logicas del proceso. Algunos sistemas proporcionan mecanismos hardware
especiales, en la forma de un registro de longitud de la tabla de paginas (PTLR, page lenght
register), para indicar el tamaño de la tabla de paginas. Este valor se compara con cada
dirección logica para verificar que esa direccion se encuentre dentro del rango de direcciones
validas definidas para el proceeso. Si esta comprobación fallara, se produce una interrupcion
de error dirigida al sistema operativo.

Resumen de sistemas operativos Página 62 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

Una ventaja de la paginación es la posibilidad de compartir


codigo comun siempre que el codigo sea reentrante (codigo
puro) que es código que no cambia durante la ejecución.
Esta capacidad es muy importante en un entorno de tiempo
compartido ya que para dar soporte a varios usuarios (en
este caso 3) no hay que realizar una copia de un proceso
para cada uno de un proceso que requieran ejecutarlo,
aunque si cada proceso tendrá su propia copia de los
registros y del almacenamiento de datos, para albergar
datos requeridos para la ejecución del proceso. De esta
manera solo es necesario mantener en la memoria una
copia del proceso que requieren ejecutar los usuarios que
en este caso es un editor (por eso las letras ed en el grafico).

En la actualidad una tabla de paginas puede llegar a ser excesivamente grande, por ejemplo el espacio
lógico de direcciones puede ser de 32 bits, cada entrada a la tabla de paginas está compuesta por 4
bytes y si la cantidad de entradas a la tabla de paginas es de un millón, entonces el proceso puede
necesitar 4 Mb de espacio fisico de direcciones físico para su tabla de paginas. Esto genera muchos
problemas, uno de ellos es que si el supuesto proceso que tomamos como ejemplo se ejecuta y por lo
tanto necesita que su tabla de paginas se almacene en memoria principal, su tabla de paginas puede ser
demasiado grande como para almacenarla contiguamente en la memoria principal. Una solución a este
problema consiste en dividir la tabla de paginas en fragmentos mas pequeños, esto se puede realizar de
varias formas distintas:
 Uso del algoritmo de paginación de dos niveles: Esto requiere que la tabla de paginas de un proceso
también esté paginada, en el ejemplo que dimos, una dirección logica era de 32 bits y puede ser dividida
en un numero de pagina de 20 bits y un desplazamiento de pagina de 12 bits, debido a que la tabla de
paginas está paginada, el numero de pagina se puede dividir en un numero de pagina de 10 bits y un
desplazamiento de pagina de 10 bits para que a través de esa entrada se pueda acceder a cualquier
entrada de la tabla de paginas.

Parte 1 es un índice a la tabla de paginas externa y Parte 2 es el desplazamiento dentro de la pagina de la


tabla de paginas externa, este esquema llamado tabla de paginas con correspondencia (mapeo) directa la
traducción de las direcciones se realiza comenzando por la tabla de paginas externa y continuando luego
por la interna.
 Tablas de paginas hash: Una estrategia altenativa al uso de tablas de paginas de mas de dos o mas
niveles es el uso de una técnica que consiste en utilizar una tabla hash de paginas, donde el valor hash
es el numero de pagina virtual. Este método consiste en mantener una mantener una tabla hash que
contiene una lista enlazada de elementos que tienen como valor hash una misma ubicación, cada
elemento está compuesto de tres campos:
o El número de pagina virtual.
o El valor del marco de pagina mapeado.
o Un punto del siguiente elemento de la lista enlazada.
Al numero de pagina virtual de la dirección virtual se le aplica una función hash para obtener un valor
que se utiliza como índice para la tabla hash. El numero de pagina virtual se compara con el campo 1 del
primer elemento de la lista enlazada, si hay correspondencia, se utiliza el marco de pagina

Resumen de sistemas operativos Página 63 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

correspondiente (campo 2) para formar la dirección física deseada, sin embargo, si no se produce una
correspondencia, se exploran las siguientes entradas de la lista enlazada hasta encontrar el
correspondiente numero de pagina virtual.

 Tablas de paginas invertidas:

Hasta ahora hemos visto un esquema de paginación simple que simplemente consiste en cargar el
programa completo en memoria fisica en el momento de ejecutar el programa, sin embargo, esto
presenta un problema ya que puede que no necesitemos
inicialmente todo el programa en la memoria principal y
tener que cargar todo el codigo ejecutable de todas las
opciones de ejecución de un programa para que puedan
cubrir todas las acciones disponibles del programa. El
esquema de paginación bajo demanda provee la solucion al
problema tratado ya que consiste en cargar unicamente las
paginas de los procesos que son necesarias, la paginación
bajo demanda se utiliza comúnmente en los sistemas de
memoria virutal.

En la paginación bajo demanda solo se cargan las paginas


cuando se solicitan y las paginas a las que nunca se acceden
no llegan a cargarse en memoria principal, aunque la carga
de procesos no se hace por intercambio, el intercambio
consiste en manipular archivos enteros, mientras que en la
paginación (ya sea simple o bajo demanda) se ocupa de las
paginas individuales de los procesos.

En este esquema necesitamos algun tipo de soporte


hardware para distinguir entre las paginas que se
encuentran en memoria y las paginas que residen en el
disco, para esto, se puede utilizar un bit valido-invalido en la
tabla de paginas tal que cuando se configura un bit como
valido, la pagina asociada será real y se encontrará en
memoria, sin embargo, si el bit es invalido querrá decir que
o bien la pagina no es valida (es decir que no se encuentra
en el espacio de direcciones del proceso) o valida pero está
actualmente en el disco, en síntesis:
 La entrada de la tabla de paginas correspondiente a una
pagina que se carga en memoria se configurará como valida
porque la pagina asociada es real y se encuentra en
memoria.
 La entrada de la tabla de paginas correspondiente a una
pagina que no se encuentre actualmente en la memoria se marcará como invalida o contendrá la
direccion de la página dentro del disco. Todo proceso que intente acceder a una pagina que no ha sido
cargada en memoria provoca una interrupcion de fallo de pagina. El hardware de paginación, al traducir

Resumen de sistemas operativos Página 64 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

la direccion mediante la tabla de paginas, detectará que el bit de pagina es invalida provocando una
interrupcion dirigida al sistema operativo, esta interrupcion se produce como resultado de que el
sistema operativo no ha cargado anteriormente la pagina deseada. El procedimiento para tratar este fallo
de pagina es sencillo:
1. Se comprueba una tabla
interna (que usualmente se
mantiene con el bloque de
control del proceso)
correspondiente a este
proceso, para determinar si
la referencia era un acceso
de memoria valido o invalido.
2. Si la referencia era invalida,
terminamos el proceso. Si
era valida pero esa pagina
todavía no ha sido cargada,
la cargamos en memoria.
3. Buscamos un marco libre
(por ejemplo, tomando uno
de la lista de marcos libres).
4. Ordenamos una operación de
disco para leer la pagina
deseada en el marco recien
asignado.
5. Al terminar la lectura del disco, modificamos la tabla interna que se guarda junto con el
proceso y la tabla de paginas, de modo que indiquen que la pagina ya esta en memoria.
6. Reiniciamos la instrucción que se interrumpió por la trampa de direccion no valida. Ahora
el proceso puede acceder a la pagina como si siempre hubiera estado en la memoria.

6 . Concepto de segmentación. Algoritm os de carga de segmentos.

La segmentación es un esquema de gestión de memoria que soporta una visión de la memoria virtual en
la que se ve la memoria como una colección de segmentos de tamaño variable, sin que exista
necesariamente ninguna ordenación entre dichos segmentos, todo segmento tiene una longitud variable
y la longitud está definida por el mismo segmento del programa y los elementos dentro de un segmento
están identificados por el desplazamiento en el que se encuentran con respecto al inicio del segmento.

En un esquema de segmentación, un espacio lógico de direcciones es una colección de segmentos en el


que cada segmento tiene un nombre y una longitud, por otro lado, las direcciones lógicas especifican
tanto el nombre del segmento como el desplazamiento dentro de ese segmento donde se encuentra el
elemento a acceder, para implementar esto y mapear las direcciones bidireccionales definidas por el
usuario (Nro de segmento, desplazamiento) sobre las direcciones físicas unidimensionales, se hace uso
de tablas de segmento, en la que cada entrada de la tabla tiene los siguientes elementos:
 Direccion base del segmento: Contiene la dirección base del lugar donde el segmento reside dentro de
memoria.
 Limite del segmento: Especifica la longitud del segmento, como hemos visto anteriormente, es el mismo
segmento el que define su propia longitud.

Resumen de sistemas operativos Página 65 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)


lOMoARcPSD|3375621

Cristian Reyes – Resumen de sistemas operativos

En el siguiente ejemplo un proceso contiene 5 segmentos numerados de 0 a 4, nótese como en la


implementación los segmentos no tienen nombre
sino que tienen un índice asignados a ellos. Los
segmentos se almacenan en la memoria física y la
tabla de segmentos dispone de una entrada
dedicada a cada segmento del proceso en la que,
como se puede ver, indica para cada segmento la
direccion inicial del segmento en la memoria
fisica y la longitud de ese segmento (el limite).

El segmento 2 tiene 400 bytes de longitud y


comienza en la posición 4300, por lo tanto, una
referencia al byte 53 del segmento 2 se
corresponderá con la posición 4300 + 53 = 4353.
De la misma manera, un acceso al byte 852 del
segmento 3 cuya direccion de base es 3200, se
realiza un acceso a la posición 3200 + 852 =
4052. Una referencia al byte 1222 del segmento
0 provocará una interrupcion hacia el sistema
operativo ya que este segmento solo tiene 1000
bytes de longitud.

Resumen de sistemas operativos Página 66 de 66

Descargado por Lucas Cardoso (lucas_lp_dxd@hotmail.com)

You might also like