Arquitectura de ordenadores
Enunciados

Soluciones de los ejercicios sobre Monoalgorítmez y Multiagorítmez

1


2

Número de bytes
MODULE RAIZ ---------------
NPF DATA.B "A:PROG.ENS", 0 11
NPO DATA.B "A:PROG.OBJ", 0 11
NP1 DATA.B "A:ENSP1", 0 8
NP2 DATA.B "A:ENSP2", 0 8
MENS1 DATA.B "Paso 1", H'0D 7
MENS2 DATA.B "Paso 2", H'0D 7
AV RES.B 1 1
PUNT RES.B 2 2
TABLA RES.B 10240 10240
PRINC WRITE_A (#0, #MENS1, #AV) 31
LD .0, #NPF 4
ST .0, /PUNT 4
LD .0, #PUNT 4
LD_OV (#NP1) 16
CALL OVER 3
WAIT_A (#AV) 16
WRITE_A (#0, #MENS2, #AV) 31
LD .0, #NPO 4
ST .0, /PUNT 4
LD .0, #PUNT 4
LD_OV (#NP2) 16
CALL OVER 3
WAIT_A (#AV) 16
EXIT 4
OVER NOP 1
END PRINC -----
10.456
Observaciones: Cálculo de bytes:
Primer paso Segundo paso
Intérprete 500 500
Prefijo raíz 4 4
Raíz (con la tabla) 10.456 10.456
Módulo 30.720 40.960
------- -------
41.680 51.920

3


4

Errores:

 

(a) Durante la ejecución de READ(DESCR,#ZLEC,#2000):

   NBYP       NBL       NBYT       PUNTES       PUNTZU   
2.000 1.417 512 1.500 7.000
1.488 122 512 1.500 7.512
976 392 512 1.500 8.024
464 55 464 1.500 8.536
         

 

(b) Durante la ejecución de WRITE(DESCR,#ZESC,#1000):

   NBYP       NBL       NBYT       PUNTES       PUNTZU   
1.000 122 24 1.988 9.000
976 392 512 1.500 9.024
464 55 464 1.500 9.536
         
         

5


6

A cada paso por el bucle BUC se escribe "Soy de la generación i" (i = 1, 2, ...), se crea un proceso idéntico y se queda esperando que termine este proceso. Así hasta que i = 4: este proceso escribe lo de "muero sin hijos" y termina, lo que despierta al proceso 3, que escribe "Mis descendientes han muerto" y termina, lo que despierta al 2...

El resultado será:

Soy de la generación 1
Soy de la generación 2
Soy de la generación 3
Soy de la generación 4. Muero sin haber tenido hijos
Mis descendientes han muerto
Mis descendientes han muerto
Mis descendientes han muerto
Nota: El programa dado en el enunciado aparece en la página 588 del libro (4ª ed.) con algunas erratas que aquí se han corregido: En la 3ª edición (pág. 589) había algunos errores:

7

Aunque no se dice explícitamente en el enunciado, FORK_EXEC devuelve al padre el PID del hijo, lo mismo que FORK.

Para comparar mejor con el programa original, se reproduce a continuación éste, con las instrucciones que deben desaparecer tachadas, y las nuevas a la derecha:

 

MODULE INIT
EXPORT INIT_ENT          
  PID0     RES.B  1
  PID1     RES.B  1
  PID2     RES.B  1
  PID3     RES.B  1
  NGETTY   DATA.B "A:getty",0
  NTTY0    DATA.B 0        
  NTTY1    DATA.B 1       
  NTTY2    DATA.B 2       
  NTTY3    DATA.B 3
  INIT_ENT FORK   FK_EX(#NGETTY,#NTTY0,#1) 
           CMP.B  .13,#0                           F0    FORK    FK_EX(#NGETTY,#NTTY0,#1) 
           BZ     TTY0                                   CMP.B  .13,#0
           ST.B   .13,PID0                               BZ     TTY0
           FORK   FK_EX(#NGETTY,#NTTY1,#1)               ST.B   .13,PID0
           CMP.B  .13,#0                                 BR     SIGUE
           BZ     TTY1                             F1    FORK    FK_EX(#NGETTY,#NTTY1,#1) 
           ST.B   .13,PID1                               CMP.B  .13,#0 
           FORK   FK_EX(#NGETTY,#NTTY2,#1)               BZ     TTY1
           CMP.B  .13,#0                                 ST.B   .13,PID1     
           BZ     TTY2                                   BR     SIGUE
           ST.B   .13,PID2                         F2    FORK    FK_EX(#NGETTY,#NTTY2,#1) 
           FORK   FK_EX(#NGETTY,#NTTY3,#1)               CMP.B  .13,#0
           CMP.B  .13,#0                                 BZ     TTY2  
           BZ     TTY3                                   ST.B   .13,PID2
           ST.B   .13,PID3                               BR     SIGUE
  SIGUE    WAIT(#0)                                F3    FORK    FK_EX(#NGETTY,#NTTY3,#1) 
           CMP.B  .13,PID0                               CMP.B  .13,#0
           BZ     F0                                     BZ     TTY3
           CMP.B  .13,PID1                               ST.B   .13,PID3
           BZ     F1                                     BR     SIGUE
           CMP.B  .13,PID2                         TTY0  EXEC(#NGETTY,#NTTY0,#1)  
           BZ     F2                               TTY1  EXEC(#NGETTY,#NTTY1,#1)  
           CMP.B  .13,PID3                         TTY2  EXEC(#NGETTY,#NTTY2,#1)    
           BZ     F3                               TTY3  EXEC(#NGETTY,#NTTY3,#1)  
           BR    SIGUE                                       END      


8

seg. TUCP1 PRIOR1 TUCP2 PRIOR2 TUCP3 PRIOR3 Activo
0 0 5 0 7 0 9 P1
1 5 10 0 7 0 9 P2
2 2 7 5 12 0 9 P1
3 6 11 2 9 0 9 P2
4 3 8 6 13 0 9 P1
5 6 11 3 10 0 9 P3
6 3 8 1 8 5 14 P1
7 6 11 0 7 2 11 P2
8 3 8 5 12 1 10 P1
9 6 11 2 9 0 9 P2
10 3 8 6 13 0 9 P1

fracción de tiempo para PROCESO 1: 1/2
fracción de tiempo para PROCESO 2: 1/3
fracción de tiempo para PROCESO 3: 1/6


9

SEG TUCP1 PRIOR1 TUCP2 PRIOR2 TUCP3 PRIOR3 ACTIVO espacio para hacer acotaciones de X
0 0 BASE=5 0 BASE=X 0 BASE=7 P1 X>=5;(5,6,7,8,9,10)
1 10/2=5 5+5=10 0/2=0 X 0/2=0 7 P2 X<=7;(5,6,7)
2 5/2=2 2+5=7 10/2=5 5+X 0/2=0 7 P1 X+5>=7; (5,6,7)
3 12/2=6 6+5=11 5/2=2 2+X 0/2=0 7 P3 X+2>7; (6,7)
4 6/2=3 3+5=8 2/2=1 1+X 10/2=5 5+7=12 P2 X+1<8; (6)
5 3/2=1 1+5=6 11/2=5 5+6=11 5/2=2 2+7=9 P1 X=6
6 11/2=5 5+5=10 5/2=2 2+6=8 2/2=1 1+7=8 P2 X=6
7 5/2=2 2+5=7 12/2=6 6+6=12 1/2=0 0+7=7 P1 X=6
8 12/2=6 6+5=11 6/2=3 3+6=9 0/2=0 0+7=7 P3 X=6
9 6/2=3 3+5=8 3/2=1 1+6=7 10/2=5 5+7=12 P2 X=6
10 3/2=1 1+5=6 11/2=5 5+6=11 5/2=2 2+7=9 P1 X=6

fracción de tiempo para PROCESO 1: 2/5
fracción de tiempo para PROCESO 2: 2/5
fracción de tiempo para PROCESO 3: 1/5


10


11

  1. ¿Cuántos procesos coexisten como máximo? ¿Porqué?

    Coexisten 3 como máximo, pues el padre crea inicialmente dos hijos y espera a que terminen, para meterse en un bucle en el que crea un hijo y espera a que termine.

  2. ¿Si se sacara el contenido final del fichero por pantalla, qué se vería?

    012345

  3. ¿Cuántos procesos distintos han escrito en el fichero?

    6 (el padre escribe el 0 y cada uno de los hijos escribe 1,2,3,4,5)

  4. Dibuje y complete un diagrama similar al de la transparencia 15 de Multialgorítmez, que indique la situación en el caso del máximo de procesos simultáneos, si el descriptor del fichero es 2, la entrada en la tabla de posiciones de fichero es 3 y la entrada en la tabla de ficheros abiertos es 4. Escoja para el pid de cada proceso cualquier número comprendido entre 1 y 15.

    Una solución es:

    diagrama


Enunciados

Arquitectura de ordenadores