2006-1 E2 --- - PONTIFICIA UNIVERSIDAD CATLICA DEL PER...

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: PONTIFICIA UNIVERSIDAD CATLICA DEL PER FACULTAD DE CIENCIAS E INGENIERA SEGUNDO EXAMEN DE SISTEMAS OPERATIVOS (1er perodo de 2006) Horarios 0881, 0883: prof. V. Khlebnikov Duracin: 3 horas. 1. (6 puntos) (Cigarette Smokers Problem [Patil 1971; Parnas 1975]) La solucin de este problema est presentada en la hoja del primer examen del semestre 1998-2. Hay tres tipos de recursos y hay tres procesos (las aplicaciones) que usan estos recursos. En un cierto punto de su ejecucin, para continuar, cada proceso necesita un recurso de cada tipo. Si l no tiene los tres recursos, debe esperar. Sin embargo, cada proceso tiene constantemente disponible uno de los tres recursos, diferente en cada proceso. Tambin hay un conjunto de procesos, conocidos como agentes (el sistema operativo), que ocasionalmente proporcionan dos de los recursos disponibles. El proceso que ya tiene el recurso faltante puede proceder entonces. Al terminar de trabajar con los tres recursos, el proceso debe notificar al agente. El agente no puede proporcionar ninguno de los recursos hasta que reciba esta notificacin. La solucin de la hoja del examen mencionada fue modificada con la adicin de los mensajes informativos y ejecutada en el simulador jBACI. Aqu est presentado el listado de esta ejecucin. Los mensajes informativos forman tres columnas: la primera es de los agentes, la segunda es de los helpers y la tercera es de los fumadores. Cada agente realiza 3 viajes. -> Helper 1: wait -> Helper 3: wait Agent ?: trip 1 -> Helper Helper Helper -> Helper Agent ?: trip 2 -> Helper 2: wait Helper 3: T <- 4 Helper 2: T <- 6 -> Smoker ? -> Helper 2: wait Helper 1: T <- 1 Agent ?: trip 1 Helper 2: T <- 3 -> Helper 1: wait -> Helper 3: wait -> Helper 2: wait -> Smoker ? Agent ?: trip 3 Helper 2: T <- 2 Agent ? finished. -> Helper 2: wait Helper 3: T <- 6 -> Smoker ? Smoker ? finished. -> Helper 3: wait Helper 1: T <- 1 -> Helper 1: wait Agent ?: trip 1 Helper 3: T <- 5 -> Smoker ? Agent ?: trip 2 Helper -> Helper Helper -> Helper 1: 3: 2: 1: T <- 1 wait T <- 3 wait -> Smoker ? -> Helper 2: wait Agent ?: trip 3 Helper 1: T <- 1 Agent ? finished. Helper 2: T <- 3 -> Helper 1: wait -> Smoker ? Agent ?: trip 2 Helper 3: T <- 4 Smoker ? finished. -> Helper 3: wait Helper 1: T <- 5 INF231 Sistemas Operativos 2006-1: Examen 2 2: 3: 2: 3: wait T <- 4 T <- 6 wait -> Smoker ? 1 -> Helper 2: wait -> Smoker ? -> Helper 1: wait Agent ?: trip 3 Helper 1: T <- 1 Helper 3: T <- 5 -> Helper 1: wait Agent ? finished. -> Smoker ? -> Helper 3: wait Smoker ? finished. Error: A deadlock occured. Globals: Resource = 0, 0, 0 1 2 3 4 5 6 S = 5, 1 ,0, 3, 0, 0 Mutex = 1 Sem = 1 MyMutex = 1 T = 0 Finished = 1, 1, 1 a) (1 punto) Recupere los nmeros de los agentes y de los fumadores marcados con el signo ? en este listado. b) (1 punto) Explique los valores 5, 1 y 3 como los valores finales de S[1], S[2] y S[4], respectivamente. c) (2 puntos) En el caso presentado la ejecucin se termin con el deadlock. Explique cul es la situacin que lleva a este tipo de error. d) (2 puntos) En algunos casos (como el que se presenta enseguida) la ejecucin se termina con otro tipo de error. Explique cmo se llega a esta situacin. ... Agent 3: trip 3 Helper 1: T <- 1 Agent 3 finished. -> Helper 2: wait ForceTermination starts Helper 2: T <- 0 FT: Resource signals Helper 3: T <- 4 ForceTermination starts ForceTermination starts Error: Invalid binary semaphore value Resource = 2, 1, 0 1 2 3 4 5 6 S = 5, 4 ,0, 3, 0, 0 Mutex = 1 Sem = 0 MyMutex = 0 T = 0 Finished = 1, 1, 1 2. (7 puntos) (Buddy system Abhishek Nayani, http://puggy.symonds.net/bhi/files/mm/node51.html) Usemos el mismo ejemplo presentado en el 2do examen del semestre 2004-1. Se considera la memoria RAM de 16 pginas de 4KB. La asignacin de memoria se hace por bloques de 1, 2, 4, 8 y 16 pginas. a) (1 punto) Cules son las direcciones hexadecimales de cada uno de los bloques posibles en cada una de las listas? En el ejemplo estn ocupadas las pginas 0, 1, 2, 3, 4, 6, 7 y 11. b) (1 punto) Considerando que la secuencia contigua de pginas que forma un bloque se asigna a un solo proceso, indique los procesos que estn en la memoria con las direcciones de inicio y el rango posible de las solicitudes de memoria que hicieron estos procesos tomando en cuenta la posible fragmentacin interna. Despus de unas solicitudes de memoria ms, las listas de bloques libres cambian sus estados de la siguiente manera: INF231 Sistemas Operativos 2006-1: Examen 2 2 Estado actual order(0): 5, 10 order(1): 8 [8,9] order(2): 12 [12,13,14,15] order(3): -> -> -> Estado final 5, 10 14 [14,15] c) (1 punto) De qu tamao de memoria fueron las solicitudes (indique el rango posible)? Tambin indique las direcciones que ocuparon los nuevos procesos. Adems de la lista de bloques libres existe otra estructura de control el mapa de bits de buddies. Cada bit representa dos bloques adyacentes del mismo tamao. El valor 0 indica que ambos bloques estn ocupados o libres. El valor 1 indica que solamente uno de los buddies est ocupado, y por eso, en caso de su liberacin se necesita hacer la fusin de buddies. El estado inicial de mapas de bits para nuestro ejemplo es el siguiente: pages: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 order(0): 0 0 1 0 0 1 0 0 order(1): 0 0 1 0 order(2): 0 1 order(3): 0 = = = = 00100100 0010 01 0 d) (1 punto) Cul es el estado final de estos mapas de bits despus de las solicitudes realizadas? Cuando se libera la pgina 11 (order 0), se busca el bit que representa esta pgina en el mapa de bits de order 0: index = page_idx >> (order + 1) = 11 >> (0 + 1) = 5 El bit 5 es 1 porque su buddy, la pgina 10, est libre. Por eso el bit se establece a 0 indicando que ambos buddies ahora estn libres. La pgina 10 se retira de la lista de bloques libres de order 0. Se comienza otra vez la revisin de la lista de order 1con las pginas 10 y 11. e) (3 puntos) Complete este proceso. Despus reptalo para los casos de liberacin sucesiva de las pginas 8, 9, 12 y 13. Presente las listas de bloques libres y los mapas de bits. 3. (7 puntos) Dado el siguiente programa y los resultados de su ejecucin: [vkhlebn@inform prg]$ cat memaddr1.c /* * ch03-memaddr.c --- Show address of code, data and stack sections, * as well as BSS and dynamic memory. * Linux Programming by Example: The Fundamentals * by Arnold Robbins, Prentice Hall, 2004, ISBN 0131429647 */ #include #include #include #include <stdio.h> <malloc.h> <unistd.h> <alloca.h> /* for definition of ptrdiff_t on GLIBC */ /* for demonstration only */ /* a function for showing stack groth */ "Uno es de donde estudi el bachillerato" Max Aub extern void afunc(void); int bss_var; /* auto init to 0, should be in BSS */ int data_var = 42; /* init to nonzero, should be data */ int huge_arr[1024][1024]; int main (int argc, char **argv) { char *p, *b, *nb; /* arguments aren't used */ printf ("Text Locations:\n"); printf ("\tAddress of main: %p\n", main); printf ("\tAddress of afunc: %p\n", afunc); printf ("Stack Locations:\n"); afunc(); p = (char *) alloca(32); if (p != NULL) { printf("\tStart of alloca()'ed array: %p\n", p); printf("\tEnd of alloca()'ed array: %p\n", p + 31); } printf printf printf printf ("Data Locations:\n"); ("\tAddress of data_var: %p\n", & data_var); ("\tAddress of huge_arr[0][0]: %p\n", huge_arr); ("\t huge_arr[0][1]: %p\n", & huge_arr[0][1]); 2006-1: Examen 2 INF231 Sistemas Operativos 3 printf ("\t huge_arr[1][0]: %p\n", & huge_arr[1][0]); printf ("BSS Locations:\n"); printf ("\tAddress of bss_var: %p\n", & bss_var); b = sbrk((ptrdiff_t) 32); /* grow address space */ nb = sbrk((ptrdiff_t) 0); printf ("Heap Locations:\n"); printf ("\tInitial end of heap: %p\n", b); printf ("\tNew end of heap: %p\n", nb); b = sbrk((ptrdiff_t) -16); /* shrink it */ nb = sbrk((ptrdiff_t) 0); printf ("\tFinal end of heap: %p\n", nb); } void afunc(void) { static int level = 0; auto int stack_var; if (++level == 3) return; /* recursion level */ /* automatic variable, on stack */ /* avoid infinite recursion */ printf ("\tStack level %d: address of stack_var: %p\n", level, & stack_var); afunc(); /* recursive call */ } [vkhlebn@inform prg]$ gcc memaddr1.c -o memaddr1 [vkhlebn@inform prg]$ ./memaddr1 Text Locations: Address of main: 0x80483a4 Address of afunc: 0x804854f Stack Locations: Stack level 1: address of stack_var: 0xbff46d94 Stack level 2: address of stack_var: 0xbff46d84 Start of alloca()'ed array: 0xbff46d80 End of alloca()'ed array: 0xbff46d9f Data Locations: Address of data_var: 0x8049934 Address of huge_arr[0][0]: 0x8049980 huge_arr[0][1]: 0x8049984 huge_arr[1][0]: 0x804a980 BSS Locations: Address of bss_var: 0x8049960 Heap Locations: Initial end of heap: 0x9032000 New end of heap: 0x9032020 Final end of heap: 0x9032010 [vkhlebn@inform prg]$ Linux usa el mecanismo de paginacin con la tabla de 2 niveles (Directorio de tablas y Tabla de pginas) con las pginas de 4KB (10+10+12 bits), mientras que el Directorio (y cada Tabla de pginas tambin) ocupa exactamente una pgina. Aqu suponemos que la RAM es de 1GB, y que el Directorio, las Tablas de pginas, y las mismas pginas que necesitar el programa se colocan en los marcos de la 2da mitad de la RAM. Indique las entradas del Directorio que usa este programa y sus direcciones fsicas. Proporcione los contenidos de estas entradas. Coloque en la RAM las Tablas de pginas que se usarn por los diferentes segmentos del programa e indique sus contenidos. Usando las direcciones virtuales de los elementos del vector huge_arr proporcione las direcciones fsicas que se generarn durante el recorrido de los elementos del vector en un bucle anidado. El examen ha sido preparado por VK. Pando, 7 de julio de 2006 INF231 Sistemas Operativos 2006-1: Examen 2 4 ...
View Full Document

This note was uploaded on 06/18/2008 for the course ENG SO taught by Professor Bello during the Spring '08 term at Pontifical Catholic University of Peru.

Ask a homework question - tutors are online