Vous êtes sur la page 1sur 15

1 TAREA Sistemas Operativos 2004 - Prcticos Introduccin

1. ?Cuales son las dos funciones principales de un Sistema Operativo? *GESTIN DE RECURSOS: control de discos duros, CDROM y DVDROM, gestin de perifricos (teclado, ratn, etc...), asignacin de cantidades de memoria, etc... *INTERFAZ DE USUARIO: nos referimos al modo que tiene el ordenador de presentar la informacin al usuario. *ADMINISTRACIN DE ARCHIVOS : el sistema operativo de encarga de guardar los datos en distintas unidades de almacenamiento (disco duro, disquetes, CD's y DVD's), as como de ecuperarlos cuando el usuario se lo pida. *GESTIN DE TAREAS: los SO actuales son multitarea, es decir, pueden realizar varias tareas y ejecutar varios programas a la vez. As, mientras navegamos por Internet o escribimos una carta, el antivirus est vigilando por si se produce algn ataque, o nuestro messenger est comprobando continuamente si alguno de nuestros contactos se ha conectado y nos ha enviado algn mensaje. 2. ?Que es la multiprogramacion? Se denomina multiprogramacin a la tcnica que permite que dos o ms procesos ocupen la misma unidad de memoria principal y que sean ejecutados al mismo tiempo (seudo-paralelismo, en una nica CPU slo puede haber un proceso a la vez) en la unidad central de proceso o CPU. 3. Una de las razones por las que las Interfaces Graficas de Usuario (GUI) fueron adpotadas lentamente, fue por el costo del hardware necesario para soportarlas. ?Cuanta RAM de video se necesita para una terminal modo texto de 80x25 (columnas, lineas)?

4000 bytes de RAM de vdeo


?Cuanta para una pantalla grafica de 1024x768 con 24 bits de profundidad de color?

2MB de RAM nicamente para contener la imagen.


En 1980 el costo de la memoria era de u$s5/KB, ?Cuanto cuesta en la actualidad? Memoria Ram 1gb Ddr Pc2100 Pc2700 $295 Memoria Udimm Ddr3 1333mhz 4gb Adata $349 Memoria Ram Ddr3 8gb Pc3-10600 1333mhz $870 Memoria Udimm Ddr2 667mhz 2gb Adata $399 4. ?Cuales de las siguientes instrucciones deberian permitirse en modo kernel? 1. Deshabilitar todas las interrupciones 2. Leer el Reloj de Tiempo Real (RTC) 3. Escribir el RTC 4. Cambiar el mapa de memoria 5. Un microprocesador tiene un pipeline de 4 etapas. Todas las etapa demoran 1nseg en procesar. ?Cuantas intrucciones por segundo (IPS, KIPS, MIPS) puede ejecutar este micro?

6. La MMU normalmente compara la direccion virtual entrante con el Registro Limite, provocando una excepcion cuando la primera se excede. Un dise#o alternativo consiste en primero sumar la direccion virtual al Registro Base y despues comparar el resultado con la direccion fisica del Registro Limite. Son equivalentes estos metodos? No Kernel debe coordinarse con el hardware traduccin direcciones virtuales a fsicas. + Forma de realizar traduccin depende del hardware. + Partes del sistema UNIX que tratan con ella sern dependientes de la mquina. + Microncleo. ?Son equivalentes en velocidad? 7. Cuando un programa de usuario efectua un SysCall para leer o escribir un archivo en disco, este provee el archivo necesita, un puntero a un buffer de datos y la cantidad de datos. Entonces, el control pasa al SO, el que llama al driver apropiado. Supongamos que el driver le da la orden al disco y termina cuando llega una interrupcion. En caso de una lectura, obviamente el programa que llamo tiene que permanecer bloqueado (pues no hay datos). ?Es lo mismo para una escritura a disco?, es decir, ?Necesita bloquear el programa que pidio la escritura hasta que se complete la transferencia?

8. De condiciones de falla para cada uno de los SysCall que siguen: fork(), exec() y unlink(). Exec()= Retornan -1 si hay error. Si se ejecuta con xito no devuelve ningn valor dado que el cdigo de programa se sustituye por el del nuevo programa y se eliminan todas las variables del programa. fork()= fork causa la creacin de un nuevo proceso copia (casi exacta) del proceso padre. RETORNO si la llamada tiene xito retorna: al proceso hijo pid del hijo al proceso padre si fracasa devuelve -1 unlink()= Borra una entrada en la tabla de un directorio. pathname representa un fichero ya existente cuya entrada se quiere borrar. Si se elimina la ltima entrada existente en algn directorio que hace referencia a un inodo concreto el sistema elimina el fichero de ese i-nodo. RETORNO Retorna 0 si no hay error y -1 si hay algn error. 9. ?Puede la siguente llamada a sistema retornar en count un valor menor que nbytes? Explicar. count = write(fd, buffer, nbytes) La llamada write escribe un nmero de bytes dado por count en el fichero cuyo file descriptor viene dado por fd. Los bytes a escribir deben encontrarse a partir de la posicin de memoria indicada en buf. RETORNO Retorna el nmero de bytes escrito o -1 si hay un error. 10. Indique la diferencia escencial entre un dispositivo de caracteres y uno de bloques. carcter por carcter o como un conjunto de datos en un bloque de tamao predefinido. Las terminales, impresoras y mdems asncronos son dispositivos modo carcter. Cuando se usa el modo caracter se enva uno a la vez y hace eco en la otra terminal. Los manejadores (device drivers) de disco duro y la mayora de manejadores, usan el modo bloque, porque este es el camino ms rpido para enviar o recibir grandes cantidades de informacin. 11. Laboratorio 2 :) 12. Tome un *nix personal (Linux, OpenBSD, MINIX, Darwin, etc.) que pueda romper sin problemas. Escriba un shell script que intente crear un numero ilimitado de procesos hijos y observe lo que sucede. Nota: no intente esto en un laboratorio de acceso publico. shell acta como un intermediario entre el sistema operativo y el usuario gracias a lneas de comando que este ltimo introduce.

13. El comando strace da un registro (traza) de todas las SysCalls que llama el comando que le sigue. Obtenga las trazas de los siguientes comandos, tratando de identificar todos los SysCalls que producen (el comando man puede ayudar). 1. strace cat /etc/hosts 2. strace cat (CTRL-D puede ayudar a terminar) 3. strace echo 1 4. strace mozilla (busquese una silla comoda) Intente identificar patrones comunes que correspondan a codigos de inicializacion y terminacion de procesos.

2 TAREASistemas Operativos 2004 - Prcticos Procesos


Procesos e Hilos 1. Por que un hilo dejaria voluntariamente la CPU con un thread_yield si sabe que despues de esto puede que se quede sin CPU para siempre? Otra llamada comn relacionada con los threads es thread_yield, que permite que un thread abandone voluntariamente la CPU para permitir que se ejecute algn otro thread. Tal llamada es importante ya que no existe ninguna interrupcin de reloj que d soporte al tiempo compartido como en el caso de los procesos. Por tanto para los threads es importante ser corteses y ceder voluntariamente la CPU de cuando en cuando para dar la oportunidad de que se ejecuten otros threads. Hay otras llamadas que permiten a un thread esperar a que otro thread termine algn trabajo, o a que un thread anuncie que ha terminado algn trabajo, etc. 2. En un sistema con hilos, ?hay un solo stack por hilo o un stack por proceso cuando se usan hilos en espacio de usuario? ?Y si se usan hilos a nivel de kernel? el ncleo mantiene una tabla de threads que sigue la pista de todos los threads en el sistema. Cuando un thread desea crear un nuevo thread o destruir uno que ya existe, hace una llamada al ncleo, que es el que se encarga efectivamente de su creacin o destruccin actualizando la tabla de threads del sistema.

3. Para el siguiente programa decidir que valores se pueden imprimir. int a, *ptr_b; a = 0; ptr_b = malloc(sizeof(int)); *ptr_b = 0; if (fork()!=0) { a = 2; *ptr_b = 4; printf("%d %d\n", a, *ptr_b); } else { a = 5; *ptr_b = 7; printf("%d %d\n", a, *ptr_b); }

Pensar en el mismo codigo, solo que en vez de procesos tenemos hilos. a, *ptr_b Condiciones de Carrera 4. Dado el siguiente par de procesos que insertan datos en el spooler de impresion, donde cola es un espacio de memoria compartida y libre es una variable local a cada proceso. P0: . libre := cola->fin+1; cola->buffer[libre] := job4; cola->fin := libre; .

P1: . libre := cola->fin+1; cola->buffer[libre] := job5; cola->fin := libre; . 1. Dar una planificacion o escenario que produce la perdida de un trabajo. Situaciones en las que dos o ms procesos leen o escriben en un rea de memoria compartida y el resultado final depende de los instantes de ejecucin de cada uno. Esto se soluciona impidiendo que ms de un proceso acceda simultneamente a las variables compartidas. Se soluciona garantizando la exclusin mutua.

2. Dar una planificacion o escenario que funciona correctamente. Imaginemos que nuestro directorio de spool tiene un nmero muy grande de entradas, numeradas 0, 1, 2, ..., cada una de ellas capaz de contener un nombre de fichero. Imaginemos tambin que se tienen dos variables compartidas, out, que apunta al siguiente fichero a imprimir, e in, que apunta a la siguiente entrada libre en el directorio. Estas dos variables pueden caber perfectamente en un fichero de dos palabras disponible para todos los procesos. En un cierto momento, las entradas de la 0 a la 3 estn vacas (al haberse imprimido ya los ficheros correspondientes) y las entradas de la 4 a la 6 estn ocupadas (con los nombres de los ficheros encolados para su impresin). Ms o memos simultneamente, los procesos A y B deciden cada uno de ellos mandar a la cola de impresin un fichero. 3. ?Cuantas planificaciones existen para estas 3+3 lineas de codigo? ?Cuantas son correctas y cuantas producen problemas? (determine el %) 5. Se tienen 2 procesos P0 y P1, P0 con N acciones atomicas y P1 con M acciones atomicas. Calcular cuantos escenarios posibles de ejecucion se pueden dar en un entorno concurrente. 6. Considere los procesos P0 y P1, con un valor inicial de x=0. ?Cuales son los valores finales de x? Si ahora consideramos que x:=x+1 no es atomico a nivel de ensamblador y se compila en una secuencia de accesos a memoria y operaciones de la ALU, equivalentes al siguiente multiprograma. ?Cuales son los valores finales de x?

1. Regiones Criticas 7. Mostrar que agregando un re-testeo de lock=0 luego del busy waiting en metodo de la variable candado, no soluciona nada.

variable entera turno, inicializada a 0, indica a quien le corresponde el turno de entrar en la regin crtica y examinar o actualizar la memoria compartida. En un primer momento, el proceso 0 inspecciona turno, observa que vale 0 y entra en su regin crtica. El proceso 1 tambin se encuentra con que turno vale 0 y por lo tanto espera en un bucle vaco comprobando continuamente turno para ver cuando pasa a valer 1. La comprobacin continua de una variable hasta que contenga algn valor determinado se denomina espera activa (busy waiting). Usualmente debe evitarse, ya que derrocha tiempo de CPU. La utilizacin de la espera activa slo es apropiada cuando existan unas expectativas razonables de que la espera va a ser muy corta. Un cerrojo que utiliza espera activa se denomina un spin lock. 8. Mostrar que en alternancia estricta el proceso P0 puede impedir al P1 entrar a la CS aunque P0 este fuera de ella. Solucin de Peterson La Instruccin TSL (Test and Set Lock) 9. Deshabilitar interrupciones no funciona para regiones criticas anidadas (una dentro de la otra). Reescribir Begin/EndRegion para arreglar este problema. 10. Generalizar la alternancia estricta a 3 procesos. Generalizarla a n. 11. Demostrar de manera rigurosa que el algoritmo de Peterson no adolece del problema de progreso de la alternancia estricta. 12. {Dificil} Demostrar de manera rigurosa que el algoritmo de Peterson cumple con la propiedad de seguridad de la Region Critica (#proc_in_cs1).

13. Sigue cumpliendo con la propiedad de seguridad el algoritmo de Peterson si intercambiamos las 2 primeras asignaciones de su BeginRegion? Demostrar o dar contraejemplo. 14. Implementar un spin lock con TestInc. Primitivas de sincronizacion 15. Dados 3 procesos P0, P1 y P2 que realizan las acciones A0, A1 y A2, poner P's y V's de semaforos antes y despues de las acciones para sincrinizarlos de manera tal que se ejecuten en secuencia A0,A1,A2. Especificar el/los valor/es inicial/es de el/los semaforo/s. 16. Implementar utilizando semaforos la Region Critica N-1, es decir dentro de la region critica puede haber a lo mas N-1 procesos. 17. {Dificil} Implemente semaforos generales (el semaforo almacena valores arbitrarios) usando semaforos binarios (solo pueden valer 0 o 1). Los semforos que se inicializan con el valor 1 y que se utilizan para asegurar que tan solo un proceso pueda entrar en su regin crtica en cada momento, se denominan semforos binarios. La exclusin mutua est garantizada si cada proceso hace un bajar justo antes de entrar en su regin crtica, y un subir justo despus de abandonarla.

18. Implementar semaforos utilizando monitores. Un monitor es una coleccin de procedimientos, variables y estructuras de datos que estn todos agrupados juntos en un tipo especial de mdulo o paquete. Los procesos pueden llamar a los procedimientos de un monitor siempre que quieran, pero no se les permite acceder directamente a las estructuras de datos internas del monitor desde procedimientos declarados fuera del monitor.

19. {Dificil} La sincronizacion en monitores usa variables de condicion y dos operaciones especiales, wait y signal. Una forma mas general de sincronizacion son las esperas por condiciones con auto-sealizacion, donde escribimos await CondicionBooleana para bloquear el proceso hasta que la condicion se cumpla. Por ejemplo el BeginWrite del problema de lectores y escritores se resume a escribir await nr=0 nw=0 dentro del monitor Claramente este esquema es mas general y abstracto que los monitores de Hoare y BrinchHansen, pero no se usan. ?Por que? Ayuda: pensar en la implementacion. El otro uso de los semforos es la sincronizacin. Los semforos entrada_llena y entrada_vacia son necesarios para garantizar que ocurran o no ciertas secuencias de sucesos. En este caso concreto, esos semforos aseguran que el productor detiene su ejecucin cuando el bfer est lleno, y que el consumidor detiene su ejecucin cuando el bfer est vaco. Este uso es diferente de la exclusin mutua. 20. {Mediano} El problema de lectores y escritores puede ser formulado de varias formas respecto a cuando cada categoria de procesos puede empezar. De manera cuidadosa describa 3 variaciones distintas del problema, cada una favoreciendo (o desfavoreciendo) alguna categoria de procesos. Para cada variacion, especifique que sucede cuando un lector o escritor esta listo para acceder a la base de datos y que sucede cuando un proceso ha terminado de usar la base de datos. 21. Tenemos un Bao Unisex donde puede haber de manera excluyente varones y mujeres. Mediante semaforos sincronice la entrada y la salida del bao por parte de varones y mujeres (EntraVaron, SaleVaron, EntraMujer, SaleMujer) de manera que se cumpla con el invariante nv=0 nm=0, es decir que no se mezclen. Este problema clasico de sincronizacion tambien se conoce con el nombre de problema del Puente de Una Via, y modela el acceso a un recurso que puede ser compartido por muchos procesos de un tipo o (excluyente) de otro. Planificadores 22. Los planificadores RR mantienen una lista de todos los procesos listos para correr, donde cada proceso aparece exactamente una vez. ?Que pasaria si hubiera 2 o mas apariciones de un proceso en la lista de procesos para correr? ?Para que serviria? Si slo hay una CPU disponible, es necesario hacer una eleccin para determinar cual de esos procesos ser el siguiente que se ejecute. La parte del sistema operativo que realiza esa eleccin se denomina el planificador (scheduler), y el algoritmo que se utiliza para esa eleccin se denomina el algoritmo de planificacin.

3 TAREA Sistemas Operativos 2004 - Prcticos Deadlock


Procesos e Hilos

1. Estudiantes trabajando en sus computadoras personales de un laboratorio envian sus archivos para imprimir hacia un server que hace spooling en el disco duro. ?Bajo que condiciones puede ocurrir un deadlock si el espacio de disco para el print spool esta limitado? Como se puede evitar dicho deadlock? Se reduce la probabilidad de interbloqueos del spool: Proporcionando un espacio en disco considerablemente mayor que el necesario, preferentemente con asignacin dinmica. Limitando los spoolers de entrada para que no lean ms trabajos cuando los archivos de spool llegan a cierto nivel de saturacin. 2. En el deadlock tipico de 2 procesos y 2 recursos, ?Cambiaria la situacion si se devuelven los recursos en otro orden? 3. Las trayectorias de recursos o diagramas de procesos bidimensionales tienen trayectorias horizontales o verticales. ?Cuando puede suceder que las trayectorias sean diagonales? 4. ?Que es un deadlock de un solo proceso? ?Porque esta situacion no causa ninguna preocupacion dentro del Sistema Operativo? Pueden ser utilizados solo por un proceso a la vez. Se le conceden al proceso que lo solicita y cuando son liberados voluntariamente por ese proceso se asignan a otro proceso solicitante. Ej. Impresora.

Lab1: Observando el Comportamiento de Linux


Introduccin Podemos pensar el kernel de Linux como una coleccin de funciones y estructuras de datos. Estas estructuras de datos (o variables de kernel) contienen la visin del kernel respecto al estado del sistema, donde cada interrupcin, cada llamada al sistema, cada fallo de proteccin hacen que este estado cambie. Inspeccionando las variables del kernel podemos obtener informacin relevante a los procesos, interrupciones, dispositivos, sistemas de archivos, capacidades del hardware, etc. Tareas Parte A Buscar informacin acerca de la estructura del directorio /proc, y averiguar los siguientes datos Tipo y modelo de CPU. Versin del kernel. Tiempo en das, horas, minutos y segundos que han transurrido desde que se inici el sistema operativo. Cuanto tiempo de CPU ha sido empleado para procesos de usuario, de sistema y cuando tiempo no se us. Cuanta memoria tiene y cuanta est disponible. Cuantos pedidos de lectura/escritura a disco se han realizado. Cuantos cambios de contexto han sucedido. Cuantos procesos se crearon desde que inici el sistema. El sistema de archivos /proc
El kernel de Linux tiens dos funciones primarias: controlar el acceso a los dispositivos fsicos del ordenador y

Estos datos se tomaron del servidor de alumnos:

establecer cundo y cmo los procesos interactuarn con estos dispositivos. El directorio /proc/ tambin llamado el sistema de archivos proc contiene una jerarqua de archivos especiales que representan el estado actual del kernel permitiendo a las aplicaciones y usuarios mirar detenidamente en la vista del kernel del sistema. Dentro del directorio /proc/, se puede encontrar una gran cantidad de informacin con detalles sobre el hardware del sistema y cualquier proceso que se est ejecutando actualmente. Adems, algunos de los archivos dentro del rbol de directorios /proc/ pueden ser manipulados por los usuarios y aplicaciones para comunicar al kernel cambios en la configuracin. Tipo y modelo de CPU. #cat /proc/cpuinfo

Versin del kernel. $cat /proc/version

Tiempo en das, horas, minutos y segundos que han transurrido desde que se inici el sistema operativo. $cat /proc/uptime

Cuanta memoria tiene y cuanta est disponible. #cat /proc/meminfo

Cuantos cambios de contexto han sucedido. Cuantos procesos se crearon desde que inici el sistema. #cat /proc/stal

Type:GenuineIntel Model: Intel(R) Atom(TM) CPU N455 @ 1.66GHz Kernel: version 2.6.38-8-generic UpTime: 49004.74 UserTime: SysTime: IdleTime:13517.02 TotalMem:1014448 kB FreeMem: 235536 kB Disk: Context: 8303335 Processes:3705

Lab2: Un Baash
Introduccin
La interfaz ms tradicional de un sistema operativo UNIX-like (*NIX) es el intrprete de lnea de comandos. Este programa, que ejecuta en modo usuario, funciona en cualquier *NIX que soporte interface de caracteres y su funcin es aceptar comandos ingresados por entrada estandar (teclado), parsearlos, ejecutar la rden y mostrar el resultado en salida estandar (pantalla), para luego volver a repetir el proceso.

Operacin Bsica
La sintxis bsica del intrprete de comandos ms usual de *NIX, conocido como Bourne shell (Bourne again shell - bash, en Linux) es la siguiente, comando argumento1 argumento2 ... donde el comando y los argumentos son secuencias de caracteres separados por uno o ms espacios. La semntica dice que al presionar Enter el shell buscar el comando dentro de los comandos internos y si no lo encuentra tratar de buscar un archivo ejecutable con ese nombre, siguiendo las reglas de camino de *NIX o componiendo el comando a la secuencia de la variable de entorno PATH, para luego crear un proceso hijo que cargar y ejecutar el contenido de ese archivo con los argumentos correspondientes. Los comandos internos son manejados directamente por el shell, sin requerir de ningn archivo externo. Un ejemplo es el comando de cambio de directorio cd, el cual no se encuentra como archivo ejecutable en ningn lugar del rbol de directorio (el comando find /bin /sbin /usr/bin /usr/sbin -perm +400 -type f name cd no devuelve nada). Con man builtin obtenemos una lista de todos los comandos internos implementados en bash. Si el comando no es un builtin, el shell deber buscar un archivo dentro de su sistema de archivos, cargarlo y ejecutarlo pasndole los argumentos. El problema principal es dnde buscar este archivo. Existen tres formas: Camino absoluto Camino relativo Bsqueda en secuencia PATH Cuando el comando comienza con /, este se toma como un camino absoluto dentro del rbol del filesystem, el shell cargar en memoria y ejecutar el comando. En cambio si el comando comienza con el nombre de un directorio, . o .., se debe seguir las reglas usuales de camino relativo de *NIX, cargar y ejecutar el archivo comando, relativo al camino actual (ver comando pwd). Otro mecanismo entra en juego cuando el comando no comienza con un delimitador de camino absoluto o relativo. La variable de entorno PATH, que puede ser leida con el comando env o con echo $PATH, sirve de secuencia de caminos absolutos o relativos, separados por ':' que sern prefijados a commando hasta encontrar un archivo que pueda ser ledo y ejecutado. Usemos el archivo ejecutable /bin/date que nos proporciona la fecha y hora del sistema para ejemplificar los mecanismos de camino absoluto, relativo y secuencia PATH.

Ejercicios
1. Cmo ejecutamos un archivo que se llama exactamente como un builtin? Si el archivo es un ejecutable, basta hacer un "CreateProcess". Si el archivo no es un ejecutable, tienes que hacer un "ShellExecuteEx" con el "verbo" (lpVerb) correcto. Usualmente, "open" ser suficiente. Con esto dejas que Windows decida qu programa debe abrir el archivo en particular. enable: habilitar o deshabilitar los comandos builtin. 2. Por qu las recomendaciones de seguridad indican que es peligroso tener ./ en PATH al ms puro estilo DOS? El comando PATH permite indicar al MS-DOS donde ha de buscar un archivo de comandos si este no se encuentra en el directorio activo. Puede indicar uno o mas directorios, el directorio raz o cualquier otro subdirectorio y cualquier unidad de disco.

El comando PATH tiene tres parmetros: PATH <UNIDAD> <RUTA> Ejemplo : A:\>PATH C:\DOS; C: ;C:\WINDOWS 3. Supongamos que existen 2 comandos posibles dentro de la secuencia que contien PATH, donde el primero en la secuencia no est marcado como ejecutable y el segundo si. Qu hace el intrprete bash, ejecuta el segundo o informa que el primero no tiene permiso de ejecucin? (incorporte esta semntica a baash) 4. Indique qu sucede cuando se tiene un directorio en el pwd actual con el mismo nombre que un archivo ejecutable en el PATH. Dice que no puede ejecutar un directorio o ejecuta el comando que encontr? (siga esta forma en baash) PATH es la ruta de directorios donde bash busca archivos ejecutables, se separan unas rutas de otras con el caracter 5. Obtenga la lgica ms sencilla que unifique los tres tipos de bsqueda. 6. Podemos poner directorios relativos en PATH? (haga lo propio con baash) Rutas relativas: Son aquellas que se contruyen a partir del directorio en el que nos encontramos. Como ejemplo si tenemos la siguiente estructura de directorios: /directorio1/directorio2/directorio3 Si estamos en el directorio2 y queremos ir al directorio3 se pondra: cd directorio3 Si ahora queremos ir al directorio1 se hara de la siguiente forma: cd ../../ Cuando se pone ../ se baja un nivel en la estructura de directorios. En el ejemplo de arriba bajariamos primero al directorio2 y luego del directorio2 al directorio1.

Ejercicios
1. Investigue cuales son los comandos internos para manejo de procesos en background de bash Ejemplos de estos comandos son cd, chdir, alias, set o export. 2. En el ejemplo de arriba el operador '&' funciona como operador de composicin paralela. Cul es el operador de composicin secuencial en Bourne shell? operaciones lgicas: AND (-a) y OR (-o), string y enteros sobre los que puede establecer comparaciones. Adems si usamos la tcsh (es la nica ventaja de usar esta shell) 3. Investigue como bash forma el rbol de procesos cuando ejecutamos cmd1 & cmd2 & cmd3 & ... & cmdN. Piense la respuesta y luego utilice pstree para corroborarla. Aplique los resultados de su observacin a baash. 4. Indique cuantas letras 'a' debera imprimir el siguiente programa. Generalice. fork(); fork(); fork(); printf("a");

Lab3: TADs sincronizados Objetivos


Comprender y utilizar los mecanismos de sincronizacin de granularidad fina que provee POSIX

(PThreads). Solucionar problemas tpicos de concurrencia: condiciones de carrera, abrazos mortales, inhanicin, etc. Implementar TAD sincronizados.

Ejercicios
Predecir y comprobar los comportamientos posibles quitando alguno o ambos pthread_join. Comprobar los interleavings que se producen dependen de la velocidad y factor de carga de la CPU. Deberan observar diferencias de ejecucin entre las HP nuevas y las viejas. Forzar otros interleavings utilizando sched_yield. Si ponemos M y N de manera tal que los hilos tarden un tiempo considerable y corremos nuestro programa, mientras que en otra terminal observamos los procesos que se estn ejecutando. Cuntos son? Por qu? Observar que ahora si se producen interleavings entre los 2 mensajes. Remarcamos 2 aspectos de este programa: la compilacin condicional a travs del uso de las directivas del preprocesador #define, #undef, #ifdef y #endif, y las variables globales. La compilacin condicional, nos permite en este caso generar 2 versiones diferentes de nuestro cdigo una con informacin de debug y la otra sin ella, cambiando #define __DEBUG por #undef __DEBUG. Luego veremos como es posible obtener un mecanismo similar mejorando la legibilidad del cdigo. El uso de variables globales es una condicin necesaria para el uso de memoria compartida entre los hilos, a menos que pasemos a las funciones que ejecutan los hilos referencias a espacios de memoria pedidos en el montculo o heap. Si compilamos y ejecutamos nuestro ejemplo que podemos llamar programTopology, veremos que aunque la sonda muestra pocos cambios en x, esta siempre se mantiene en el rango [0,2]. La falta de cambios se debe nuevamente a la poca cantidad de interleavings que se producen, donde el efecto se nota ms en procesadores rpidos y poco utilizados por el SO. Para generar ms interleavings podemos inundar de sched_yield() nuestro programa. Sin embargo nunca se producen los interleavings que muestran que x:=x+1 no es atmico, pues en este caso el invariante del multiprograma 0<=x<=2 ya no vale. Notar que jams le declaramos al compilador C que esta instruccin fuese atmica, asi que puede ser compilada a una sola o a una secuencia (interrumpible) de intrucciones. A fin de simular el caso del incremento no atmico suele ser necesario dividir explicitamente los incrementos y decrementos en 3 instrucciones.

Ejercicios
Por qu no es posible compartir entre los hilos una variable declarada dentro del main()? Comprobarlo! los tipos por valor no se almacenan siempre en el thread stack como se viene diciendo en muchos sitios, solo se almacenan ah cuando son variables locales y expresiones intermedias. Hay dos posibles causas para que el planificador no interrumpa x:=x+1, una puede ser simplemente que este hecho resulte altamente improbable y la segunda es que la compilacin genere una instruccin atmica a nivel del microprocesador. Investigue sobre este hecho en diversas arquitecturas. (Ayuda: con gcc -S generamos el cdigo ensamblador intermedio donde podemos corroborar este ltimo hecho, quienes estn interesados, se pueden perparar ms ejercicios). Modificar programTopology.c para que los incrementos no sean atmicos y comprobar que la asercin puede no cumplirse para ciertos interleavings. Por qu al activar las opciones de optimizacin de cdigo -O, el programa anterior podra dejar de

producir los interleavings requeridos para que no valga el invariante, o para peor imprime constantemente 0. Intente reproducir estos resultados.

Vous aimerez peut-être aussi