Taller fundamentos y diseño de sistemas operativos fecha de entrega: Octubre 1 de 2019



Descargar 109,43 Kb.
Ver original pdf
Fecha de conversión30.09.2019
Tamaño109,43 Kb.
    Navegar por esta página:
  • Shell

TALLER FUNDAMENTOS Y DISEÑO DE SISTEMAS OPERATIVOS  

Fecha de entrega: Octubre 1 de 2019 

Grupos de dos estudiantes 

1.  Describa las diferencias entre comunicaciones cliente/servidor empleando sockets, RPC y RMI 

2.  Estudie el código referente a procesos en Linux que se encuentra en el siguiente enlace 

Link procesos

  

Escriba un programa C, usando la llamada al sistema fork(), que genere la secuencia de Fibonacci 



en el proceso hijo. El límite de la secuencia se proporcionará a través de la línea de comandos. Por 

ejemplo,  si  se  especifica  5,  el  proceso  hijo  proporcionará  los  primeros  cinco  números  de  la 

secuencia de Fibonacci como salida. Dado que los procesos padre e hijo disponen de sus propias 

copias de los datos, será necesario que el hijo presente la secuencia de salida. El padre tendrá que 

invocar  la  función  wait()  para  esperar  a  que  el  proceso  hijo  se  complete  antes  de  salir  del 

programa.  Realice las  comprobaciones  de  errores  necesarias  para asegurar  que  no  se  pase  un 

número negativo a través de la línea de comandos. 

Realice  el  programa  empleando  la  máquina  virtual  Ubuntu,  la  entrega  de  dos  códigos  iguales 

tendrá una nota de cero. 

3.  Leer la sección 3.3.1 creación de procesos. El siguiente programa en C proporciona las operaciones 

básicas de una Shell de línea de comandos. Este programa se compone de dos funciones: main() 

setup(). La función setup() lee el siguiente comando de usuario (que puede constar de hasta 80 

caracteres), lo analiza sintácticamente y lo descompone en identificadores separados que se usan 

para rellenar el vector de argumentos para el comando que se va a ejecutar.  (Si el comando se va 

a ejecutar en segundo plano, terminará con & y setup() actualizará el parámetro backgroung de 

modo que la función main() pueda operar de acuerdo con ello. Este programa se termina cuando 

el usuario introduce  y setup() invoca, como consecuencia, exit()

 

La funcion main() presenta el indicativo de comandos COMMAND-> y luego invoca setup(), que 



espera  a  que  el  usuario  escriba  un  comando.  Los  contenidos  del  comando  introducido  por  el 

usuario  se  cargan  en  la  matriz  args.  Por  ejemplo,  si  el  usuario  escribe  ls  –1  en  el  indicativo 



COMMAND->, se asigna args[0] la cadena ls y se asigna a args[1] el valor -1.  

 

El estudiante debe modificar la función main(), de manera que al volver de la función setup(), se 



genere un proceso hijo y ejecute el comando especificado por el usuario.  La función setup() carga 

los contenidos de la matriz args con el comando especificado por el usuario. Esta matriz args se 

pasa a la función execvp(), que dispone de la siguiente interfaz: 

 

execvp(char *command, char *params[]); 



 

 

donde command representa el comando que se va a ejecutar y params almacena los parámetros 



del comando.  La función execvp() debe invocarse como execvp(args[0],args); hay que asegurarse  de 

comprobar el valor de background para determinar si el proceso padre debe esperar a que termine el 

proceso hijo o no. 


 

Realice el programa empleando la máquina virtual Ubuntu, la entrega de dos códigos iguales tendrá una 

nota de cero. 

4.  Revise  el  siguiente  video,  y  describa  las  soluciones  para  la  sincronización  de  procesos.  Puede 

apoyarse de otros materiales (referenciarlos) 

Link video

 

 

 



 

 

 



 

 

 



 

 

 

 



 

 


Compartir con tus amigos:


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

    Página principal