practicas servidores 2
Post on 05-Apr-2018
215 Views
Preview:
TRANSCRIPT
-
8/2/2019 Practicas Servidores 2
1/31
Prctico Introduccin
Cuales son las dos funciones principales de un Sistema Operativo?
GESTIN DE RECURSOS: control de discos duros, CDROM y DVD-ROM, gestin deperifricos (teclado, ratn, etc...), asignacin de cantidades de memoria, etc...
GESTIN DE TAREAS: los SO actuales son multitarea, es decir, pueden realizar variastareas y ejecutar varios programas a la vez. As, mientras navegamospor Internet oescribimos una carta, el antivirus est vigilando por si se produce alg
n ataque, o nuestromessenger est comprobando continuamente si alguno de nuestros contactos se ha conectado y nos ha enviado algn mensaje.
Que es la multiprogramacin?
Se denominamultiprogramacin a la tcnica que permite que dos oms procesos ocupen la misma unidad dememoriaprincipal y que seanejecutados al "mismo tiempo" (pseudo-paralelismo, en una nica CPU
slo puede haber un proceso a la vez) en la unidad central de procesooCPU.
Una de las razones por las que las Interfaces Graficas de Usuario(GUI) fueron adoptadas lentamente, fue por el costo del hardwarenecesario para soportarlas.
Cuanta RAM de video se necesita para una terminal modo texto de80x25 (columnas, lineas)?
4000 bytes de RAM de vdeo
Cuanta para una pantalla grafica de 1024x768 con 24 bits deprofundidad de color?
2MB de RAM nicamente para contener la imagen.Una pantalla conresolucin de 1600x1200 y una profundidad de color de 24 bits
http://es.wikipedia.org/wiki/Memoria_de_ordenadorhttp://es.wikipedia.org/wiki/Memoria_de_ordenadorhttp://es.wikipedia.org/wiki/Memoria_de_ordenadorhttp://es.wikipedia.org/wiki/CPUhttp://es.wikipedia.org/wiki/CPUhttp://es.wikipedia.org/wiki/CPUhttp://es.wikipedia.org/wiki/CPUhttp://es.wikipedia.org/wiki/Memoria_de_ordenador -
8/2/2019 Practicas Servidores 2
2/31
requiere casi 6 MB de datos nicamente para la imagen esttica, sinincluir los datos que se representan la imagenEn 1980 el costo de la memoria era de u$s5/KB, Cuanto cuesta en laactualidad?
Memoria Ram 1gb Ddr Pc2100 Pc2700 $295Memoria Udimm Ddr3 1333mhz 4gb Adata $349Memoria Ram Ddr3 8gb Pc3-10600 1333mhz $870Memoria Udimm Ddr2 667mhz 2gb Adata $399
Cuales de las siguientes instrucciones deberian permitirse en modokernel?
Deshabilitar todas las interrupciones
Leer el Reloj de Tiempo Real (RTC)
Escribir el RTC
Cambiar el mapa de memoria
Un microprocesador tiene un pipeline de 4 etapas. Todas las etapasdemoran 1nseg en procesar. Cuantas instrucciones por segundo(IPS, KIPS, MIPS) puede ejecutar este micro?
Muchos microprocesadores de 8 y 16 bits han sido medidos con KIPS(kiloinstrucciones por segundo), que equivale a 0'001 MIPS. El primermicroprocesador de propsito general, el Intel 8080 ejecutaba 640KIPS. El Intel 8086 (16 bits), el primer microprocesador usado en PC,800 KIPS. El Pentium 4 llega aproximadamente a 1'700 MIPS.
Los PC actuales realizan un mximo de 18.000 millones deoperaciones lgicas por segundo. Si se ejecutan 6 instrucciones por
ciclo y hay 3.000 millones de ciclos por segundo, se tienen 18.000MIPS.
La MMU normalmente compara la direccion virtual entrante con elRegistro Limite, provocando una excepcion cuando la primera seexcede. Un diseo alternativo consiste en primero sumar la direccion
-
8/2/2019 Practicas Servidores 2
3/31
virtual al Registro Base y despues comparar el resultado con ladireccion fsica del Registro Limite. Son equivalentes estos metodos?Son equivalentes en velocidad?
No Kernel debe coordinarse con el hardware
traduccin direccionesvirtuales a fsicas.
Cuando un programa de usuario efectua un SysCall para leer oescribir un archivo en disco, este provee el archivo necesita, unpuntero a un buffer de datos y la cantidad de datos. Entonces, elcontrol pasa al SO, el que llama al driver apropiado. Supongamos queel driver le da la orden al disco y termina cuando llega unainterrupcion. En caso de una lectura, obviamente el programa quellamo tiene que permanecer bloqueado (pues no hay datos). Es lomismo para una escritura a disco?, es decir, Necesita bloquear elprograma que pidio la escritura hasta que se complete latransferencia?
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 devuelveningn valor dado que el cdigo deprograma se sustituye por el del nuevo programa y se eliminan todaslas variables del programa.
fork()= fork causa la creacin de un nuevo proceso copia (casi exacta)
del proceso padre. RETORNO si lallamada tiene xito retorna: al proceso hijo pid del hijo al procesopadre si fracasa devuelve -1
unlink()= Borra una entrada en la tabla de un directorio. pathnamerepresenta un fichero ya existente cuya entrada se quiere borrar. Si se
-
8/2/2019 Practicas Servidores 2
4/31
elimina la ltima entrada existente en algn directorio que hacereferencia a un i-nodo concreto el sistema elimina el fichero de ese i-nodo. RETORNORetorna 0 si no hay error y -1 si hay
algn error.
Puede la siguente llamada a sistema retornar en count un valormenor que nbytes? Explicar.count = write(fd, buffer, nbytes)
La llamada write escribe un nmero de bytes dado por count en elfichero cuyo file descriptor viene dado porfd. Los bytes a escribir deben encontrarse a partir de la posicin de
memoria indicada en buf.
Indique la diferencia escencial entre un dispositivo de caracteres y unode bloques.
Un dispositivo decaracteres, eninformticaes un componentedelordenadorque secomunica con launidad central de proceso por mediodebytesindividuales.
Ejemplos de dispositivos de caracteres sonimpresoras y teclados, quepermiten el manejo de un solo byte a la vez.
Un dispositivo de bloques, en informtica, es un componentedel ordenadoren el que la comunicacin con la unidad central deproceso losdatosse transmiten en conjuntos indivisibles.
Un ejemplo tpico de dispositivo de bloque es undisco duro, que estordenado internamente en sectores que tpicamente son de 512bytes,y al escribir o al leer del disco es necesario transferir esa cantidad deinformacin como conjunto.
Laboratorio 2 :)
Tome un *nix personal (Linux, OpenBSD, MINIX, Darwin, etc.) quepueda romper sin problemas. Escriba un shell script que intente crear
http://es.wikipedia.org/wiki/Car%C3%A1cter_(tipo_de_dato)http://es.wikipedia.org/wiki/Car%C3%A1cter_(tipo_de_dato)http://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Ordenadorhttp://es.wikipedia.org/wiki/Ordenadorhttp://es.wikipedia.org/wiki/Ordenadorhttp://es.wikipedia.org/wiki/Transmisi%C3%B3n_de_datoshttp://es.wikipedia.org/wiki/Transmisi%C3%B3n_de_datoshttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Bytehttp://es.wikipedia.org/wiki/Bytehttp://es.wikipedia.org/wiki/Impresorahttp://es.wikipedia.org/wiki/Teclado_(inform%C3%A1tica)http://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Ordenadorhttp://es.wikipedia.org/wiki/Comunicaci%C3%B3nhttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Datohttp://es.wikipedia.org/wiki/Disco_durohttp://es.wikipedia.org/wiki/Bytehttp://es.wikipedia.org/wiki/Bytehttp://es.wikipedia.org/wiki/Disco_durohttp://es.wikipedia.org/wiki/Datohttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Comunicaci%C3%B3nhttp://es.wikipedia.org/wiki/Ordenadorhttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Teclado_(inform%C3%A1tica)http://es.wikipedia.org/wiki/Impresorahttp://es.wikipedia.org/wiki/Bytehttp://es.wikipedia.org/wiki/Unidad_central_de_procesohttp://es.wikipedia.org/wiki/Transmisi%C3%B3n_de_datoshttp://es.wikipedia.org/wiki/Ordenadorhttp://es.wikipedia.org/wiki/Inform%C3%A1ticahttp://es.wikipedia.org/wiki/Car%C3%A1cter_(tipo_de_dato) -
8/2/2019 Practicas Servidores 2
5/31
un numero ilimitado de procesos hijos y observe lo que sucede. Nota:no intente esto en un laboratorio de acceso publico.
No realizado
El comando strace da un registro (traza) de todas las SysCalls quellama el comando que le sigue. Obtenga las trazas de los siguientescomandos, tratando de identificar todos los SysCalls que producen (elcomando man puede ayudar).
strace cat /etc/hosts
sakuragi@uzumaki-Satellite:~$ strace cat /etc/hosts
execve("/bin/cat", ["cat", "/etc/hosts"], [/* 40 vars */]) = 0
brk(0) = 0x9a77000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file ordirectory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb773d000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file ordirectory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=75735, ...}) = 0
-
8/2/2019 Practicas Servidores 2
6/31
mmap2(NULL, 75735, PROT_READ, MAP_PRIVATE, 3, 0) =0xb772a000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file ordirectory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3,"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\222\1\0004\0\0\0"...,512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1552584, ...}) = 0
mmap2(NULL, 1563160, PROT_READ|PROT_EXEC,
MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x173000
mmap2(0x2eb000, 12288, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x178) =0x2eb000
mmap2(0x2ee000, 10776, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x2ee000
close(3) = 0
-
8/2/2019 Practicas Servidores 2
7/31
mmap2(NULL, 4096, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7729000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77298d0,limit:1048575, seg_32bit:1, contents:0, read_exec_only:0,limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x2eb000, 8192, PROT_READ) = 0
mprotect(0x8051000, 4096, PROT_READ) = 0
mprotect(0x637000, 4096, PROT_READ) = 0
munmap(0xb772a000, 75735) = 0
brk(0) = 0x9a77000
brk(0x9a98000) = 0x9a98000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=7245280, ...}) = 0
mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) =0xb7529000
mmap2(NULL, 1249280, PROT_READ, MAP_PRIVATE, 3, 0x2c8) =0xb73f8000
-
8/2/2019 Practicas Servidores 2
8/31
mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0x533) =0xb73f7000
close(3) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) =0
open("/etc/hosts", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=232, ...}) = 0
read(3, "127.0.0.1\tlocalhost\n127.0.1.1\tuz"..., 32768) = 232
write(1, "127.0.0.1\tlocalhost\n127.0.1.1\tuz"..., 232127.0.0.1localhost
127.0.1.1 uzumaki-Satellite
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
-
8/2/2019 Practicas Servidores 2
9/31
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
) = 232
read(3, "", 32768) = 0
close(3) = 0
close(1) = 0
close(2) = 0
exit_group(0) = ?
strace cat (CTRL-D puede ayudar a terminar)
sakuragi@uzumaki-Satellite:~$ strace cat
execve("/bin/cat", ["cat"], [/* 40 vars */]) = 0
brk(0) = 0x8ab8000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file ordirectory)
-
8/2/2019 Practicas Servidores 2
10/31
mmap2(NULL, 8192, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77ab000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file ordirectory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=75735, ...}) = 0
mmap2(NULL, 75735, PROT_READ, MAP_PRIVATE, 3, 0) =0xb7798000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file ordirectory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3,"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\222\1\0004\0\0\0"...,512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1552584, ...}) = 0
mmap2(NULL, 1563160, PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x425000
-
8/2/2019 Practicas Servidores 2
11/31
mmap2(0x59d000, 12288, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x178) =0x59d000
mmap2(0x5a0000, 10776, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x5a0000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7797000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77978d0,limit:1048575, seg_32bit:1, contents:0, read_exec_only:0,limit_in_pages:1, seg_not_present:0, useable:1}) = 0
mprotect(0x59d000, 8192, PROT_READ) = 0
mprotect(0x8051000, 4096, PROT_READ) = 0
mprotect(0xf7a000, 4096, PROT_READ) = 0
munmap(0xb7798000, 75735) = 0
brk(0) = 0x8ab8000
brk(0x8ad9000) = 0x8ad9000
-
8/2/2019 Practicas Servidores 2
12/31
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=7245280, ...}) = 0
mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) =0xb7597000
mmap2(NULL, 1249280, PROT_READ, MAP_PRIVATE, 3, 0x2c8) =0xb7466000
mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0x533) =0xb7465000
close(3) = 0
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) =0
fstat64(0, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) =0
read(0, "", 32768) = 0
close(0) = 0
close(1) = 0
close(2) = 0
-
8/2/2019 Practicas Servidores 2
13/31
exit_group(0) = ?
strace echo 1
sakuragi@uzumaki-Satellite:~$ strace echo 1
execve("/bin/echo", ["echo", "1"], [/* 40 vars */]) = 0
brk(0) = 0x84bb000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file ordirectory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7734000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file ordirectory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=75735, ...}) = 0
mmap2(NULL, 75735, PROT_READ, MAP_PRIVATE, 3, 0) =
0xb7721000
close(3) = 0
-
8/2/2019 Practicas Servidores 2
14/31
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file ordirectory)
open("/lib/i386-linux-gnu/libc.so.6", O_RDONLY) = 3
read(3,"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0p\222\1\0004\0\0\0"...,512) = 512
fstat64(3, {st_mode=S_IFREG|0755, st_size=1552584, ...}) = 0
mmap2(NULL, 1563160, PROT_READ|PROT_EXEC,MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x976000
mmap2(0xaee000, 12288, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x178) =0xaee000
mmap2(0xaf1000, 10776, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xaf1000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7720000
set_thread_area({entry_number:-1 -> 6, base_addr:0xb77208d0,limit:1048575, seg_32bit:1, contents:0, read_exec_only:0,limit_in_pages:1, seg_not_present:0, useable:1}) = 0
-
8/2/2019 Practicas Servidores 2
15/31
mprotect(0xaee000, 8192, PROT_READ) = 0
mprotect(0x804d000, 4096, PROT_READ) = 0
mprotect(0xe26000, 4096, PROT_READ) = 0
munmap(0xb7721000, 75735) = 0
brk(0) = 0x84bb000
brk(0x84dc000) = 0x84dc000
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=7245280, ...}) = 0
mmap2(NULL, 2097152, PROT_READ, MAP_PRIVATE, 3, 0) =0xb7520000
mmap2(NULL, 1249280, PROT_READ, MAP_PRIVATE, 3, 0x2c8) =0xb73ef000
mmap2(NULL, 4096, PROT_READ, MAP_PRIVATE, 3, 0x533) =
0xb73ee000
close(3) = 0
-
8/2/2019 Practicas Servidores 2
16/31
fstat64(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) =0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb73ed000
write(1, "1\n", 21
) = 2
close(1) = 0
munmap(0xb73ed000, 4096) = 0
close(2) = 0
exit_group(0) = ?
strace mozilla (busquese una silla comoda)
sakuragi@uzumaki-Satellite:~$ strace mozilla
strace: mozilla: command not found
Intente identificar patrones comunes que correspondan a codigos deinicializacion y terminacion de procesos.
-
8/2/2019 Practicas Servidores 2
17/31
Prctico Procesos
Procesos e Hilos
1. Por que un hilo dejaria voluntariamente la CPU con un thread_yield sisabe 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 porproceso 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
-
8/2/2019 Practicas Servidores 2
18/31
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);
}
Se imprime a y *ptr_b
Pensar en el mismo codigo, solo que en vez de procesos tenemos hilos.
Condiciones de Carrera
4. Dado el siguiente par de procesos que insertan datos en el spooler deimpresion, 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 untrabajo.
-
8/2/2019 Practicas Servidores 2
19/31
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.
-
8/2/2019 Practicas Servidores 2
20/31
3. ?Cuantas planificaciones existen para estas 3+3 lineas de codigo??Cuantas son correctas y cuantas producen problemas? (determine
el %)
5. [Wol03] Se tienen 2 procesos P0 y P1, P0 con N acciones atomicas y P1con M acciones atomicas. Calcular cuantos escenarios posibles de
ejecucion se pueden dar en un entorno concurrente.
6. [Fin88, 8.1] Considere los procesos P0 y P1, con un valor inicial de x=0.?Cuales son los valores finales de x?
{ x=0 }
P0:
x:=x+1;
P1:
x:=x+1;
7. Si ahora consideramos que x:=x+1 no es atomico a nivel de ensamblador yse compila en una secuencia de accesos a memoria y operaciones de la
ALU, equivalentes al siguiente multiprograma. ?Cuales son los valoresfinales de x?
{ x=0 }
P0:
A := x;A := A+1;
x := A;
P1:
A := x;A := A+1;
x := A;
Regiones Criticas
8. [Wol04] Mostrar que agregando un re-testeo de lock=0 luego del busywaiting en metodo de la variable candado, no soluciona nada.
9. [Wol04] Mostrar que en alternancia estricta el proceso P0 puede impediral P1 entrar a la CS aunque P0 este fuera de ella.
10.[Fin88, 8.3] Deshabilitar interrupciones no funciona para regiones criticasanidadas (una dentro de la otra). Reescribir Begin/EndRegion para
arreglar este problema.
11.[Fin88, 8.4][Tan02, 2.51] Generalizar la alternancia estricta a 3 procesos.Generalizarla a n.12.[Fin88, 8.10] Demostrar de manera rigurosa que el algoritmo de Peterson
no adolece del problema de progreso de la alternancia estricta.
13.[Fin88, 8.11] {Dificil} Demostrar de manera rigurosa que el algoritmo dePeterson cumple con la propiedad de seguridad de la Region Critica
(#proc_in_cs1).
-
8/2/2019 Practicas Servidores 2
21/31
14.[Wol04] ?Sigue cumpliendo con la propiedad de seguridad el algoritmo dePeterson si intercambiamos las 2 primeras asignaciones de su
BeginRegion? Demostrar o dar contraejemplo.
15.[Fin88, 8.12] Implementar un spin lock con TestInc.atomic function TestInc(var lock:
integer):integer;
result:=lock;
lock:=lock+1;
return result;
16.[Wol04][Tan02, 2.22] Implementar un spin lock con Swap.atomic procedure Swap(var v,w: integer);
tmp:=v;
v:=w;
w:=tmp;
Primitivas de sincronizacion
17.[Wol04] Dados 3 procesos P0, P1 y P2 que realizan las acciones A0, A1 yA2, 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.
18.[Wol04] Implementar utilizando semaforos la Region Critica N-1, es decirdentro de la region critica puede haber a lo mas N-1 procesos.
19.[Tan02, 2.24] {Dificil} Implemente semaforos generales (el semaforoalmacena valores arbitrarios) usando semaforos binarios (solo puedenvaler 0 o 1).
20.[Fin88, 8.22] Implementar semaforos utilizando monitores.21.[Tan02, 2.28] {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 escribirawaitnr=0nw=0 dentro del monitor
Claramente 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.
22.[Tan02, 2.33] {Mediano} El problema de lectores y escritores puede serformulado de varias formas respecto a cuando cada categoria de
-
8/2/2019 Practicas Servidores 2
22/31
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.
23.[Tan02, 2.50] Tenemos un Bao Unisex donde puede haber de maneraexcluyente 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
24.[Tan02, 2.35] Los planificadores RR mantienen una lista de todos losprocesos 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?
25.[Tan02, 2.36] ?Se podra "medir" si un proceso es IO-bound o CPU-boundanalizando el codigo fuente? (analisis estatico) ?Como se podria
determinar en tiempo de ejecucion? (analisis dinamico)
26.[Tan02, 2.38] Mediciones realizadas en un sistema muestran que enpromedio un proceso corre por Ttiempo antes de bloquearse en I/O. Uncambio de proceso requiere de un tiempo S,
denominado overhead(sobrecarga). Para un planificador RR con un
quanto Q, dar una formula que mida la eficiencia de la CPU (tiempo usado
en CPU/tiempo total) para los siguientes casos.
1. Q = infinito2. Q>T3. S
-
8/2/2019 Practicas Servidores 2
23/31
28.[Wol04] Dar un conjunto de procesos con sus tiempos de arribo y sustiempos de uso de CPU, que muestren que SJF!=SRTN (shortest job first,
shortest remaining time next).
29.[Fin88, 3.6] Completar la tabla para las siguientes politicas deplanificacion: FCFS, SJN, SRTN, RR (Q=1), RR (Q=5).
Proc Arribo UsoCPU
A 0 3
B 2 6
C 3 10
D 7 1
E 8 5
F 15 2
G 25 7
Lab1: Observando el Comportamiento de Linux
Objetivos
Iniciar los laboratorios con un proyecto sencillo, donde se muestre como atravs del sistema de archivos virtual /proc de Linux, podemos inspeccionar
informacin interna del kernel. Se deber generar la utilidad ksampque muestra
de diversas formas algn subconjunto de la informacin disponible en /proc.
-
8/2/2019 Practicas Servidores 2
24/31
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.
Muchas variables conforman el estado del kernel y estas pueden estar alojadas de
manera esttica o dinmica en un stack frame de la memoria del kernel. Dadoque el kernel de Linux es un programa "C" de cdigo abierto, es posible
inspeccionar el cdigo fuente y encontrar algunos ejemplos relevantes de estas
variables como por ejemplo xtime definido en include/linux/sched.h quemantiene la hora del sistema, la estructuratask_struct definida
en include/linux/sched.h que contiene la descripcin completa de un proceso, o
los valores nr_threads y nr_running definidos en kernel/fork.c los cuales
indican cuantos procesos existen y cuantos de estos estn corriendo.
El cdigo fuente de Linux lo podemos encontrar en el
directorio /usr/src/linux de la mayora de las distribuciones, pero tambin
existen pginas donde podemos navegar el cdigo de varias versiones de kernel,
como por ejemploLinux Cross Reference. Tambin existen utilidades paranavegacin de cdigo local comoSource Navigator.
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 desdeque 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.
http://lxr.linux.no/http://lxr.linux.no/http://lxr.linux.no/http://sourcenav.sourceforge.net/http://sourcenav.sourceforge.net/http://sourcenav.sourceforge.net/http://sourcenav.sourceforge.net/http://lxr.linux.no/ -
8/2/2019 Practicas Servidores 2
25/31
Cuantos procesos se crearon desde que inici el sistema.
-
8/2/2019 Practicas Servidores 2
26/31
-
8/2/2019 Practicas Servidores 2
27/31
Parte B
Escriba una versin inicial del programa que inspeccione las variables del kernel
a travs del /proc e informe por stdout:
Tipo y modelo de CPU.
Versin de Kernel.
Cantidad de tiempo transcurrido desde que se inici el sistema operativo,
con el formato ddD hh:mm:ss.
Tambin se pide incluir una cabecera donde se indique el nombre de la mquina
y la fecha y hora actuales.
Parte C
Escriba una segunda versin del programa que imprima la misma informacin
que la versin por defecto, pero en caso de invocarse con la opcin -s, agrega lasiguiente informacin:
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.
-
8/2/2019 Practicas Servidores 2
28/31
Nmero de procesos creados desde el inicio del sistema.
Parte D
La tercera parte involucra imprimir todo lo de las versiones anteriores, pero
cuando se invoca con la opcin -l interval duration imprime adems:
Nmero 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
100 segundos tomando muestras en intervalos de 2 segundos.
Cmo atacar los problemas
La pgina del manual de Linux man 5 proc contiene suficiente informacin al
respecto, tambin se pueden ver artculos de la revista Linux Magazine " An
Overview of the Proc Filesystem" o The Official Red Hat Linux Reference Guide en su
captulo "The /proc Filesystem". En general basta con realizar una bsqueda de
"/proc filesystem" en cualquier buscador de la Web para encontrar informacin
en cualquier idioma.
Una vez encontrados los archivos de /proc donde est la informacin, es
necesario abrirlos, leer la informacin y cerrarlos. Esto se puede lograr con lasfunciones de la biblioteca "C" fopen, fgets (o fscanf) y fclose. Un ejemplo de
uso sera el siguiente.
#include
#define BUFFSIZE 256
int
main(int argc, char *argv[]) {
FILE *fd;
char buffer[BUFFSIZE+1];
fd =
fopen("/proc/sys/kernel/hostname","r");
fgets(buffer, BUFFSIZE+1, fd);
printf("Hostname: %s\n",buffer);
fclose(fd);
http://www.linuxgazette.com/issue46/fink.htmlhttp://www.linuxgazette.com/issue46/fink.htmlhttp://www.linuxgazette.com/issue46/fink.htmlhttp://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/ch-proc.htmlhttp://www.redhat.com/docs/manuals/linux/RHL-7.3-Manual/ref-guide/ch-proc.htmlhttp://www.linuxgazette.com/issue46/fink.htmlhttp://www.linuxgazette.com/issue46/fink.html -
8/2/2019 Practicas Servidores 2
29/31
}
Para facilitar el proceso de lectura y anlisis de los archivos, les facilitamos un
TAD para hacer lexing (separacin de la entrada en tokens, es decir elementoscomo palabras, nmeros, simbolos, espacios en blanco). Pueden usarlo en su
proyecto tal como est, y les aconsejamos hacerlo as no pierden tiempo en esteaspecto del proyecto. El fuente del TAD lo 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 tamaoargc con cada uno de las
cadenas de los argumentos. Notar que como el propio comando se incluye en lalista 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 funcin getopt de laglibc para no volver a inventar la rueda.
Pueden encontrar informacin en man 3 getopt o bien en
las Infopages invocando pinfo libc y buscado este tema. Este ltimo comando
muestra laGNU C Library reference manual.
El ejemplo anterior resulta sencillo en cuanto a que no tenemos que "interpretar"
la secuencia de caracteres, slo la tomamos y la imprimimos. Sin embargo,
muchos de los parmetros que se necesitan imprimir requieren de ciertotratamiento. Este proceso de transformar una secuencia de caracteres en alguna
representacin ms adecuada para su tratamiento se denomina parsing. Por
ejemplo el tiempo transcurrido desde que el sistema inici se expresa en
segundos, y se encuentra en cierta parte del archivo. Entonces tenemos queextraerlo y convertirlo a un entero sin signo. Cuando ya tenemos un entero sin
signo, resulta sencillo operar matemticamente y generar una secuencia de
caracteres (imprimir) con el formato adecuado. Esto ltimo se denomina prettyprinting.
Funciones como atoi y sus relacionadas pueden ser tiles. Tambin 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 glibcgettimeofday y ctime, o
bien leer el tiempo de inicio del sistema y sumarlo al transcurrido para luego
convertirlo a fecha.Cuando se necesite realizar las muestra del promedio de carga de 1 minuto,
puede ser til la funcin sleep que duerme un proceso por un intervalo
determinado de tiempo.
http://www.cs.famaf.unc.edu.ar/so2004/Lab1/Lexer.tar.gzhttp://www.cs.famaf.unc.edu.ar/so2004/Lab1/Lexer.tar.gzhttp://www.cs.famaf.unc.edu.ar/so2004/Lab1/Lexer.tar.gzhttp://www.gnu.org/software/glibc/http://www.gnu.org/software/glibc/http://www.gnu.org/manual/glibc-2.2.5/libc.htmlhttp://www.gnu.org/manual/glibc-2.2.5/libc.htmlhttp://www.gnu.org/manual/glibc-2.2.5/libc.htmlhttp://www.gnu.org/manual/glibc-2.2.5/libc.htmlhttp://www.gnu.org/software/glibc/http://www.cs.famaf.unc.edu.ar/so2004/Lab1/Lexer.tar.gz -
8/2/2019 Practicas Servidores 2
30/31
Qu se debe Entregar
Cdigo (funcionando bajo las especificaciones dadas y bajo cualquier
caso de test de parametros de entrada)
o Dividir en mdulos de manera juiciosa.
o Estilo de cdigo.o Usar TADs, por ejemplo no estara mal un TAD que contenga toda
la informacin que se quiere con mtodos para leer del kernel e
imprimir en un filedescriptor los datos, o uno que contenga las
opciones de la lnea de comandos y que acepte un mtodo para
leerlas a partir de argc y argv.
o Utilizar Makefile.
Informe del desarrollo del proyecto
Tips
No intenten hacer todo de golpe, vayan de a partes, y sobre todo discutan,
analicen y trabajen en ideas de forma grupal. Una hora pensando en papel
libremente suele ahorrar muchos problemas en el momento de codificar.
Utilicen debuggers de lnea de comandos comogdb o interfaces grficas para
estos comoddd. Tambin pueden realizar compilacin condicional para hacer
debugging de la siguente manera.
#define STDOUT 0
#define DEBUG
.
.
#ifdef DEBUG
fprintf(STDOUT,"DEBUG> argc:
%d\n",argc);
#endif
.
.
Deducir la entrada disk_io requiere un poco ms de trabajo que el resto de lainformacin. Encuentren el manejo de /proc en kernels 2.4.x, analicen el cdigo
fuente y deduzcan el significado de cada elemento. Pueden utilizar Linux Cross
Reference.
http://sources.redhat.com/gdb/http://sources.redhat.com/gdb/http://www.gnu.org/software/ddd/http://www.gnu.org/software/ddd/http://www.gnu.org/software/ddd/http://lxr.linux.no/http://lxr.linux.no/http://lxr.linux.no/http://lxr.linux.no/http://lxr.linux.no/http://www.gnu.org/software/ddd/http://sources.redhat.com/gdb/ -
8/2/2019 Practicas Servidores 2
31/31
Tareas Adicionales
Si 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 cantidades como 64MB en bytes suele ser dificultoso, muchos
programas incluyen la opcin -h que significa "legible para humanos",
que transforma las cantidades a una unidad correspondiente de manera
que la cadena se mantenga acotada en tamao.
Este programa puede ser muy til para monitorear la actividad de un
servidor, pero resulta ms practico si se le agrega una opcin -d que bajo
la opcin -l muestra el diferencial de los valores leidos para, por ejemplo,
poder medir cuantos cambios de contexto se estn realizando por
segundo. Este es un muy buen lugar para utilizar un TAD con los valores
de muestra que acepte mtodos que calculen el diferencial entremuestras.
Utilizar getopt de POSIX.2 para parsear la lnea de comandos.
Comparar lo realizado con utilidades establecidas que realizantareas simi lares, como por ejemploprocinfo.
top related