jueves, enero 11, 2007

 

Proyecto Sistemas Operativos II

http://www.uv.unitec.edu/perfiles/971269/SOII/Proy1SO2.zip

jueves, noviembre 23, 2006

 

RAID 1+0

La información se distribuyen en bloques como el Raid 0 y adicionalmente , cada disco se duplica como raid 1 , creando un segundo nivel de arreglo se conoce como "Striping de arreglos duplicados " .

Se requieren , dos canales , dos discos para cada canal y se utilizan el 50 % de la capacidad para información de control Este nivel ofrece un 100 % de redundancia de la información y un soporte para grandes volúmenes de datos , donde el precio no es un factor importante .

Aplicaciones: Servidores de Bases de Datos con alto rendimiento y tolerancia a fallos.

miércoles, noviembre 22, 2006

 

Tipo de archivos objeto

Tipo de archivo objeto
Es un archivo que contiene la informacion del código objeto que es el resultante de la compilación del código fuente.
Consiste en lenguaje máquina ó bytecode y se distribuye en varios archivos que corresponden a cada código fuente compilado.

No enlazado
Quiere decir que no es un archivo ejecutable ya que Para obtener un programa ejecutable se han de enlazar todos los archivos de código fuente con un programa llamado enlazador (linker)

jueves, noviembre 16, 2006

 

Laboratorio 1 SO II

Sistemas Operativos 2
Laboratorio #1: Modificando MINIX
Alumno: Douglas Yovanny Velásquez Escoto


Examinando config.h

Se exploro el archivo /usr/incluye/minix/config.h
Con las dos secciones las cuales la primera contiene los parámetros configurables por el usuario.


/*=====================================================*
* This section contains user-settable parameters *
*===================================================== */
#define MACHINE IBM_PC /* Must be one of the names listed below */

#define IBM_PC 1 /* any 8088 or 80x86-based system */
#define SUN_4 40 /* any Sun SPARC-based system */
#define SUN_4_60 40 /* Sun-4/60 (aka SparcStation 1 or Campus) */
#define ATARI 60 /* ATARI ST/STe/TT (68000/68030) */
#define AMIGA 61 /* Commodore Amiga (68000) */
#define MACINTOSH 62 /* Apple Macintosh (68000) */

/* Word size in bytes (a constant equal to sizeof(int)). */
#if __ACK__
#define _WORD_SIZE _EM_WSIZE
#endif

/* Number of slots in the process table for user processes. */
#define NR_PROCS 32

/* The buffer cache should be made as large as you can afford. */
#if (MACHINE == IBM_PC && _WORD_SIZE == 2)
#define NR_BUFS 40 /* # blocks in the buffer cache */
#define NR_BUF_HASH 64 /* size of buf hash table; MUST BE POWER OF 2*/
#endif

#if (MACHINE == IBM_PC && _WORD_SIZE == 4)
#define NR_BUFS 80 /* # blocks in the buffer cache */
#define NR_BUF_HASH 128 /* size of buf hash table; MUST BE POWER OF 2*/
#endif



/* Enable or disable swapping processes to disk. */
#define ENABLE_SWAP 1


En la segunda sección, se encuentran varios parámetros internos del sistema

/*================================================*
* There are no user-settable parameters after this line *
*================================================*/
/* Set the CHIP type based on the machine selected. The symbol CHIP is actually
* indicative of more than just the CPU. For example, machines for which
* CHIP == INTEL are expected to have 8259A interrrupt controllers and the
* other properties of IBM PC/XT/AT/386 types machines in general. */
#define INTEL 1 /* CHIP type for PC, XT, AT, 386 and clones */
#define M68000 2 /* CHIP type for Atari, Amiga, Macintosh */
#define SPARC 3 /* CHIP type for SUN-4 (e.g. SPARCstation) */

/* Set the FP_FORMAT type based on the machine selected, either hw or sw */
#define FP_NONE 0 /* no floating point support */
#define FP_IEEE 1 /* conform IEEE floating point standard */

#if (MACHINE == IBM_PC)
#define CHIP INTEL
#endif

Cambiando el banner de inicio de MINIX

/usr/src/kernel/tty.c

/*================================================*
* tty_task *
*==================== ===========================*/
PUBLIC void tty_task()
{
/* Main routine of the terminal task. */

message tty_mess; /* buffer for all incoming messages */
register tty_t *tp;
unsigned line;

/* Initialize the terminal lines. */
for (tp = FIRST_TTY; tp < END_TTY; tp++) tty_init(tp);

/* Display the Minix startup banner. */
/* printf("Minix %s.%s Copyright 2001 Prentice-Hall, Inc.\n\n",
OS_RELEASE, OS_VERSION);*/
printf("*******************************************************************************\n");
printf("* Sistemas Operativos II - Douglas Yovanny Velasquez Escoto - 971269 *\n");
printf("*******************************************************************************\n");
…..







Backup imagen del Kernel actual
Ubicado en /minix/
El Kernel actual es mx204_060519 y se respaldo en mx204_060519.b


Make install
cd keymaps && make - install
cc -DKEYSRC=\"french.src\" genmap.c
./a.out > french.map
install -c french.map /usr/lib/keymaps/french.map
cc -DKEYSRC=\"german.src\" genmap.c
./a.out > german.map
install -c german.map /usr/lib/keymaps/german.map
cc -DKEYSRC=\"italian.src\" genmap.c
./a.out > italian.map
install -c italian.map /usr/lib/keymaps/italian.map
cc -DKEYSRC=\"japanese.src\" genmap.c
./a.out > japanese.map
install -c japanese.map /usr/lib/keymaps/japanese.map
cc -DKEYSRC=\"latin-am.src\" genmap.c
./a.out > latin-am.map
install -c latin-am.map /usr/lib/keymaps/latin-am.map
cc -DKEYSRC=\"olivetti.src\" genmap.c
./a.out > olivetti.map
install -c olivetti.map /usr/lib/keymaps/olivetti.map
cc -DKEYSRC=\"polish.src\" genmap.c
./a.out > polish.map
install -c polish.map /usr/lib/keymaps/polish.map
cc -DKEYSRC=\"scandinavn.src\" genmap.c
./a.out > scandinavn.map
install -c scandinavn.map /usr/lib/keymaps/scandinavn.map
cc -DKEYSRC=\"spanish.src\" genmap.c
./a.out > spanish.map
install -c spanish.map /usr/lib/keymaps/spanish.map
cc -DKEYSRC=\"uk.src\" genmap.c
./a.out > uk.map
install -c uk.map /usr/lib/keymaps/uk.map
cc -DKEYSRC=\"us-std.src\" genmap.c
./a.out > us-std.map
install -c us-std.map /usr/lib/keymaps/us-std.map
cc -DKEYSRC=\"us-swap.src\" genmap.c
./a.out > us-swap.map
install -c us-swap.map /usr/lib/keymaps/us-swap.map


make hdboot
exec cc -c -I/usr/include exec.c
exec cc -c -I/usr/include signal.c
exec cc -c -I/usr/include alloc.c
exec cc -c -I/usr/include utility.c
exec cc -c -I/usr/include table.c
exec cc -c -I/usr/include trace.c
exec cc -c -I/usr/include getset.c
exec cc -c -I/usr/include misc.c
exec cc -o mm -i main.o forkexit.o break.o exec.o signal.o alloc.o utility.o table.o trace.o getset.o misc.o -lsys
install -S 256w mm
cd ../fs && exec make -
exec cc -c -I/usr/include main.c
exec cc -c -I/usr/include open.c
exec cc -c -I/usr/include read.c
exec cc -c -I/usr/include write.c
exec cc -c -I/usr/include pipe.c
exec cc -c -I/usr/include device.c
exec cc -c -I/usr/include path.c
exec cc -c -I/usr/include mount.c
exec cc -c -I/usr/include link.c
exec cc -c -I/usr/include super.c
exec cc -c -I/usr/include inode.c
exec cc -c -I/usr/include cache.c
exec cc -c -I/usr/include cache2.c
exec cc -c -I/usr/include filedes.c
exec cc -c -I/usr/include stadir.c
exec cc -c -I/usr/include protect.c
exec cc -c -I/usr/include time.c
exec cc -c -I/usr/include lock.c
exec cc -c -I/usr/include misc.c
exec cc -c -I/usr/include utility.c
exec cc -c -I/usr/include table.c
exec cc -o fs -i main.o open.o read.o write.o pipe.o device.o path.o mount.o link.o super.o inode.o cache.o cache2.o filedes.o stadir.o protect.o time.o lock.o misc.o utility.o table.o -lsys
install -S 512w fs
exec make - image
exec cc -O -D_MINIX -D_POSIX_SOURCE init.c -o init
install -S 192w init
installboot -image image ../kernel/kernel ../mm/mm ../fs/fs init
text data bss size
69376 16756 98772 184904 ../kernel/kernel
14672 1156 30384 46212 ../mm/mm
29600 2400 107352 139352 ../fs/fs
7008 2084 1356 10448 init
------ ------ ------ -------
120656 22396 237864 380916 total
exec sh mkboot hdboot
rm /dev/c0d0p0s0:/minix/2.0.4r0
cp image /dev/c0d0p0s0:/minix/2.0.4r1
Done.


Modificando /usr/src/kernel/keyboard.c para listar los procesos cuando se presiona la tecla F6

/*===========================================================================*
* func_key *
*===========================================================================*/
PRIVATE int func_key(scode)
int scode; /* scan code for a function key */
{
/* This procedure traps function keys for debugging and control purposes. */

unsigned code;

if (scode & 0200) return(FALSE); /* key release */
code = map_key0(scode); /* first ignore modifiers */
if (code < F1 || code > F12) return(FALSE); /* not our job */

switch (map_key(scode)) { /* include modifiers */

case F1: p_dmp(); break; /* print process table */
case F2: map_dmp(); break; /* print memory map */
case F3: toggle_scroll(); break; /* hardware vs. software scrolling */
case F4: vmw_capture(); break; /* copy screen to host's clipboard */

case F5: /* network statistics */
#if ENABLE_DP8390
dp8390_dump();
#endif
#if ENABLE_RTL8139
rtl8139_dump();
#endif
#if ENABLE_LANCE
lance_dump();
#endif
#if ENABLE_EEPRO
eepro_dump();
#endif
break;
case F6:
printf("Ejecutar F6\n");
p_dmp();
break;

case CF7: sigchar(&tty_table[CONSOLE], SIGQUIT); break;



domingo, noviembre 12, 2006

 

Tarea 2

Tarea HardLink y SoftLink
Alumno: Douglas Yovanny Velasquez Escoto
Cuenta: 971269
HardLink
#ln archivo harklink
#ls -lai
total 4
3303 drwxr-xr-x 2 root operator 80 Oct 28 12:08 .
3302 drwxr-xr-x 3 root operator 96 Oct 28 10:49 ..
3306 -rw-r--r-- 2 root operator 26 Oct 28 12:07 archivo
3306 -rw-r--r-- 2 root operator 26 Oct 28 12:07 harklink
#chmod +x archivo
total 4
3303 drwxr-xr-x 2 root operator 80 Oct 28 12:08 .
3302 drwxr-xr-x 3 root operator 96 Oct 28 10:49 ..
3306 -rwxr-xr-x 2 root operator 26 Oct 28 12:07 archivo
3306 -rwxr-xr-x 2 root operator 26 Oct 28 12:07 harklink
#chmod -r harklink
total 4
3303 drwxr-xr-x 2 root operator 80 Oct 28 12:08 .
3302 drwxr-xr-x 3 root operator 96 Oct 28 10:49 ..
3306 --wx--x--x 2 root operator 26 Oct 28 12:07 archivo
3306 --wx--x--x 2 root operator 26 Oct 28 12:07 harklink
* Por lo tanto se afectan uno y el otro

SoftLink
#ln -s archivo softlink
ln: softlink: Function not implemented

*Minix no soporta un enlace blando
pero probandolo en linux
$ln -s archivo softlink
97373 drwxr-xr-x 2 douglas douglas 4096 Oct 28 12:08 .
96577 drwxr-xr-x 3 douglas douglas 4096 Oct 28 10:49 ..
97382 -rw--r--r- 2 douglas douglas 41 Oct 28 12:07 archivo
97375 lrwxrwxrwx 2 douglas douglas 7 Oct 28 12:07 softlink -> archivo
$ chmod -r archivo
$ ls -lai
97373 drwxr-xr-x 2 douglas douglas 4096 Oct 28 12:08 .
96577 drwxr-xr-x 3 douglas douglas 4096 Oct 28 10:49 ..
97382 -rw------- 2 douglas douglas 41 Oct 28 12:07 archivo
97375 lrwxrwxrwx 2 douglas douglas 7 Oct 28 12:07 softlink -> archivo
$ chmod +x softlink
$ ls -lai
97373 drwxr-xr-x 2 douglas douglas 4096 Oct 28 12:08 .
96577 drwxr-xr-x 3 douglas douglas 4096 Oct 28 10:49 ..
97382 -rwx--x--x 2 douglas douglas 41 Oct 28 12:07 archivo
97375 lrwxrwxrwx 2 douglas douglas 7 Oct 28 12:07 softlink -> archivo

*Solo se afecta el archivo original

 

Tarea 1

Douglas Yovanny Velasquez Escoto 971269

Ejecute el script indicado arriba en su máquina virtual de Minix. Este crea un directorio llamado "junk" y crea cinco archivos dentro. Despúes de hacer unos cuantos ls de prueba, el chmoddeshabilita los permisos de lectura para el directorio.

¿Qué pasa despúes de cambiarse al directorio "junk"?
Usando un usuario que no sea root como se le quita el permiso de lectura –r al hacer los ls junk para listar los archivos dentro de la carpeta no se puede acceder. Solamente con el comando echo * muestra el contenido del directorio.

Después de restaurar los permisos de lectura, pero quitando los permisos de ejecución (búsqueda), se repite el experimento.

¿Qué sucede ahora?
Como se le quita el permiso de búsqueda ni si quiera puede acceder a la carpeta
Esto no ocurre si entramos con el usuario root ya que ignora los permisos . en negrita los resultados que muestra solo si es un usuario root


>mkdir junk
>for i in 1 2 3 4 5
>do
>echo "hello" > junk/$i
>done
>ls -ld junk
-------------------------------------------------------
drwxr-xr-x 2 root operator 112 Oct 28 08:19 junk
-------------------------------------------------------
>ls -l junk
-------------------------------------------------------
total 5
-rw-r--r-- 1 root operator 6 Oct 28 08:19 1
-rw-r--r-- 1 root operator 6 Oct 28 08:19 2
-rw-r--r-- 1 root operator 6 Oct 28 08:19 3
-rw-r--r-- 1 root operator 6 Oct 28 08:19 4
-rw-r--r-- 1 root operator 6 Oct 28 08:19 5
-------------------------------------------------------
>chmod -r junk
>ls -ld junk
-------------------------------------------------------
d-wx--x--x 2 root operator 112 Oct 28 08:19 junk
-------------------------------------------------------
>ls junk
-------------------------------------------------------
1
2
3
4
5
total 5
------------------------------------------------------
>ls -l junk
------------------------------------------------------
-rw-r--r-- 1 root operator 6 Oct 28 08:19 1
-rw-r--r-- 1 root operator 6 Oct 28 08:19 2
-rw-r--r-- 1 root operator 6 Oct 28 08:19 3
-rw-r--r-- 1 root operator 6 Oct 28 08:19 4
-rw-r--r-- 1 root operator 6 Oct 28 08:19 5
------------------------------------------------------
>cd junk
>pwd
------------------------------------------------------
/usr/tarea/junk
-----------------------------------------------------
>ls -l
-----------------------------------------------------
total 5
-rw-r--r-- 1 root operator 6 Oct 28 08:19 1
-rw-r--r-- 1 root operator 6 Oct 28 08:19 2
-rw-r--r-- 1 root operator 6 Oct 28 08:19 3
-rw-r--r-- 1 root operator 6 Oct 28 08:19 4
-rw-r--r-- 1 root operator 6 Oct 28 08:19 5
-----------------------------------------------------
>echo *
------------------------------------------------------
1 2 3 4 5
------------------------------------------------------
>cd ..
>chmod +r junk
>chmod -x junk
>ls junk
------------------------------------------------------
1
2
3
4
5
total 5
--------------------------------------------------------
>ls -l junk
--------------------------------------------------------
-rw-r--r-- 1 root operator 6 Oct 28 08:19 1
-rw-r--r-- 1 root operator 6 Oct 28 08:19 2
-rw-r--r-- 1 root operator 6 Oct 28 08:19 3
-rw-r--r-- 1 root operator 6 Oct 28 08:19 4
-rw-r--r-- 1 root operator 6 Oct 28 08:19 5
--------------------------------------------------------
>cd junk
>chmod +x junk
--------------------------------------------------------
junk: No such file or directory

 

Proyecto 1 SO II

Introducción

Universidad Tecnológica Centroamericana UNITEC
Sistemas Operativos II
Reporte del proyecto # 1
Alumno: Douglas Yovanny Velásquez Escoto
Cuenta: 971269
Catedrático: Ing. Egdares Futch H.
Lugar y Fecha: Tegucigalpa M.D.C 29 de octubre de 2006


Descripción y funcionamiento del proyecto

Este proyecto consiste en el desarrollo en el lenguaje de programación Java (J2SE), un simulador programado para investigar las diferencias relativas de los algoritmos de asignación de memoria y las políticas de reemplazo de páginas (FIFO, LRU, LFU y OPT). El programa generara estadísticas, apropiadas para cada módulo.

El simulador consta de tres módulos:

1) Generador de strings de referencia a memoria

El simulador cuenta con una opción para generar un archivo conteniendo 10,000 strings de referencia a memoria (direcciones de 20 bits), generadas de la siguiente manera:

• La dirección de referencia inicial se escoge de forma aleatoria para comenzar.
• Para las demás referencias a memoria, la siguiente referencia a memoria será dentro la misma página, con probabilidad s (alta).
• Si la siguiente referencia a memoria no es dentro de la página actual, entonces con alguna otra probabilidad o (alta), la referencia será en la página antes de la actual (actual-1) o la página después de la actual (actual+1), equiprobablemente, de acuerdo al principio de la Localidad de Referencias.
• En caso contrario, se escoge de forma aleatoria (podría volver a ser la actual o actual-1 o actual+1).

El archivo tiene el formato Dinero, indicando únicamente si la referencia a cada página es lectura o escritura (tipos Dinero 0 y 1).

2) Manejador de memoria contigua

El módulo manejador de memoria contigua simula el uso de asignación de memoria en sistemas operativos no paginados. Implemente las políticas first-fit y best-fit, asumiendo que los procesos no crecen ni se encogen, en un computador con 256 KB de RAM.

Este módulo usa como input un archivo de strings de referencia generado por el módulo descrito en 1), interpretándolo de tal manera que la acción 0 indica “asignar memoria” y la acción “1” indica “desasignar memoria”. Las direcciones generadas se usarán de la siguiente manera: los primeros cuatro bits denotan el Process ID, los siguientes 16 bits denotan el tamaño de la memoria solicitada, en bytes. Este módulo manejar errores, si acaso un proceso solicita más memoria (crece), o desasigna memoria (encoge) sin estar cargado en RAM.

• Fusión de bloques libres: cuando un proceso termine (“desasigne memoria”), la memoria que el proceso tenía asignadas se regresa a la lista de disponibles. Se combinar agujeros que estén adyacentes uno a otro para formar un bloque libre más grande, con el fin de reducir el nivel de fragmentación.
• Compactación: el manejador de memoria compacta la memoria si detecta fragmentación externa, que ocurrirá cuando un proceso nuevo pida memoria y no se pueda asignar debido a fragmentación.

La salida del módulo consiste de las siguientes estadísticas
Tamaño de la memoria, memoria libre, memoria usada, numero de agujeros, número de procesos activos, número de veces compactada, fragmentación externa, fragmentación interna, referencias procesadas, se muestra de forma gráfica, y si puede desplegar esta información cuando el usuario lo solicite.

Quote:
Ejemplo:
Tamaño de la memoria = 262144 bytes, asignados = 113165, libres = 148979
Actualmente hay 3 “agujeros” y 5 procesos activos
Se ha compactado la memoria 7 veces
Fragmentación: interna=23% externa=32%
Direcciones procesadas=862

Lista de agujeros:
Agujero 1: Posición Inicial: 75895, Tamaño: 66175
..

Lista de procesos:
process id: 8, Posición Inicial: 218683, Tamaño del Proceso: 23132, Memoria utilizada: 100%
..


Se puede cambiar la velocidad de la simulación estableciendo intervalos de pause desde 1 milisegundo o ejecutarse paso a paso cada referencia del archivo generado por el modulo 1)

Además muestra los mensajes que incluye los errores

Quote:
Ejemplo:
Acción :0, Proceso :14, Memoria :17560
No se puede asignar memoria, Process id: 14, requiere: 17560, Asignado: 0
Acción :1, Proceso :14, Memoria :18975
No se puede liberar memoria, no se encuentra el proceso, Process id: 14, requiere: 18975
Acción :1, Proceso :14, Memoria :19911
No se puede liberar memoria, no se encuentra el proceso, Process id: 14, requiere: 19911
Acción :0, Proceso :14, Memoria :19179
No se puede asignar memoria, Process id: 14, requiere: 19179, Asignado: 18538
Acción :0, Proceso :14, Memoria :20367
No se puede asignar memoria, Process id: 14, requiere: 20367, Asignado: 0
..


3) Manejador de memoria paginada

El módulo manejador de memoria paginada sirve para investigar la efectividad relativa de las estrategias de reemplazo de páginas FIFO, LRU, LFU, Second Chance (CLOCK) y OPT para algunos parámetros del sistema. El objeto es medir el número de page faults generados por cada estrategia.

Para este módulo, se asume que cada proceso obtiene 1 megabyte (1024 kilobytes) de memoria virtual, divididos en 1K páginas y un tamaño de página de 1024 bytes. Es decir que el proceso puede generar direcciones virtuales con referencias de página de 0 a 1023, que vendrán del archivo de strings de referencia generado por el módulo 1).

La simulación proporción información sobre los page faults ocurridos para cada una de las estrategias al proporcionar el número de page frame que se utilizara:


Ejemplo de salida: (100 page frame)
Estrategia de reemplazo de páginas FIFO, número de page foults = 1260
Estrategia de reemplazo de páginas LRU, número de page foults = 1264
Estrategia de reemplazo de páginas LFU, número de page foults = 1928
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1260
Estrategia de reemplazo de páginas OPT, número de page foults = 952




Cómo se compila y usa el proyecto

Se requiere Maquina Virtual de Java
Versión recomendada: 1.5.0 (build 1.5.0_05-b05)

Para compilar se ejecuta el archivo Make.bat que contiene lo siguiente
.-Compilación de archivos
\j2sdk1.4.2_05\bin\javac generadorString.java
\j2sdk1.4.2_05\bin\javac MCBestFit.java

\j2sdk1.4.2_05\bin\javac Proyecto1.java
.-Cada uno de los archivos .java

Creación del jar ejecutable
\j2sdk1.4.2_05\bin\jar cvfm Proyecto1.jar MANIFEST.MF BloqueMemoria.class generadorString.class …
.-Cada uno de los archivos .class que se genero en la compilación

.-\j2sdk1.4.2_05\bin\ la ubicación donde se encuentra el archivo javac y jar

Para ejecutar
javaw –jar Proyecto1.jar o ejecutar desde el explorador de Windows
La cual presentar una ventana con diferentes botones y cuadros de texto para acceder a los 3 módulos


Descripción de rutinas y procedimientos usados

Clases usadas
generadorString
MCBestFit
MCBesttFitForm
MCFirstFitForm
MCFistFit
MemoriaContinua
memPaginacion
Proyecto1

Clase generadorString
Esta clase hace el trabajo del modulo 1

java.lang.Object
generadorString
________________________________________
establecerS
Set de la probabilidad s

establecerO
Set de la probabilidad s

establecerTamPage
Set del tamaño de la página

CrearArchivo
Crea el archivo en donde se almacenara los 10,000 string de referencia a memoria, generados por el método GenerarLinea

GenerarLinea
Genera si la referencia es de escritura o lectura (tipos Dinero 0 y 1)
Determina si es la primera referencia ejecuta el método generarDireccionInicial
Si no generarDireccionProbabilidad

generarDireccionInicial
Genera un número aleatorio de 0 a (2^20)-1, y lo convierte a hexadecimal

generarDireccionProbabilidad
Utiliza la Probabilidades s y o para genera la siguiente dirección a través de método
generarDireccionPagina en caso contrario genera con generarDireccionInicial

generarDireccionPagina
Genera la dirección en base a la página que se especifica en generarDireccionProbabilidad


Clase MemoriaContinua
Clase abstracta que implementa el modulo 2 tanto para best-fit como para First-fit

java.lang.Object
java.lang.Thread
MemoriaContinua

abrirArchivo
Abre el archivo generado por el módulo 1

RunInicia la simulación mediante hilo

iniciarValores
Establece los valores del tamaño de la memoria a utilizar y los objetos para dibujar

iniciarSimulacion
Llama a los métodos del la clase concreta para crear el árbol de memoria crearArbolMemoria y agrega el bloque inicial de memoria conteniendo el tamaño total (256K);

Continuar
Cuando se detiene la ejecución del hilo Continuar reanuda la ejecución, con esta función se implementa la ejecución paso a paso de las referencias de memoria

procesarLinea
Cada una de las referencias de memoria se procesa en este método, determinando si se agrega un nuevo proceso, si se quita el proceso, si se agrega o quita memoria al proceso, si se compacta la memoria, mediante las búsquedas utilizando los métodos de búsquedas definidos.
Este método genera el mensaje de la simulación a demás de los mensajes de error.

agregarProceso
Agrega un nuevo proceso también quita del espacio disponible de memoria

quitarProceso
Quita un proceso y une los espacios de memoria libre, combinando agujeros que estén adyacentes, este método une el espacio adyacente que se encuentra adelante, y para el espacio adyacente que se encuentra atrás, utiliza la llamada al método unirAnterior

buscarProceso
Busca un proceso en el árbol de procesos por id

mostrarProcesos
Utilizado para dibujar

dMemoria
Dibuja la memoria libre

dProceso
Dibuja los procesos en su correspondiente ubicación, con su fragmentación interna utilizando las coordenadas obtenidas por obtenerPorcentaje

obtenerPorcentaje
Establece la simetría del dibujo y la escala a transformar las posiciones de memoria

Compactar
Compacta la memoria cuando hay fragmentación externa

Listar
Muestra la estadística de la simulación

ComparadorTamano
Para ordenar el árbol de memoria por tamaño

ComparadorDireccion
Para ordenar el árbol de memoria por posición

ComparadorProceso
Para ordenar el árbol de procesos por id

ComparadorProcesoPosIni
Para ordenar el árbol de procesos por posición

Clase MCBesttFitForm
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
MCBesttFitForm

Clase de interfase de usuario que llama a la clase
MCBestFit
Métodos heredados de JFrame


Clase MCBestFit
Esta clase implementa la política Best-fit del modulo 2 extendida de la clase MemoriaContinua

java.lang.Object
java.lang.Thread
MemoriaContinua
MCBestFit

crearArbolMemoria
Crea el árbol que se utilizara para administrar los espacios disponibles.

buscarMemoria
Busca en el árbol el bloque de memoria.

unirAnterior
Unir una bloque de memoria que se acaba de liberar con el bloque libre anterior consecutivo, si existe ese bloque.


Clase MCFirstFitForm
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
MCFirstFitForm

Clase de interfase de usuario que llama a la clase
MCFistFit
Métodos heredados de JFrame


Clase MCFistFitEsta clase implementa la política First-fit del modulo 2 extendida de la clase MemoriaContinua

java.lang.Object
java.lang.Thread
MemoriaContinua
MCFistFit

crearArbolMemoria
Crea el árbol que se utilizara para administrar los espacios disponibles.

buscarMemoria
Busca en el árbol el bloque de memoria.

unirAnterior
Unir una bloque de memoria que se acaba de liberar con el bloque libre anterior consecutivo, si existe ese bloque.


Clase memPaginacion
java.lang.Object
java.awt.Component
java.awt.Container
java.awt.Window
java.awt.Frame
javax.swing.JFrame
memPaginacion

Clase que implementa el módulo 3

iniciarSimulacion
Inicializa las listas y los valores para la simulación y lee cada línea del archivo generado por el modulo uno y llama a los metodos FIFO, LRU,LFU,CLOCK y OPT
Y al final muestra la información de los page foults.


FIFO
Implementa la estrategia de reemplazo de página FIFO

LRU
Implementa la estrategia de reemplazo de página LRU

LFU
Implementa la estrategia de reemplazo de página LFU

Desplazar
Desplaza un bit con alguna frecuencia en la lista de bits del algoritmo LFU

CLOCK
Implementa la estrategia de reemplazo de página CLOCK

OPT
Implementa la estrategia de reemplazo de página OPT

abrirArchivo
Abre el archivo generado por el modulo 1 y lo deja listo para ser leído por el método iniciarSimulacion




Comentarios de implementación y preguntas indicadas

Comentarios del módulo 2
En este módulo se utilizo una clase abstracta que implementa la memoria continua utilizando dos árboles uno para manejar los espacios libres y otra para manejar los procesos.
Los árboles utilizados son de tipo TreeSet de la clase de Java
Las clases concretas son las que implementan las politicas best-fit y First-fit

En las políticas Best-fit se utiliza el comparador ComparadorTamano para crear el árbol de memoria, para que el árbol se encuentre ordenado por tamaño.
Las búsqueda por tamaño se realiza mediante el método de búsqueda del la clase TreeSet tailSet que devuelve la rama de los nodos mayores al valor especificado en la búsqueda, si este nodo existe es el primero y se obtiene mediante el metodo fisrt () del conjunto de la clase de java SortedSet
Las búsquedas por dirección se realizan linealmente a través de un recorrido por el árbol

En las políticas First-fit se utiliza el comparador ComparadorDireccion para crear el árbol de memoria, para que el árbol se encuentre ordenado por posiciones de memoria.
Las búsqueda por dirección se realiza mediante el método de búsqueda del la clase TreeSet tailSet que devuelve la rama de los nodos mayores al valor especificado en la búsqueda, si este nodo existe es el primero y se obtiene mediante el método fisrt () del conjunto de la clase de java SortedSet
Las búsquedas por tamaño se realizan linealmente a través de un recorrido por el árbol.
Las búsquedas de procesos se implementan de igual manera

En las políticas First-fit ,en la fusión de bloques libres para encontrar el nodo adyacente anterior en el árbol de memoria se utiliza el método de búsqueda del la clase TreeSet headSet que devuelve la rama de los nodos menores al valor especificado en la búsqueda, si este nodo existe es el ultimo y se obtiene mediante el metodo last() del conjunto de la clase de java SortedSet .

En las políticas Best-fit, en la fusión de bloques libres para encontrar el nodo adyacente anterior en el árbol de memoria se realiza un recorrido de todo el árbol, hasta encontrar un bloque adyacente anterior ya que como esta ordenado por tamaño, no se sabe cual es la posición que tiene en la memoria cada nodo.



Comentarios del módulo 3
En el módulo 3 se utilizo la clase Vector de java para implementar las estrategias de reemplazo de paginas al igual que para implementar el bit se utilizo la clase vector
La clase vector es de tipo lista.



Resumen de los page foults

Probabilidad s = 0.80 y o 0.80

10 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1433
Estrategia de reemplazo de páginas LRU, número de page foults = 1433
Estrategia de reemplazo de páginas LFU, número de page foults = 2226
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1433
Estrategia de reemplazo de páginas OPT, número de page foults = 1335

50 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1390
Estrategia de reemplazo de páginas LRU, número de page foults = 1389
Estrategia de reemplazo de páginas LFU, número de page foults = 2073
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1390
Estrategia de reemplazo de páginas OPT, número de page foults = 1120

100 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 1329
Estrategia de reemplazo de páginas LRU, número de page foults = 1327
Estrategia de reemplazo de páginas LFU, número de page foults = 1931
Estrategia de reemplazo de páginas CLOCK, número de page foults = 1329
Estrategia de reemplazo de páginas OPT, número de page foults = 1002

Probabilidad s = 0.95 y o 0.95

10 page frames

Estrategia de reemplazo de páginas FIFO, número de page foults = 128
Estrategia de reemplazo de páginas LRU, número de page foults = 125
Estrategia de reemplazo de páginas LFU, número de page foults = 406
Estrategia de reemplazo de páginas CLOCK, número de page foults = 128
Estrategia de reemplazo de páginas OPT, número de page foults = 121

50 page frames
Estrategia de reemplazo de páginas FIFO, número de page foults = 118
Estrategia de reemplazo de páginas LRU, número de page foults = 120
Estrategia de reemplazo de páginas LFU, número de page foults = 338
Estrategia de reemplazo de páginas CLOCK, número de page foults = 118
Estrategia de reemplazo de páginas OPT, número de page foults = 114

100 page frames

Estrategia de reemplazo de páginas FIFO, número de page foults = 114
Estrategia de reemplazo de páginas LRU, número de page foults = 114
Estrategia de reemplazo de páginas LFU, número de page foults = 150
Estrategia de reemplazo de páginas CLOCK, número de page foults = 114
Estrategia de reemplazo de páginas OPT, número de page foults = 114



Preguntas

1)¿Qué estrategia de reemplazo de páginas escogería usted y por qué? Debe considerar los resultados obtenidos y el esfuerzo que le llevó implementar cada estrategia. Discuta lo que sus resultados muestran acerca de los méritos relativos de FIFO, LRU, LFU, Second Chance (CLOCK) y OPT para cada una de las diferentes combinaciones de parámetros.

La estrategia OPT es la de mejor rendimiento
La estrategia LFU es la de peor rendimiento

Las estrategias FIFO y LRU tienen casi el mismo rendimiento con diferencia que cuando se aumenta el número de frames se puede ver una mejora la mayoría de veces mejorando LRU

FIFO y CLOCK mantienen el mismo rendimiento
El peor

Yo escogería la estrategia de replazo LRU ya que es la mejor después de OPT, y no es tan difícil de implementar como OPT ya que este debe conocer todas las referencias de memoria de antemano.


2) ¿Qué aspectos de la administración de memoria encontró que fue más difícil implementar?
La más difícil fue la memoria continua ya que se tienen que mantener información de los agujeros y los procesos y toda la implementación que realiza manejar memoria continua.

3) ¿Qué aspectos de la administración de la memoria encontró más fácil implementar?
La estrategia de reemplazo FIFO es la mas fácil de implementar, también lo es LRU.

4) ¿Qué cambiaría en su diseño actual?
En las estrategias de reemplazo se pueden implementar más mejoras a los algoritmos, por lo demás no cambiaria nada a este diseño.

 

Sistemas Operativos II

Sistemas Operativos II

sábado, septiembre 09, 2006

 





19) Las computadoras CDC 6600 podían manejar hasta 10 procesos de E/S<br />simultáneamente usando una forma interesante de planificación Round Robin<br />llamada compartición de procesador








Tarea #2



19) Las computadoras CDC 6600 podían manejar hasta 10
procesos de E/S simultáneamente usando una forma interesante de planificación Round
Robin llamada compartición de procesador. Ocurría una conmutación de proceso
después de cada instrucción, de modo que la instrucción 1 provenía del proce­so
2, la instrucción 2 provenía del proceso 2, etc. La conmutación de procesos se
efectuaba mediante un hardware especial, y el gasto extra era cero. Si un
proceso necesitaba T segundos para llegar a su fin en la ausencia de
competidores, ¿cuánto tiempo necesitaría si se usara compartición de procesador
con n procesos?



 



R:\Como la conmutación se realiza después de cada
instrucción el tiempo entonces si hay n procesos si las instrucciones del
proceso que toma un tiempo T fuera menor que el de los otros n procesos
entonces el tiempo serian T*n pero como no se sabe cuantas instrucciones tienen
los n procesos el calculo se realizaría mientras estuvieran esos n procesos, si
el n cambia entonces se realizaría un nuevo calculo con el nuevo n por lo tanto
la formula seria



Tiempo(T) = T*n 



 



20) Los planificadores Round Robin normalmente mantienen una
lista de todos los procesos ejecutables, y cada proceso aparece una y sólo una
vez en la lista. ¿Qué sucedería si un proceso ocurriera dos veces en la lista?
¿Puede usted pensar en alguna razón para permitir esto?



R:\Si un proceso aparece dos veces  en la lista de
planificación utilizando Round Robin  entonces este estaría utilizando dos
quantum, un quantum más que los demás procesos y este terminaría al la mitad
del tiempo normal.



La razón para permitir esto es si quisiéramos implementar
prioridades de algún proceso entonces un aumento de prioridad consistiría en
aumentar una aparición más del proceso en la lista, por ejemplo si quisiéramos
que el proceso X tuviera una prioridad 2(es mayor) entonces este proceso
estaría 2 veces en la lista y si quisiéramos que fuera de prioridad 3 el
proceso x estaría 3 veces en la lista lo que aria que se ejecutara 1/3 mas
rápido que los demás procesos porque obtendría 3 quantum por ciclo.



 



21) Mediciones realizadas en cierto sistema indican que, en
promedio, un proceso se ejecuta durante un tiempo T antes de bloquearse en
espera de E/S. Una conmutación de procesos requiere un tiempo S, que
efectivamente se desperdicia (gasto extra). Para planificación Round Robin con
cuanto Q, deduzca una fórmula para la eficiencia de la CPU en cada uno de los
siguientes casos:



a) Q =­ ∞



R:\Como cada Proceso toma a lo más un quantum y este es ∞ 
el proceso se realiza en T por lo que



 



T = sumatoria de (Ti*Si) desde i = 1 a n



La eficiencia sería



E = T/n



b) Q > T



R:\Como cada Proceso toma a lo más un quantum y este es >
T  el proceso se realiza en T por lo que la formula es igual al anterior



 



T = sumatoria de (Ti*Si) desde i = 1 a n



La eficiencia sería



E = T/n



 



c) S < Q < T



R:\Como cada Proceso toma a lo más un quantum y este es <
T  el proceso se realiza en



 



C = sumatoria de (Qi*Si) desde i = 1 a n donde C es el
tiempo por ciclo



E = (C*c)/n donde c es el número de ciclos y n el número de
procesos



 



d) Q = S



R:\Como cada Proceso toma a lo más un quantum y no sabemos
cuantos  quantum  toma por proceso la formula sería



 



C = sumatoria de (Qi) desde i = 1 a n donde C es el tiempo
por ciclo



La eficiencia sería



E = (2*C*c)/n donde c es el número de ciclos y n el número
de procesos



 



e) Q casi 0



R:\Como cada Proceso toma a lo más un quantum y no sabemos
cuantos  quantum  toma por proceso la formula sería



 



C = sumatoria de (Qi) desde i = 1 a n donde C es el tiempo
por ciclo



La eficiencia sería



E = (2*C*c)/n donde c es el número de ciclos y n el número
de procesos



 



 



 



22) Cinco trabajos están esperando para ejecutarse. Sus
tiempos de ejecución esperados son 9, 6, 3, 5 y X. ¿En qué orden deben
ejecutarse si se desea minimizar el tiempo medio de respuesta? (Su respuesta
dependerá de X.)



 



R:\Se debe de ordenar de menor a mayor



Por lo que los tiempos conocidos ordenados son



3,5,6,9



Si X < 3 entonces seria



X,3,5,6,9



Si 3 < X < 5 entonces seria



3,X,5,6,9



Si 6 < X < 9 entonces seria



3,5,6,X,9



Si X > 9 entonces seria



3,5,6,9,X



 



23) Cinco trabajos por lotes, A a E, llegan a un centro de
cómputo casi al mismo tiempo, y tienen tiempos de ejecución estimados de 10, 6,
2, 4 y 8 minutos. Sus prioridades (determinadas externamente) son 3, 5, 2, 1 y
4, respectivamente, siendo 5 la prioridad más alta. Para cada uno de los
siguientes algoritmos de planificación, determine el tiempo de retorno medio de
los procesos. Ignore el gasto extra por conmutación de procesos.



a) Round Robin.



b) Planificación por prioridad.



c) Primero que llega, primero que se atiende (ejecutados en
el orden 10, 6, 2, 4, 8).



d) El primer trabajo más corto.



Para (a), suponga que el sistema está multiprogramado, y que
cada trabajo recibe una parte equitativa del tiempo de CPU. Para (b) a (d),
suponga que sólo se ejecuta un trabajo a la vez, hasta terminar. Todos los
trabajos están limitados únicamente por CPU.



R:\



style='border-collapse:collapse'>































Proceso



 Tiempo



 Prioridad



P1



 10



 3



P2



 6



 5



P3



 2



 2



P4



 4



 1



P5



 8



 4




 



 



 



a) Round Robin.



R:\ Con q = 2.



((0+2+4+6+8) +(10+12+14)+(16)+(18+20)+(22+24+26+28)) / 5 = 42







b) Planificación por prioridad.



R:\ (0+6+14+24+26)/5 = 14







c) Primero que llega, primero que se atiende (ejecutados en el orden 10, 6, 2,
4, 8).



R:\ (0+10+16+18+22)/5 = 13.2







d) El primer trabajo más corto.



R:\ (0+2+6+12+20)/5 = 8



 



 



 








lunes, agosto 28, 2006

 

Laboratorio # 2

1.-fork() simple

Explique porque si el valor de “x” en el proceso padre es igual o distinto al del proceso hijo.

Los valores de x son iguales pero solo porque el proceso hijo y el proceso padre se ejecutan rápidamente como rand() utiliza el reloj para calcular el valor prácticamente es el mismo si se pone una pausa los valores serian diferentes porque cada proceso hace su propio rand()

¿Existe alguna forma de predecir los ID del proceso que serán asignado al proceso hijo y al proceso padre?

Por lo que se muestra en las corridas los valores que identifican al proceso hijo es mayor en una al del proceso padre y el valor del proceso padre no se puede predecir ya que toma el valor de del siguiente identificador de proceso disponible.

1.-fork() no tan simple
Revise el siguiente programa sin correrlo y responda: ¿Cuántos procesos se van a crear?

Creo que serán 16 procesos















Compile el programa y ahora indique cuántos procesos se crearon.
¿Es igual a su respuesta anterior? Si no es, ¿por qué?












Fueron 8 Procesos
Ya que cada hijo del padre tiene un fork – 1 por lo que seria asi:













Mencione los puntos más relevantes que se encuentran en el manual de fork, que no fueron discutidos en este laboratorio.

fork() requiere las siguientes librerias
#include
#include


Modifique el programa para se creen tres copias únicamente.

/* Programa bien_facil */
#include
#include
#include
#include
#include
#include
#define MAX_COUNT 2
#define BUF_SIZE 120
void main(void)
{
pid_t pid;
int i;
int x=0;
char buf[BUF_SIZE];
fork();
fork();
pid = getpid();
for (i = 1; i <= MAX_COUNT; i++) { x= rand();
sprintf(buf, "Esta linea es de pid %d, valor = %d, valor de x es %d\n", pid, i, x);
write(1, buf, strlen(buf));
} }







Copia pid 95,97,94


3) Fork() más complicado


Explique el funcionamiento del programa “gnarls”.

En main se crea una copia del proceso con el fork() el proceso hijo ejecuta ChildProcess() y el padre ejecuta ParentProcess()
Son dos procesos que se encuentran en memoria requiriendo el uso del cpu.

Explique la salida que obtuvo del programa “gnarls”, ¿qué muestra?
Ejecutas por un momento el proceso hijo y por otro momento el proceso padre obteniendo así salida de los dos procesos.




















Explique si después de ejecutar el programa “gnarls” 20 veces, considera que el manejo del procesador es justo o injusto.

Es justo porque genera prácticamente los procesos simultáneamente y terminan casi al mismo tiempo

This page is powered by Blogger. Isn't yours?