tareas servidores2

18
SISTEMAS OPERATIVOS 2004 - PRÁCTICOS - INTRODUCCIÓN 1.-¿Cuáles son las dos funciones principales de un Sistema Operativo?  ADMINISTRACION DE TRABAJOS Cuando existen varios programas en espera de ser procesados, el sistema operativo debe decidir el orden de procesamiento de ellos, así como asignar los recursos necesarios para su  proceso. ADMINISTRACION DE RECURSOS Mediante está función el sistema operativo esta en capacidad de distribuir en forma adecuada y en el momento oportuno los diferentes recursos (memoria, dispositivos, etc.,...) entre los diversos programas que se encuentran en proceso, para esto, lleva un registro que le permite conocer que recursos están disponibles y cuales están siendo utilizados, por cuanto tiempo y por quien, etc. CONTROL DE OPERACIONES DE ENTRADA Y SALIDA Mediante esta actividad el sistema operativo decide que proceso hará uso del recurso, durante cuánto tiempo y en que momento. ADMINISTRACION DE LA MEMORIA Supervisa que áreas de memoria están en uso y cual están libre, determina cuanta memoria asignará a un proceso y en que momento, además libera la memoria cuando ya no es requerida para el proceso. 2.-¿Qué es la multiprogramación? Ejecución de múltiples tareas compartiendo los recursos de una misma computadora. Se trata de una evolución del  procesamiento por lotes. Dentro de la multiprogramación se encuentra el concepto de tiempo compartido, en donde cada usuario tiene acceso a una única computadora a través de terminales. La computadora central se simula ejecutar en simultáneo las tareas de cada usuario 3.-¿Cuanta RAM de video se necesita para una terminal modo texto de 80x25 (columnas, lineas)? 4000 bytes de RAM de vídeo 4.-¿Cuanta para una pantalla grafica de 1024x768 con 24 bits de profundidad de color? 2MB de RAM únicamente para contener la imagen. 5.-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 6.-¿Cuáles de las si guientes instrucciones deberían 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

Transcript of tareas servidores2

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 1/18

 

SISTEMAS OPERATIVOS 2004 - PRÁCTICOS -INTRODUCCIÓN 

1.-¿Cuáles son las dos funciones principales de un Sistema Operativo? ADMINISTRACION DE TRABAJOS

Cuando existen varios programas en espera de ser procesados, el sistema operativo debedecidir el orden de procesamiento de ellos, así como asignar los recursos necesarios para suproceso.

ADMINISTRACION DE RECURSOSMediante está función el sistema operativo esta en capacidad de distribuir en formaadecuada y en el momento oportuno los diferentes recursos (memoria, dispositivos, etc.,...)entre los diversos programas que se encuentran en proceso, para esto, lleva un registro quele permite conocer que recursos están disponibles y cuales están siendo utilizados, porcuanto tiempo y por quien, etc.

CONTROL DE OPERACIONES DE ENTRADA Y SALIDAMediante esta actividad el sistema operativo decide que proceso hará uso del recurso,durante cuánto tiempo y en que momento.

ADMINISTRACION DE LA MEMORIASupervisa que áreas de memoria están en uso y cual están libre, determina cuanta memoriaasignará a un proceso y en que momento, además libera la memoria cuando ya no esrequerida para el proceso.2.-¿Qué es la multiprogramación?Ejecución de múltiples tareas compartiendo los recursos  de una misma computadora. Setrata de una evolución del procesamiento por lotes. Dentro de la multiprogramación se

encuentra el concepto de tiempo compartido, en donde cada usuario tiene acceso a unaúnica computadora a través de terminales. La computadora central se simula ejecutar ensimultáneo las tareas de cada usuario3.-¿Cuanta RAM de video se necesita para una terminal modo texto de 80x25 (columnas,lineas)?4000 bytes de RAM de vídeo4.-¿Cuanta para una pantalla grafica de 1024x768 con 24 bits de profundidad de color?2MB de RAM únicamente para contener la imagen.5.-En 1980 el costo de la memoria era de u$s5/KB, ?Cuanto cuesta en la actualidad?Memoria Ram 1gb Ddr Pc2100 Pc2700 $295Memoria Udimm Ddr3 1333mhz 4gb Adata $349

Memoria Ram Ddr3 8gb Pc3-10600 1333mhz $870Memoria Udimm Ddr2 667mhz 2gb Adata $3996.-¿Cuáles de las siguientes instrucciones deberían permitirse en modo kernel?1. Deshabilitar todas las interrupciones2. Leer el Reloj de Tiempo Real (RTC)3. Escribir el RTC4. Cambiar el mapa de memoria

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 2/18

 

7.-Un microprocesador tiene un pipeline de 4 etapas. Todas las etapas demoran 1nseg enprocesar.¿Cuántas instrucciones por segundo (IPS, KIPS, MIPS) puede ejecutar este micro?Los microprocesadores de 8 y 16 bits han sido medidos con KIPS(kiloinstrucciones porsegundo), que equivale a 0'001 MIPS. El primermicroprocesador de propósito general, el

Intel 8080 ejecutaba 640KIPS. El Intel 8086 (16 bits), el primer microprocesador usado enPC,800 KIPS. El Pentium 4 llega aproximadamente a 1'700 MIPS.Los PC actuales realizanun máximo de 18.000 millones deoperaciones lógicas por segundo. Si se ejecutan 6instrucciones porciclo y hay 3.000 millones de ciclos por segundo, se tienen 18.000MIPS8.-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 enprimero sumar la direccion virtual al Registro Base y despues comparar el resultado con ladireccion fisica del Registro Limite. ?Son equivalentes estos metodos? ?Son equivalentesen velocidad?No, Kernel debe coordinarse con el hardware⇒ traducción direcciones virtuales a físicas.9.-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 dedatos. Entonces, el control pasa al SO, el que llama al driver apropiado. Supongamos que eldriver le da la orden al disco y termina cuando llega una interrupcion. En caso de unalectura, obviamente el programa que llamo tiene que permanecer bloqueado (pues no haydatos). ?Es lo mismo para una escritura a disco?, es decir, ?Necesita bloquear el programaque pidio la escritura hasta que se complete la transferencia?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 ningún valor dado queel código de programa se sustituye por el del nuevo programa y se eliminan todas lasvariables del programa. fork()= fork causa la creación de un nuevo proceso copia (casiexacta) 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 deun directorio. pathname representa un fichero ya existente cuya entrada se quiere borrar. Sise elimina la última entrada existente en algún directorio que hace referencia a un i-nodoconcreto el sistema elimina el fichero de ese i-nodo. RETORNO Retorna 0 si no hay error y-1 si hay algún error.10.-¿Puede la siguiente llamada a sistema retornar en count un valor menor que nbytes?Explicar. count=write(fd, buffer, nbytes)11.-Indique la diferencia esencial entre un dispositivo de caracteres y uno de bloques.Cada tipo de dispositivo en el sistema Linux se comunica con la aplicación en una de lasformas siguientes: carácter por carácter o como un conjunto de datos en un bloque detamaño predefinido. Las terminales, impresoras y módems asíncronos son dispositivosmodo carácter. Cuando se usa el modo caracter se envía uno a la vez y hace eco en la otraterminal. Los manejadores (device drivers) de disco duro y la mayoría de manejadores,usan el modo bloque, porque este es el camino más rápido para enviar o recibir grandescantidades de información.12.- Tome un *nix personal (Linux, OpenBSD, MINIX, Darwin, etc.) que pueda romper sinproblemas. Escriba un shell script que intente crear un número ilimitado de procesos hijos yobserve lo que sucede. Nota: no intente esto en un laboratorio de acceso público.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 3/18

 

13.- El comando strace da un registro (traza) de todas las SysCalls que llama el comandoque le sigue. Obtenga las trazas de los siguientes comandos, tratando de identificar todoslos SysCalls que producen (el comando man puede ayudar).1. strace cat /etc/hosts2. strace cat (CTRL-D puede ayudar a terminar)

3. strace echo 14. strace mozilla (busquese una silla comoda)Intente identificar patrones comunes que correspondan a códigos de inicialización yterminación de procesos.

SISTEMAS OPERATIVOS 2004 - PRÁCTICOS  – PROCESOSProcesos e Hilos1.-¿Por qué un hilo dejaría voluntariamente la CPU puede que se quede sin CPU parasiempre?2.-En un sistema con hilos, ?hay un solo stack por hilo o un stack por proceso cuando seusan hilos en espacio de usuario? ¿Y si se usan hilos a nivel de kernel?el núcleo 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 unallamada al núcleo, que es el que se encarga efectivamente de su creación o destrucciónactualizando la tabla de threads del sistema.3.- Para el siguiente programa decidir que valores se pueden imprimir.

Pensar en el mismo codigo, solo que en vez de procesos tenemos hilos.Se pueden imprimir a, *ptr_b

Condiciones de Carrera 

4.- Dado el siguiente par de procesos que insertan datos en el spooler de impresion, dondecola es un espacio de memoria compartida y libre es una variable local a cada proceso.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 4/18

 

 Dar una planificacion o escenario que produce la perdida de un trabajo.Dar una planificacion o escenario que funciona correctamente.¿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 atómicas y P1 con M accionesatómicas. Calcular cuántos escenarios posibles de ejecución se pueden dar en un entornoconcurrente.6.- Considere los procesos P0 y P1, con un valor inicial de x=0. ¿Cuáles son los valoresfinales de x?

Si ahora consideramos que x:=x+1 no es atómico a nivel de ensamblador y se compila enuna secuencia de accesos a memoria y operaciones de la ALU, equivalentes al siguientemultiprograma. ¿ Cuáles son los valores finales de x?

Regiones Críticas

7.-Mostrar que agregando un re-testeo de lock=0 luego del busy waiting en metodo de lavariable candado, no soluciona nada.8.- Mostrar que en alternancia estricta el proceso P0 puede impedir al P1 entrar a la CS

aunque P0 este fuera de ella.9.- Deshabilitar interrupciones no funciona para regiones criticas anidadas (una dentro de laotra). 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 problemade 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_cs≤1). 

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 5/18

 

13.-¿ Sigue cumpliendo con la propiedad de seguridad el algoritmo de Peterson siintercambiamos las 2 primeras asignaciones de su BeginRegion? Demostrar o darcontraejemplo.14.- Implementar un spin lock con TestInc.

15.- Implementar un spin lock con Swap.

Primitivas de sincronizacion

16.- Dados 3 procesos P0, P1 y P2 que realizan las acciones A0, A1 y A2, poner P's y V'sde semaforos antes y despues de las acciones para sincrinizarlos de manera tal que seejecuten en secuencia A0,A1,A2. Especificar el/los valor/es inicial/es de el/los semaforo/s.17.- Implementar utilizando semaforos la Region Critica N-1, es decir dentro de la regioncritica puede haber a lo mas N-1 procesos.18.- {Dificil} Implemente semaforos generales (el semaforo almacena valores arbitrarios)usando semaforos binarios (solo pueden valer 0 o 1).19.- Implementar semaforos utilizando monitores.20.- {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 porcondiciones con auto-señalizacion, donde escribimos await CondicionBooleana parabloquear 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 monitorClaramente este esquema es mas general y abstracto que los monitores de Hoare y Brinch-Hansen, pero no se usan. ?Por que?Ayuda: pensar en la implementacion.21.- {Mediano} El problema de lectores y escritores puede ser formulado de varias formasrespecto a cuando cada categoria de procesos puede empezar. De manera cuidadosadescriba 3 variaciones distintas del problema, cada una favoreciendo (o desfavoreciendo)alguna categoria de procesos. Para cada variacion, especifique que sucede cuando un lectoro escritor esta listo para acceder a la base de datos y que sucede cuando un proceso haterminado de usar la base de datos.22.- Tenemos un Baño Unisex donde puede haber de manera excluyente varones ymujeres. Mediante semaforos sincronice la entrada y la salida del baño por parte de varones

y mujeres (EntraVaron, SaleVaron, EntraMujer, SaleMujer) de manera que se cumplacon 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 delPuente de Una Via, y modela el acceso a un recurso que puede ser compartido por muchosprocesos de un tipo o (excluyente) de otro.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 6/18

 

23.- 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 masapariciones de un proceso en la lista de procesos para correr? ?Para que serviria?24.- ?Se podra "medir" si un proceso es IO-bound o CPU-bound analizando el codigofuente? (analisis estatico) ?Como se podria determinar en tiempo de ejecucion? (analisis

dinamico)25.- Mediciones realizadas en un sistema muestran que en promedio un proceso corre por T  tiempo antes de bloquearse en I/O. Un cambio de proceso requiere de un tiempo S,denominado overhead (sobrecarga). Para un planificador RR con un quanto Q, dar unaformula que mida la eficiencia de la CPU  (tiempo usado en CPU/tiempo total) para lossiguientes casos.

1. Q = infinito2. Q>T3. S<Q<T4. Q=S

5. Q casi 0

26.- El planificador SPN (shortest process next) necesita de una medida de estimacion deltiempo de computo. Con un "factor de memoria" α=1/2, donde los ultimos tiempos de

corrida fueron: 40, 20, 40 y 15 msec. ?Cual es la estimacion del tiempo siguiente?27.- Dar un conjunto de procesos con sus tiempos de arribo y sus tiempos de uso de CPU,que muestren que SJF!=SRTN (shortest job first, shortest remaining time next).28.- Completar la tabla para las siguientes politicas de planificacion: FCFS, SJN, SRTN,RR (Q=1), RR (Q=5).

LAB1: OBSERVANDO EL COMPORTAMIENTO DE LINUX

ObjetivosIniciar los laboratorios con un proyecto sencillo, donde se muestre como a través del

sistema de archivos virtual /proc de Linux, podemos inspeccionar información interna del

kernel. Se deberá generar la utilidad ksamp que muestra de diversas formas algúnsubconjunto de la información disponible en /proc.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 7/18

 

IntroducciónPodemos pensar el kernel de Linux como una colección de funciones y estructuras de datos.Estas estructuras de datos (o variables de kernel) contienen la visión del kernel respecto alestado del sistema, donde cada interrupción, cada llamada al sistema, cada fallo deprotección hacen que este estado cambie. Inspeccionando las variables del kernel podemos

obtener información relevante a los procesos, interrupciones, dispositivos, sistemas dearchivos, capacidades del hardware, etc.

Muchas variables conforman el estado del kernel y estas pueden estar alojadas de maneraestática o dinámica en un stack frame de la memoria del kernel. Dado que el kernel deLinux es un programa "C" de código abierto, es posible inspeccionar el código fuente y

encontrar algunos ejemplos relevantes de estas variables como por ejemplo xtime definido

en include/linux/sched.h que mantiene la hora del sistema, la estructura task_struct

definida en include/linux/sched.h que contiene la descripción completa de un proceso,o los valores nr_threads y nr_running definidos en kernel/fork.c los cuales indicancuantos procesos existen y cuantos de estos están corriendo.

El código fuente de Linux lo podemos encontrar en el directorio /usr/src/linux de lamayoría de las distribuciones, pero también existen páginas donde podemos navegar elcódigo de varias versiones de kernel, como por ejemplo Linux Cross Reference. Tambiénexisten utilidades para navegación de código local como Source Navigator. 

Tareas

Parte ABuscar información acerca de la estructura del directorio /proc, y averiguar los siguientes

datos

  Cuantos procesos se crearon desde que inició el sistema.  Tipo y modelo de CPU.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 8/18

 

 

  Versión del kernel.

  Tiempo en días, horas, minutos y segundos que han transurrido desde que se inicióel sistema operativo.

  Cuanta memoria tiene y cuanta está disponible.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 9/18

 

 

  Cuantos cambios de contexto han sucedido.

Parte BEscriba una versión inicial del programa que inspeccione las variables del kernel a través

del /proc e informe por stdout:

  Tipo y modelo de CPU.  Versión de Kernel.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 10/18

 

  Cantidad de tiempo transcurrido desde que se inició el sistema operativo, con el

formato ddD hh:mm:ss.

También se pide incluir una cabecera donde se indique el nombre de la máquina y la fechay hora actuales.

Parte CEscriba una segunda versión del programa que imprima la misma información que la

versión por defecto, pero en caso de invocarse con la opción -s, agrega la siguienteinformación:

  Cantidad de tiempo de CPU utilizado para usuarios, sistema y proceso idle.  Cantidad de cambios de contexto.  Fecha y hora cuando el sistema fue iniciado.  Número de procesos creados desde el inicio del sistema.

Parte DLa tercera parte involucra imprimir todo lo de las versiones anteriores, pero cuando se

invoca con la opción -l interval duration imprime además:

  Número de peticiones a disco realizadas.  Cantidad de memoria configurada en el hardware.  Cantidad de memoria disponible.  Lista de los promedios de carga de 1 minuto.

Asi por ejemplo ksamp -l 2 100 mostrará el promedio de carga de 1 minuto por 100segundos tomando muestras en intervalos de 2 segundos.

Cómo atacar los problemasLa página del manual de Linux man 5 proc contiene suficiente información al respecto,también se pueden ver artículos de la revista  Linux Magazine  " An Overview of the ProcFilesystem" o The Official Red Hat Linux Reference Guide en su capítulo "The /procFilesystem". En general basta con realizar una búsqueda de "/proc filesystem" en cualquierbuscador de la Web para encontrar información en cualquier idioma.

Una vez encontrados los archivos de /proc donde está la información, es necesario abrirlos,leer la información y cerrarlos. Esto se puede lograr con las funciones de la biblioteca "C"

fopen, fgets (o fscanf) y fclose. Un ejemplo de uso sería el siguiente.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 11/18

 

 

Para facilitar el proceso de lectura y análisis de los archivos, les facilitamos un TAD parahacer lexing (separación de la entrada en tokens, es decir elementos como palabras,números, simbolos, espacios en blanco). Pueden usarlo en su proyecto tal como está, y les

aconsejamos hacerlo así no pierden tiempo en este aspecto del proyecto. El fuente del TADlo pusimos en un paquete Lexer.tar.gz. 

Para leer los argumentos de entrada e interpretarlos (proceso de parsing) hay que hacer uso

de las variables int argc y char *argv[]. La primera indica cuantos argumentos se

pasaron y argv es el arreglo de tamaño argc con cada uno de las cadenas de losargumentos. Notar que como el propio comando se incluye en la lista de argumentos una

llamada ksamp -l 10 100 implica que al inicio del main se cumple

{argc=4 & argv[]={"ksamp", "-l", "10", "100"}}.

Pueden utilizar la función getopt de la glibc para no volver a inventar la rueda. Puedenencontrar información en man 3 getopt o bien en las Infopages invocando pinfo libc ybuscado este tema. Este último comando muestra la GNU C Library reference manual. 

El ejemplo anterior resulta sencillo en cuanto a que no tenemos que "interpretar" lasecuencia de caracteres, sólo la tomamos y la imprimimos. Sin embargo, muchos de losparámetros que se necesitan imprimir requieren de cierto tratamiento. Este proceso detransformar una secuencia de caracteres en alguna representación más adecuada para sutratamiento se denomina parsing. Por ejemplo el tiempo transcurrido desde que el sistemainició se expresa en segundos, y se encuentra en cierta parte del archivo. Entonces tenemosque extraerlo y convertirlo a un entero sin signo. Cuando ya tenemos un entero sin signo,

resulta sencillo operar matemáticamente y generar una secuencia de caracteres (imprimir)con el formato adecuado. Esto último se denomina pretty printing.

Funciones como atoi y sus relacionadas pueden ser útiles. También resulta útil sscanf.

Para obtener la fecha y hora que va en el encabezado del informe que brinda el programa,

se pueden utilizar la funciones de la glibc gettimeofday y ctime, o bien leer el tiempo deinicio del sistema y sumarlo al transcurrido para luego convertirlo a fecha.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 12/18

 

Cuando se necesite realizar las muestra del promedio de carga de 1 minuto, puede ser útil la

función sleep que duerme un proceso por un intervalo determinado de tiempo.

Qué se debe Entregar

  Código (funcionando bajo las especificaciones dadas y bajo cualquier caso de testde parametros de entrada)

o  Dividir en módulos de manera juiciosa.o  Estilo de código.o  Usar TADs, por ejemplo no estaría mal un TAD que contenga toda la

información que se quiere con métodos para leer del kernel e imprimir en unfiledescriptor los datos, o uno que contenga las opciones de la línea de

comandos y que acepte un método para leerlas a partir de argc y argv.

o  Utilizar Makefile.  Informe del desarrollo del proyecto

TipsNo intenten hacer todo de golpe, vayan de a partes, y sobre todo discutan, analicen ytrabajen en ideas de forma grupal. Una hora pensando en papel libremente suele ahorrarmuchos problemas en el momento de codificar.

Utilicen debuggers de línea de comandos como gdb o interfaces gráficas para estos comoddd. También pueden realizar compilación condicional para hacer debugging de la siguentemanera.

Deducir la entrada disk_io requiere un poco más de trabajo que el resto de la información.Encuentren el manejo de /proc en kernels 2.4.x, analicen el código fuente y deduzcan elsignificado de cada elemento. Pueden utilizar Linux Cross Reference. 

Tareas AdicionalesSi les sobra tiempo pueden hacer las siguientes mejoras:

  Algunos de las datos que se muestran involucran cantidades de memoria, y el valor

que se puede leer en /proc está siempre expesado en bytes. Como leer cantidadescomo 64MB en bytes suele ser dificultoso, muchos programas incluyen la opción -h 

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 13/18

 

que significa "legible para humanos", que transforma las cantidades a una unidadcorrespondiente de manera que la cadena se mantenga acotada en tamaño.

  Este programa puede ser muy útil para monitorear la actividad de un servidor, pero

resulta más practico si se le agrega una opción -d que bajo la opción -l muestra eldiferencial de los valores leidos para, por ejemplo, poder medir cuantos cambios de

contexto se están realizando por segundo. Este es un muy buen lugar para utilizar unTAD con los valores de muestra que acepte métodos que calculen el diferencialentre muestras.

  Utilizar getopt de POSIX.2 para parsear la línea de comandos.  Comparar lo realizado con utilidades establecidas que realizan tareas similares,

como por ejemplo procinfo.

LAB2: UN BAASHObjetivos

1.  Utilizar los mecanismos de concurrencia y comunicación de gruesa granularidad  que brinda UNIX.

2.  Comprender como los interpretes de línea de comando reflejan la arquitectura yestructura interna de éstas primitivas de comunicación y concurrencia.

3.  Implementar de manera sencilla un intérprete de línea de comandos (shell) al estilode Bourne shell.

IntroducciónLa interfaz más tradicional de un sistema operativo UNIX-like (*NIX) es el intérprete de

línea de comandos. Este programa, que ejecuta en modo usuario, funciona en cualquier*NIX que soporte interface de caracteres y su función es aceptar comandos ingresados porentrada estandar  (teclado), parsearlos, ejecutar la órden y mostrar el resultado en salida

estandar (pantalla), para luego volver a repetir el proceso.

Por defecto UNIX ejecuta un proceso shell cada vez que un usuario interactivo ingresa alsistema. Aunque esto puede ser configurado de otra manera (ver el último campo de cada

línea del archivo /etc/passwd), en la mayoría de los casos luego de ingresar nuestronombre de usuario y contraseña, el proceso que maneja el ingreso de usuarios genera un

 proceso hijo que ejecuta un shell, con el uid/gid (identificador de usuario y grupo)correspondiente al usuario. En este momento la pantalla se suele presentar de la siguientemanera:

[juan@hal juan]$

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 14/18

 

Después de este texto inicial llamado  prompt , que contiene información de entorno comopor ejemplo el nombre del usuario, el nombre del host y el último tramo del directorio

corriente, el shell espera datos a través de la stdin que normalmente se asocia aldispositivo teclado. Podemos escribir el comando que deseamos que el shell ejecute, e

iniciar la ejecución ingresando el caracter NEWLINE '\n' generalmente asociado con la

tecla Enter o Return.

[juan@hal juan]$ sleep10 

Hará que el shell ejecute un proceso con el programa binario que se encuentra en

/bin/sleep, pasándole el argumento "10".

Operación BásicaLa sintáxis básica del intérprete de comandos más usual de *NIX, conocido como Bourneshell (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 másespacios.

La semántica dice que al presionar Enter el shell buscará el comando dentro de loscomandos internos y si no lo encuentra tratará de buscar un archivo ejecutable con esenombre, 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á elcontenido de ese archivo con los argumentos correspondientes.

Los comandos internos son manejados directamente por el shell, sin requerir de ningún

archivo externo. Un ejemplo es el comando de cambio de directorio cd, el cual no seencuentra como archivo ejecutable en ningún lugar del árbol de directorio (el comandofind /bin /sbin /usr/bin /usr/sbin -perm +400 -type f -name cd no devuelvenada).

Con man builtin obtenemos una lista de todos los comandos internos implementados enbash.

Si el comando no es un builtin, el shell deberá buscar un archivo dentro de su sistema dearchivos, cargarlo y ejecutarlo pasándole los argumentos. El problema principal es dóndebuscar este archivo. Existen tres formas:

  Camino absoluto  Camino relativo

  Búsqueda en secuencia PATH 

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 15/18

 

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 usualesde 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 serán prefijados a commando hasta encontrar un archivo que puedaser leído y ejecutado.

Usemos el archivo ejecutable /bin/date que nos proporciona la fecha y hora del sistemapara ejemplificar los mecanismos de camino absoluto, relativo y secuencia PATH.

[juan@hal juan]$/bin/date Sun Aug 31 15:33:22 ART2003 [juan@hal juan]$ cd /usr [juan@hal /usr]$../bin/date Sun Aug 31 15:33:57 ART2003 [juan@hal /usr]$ cd / [juan@hal /]$ bin/date Sun Aug 31 15:34:24 ART2003 

[juan@hal /]$ cd ~ [juan@hal juan]$ date Sun Aug 31 15:35:02 ART2003 

Todos los comandos ejecutados por bash son el mismo /bin/date.

Ejercicios

1.  ¿Cómo ejecutamos un archivo que se llama exactamente como un builtin?

2.  ¿Por qué las recomendaciones de seguridad indican que es peligroso tener ./ en

PATH al más puro estilo DOS?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 intérprete bash, ejecuta el segundo o informa que elprimero no tiene permiso de ejecución? (incorporte esta semántica a baash)

4.  Indique qué sucede cuando se tiene un directorio en el pwd actual con el mismonombre que un archivo ejecutable en el PATH. ¿Dice que no puede ejecutar undirectorio o ejecuta el comando que encontró? (siga esta forma en baash)

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 16/18

 

5.  Obtenga la lógica más sencilla que unifique los tres tipos de búsqueda.

6.  ¿Podemos poner directorios relativos en PATH? (haga lo propio con baash)

Ejercicios

1.  Investigue cuales son los comandos internos para manejo de procesos enbackground de bash 

cd, chdir, alias, set o export

2.  En el ejemplo de arriba el operador '&' funciona como operador de composiciónparalela. ¿Cuál es el operador de composición secuencial en Bourne 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 observación a baash.

4.  Indique cuantas letras 'a' debería imprimir el siguiente programa. Generalice.

fork(); fork(); fork(); printf("a"); 

LAB3: TADS SINCRONIZADOS

Objetivos

  Comprender y utilizar los mecanismos de sincronización de granularidad fina queprovee POSIX (PThreads).

  Solucionar problemas típicos de concurrencia: condiciones de carrera, abrazosmortales, inhanición, etc.

  Implementar TAD sincronizados.

Introducción

En el Laboratorio anterior utilizamos las  facilidades de concurrencia de gruesa

granularidad de UNIX. Creamos y esperamos la finalización de procesos que se ejecutabanen espacios de memoria disjuntos, y donde sólo se compartían los descriptores de archivos.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 17/18

 

Esta concurrencia hacía uso del concepto de proceso como unidad básica de ejecución, elcual brindaba la posibilidad de ejecutar una componente de un multiprograma en unespacio de memoria disjunto y a la vez protegido. Al no compartir memoria, los procesosefectuan su comunicación utilizando alguna de las estructuras que sí se comparten, comopor ejemplo el sistema de archivos, y vimos cómo a través de  pipes podíamos comunicar y

sincronizar procesos.

Un hilo o proceso liviano (ligthweight process - LWP) es otro de los posibles modelos deejecución de un multiprograma que proveen los sistemas operativos en general y *NIX enparticular, y brinda otra posibilidad para realizar multiprogramación.Esta segunda opción existe para que el programador tenga la posibilidad de elegir unasolución de compromiso entre dos cualidades deseables: protección y eficiencia.Normalmente estos los hilos tienen vida dentro de los procesos, y podemos pensar en losprocesos simples que utilizamos en el Lab2 como procesos que sólo contienen un hilo deejecución interno.

El problema reside en que un proceso maneja un estado relativamente grande, queinvolucra los registros del microprocesador, la pila de ejecución, el mapa de memoria, losdescriptores de archivos y tabla de manejadores de señal, con lo cual el nacimiento, la vida(cambios de contexto) y la muerte de los procesos, son operaciones que consumen muchosrecursos de tiempo (cpu) y espacio (memoria).Los hilos en cambio, lo único que no comparten son los registros del microprocesador y elespacio de la pila, por lo que las opearciones de creación, cambio de contexto y muerte,resultan mucho más económicas.

La comunicación entre las componentes del multiprograma es otro factor que diferencialos procesos de los hilos. Mientras en los hilos es posible transferir información entre

componentes simplemente leyendo y escribiendo en el espacio de memoria compartida, losprocesos tienen que efectuar un secuencia de llamadas al núcleo, para poder completar latransferencia de información: espacio_de_usuario1, kernel, espacio_de_usuario_2,incurriendo no sólo en sobrecarga por copia, sino también por cambios de niveles deprotección.

El sistema operativo Linux, incorpora procesos livianos en un modelo conocido uno-a-uno 

utilizando clone, la generalización del syscall fork. A cada hilo se le asocia un proceso,donde se comparte la memoria y los descriptores de archivos.Lamentablemente esta implementación de procesos livianos, pierde algunas de lascaracterísticas esperables (LinuxThreads Frequently Asked Questions, Programación

utilizando C threads, FAQ de comp.programming.threads).

Es muy interesante la discusión que se propone en "The Art of Unix Programming" en elcapítulo 7 " Multiprogramming", sobre todo en la subsección "Threads Threat or Menace?",atacando abiertamente el uso de hilos en la multiprogramación.

5/16/2018 tareas servidores2 - slidepdf.com

http://slidepdf.com/reader/full/tareas-servidores2 18/18

 

Ejercicios

  ¿Por qué no es posible compartir entre los hilos una variable declarada dentro delmain()? ¡Comprobarlo!

  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 lacompilación genere una instrucción atómica a nivel del microprocesador. Investigue

sobre este hecho en diversas arquitecturas. (Ayuda: con gcc -S generamos elcódigo ensamblador intermedio donde podemos corroborar este último hecho,quienes estén interesados, se pueden perparar más ejercicios).

  Modificar programTopology.c para que los incrementos no sean atómicos ycomprobar que la aserción puede no cumplirse para ciertos interleavings.

  ¿Por qué al activar las opciones de optimización de código -O, el programa anteriorpodría dejar de producir los interleavings requeridos para que no valga el invariante,o para peor imprime constantemente 0. Intente reproducir estos resultados.