1)- Problemas clásicos de comunicación y sincronización
La interacción entre
procesos se plantea en una serie de situaciones clásicas de comunicación y Sincronización.
Estas situaciones, junto con sus problemas, se describen a continuación para
demostrar la necesidad de comunicar y sincronizar procesos.
Problema de Procesos concurrentes
Modelos
Razones para la concurrencia:
Problema: Sección crítica
Éste es uno de los
problemas que con mayor frecuencia aparece cuando se ejecutan procesos concurrentes
tanto si son cooperantes como independientes. Considérese un sistema compuesto por
n procesos en el que cada uno
tiene un fragmento de código, que se denomina
Sección crítica.
Solución:
Para resolver el
problema de la sección crítica es necesario utilizar algún mecanismo de sincronización
que permita a los procesos cooperar entre ellos sin problemas. Este mecanismo
debe proteger el código de la sección crítica y su funcionamiento básico es el
siguiente.
-Cada proceso debe
solicitar permiso para entrar en la sección crítica mediante algún fragmento de
código, que se denomina de forma genérica entrada en la sección crítica.
-Cuando un proceso
sale de la sección crítica debe indicarlo mediante otro fragmento de código,
que se denomina salida de la sección crítica. Este fragmento permitirá
que otros procesos entren a ejecutar el código de la sección crítica.
Cualquier solución
que se utilice para resolver este problema debe cumplir los tres requisitos siguientes:
Ejemplo1:
El SO asigna PID. Acciones:
Lee el ultimo PID
Incrementa el valor
Almacena el nuevo PID
Problema: lectores-escritores
En este problema
existe un determinado objeto, que puede ser un archivo, un registro dentro de
un archivo, etc., que va a ser utilizado y compartido por una serie de procesos
concurrentes. Algunos de estos procesos sólo van a acceder al objeto sin
modificarlo, mientras que otros van a acceder al objeto para modificar su
contenido. Esta actualización implica leerlo, modificar su contenido y
escribirlo. A los primeros procesos se les denomina lectores y a los segundos
se les denomina escritores. En este tipo de problemas existe una serie
de restricciones que han de seguirse:
-Sólo se permite que
un escritor tenga acceso al objeto al mismo tiempo. Mientras el escritor esté
accediendo al objeto, ningún otro proceso lector ni escritor podrá acceder a
él.
-Se permite, sin
embargo, que múltiples lectores tengan acceso al objeto, ya que ellos nunca van
a modificar el contenido del mismo.
En este tipo de
problemas es necesario disponer de servicios de sincronización que permitan a los
procesos lectores y escritores sincronizarse adecuadamente en el acceso al
objeto.
Características de este Problema:
Solución:
En esta clase de
problemas es necesario disponer de algún mecanismo de comunicación que permita
a los procesos productor y consumidor intercambiar información. Ambos procesos,
además, deben sincronizar su acceso al mecanismo de comunicación para que la
interacción entre ellos no sea problemática: cuando el mecanismo de
comunicación se llene, el proceso productor se deberá quedar bloqueado hasta
que haya hueco para seguir insertando elementos.
A su vez, el proceso
consumidor deberá quedarse bloqueado cuando el mecanismo de comunicación este
vacío, ya que en este caso no podrá continuar su ejecución al no disponer de
información a consumir. Por tanto, este tipo de problema requiere servicios
para que los procesos puedan comunicarse y servicios para
Problema: Comunicación cliente-servidor
En el modelo
cliente-servidor, los procesos llamados servidores ofrecen una serie de
servicios a otros procesos que se denominan clientes. El proceso servidor puede
residir en la misma máquina que el cliente o en una distinta, en cuyo caso la
comunicación deberá realizarse a través de una red de interconexión. Muchas
aplicaciones y servicios de red, como el correo electrónico y la transferencia
de archivos, se basan en este modelo.
Los procesos servidores ofrecen una serie de servicios
a otros
Procesos clientes
Ejemplo:
Problema productor-consumidor
Paradigma de los procesos cooperantes: el proceso
productor genera información (bloque de disco, mensaje de red, caracteres de
teclado, etc.) que es utilizada por
el proceso consumidor (aplicación o SO)- o a
la inversa.
Problema entere Mutex y variables condicionales
Los mutex
y las variables condicionales son mecanismos especialmente concebidos para
la sincronización de procesos ligeros. Un mutex es el mecanismo de
sincronización de procesos ligeros más sencillo y eficiente.
EJEMPLO 1
El siguiente
segmento de seudocódigo utiliza un mutex para proteger el acceso a una
sección
crítica.
lock(m); /*
solicita la entrada en la sección crítica */
< sección
crítica >
unlock(m);
/* salida de la sección crítica */
EJEMPLO 2
lock(m);
/* Código de
la sección crítica */
while
(condición == FALSE)
c_wait(c, m);
/* resto de
la sección crítica */
unlock(m);
Problema de Interbloqueos
Un
interbloqueo supone un bloqueo permanente de un conjunto de procesos que
compiten por recursos o bien se comunican o sincronizan entre sí. Los
interbloqueos que aparecen cuando se utilizan mecanismos de comunicación y
sincronización se deben a un mal uso de los mismos. A continuación se van a
presentar ejemplos de mala utilización de mecanismos de comunicación y
Sincronización que llevan a los procesos a un estado de interbloqueo.
Ejemplo1:
Considérese
en primer lugar una situación en la que se utilizan dos semáforos P y Q, ambos con
un valor inicial 1. Si dos procesos utilizan estos dos semáforos de la
siguiente manera se puede producir un interbloqueo.
Proceso A
Proceso B
wait(P);
wait(Q);
wait(Q);
wait(P);
.... ....
signal(P);
signal(Q);
signal(Q);
signal(P);
Solución:
Para modernizar
los interbloqueos se suele recurrir a la construcción de un grafo de asignación
de recursos. En este grafo existen dos tipo de nodos: lo procesos se
representan mediante cuadrados y los recursos mediante círculos
2)-Mecanismo
de sincronización entre procesos
En muchos casos, los
procesos se reúnen para realizar tareas en conjunto, a este tipo de relación se
le llama procesos cooperativos. Para lograr la comunicación, los procesos deben
sincronizarse, de no ser así pueden ocurrir problemas no deseados. La
sincronización es la transmisión y recepción de señales que tiene por objeto
llevar a cabo el trabajo de un grupo de procesos cooperativos.
Es la coordinación y
cooperación de un conjunto de procesos para asegurar la comparación de recursos
de cómputo. La sincronización entre procesos es necesaria para prevenir y/o
corregir errores de sincronización debidos al acceso concurrente a recursos
compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos
contendientes. La sincronización entre procesos también permite intercambiar
señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar
las relaciones específicas de precedencia impuestas por el problema que se
resuelve.
Para que los procesos puedan sincronizarse
es necesario disponer de servicios que permitan bloquear o suspender bajo
determinadas circunstancias la ejecución de un proceso. Los principales
mecanismos de sincronización que
Ofrecen los sistemas operativos son:
Mecanismo de sincronización entre Tuberías (pipes)
Una
tubería es un mecanismo de comunicación y sincronización. Desde el punto de
vista de su utilización, es como un seu-doarchivo mantenido por el sistema
operativo. Conceptualmente, cada proceso ve la tubería como un conducto con dos
extremos, uno de los cuales se utiliza para escribir o insertar datos y el otro
para extraer o leer datos de la tubería. La escritura se realiza mediante el
servicio que se utiliza para escribir datos en un archivo. De igual forma, la
lectura se lleva a cabo mediante el servicio que se emplea para leer de un
archivo.
Semáforos.
Mecanismo
de sincronización entre Semáforos
Un semáforo es un mecanismo de sincronización que se
utiliza generalmente en sistemas con memoria
compartida, bien sea un monoprocesador o un multiprocesador. Su uso en un
multicomputador depende del sistema operativo en particular. Un semáforo es un
objeto con un valor entero al que se le puede asignar un valor inicial no
negativo y al que sólo se puede acceder utilizando dos operaciones atómicas:
wait y signal (también llamadas down o up, respectivamente).
Mecanismo de sincronización entre Mutex.
Los mutex y las variables
condicionales son mecanismos especialmente concebidos para la sincronización de
procesos ligeros. Un mutex es el mecanismo de sincronización de procesos
ligeros más sencillo y eficiente. Los mutex se emplean para obtener acceso
exclusivo a recursos compartidos y para asegurar la exclusión mutua sobre
secciones críticas.
Mecanismo de sincronización entre Interbloqueo.
Un interbloqueo supone un bloqueo
permanente de un conjunto de procesos que compiten por recursos o bien se
comunican o sincronizan entre sí. Los interbloqueos que aparecen cuando se
utilizan mecanismos de comunicación y sincronización se deben a un mal uso de
los mismos.
Mecanismo de sincronización
entre Cerrojo de espera ocupada
Con TestAndSet
podemos construir un mecanismo de sincronización denominado cerrojo de
espera ocupada (spin lock). Cuando un proceso no puede entrar en su SC espera
en un bucle. El problema del mecanismo es que la espera no está acotada. En
monoprocesadores, un proceso con un cerrojo de espera ocupada no puede ceder la
CPU, ¿por qué? Paso de mensajes
Mecanismo de sincronización entre Paso de
Mensaje
La
comunicación entre procesos (IPC-Inter- Process Comunication) mediante paso de
mensajes es necesaria cuando los procesos no comparten memoria común
(nocomparten variables comunes).
Comunicación indirecta
Los
mensajes se dirigen/se reciben de un buzón (o también denominado puerto). Cada
buzón tiene un identificador único. P y Q deben compartir el buzón Propiedades
del enlace: Asociado con muchos procesos. Varios enlaces por par de procesos.
Unidireccional o bidireccional. Varios procesos comparten enlace quién lee un
mensaje
El paso de
mensajes puede producir fallos, son necesarios los mecanismos para recuperarnos
de ellos, denominados gestión de condiciones de excepción.
Perdida de mensaj
3)-¿Qué es
POSIX? ¿Cómo se relaciona con la
comunicación y sincronización de procesos?
POSIX:
es el acrónimo de Portable Operating System Interface, y X viene de UNIX como
seña de identidad de la API.
El
término fue sugerido por Richard Stallman en la década de 1980, respuesta a la
demanda de la IEEE, que buscaba un nombre fácil de recordar. La traducción del
acrónimo es "Interfaz de Sistema Operativo Portable".
Una
serie de pruebas acompañan al estándar POSIX. Son llamadas "PCTS" en
alusión al acrónimo "Posix Conformance Test Suite". Desde que la IEEE
empezó a cobrar altos precios por la documentación de POSIX y se ha negado a
publicar los estándares, ha aumentado el uso del modelo Single Unix
Specification. Este modelo es abierto, acepta entradas de todo el mundo y está
libremente disponible en Internet. Fue creado por The Open Group.
POSIX
es el estándar de interfaz de sistemas operativos portables de IEEE basado en
el sistema operativo UNIX. Aunque UNIX era prácticamente un estándar
industrial, había bastantes diferencias entre las distintas implementaciones de
UNIX, lo que provocaba que las aplicaciones no se pudieran transportar fácilmente
entre distintas plataformas UNIX.
El
POSIX Se trata de un estándar que intenta asegurar la portabilidad entre
diferentes sistemas operativos. Dentro del estándar se especifica el
comportamiento de las expresiones regulares y de las herramientas más comunes
que las usan.
Se relaciona de la siguiente
forma
Sincronización
de procesos. Define funciones para permitir la sincronización de procesos a
través de semáforos contadores.
Memoria
compartida. Tienen espacios de direccionamiento que son independientes entre
sí. Sin embargo, muchas aplicaciones de tiempo real (y también muchas que no
son de tiempo real) necesitan compartir grandes cantidades de datos de una
manera eficiente.
Señales
de tiempo real. Permite notificar eventos que ocurren en el sistema, pero no es
completamente satisfactorio para aplicaciones de tiempo real.
Las
señales no se almacenan en colas y, por tanto, algunos eventos se pueden
perder. Las señales no están priorizadas, y esto implica tiempos de respuesta
más largos para eventos urgentes.
Arquitectura de Memoria :
L la memoria es la parte del ordenador en la que se guardan o almacenan los programas (las instrucciones y los datos). Sin una memoria de la que los procesadores leyeran o escribieran la información, no habría ordenadores digitales de programa almacenado (como son los actuales desde EDVANC desde 1945).
Por una parte tenemos que la velocidad de ejecución de los programas es muy dependiente de la velocidad a la que se pueden transferir los datos entre la CPU y la memoria. Por otra parte también es importante disponer de una gran cantidad de memoria para facilitar la ejecución de programas que son grandes o que trabajan con gran cantidad de datos.
Por esto idealmente, la memoria debería de ser rápida, grande y barata. Como cabría esperar, hay un compromiso entre estas tres características de la memoria que mantienen las siguientes relaciones:
· A menor tiempo de acceso → mayor coste por bit.
· A mayor capacidad → menor coste por bit.
· A mayor capacidad → mayor tiempo de acceso.
Diferencia entre Memoria RAM, ROM Y PROM
La Memoria RAM es la que todos conocemos, pues es la memoria de acceso aleatorio o directo; es decir, el tiempo de acceso a una celda de la memoria no depende de la ubicación física de la misma (se tarda el mismo tiempo en acceder a cualquier celda dentro de la memoria). Son llamadas también memorias temporales o memorias de lectura y escritura.
En este tipo particular de Memoria es posible leer y escribir a voluntad. La Memoria RAM está destinada a contener los programas cambiantes del usuario y los datos que se vayan necesitando durante la ejecución y reutilizable, y su inconveniente radica en la volatilidad al contratarse el suministro de corriente; si se pierde la alimentación eléctrica, la información presente en la memoria también se pierde.
Por este motivo, surge la necesidad de una memoria que permanentemente, guarde los archivos y programas del usuario que son necesarios para mantener el buen funcionamiento del sistema que en se ejecute en la misma.
La Memoria ROM nace por esta necesidad, con la característica principal de ser una memoria de sólo lectura, y por lo tanto, permanente que sólo permite la lectura del usuario y no puede ser reescrita.
Por esta característica, la Memoria ROM se utiliza para la gestión del proceso de arranque, el chequeo inicial del sistema, carga del sistema operativo y diversas rutinas de control de dispositivos de entrada/salida que suelen ser las tareas encargadas a los programas grabados en la Memoria ROM. Estos programas (utilidades) forman la llamada BIOS del Sistema.
Entonces, en conclusión:
La Memoria RAM puede leer/escribir sobre sí misma por lo que, es la memoria que utilizamos para los programas y aplicaciones que utilizamos día a día
La Memoria ROM como caso contrario, sólo puede leer y es la memoria que se usa para el BIOS del Sistema.
EPROM = Electronically Programable Read Only Memory (Memoria Solo para Lectura que Tu puedes Programar de forma Electrónica) Esta memoria es una memoria híbrida entre la RAM y la ROM. Con un software y hardware especial puedes grabar/borrar información dentro de ella (usualmente una cantidad limitada de veces) pero igual que la ROM, si la dejas sin energía, el programa o los datos que grabaste no se borrarán por ello.
Que es una Memoria Virtual
La memoria virtual es una técnica de gestión de la memoria que permite que el sistema operativo disponga, tanto para el software de usuario como para sí mismo, de mayor cantidad de memoria que esté disponible físicamente. La mayoría de los ordenadores tienen cuatro tipos de memoria: registros en la CPU, la memoria caché (tanto dentro como fuera del CPU), la memoria RAM y el disco duro. En ese orden, van de menor capacidad y mayor velocidad a mayor capacidad y menor velocidad.
Muchas aplicaciones requieren acceso a más información (código y datos) que la que se puede mantener en memoria física. Esto es así sobre todo cuando el sistema operativo permite múltiples procesos y aplicaciones ejecutándose simultáneamente. Una solución al problema de necesitar mayor cantidad de memoria de la que se posee consiste en que las aplicaciones mantengan parte de su información en disco, moviéndola a la memoria principal cuando sea necesario. Hay varias formas de hacer esto.

Una opción es que la aplicación misma sea responsable de decidir qué información será guardada en cada sitio (segmentación), y de traerla y llevarla. La desventaja de esto, además de la dificultad en el diseño e implementación del programa, es que es muy probable que los intereses sobre la memoria de dos o varios programas generen conflictos entre sí: cada programador podría realizar su diseño teniendo en cuenta que es el único programa ejecutándose en el sistema. La alternativa es usar memoria virtual, donde la combinación entre hardware especial y el sistema operativo hace uso de la memoria principal y la secundaria para hacer parecer que el ordenador tiene mucha más memoria principal (RAM) que la que realmente posee. Este método es invisible a los procesos. La cantidad de memoria máxima que se puede hacer ver que hay tiene que ver con las características del procesador. Por ejemplo, en un sistema de 32 bits, el máximo es 232, lo que da 4096 Megabytes (4 Gigabytes). Todo esto hace el trabajo del programador de aplicaciones mucho más fácil, al poder ignorar completamente la necesidad de mover datos entre los distintos espacios de memoria. Aunque la memoria virtual podría estar implementada por el software del sistema operativo, en la práctica casi siempre se usa una combinación de hardware y software, dado el esfuerzo extra que implicaría para el procesador.
Que es una unidad de manejo de memoria
unidad de manejo de memoria (Lat.) (MMU, del inglés Memory Management Unit) es un dispositivo de Hardware formado por un grupo de circuitos integrados, responsable del manejo de los accesos a la memoria por parte de la Unidad de Procesamiento Central (CPU).
Entre las funciones de este dispositivo se encuentran la traducción de las direcciones lógicas (o virtuales) a direcciones físicas (o reales), la protección de la memoria, el control de caché y, en arquitecturas de computadoras más simples (especialmente en sistemas de 8 bits), Bank switching.
Cuando la CPU intenta acceder a una dirección de memoria lógica, la MMU realiza una búsqueda en una memoria caché especial llamada Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene la parte de la tabla de páginas usada hace menos tiempo. En esta memoria se mantienen entradas de la tabla de páginas (llamadas PTE por sus siglas en inglés, Page Table Entry), donde se pueden rescatar las direcciones físicas correspondientes a algunas direcciones lógicas, de forma directa. Cuando la dirección requerida por la CPU se encuentra en el TLB, su traducción a dirección real o física es entregada, en lo que se conoce como 'acierto en el TLB' ('TLB hit'). En otro caso, cuando la dirección buscada no se encuentra en el TLB (fallo en el TLB), el procesador busca en la tabla de páginas del proceso utilizando el número de página como entrada a la misma. En la entrada de la tabla de páginas del proceso se encuentra un bit de presencia, que indica si la página buscada está en memoria principal. Si el bit de presencia está activado, se carga esta PTE en el TLB y se devuelve la dirección física. En caso contrario, se informa al sistema operativo de la situación, mediante un fallo de página. Es el sistema operativo el encargado de realizar los ajustes necesarios (esto es, cargar la página en memoria física) usando uno de los Algoritmos de reemplazo de páginas, para continuar con la ejecución desde la instrucción que causó el fallo.
Un beneficio fundamental de la MMU es la posibilidad de implementar protección de memoria, evitando que los programas accedan a porciones de memoria prohibidas. Por ejemplo se puede evitar que un programa acceda o modifique sectores de memoria de otros programas.
El Sistema Operativo y el Manejo de Archivos
Sistema Operativo:
Un Sistema Operativo es el software encargado de ejercer el control y coordinar el uso del hardware entre diferentes programas de aplicación y los diferentes usuarios. Es un administrador de los recursos de hardware del sistema en una definición informal es un sistema que consiste en ofrecer una distribución ordenada y controlada de los procesadores, memorias y dispositivos de E/S entre los diversos programas que compiten por ellos. A pesar de que todos nosotros usamos sistemas operativos casi a diario, es difícil definir qué es un sistema operativo. En parte, esto se debe a que los sistemas operativos realizan dos funciones diferentes. Proveer una máquina virtual, es decir, un ambiente en el cual el usuario pueda ejecutar programas de manera conveniente, protegiéndolo delos detalles y complejidades del hardware. Administrar eficientemente los recursos del computador.
Una de las principales funciones de un Sistema Operativo es la administración del almacenamiento de información, para lo cual es necesario contar con un “Sistema de Archivos”. Con este término se hace referencia, por un lado, a los mecanismos y estructuras que el sistema operativo utiliza para organizar la información en medios físicos tales como discos y diskettes (aspecto físico del sistema de archivos), y por otro a la visión que es ofrecida al usuario para permitir la manipulación de la información almacenada (una abstracción, o perspectiva lógica del sistema de archivos).
Servicios POSIX Relacionados con Memoria Compartida
Memoria compartida. Tienen espacios de direccionamiento que son independientes entre sí. Sin embargo, muchas aplicaciones de tiempo real (y también muchas que no son de tiempo real) necesitan compartir grandes cantidades de datos de una manera eficiente.
Señales de tiempo real. Permite notificar eventos que ocurren en el sistema, pero no es completamente satisfactorio para aplicaciones de tiempo real. Las señales no se almacenan en colas y, por tanto, algunos eventos se pueden perder. Las señales no están priorizadas, y esto implica tiempos de respuesta más largos para eventos urgentes.
Comunicación de procesos. Se especifica un mecanismo sencillo de colas de mensajes para la comunicación entre procesos. Las colas de mensajes están identificadas por un nombre perteneciente a un espacio de nombres dependiente de la implementación.
Entrada/Salida Asíncrona. Define funciones que permiten solapar el procesado de aplicaciones con las operaciones de entrada/salida.

3- ¿Qué es Memoria Real?
La memoria real o principal es en donde son ejecutados los programas y procesos de una computadora y es el espacio real que existe en memoria para que se ejecuten los procesos.
Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.
Por lo general esta memoria es de mayor costo que la memoria secundaria, pero el acceso a la información contenida en ella es de más rápido acceso. Solo la memoria cache es más rápida que la principal, pero su costo es a su vez mayor.
Cuando no existe memoria virtual no hay diferenciación entre el espacio de direcciones y la memoria real; el espacio de direcciones que puede ser usado en los programas tiene idéntico tamaño al espacio de memoria real posible. Si se utiliza memoria virtual, el espacio de direcciones disponibles para los programas es aquel determinado por el tamaño de la memoria virtual implementada y no el espacio de direcciones provisto por la memoria real disponible (el espacio de la memoria virtual será mayor que el de la memoria real).
La organización y administración de la “memoria principal”, “memoria primaria” o “memoria real” de un sistema ha sido y es uno de los factores más importantes en el diseño de los S. O. (Ver la figura 3.2.1)
Los términos “memoria” y “almacenamiento” se consideran equivalentes.
Los programas y datos deben estar en el almacenamiento principal para:
Los términos “memoria” y “almacenamiento” se consideran equivalentes.
Los programas y datos deben estar en el almacenamiento principal para:
- Poderlos ejecutar.
- Referenciarlos directamente













No hay comentarios:
Publicar un comentario