Nº Orden S. O. I nº de Matrícula



Descargar 66,97 Kb.
Fecha de conversión01.08.2017
Tamaño66,97 Kb.
E. U. de Informática Departamento de Informática Aplicada
Examen Final de Sistemas Operativos I 19 de Septiembre de 2000
A

pellidos


Nombre


Nº Orden



S.O. I

Nº de Matrícula

EJERCICIO 3 (4 puntos) Tiempo estimado: 75 min.

Dado que el mecanismo de los semáforos requiere de la existencia de variables compartidas, su utilización se limita a sistemas con memoria común con uno o varios procesadores. Esto no impide que el comportamiento abstracto de los semáforos pueda simularse en cualquier sistema operativo multiproceso. La simulación consistiría en implementar el tipo de datos Semáforo y las llamadas al sistema INIT, SUBIR y BAJAR haciendo uso de las llamadas al sistema disponibles en el sistema operativo en cuestión.


Se pide:
Exponer de manera convincente (sin que sea imprescindible llegar al nivel de codificación en un lenguaje de programación) cómo podría simularse el mecanismo de comunicación mediante semáforos en un sistema operativo multiproceso sin memoria compartida, con sistema de comunicación por paso de mensajes, con comunicación directa y asimétrica, y siendo los buzones de capacidad nula. Además siendo fijo el tamaño de los mensajes, de forma que cada mensaje permite tan sólo la transmisión de un único número entero.
La idea de partida a desarrollar es que cada vez que se crea un semáforo (llamada al sistema INIT) debe crearse un proceso nuevo que gestiona internamente una variable contador. En las llamadas al sistema SUBIR y BAJAR se deberán realizar, haciendo uso del sistema de paso de mensajes, las peticiones adecuadas al proceso gestor del semáforo, quien deberá estar programado para servirlas de la forma adecuada.

E. U. de Informática Departamento de Informática Aplicada


Examen Final de Sistemas Operativos I 19 de Septiembre de 2000
EJERCICIO 3 HOJA DE RESPUESTAS
Paso 1) Implementación del tipo Semáforo.
Indica qué tipo de datos utilizarías para implementar el tipo Semáforo, partiendo tan solo de los tipos de datos que se encuentran en cualquier sistema operativo multiproceso.


Paso 2) Implementación de la llamada al sistema:
INIT ( Sem : out Semáforo ; N : in NATURAL )
Supóngase que el código del proceso gestor del semáforo (que habrá que determinar en el Paso 5) está incluido en un procedimiento sin parámetros denominado ServidorDeSemáforo, y que lo primero que hace ese procedimiento es recibir un mensaje que le indica el valor N con el cual debe inicializar una variable local que juega el papel de contador del semáforo. Supóngase que la forma de la llamada al sistema CrearProceso disponible en el sistema operativo es la siguiente:
CrearProceso ( P : in ProcedimientoSinParámetros ) RETURN IdProceso ;
y que la forma de las primitivas de envío y recepción (simétrica y asimétrica) de mensajes es:
Enviar ( IdP : in IdProceso ; Mensaje : in INTEGER ) ;

Recibir ( IdP : in IdProceso ; Mensaje : out INTEGER ) ; -- simétrica



RecibirAny ( IdP : out IdProceso ; Mensaje : out INTEGER ) ;-- asimétrica



Paso 3) Implementación de la llamada al sistema: SUBIR ( Sem : in out Semáforo )



Paso 4) Implementación de la llamada al sistema: BAJAR ( Sem : in out Semáforo )



Paso 5) Implementación del procedimiento sin parámetros ServidorDeSemáforo
No hay que olvidarse de declarar las variables y estructuras de datos locales utilizadas. En caso de tener que manejar colas de (identificadores de) procesos supóngase que está disponible el tipo de datos ColaDeProcesos, con las operaciones:
EstáVacía ( C : in ColaDeProcesos ) RETURN BOOLEAN ;

MeterEnCola ( IdP : in IdProceso ; C : in out ColaDeProcesos ) ;

SacarDeCola ( IdP : out IdProceso ; C : in out ColaDeProcesos ) ;
La declaración de una variable de tipo ColaDeProcesos inicializa automáticamente dicha variable como una cola de procesos vacía.

E. U. de Informática Departamento de Informática Aplicada


Examen Final de Sistemas Operativos I 19 de Septiembre de 2000
A

pellidos


Nombre


Nº Orden



S.O. I

Nº de Matrícula

EJERCICIO 3 (4 puntos) Tiempo estimado: 75 min.

Dado que el mecanismo de los semáforos requiere de la existencia de variables compartidas, su utilización se limita a sistemas con memoria común con uno o varios procesadores. Esto no impide que el comportamiento abstracto de los semáforos pueda simularse en cualquier sistema operativo multiproceso. La simulación consistiría en implementar el tipo de datos Semáforo y las llamadas al sistema INIT, SUBIR y BAJAR haciendo uso de las llamadas al sistema disponibles en el sistema operativo en cuestión.


Se pide:
Exponer de manera convincente (sin que sea imprescindible llegar al nivel de codificación en un lenguaje de programación) cómo podría simularse el mecanismo de comunicación mediante semáforos en un sistema operativo multiproceso sin memoria compartida, con sistema de comunicación por paso de mensajes, con comunicación directa y asimétrica, y siendo los buzones de capacidad nula. Además siendo fijo el tamaño de los mensajes, de forma que cada mensaje permite tan sólo la transmisión de un único número entero.
La idea de partida a desarrollar es que cada vez que se crea un semáforo (llamada al sistema INIT) debe crearse un proceso nuevo que gestiona internamente una variable contador. En las llamadas al sistema SUBIR y BAJAR se deberán realizar, haciendo uso del sistema de paso de mensajes, las peticiones adecuadas al proceso gestor del semáforo, quien deberá estar programado para servirlas de la forma adecuada.

E. U. de Informática Departamento de Informática Aplicada


Examen Final de Sistemas Operativos I 19 de Septiembre de 2000
EJERCICIO 3 HOJA DE RESPUESTAS
Paso 1) Implementación del tipo Semáforo.
Indica qué tipo de datos utilizarías para implementar el tipo Semáforo, partiendo tan solo de los tipos de datos que se encuentran en cualquier sistema operativo multiproceso.


Está claro que a cada semáforo hay que asociarle un proceso, que queda completamente determinado por su identificador de proceso. Dado que el contador y la cola de procesos del semáforo pueden ponerse como variables locales del proceso asociado al semáforo, la implementación quedaría:

type Semáforo is IdProceso ;

Paso 2) Implementación de la llamada al sistema:
INIT ( Sem : out Semáforo ; N : in NATURAL )
Supóngase que el código del proceso gestor del semáforo (que habrá que determinar en el Paso 5) está incluido en un procedimiento sin parámetros denominado ServidorDeSemáforo, y que lo primero que hace ese procedimiento es recibir un mensaje que le indica el valor N con el cual debe inicializar una variable local que juega el papel de contador del semáforo. Supóngase que la forma de la llamada al sistema CrearProceso disponible en el sistema operativo es la siguiente:
CrearProceso ( P : in ProcedimientoSinParámetros ) RETURN IdProceso ;
y que la forma de las primitivas de envío y recepción (simétrica y asimétrica) de mensajes es:
Enviar ( IdP : in IdProceso ; Mensaje : in INTEGER ) ;

Recibir ( IdP : in IdProceso ; Mensaje : out INTEGER ) ; -- simétrica

RecibirAny ( IdP : out IdProceso ; Mensaje : out INTEGER ) ;-- asimétrica


PROCEDURE INIT ( Sem : out Semáforo ; N : in NATURAL )

BEGIN

Sem := CrearProceso(ServidorDeSemáforo) ;



Enviar(Sem, N) ;

END INIT ;




Paso 3) Implementación de la llamada al sistema: SUBIR ( Sem : in out Semáforo )


Vamos a emplear un mensaje especial para solicitar al proceso que gestiona el semáforo que realice las operaciones correspondientes a un SUBIR. En nuestro caso es apropiado que ese mensaje sea –1, por lo que definiríamos a nivel global la constante:


MsgSUBIR : constant INTEGER := -1 ;
PROCEDURE SUBIR (Sem : in out Semáforo ) ;

BEGIN


Enviar(Sem, MsgSUBIR) ;

END SUBIR ;



Paso 4) Implementación de la llamada al sistema: BAJAR ( Sem : in out Semáforo )


Igual que en para SUBIR, se define un tipo de mensaje especial con el fin de solicitar al servidor del semáforo que lleve a cabo las acciones correspondientes a un BAJAR. Tras enviar el mensaje en este caso es necesario esperar a que el servidor complete la operación, lo que puede ocurrir tras una larga espera si el contador del semáforo vale cero. Por eso en este caso es necesario añadir una llamada al sistema para la recepción del mensaje de fin de operación procedente del gestor del semáforo.


MsgBAJAR : constant INTEGER := -2 ;
PROCEDURE BAJAR (Sem : in out Semáforo ) ;

MsgFinBAJAR : INTEGER ;

BEGIN

Enviar(Sem, MsgBAJAR) ;



Recibir(Sem, MsgFinBAJAR) ;

END SUBIR ;




Paso 5) Implementación del procedimiento sin parámetros ServidorDeSemáforo
No hay que olvidarse de declarar las variables y estructuras de datos locales utilizadas. En caso de tener que manejar colas de (identificadores de) procesos supóngase que está disponible el tipo de datos ColaDeProcesos, con las operaciones:
EstáVacía ( C : in ColaDeProcesos ) RETURN BOOLEAN ;

MeterEnCola ( IdP : in IdProceso ; C : in out ColaDeProcesos ) ;

SacarDeCola ( IdP : out IdProceso ; C : in out ColaDeProcesos ) ;
La declaración de una variable de tipo ColaDeProcesos inicializa automáticamente dicha variable como una cola de procesos vacía.


PROCEDURE ServidorDeSemáforo ;

IdP : IdProceso ;

Cliente : IdProceso ;

Contador : NATURAL ;

ColaDeEspera : ColaDeProcesos ; -- Inicialmente vacía


MsgFinBAJAR : constant INTEGER ; -- Mensaje de sincronización

-- Su valor es irrelevante

BEGIN
RecibirAny(Cliente, Contador) ; -- Inicialización del semáforo
LOOP

RecibirAny(Cliente, Petición) ;

IF Petición = MsgBAJAR THEN -- Petición para BAJAR el sem.

IF Contador > 0 THEN

Contador := Contador – 1 ;

Enviar(Cliente, MsgFinBAJAR) ;

ELSE

MeterEnCola(Cliente, ColaDeEspera) ;



END IF ;

ELSIF Petición = MsgSUBIR THEN -- Petición para SUBIR el sem.

IF EstáVacia(ColaDeEspera) THEN

Contador := Contador + 1 ;

ELSE

SacarDeCola(IdP, ColaDeEspera) ;



Enviar(IdP, MsgFinBAJAR) ; -- Se desbloquea IdP

END IF ;


END IF ;

END LOOP ;



END ServidorDeSemáforo ;




La base de datos está protegida por derechos de autor ©absta.info 2019
enviar mensaje

    Página principal