Sunday, May 20, 2012

Locks


Imagen de http://9gag.com/gag/4100321

Formato de la tarea:
  • Tomar una foto a los pasos 4 y 5 como se muestra en el ejemplo
  • Ponerlas en formato pdf
  • Enviarlas al correo electronico: sistemas.operativos.fime@gmail.com
  • Asunto: HORA - Tarea 4 - Matricula - Nombre
  • Entregarla antes del jueves 23 de mayo
Correo que no tenga el formato correcto NO sera revisada.

Wednesday, May 9, 2012

Hola Mundo en nachOS

Bueno la tarea ahora es crear un programa y ejecutarlo. Formato de la tarea:
  • Tomar una foto a los pasos 2, 3, 4 y 6 como se muestra en el ejemplo
  • Ponerlas en formato pdf
  • Enviarlas al correo electronico: sistemas.operativos.fime@gmail.com
  • Ausnto: Tarea 3 - Matricula - Nombre
  • Entregarla antes del miercoles 11 de mayo

Thursday, May 3, 2012

Configurar nachOS C++ de 64 bits

Es  muy simple su configuración, lo primero que tenemos que hacer es ir a la carpeta code  que esta dentro de la carpeta nachos.


Estando dentro de la carpeta nachos/nachos/code con un editor de texto abrimos el archivo Makefile.dep

sudo gedit Makefile.dep

nachOS C++

Bien la tarea es instalar nachOS pero para C++ el cambio es porque es mas complicado para todos hacerlo en Java... Formato de la tarea:
  • Tomar una foto al paso 4, 5 y 6 como las que vienen de ejemplo.
  • Ponerlas en pdf.
  • Enviarlas por correo electronico a: sistemas.operativos.fime@gmail.com
  • Asunto: Tarea 2 - Matricula - Nombre
  • Entregarla antes del Lunes 7 de Mayo ya que el proximo proyecto es para el Miercoles.
Lo primero que tienen que hacer es instalar el compilardo de C, asi que tenemos que abrir una terminal y teclear:
sudo apt-get install build-essential

Wednesday, November 2, 2011

Second Practical Presentation

Practica nachos2
View more presentations from Richi Garza

La idea era subir un video... pero despues de una pelea con un programa decidi tomar capturas de pantalla.

Bueno el siguiente codigo es el mismo de la presentacion. Es una pequeña implementacion de manejo de memoria en C.

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>

#define NSIZE   (5*(1<<20))
#define SLEEPT  10

long  gx[NSIZE];

int
main (int argc, char *argv[])
{
  char  c[NSIZE];
  int  *px = malloc (NSIZE*sizeof(int));

  for (int i=0; i<NSIZE; i++) {
    gx[i] = (long)i;
    px[i] = i;
    c[i]  = 'c';
  }
  printf ("address of gx[0] = %012p\n", &gx[0]);
  printf ("address of px[0] = %012p\n", &px[0]);
  printf ("address of  c[0] = %012p\n", &c[0]);

  printf ("memory map file: /proc/%d/maps\n", getpid());
  printf ("sleeping %d...", SLEEPT);
  fflush (NULL);
  sleep (SLEEPT);

  free (px);

  printf ("\ndone\n");
  exit (EXIT_SUCCESS);


Esta es la captura de pantalla al momento de ejecutar el codigo.


/proc es un directorio extraño. Realmente no existe, sin embargo puedes explorarlo. Sus archivos de tamaño 0 no son ni binarios ni textos, sin embargo puedes examinarlos y desplegar su contenido. Este directorio especial contiene todos los detalles de tu sistema Linux, incluyendo el kernel, procesos y parámetros de configuración. Estudiando el directorio /proc, puedes aprender como los comandos de Linux trabajan e incluso es posible realizar tareas administrativas. 


El directorio /proc está organizado en directorios virtuales y subdirectorios, que agrupan archivos de tópicos similares. Trabajando como root el comando ls /proc te despliega algo como lo siguiente.



Como en la imagen anterior  hacemos   cat /proc/id/maps  le ponemos que lo imprima en un .dat y agregue solo una parte del archivo ya que era muy grande y este puede cambiar de tamaño en cualquier momento.



La direccion de la memoria esta expresada en numeros hexadecimales. Acordadamente el tamaño de una pagina es de 4KB y es expresado en 100016 o 0x1000


p en r-xp significa que es una region privada.



00d54000-00d56000 rw-p 00000000 00:00 0 
00d88000-00ea1000 r-xp 00000000 08:06 1834279    /usr/lib/libX11.so.6.3.0
00ea1000-00ea2000 r--p 00118000 08:06 1834279    /usr/lib/libX11.so.6.3.0
00ea2000-00ea4000 rw-p 00119000 08:06 1834279    /usr/lib/libX11.so.6.3.0
00ea4000-00ea5000 rw-p 00000000 00:00 0 
00eab000-00eb1000 r-xp 00000000 08:06 1835288    /usr/lib/libxcb-render.so.0.0.0
00eb1000-00eb2000 r--p 00005000 08:06 1835288    /usr/lib/libxcb-render.so.0.0.0
00eb2000-00eb3000 rw-p 00006000 08:06 1835288    /usr/lib/libxcb-render.so.0.0.0
00ec3000-00ede000 r-xp 00000000 08:06 1050850    /lib/ld-2.11.1.so
00ede000-00edf000 r--p 0001a000 08:06 1050850    /lib/ld-2.11.1.so
00edf000-00ee0000 rw-p 0001b000 08:06 1050850    /lib/ld-2.11.1.so
00ef1000-00ef9000 rwxp 00000000 00:00 0 
00f11000-00f19000 rwxp 00000000 00:00 0 
00f2f000-00f30000 r-xp 00000000 00:00 0          [vdso]
00f33000-00f3b000 rwxp 00000000 00:00 0 
00f6c000-00f70000 r-xp 00000000 08:06 1046643    /lib/tls/i686/cmov/libnss_dns-2.11.1.so
00f70000-00f71000 r--p 00004000 08:06 1046643    /lib/tls/i686/cmov/libnss_dns-2.11.1.so
00f71000-00f72000 rw-p 00005000 08:06 1046643    /lib/tls/i686/cmov/libnss_dns-2.11.1.so
00fb1000-00fd5000 r-xp 00000000 08:06 1046628    /lib/tls/i686/cmov/libm-2.11.1.so
00fd5000-00fd6000 r--p 00023000 08:06 1046628    /lib/tls/i686/cmov/libm-2.11.1.so
00fd6000-00fd7000 rw-p 00024000 08:06 1046628    /lib/tls/i686/cmov/libm-2.11.1.so
00fd7000-013a4000 r-xp 00000000 08:06 1833560    /usr/lib/libgtk-x11-2.0.so.0.2000.1
013a4000-013a8000 r--p 003cd000 08:06 1833560    /usr/lib/libgtk-x11-2.0.so.0.2000.1
013a8000-013aa000 rw-p 003d1000 08:06 1833560    /usr/lib/libgtk-x11-2.0.so.0.2000.1
013aa000-013ac000 rw-p 00000000 00:00 0 
08048000-0908e000 r-xp 00000000 08:06 1831708    /usr/lib/opera/opera
0908e000-0909d000 rw-p 01045000 08:06 1831708    /usr/lib/opera/opera
0909d000-090a3000 rw-p 00000000 00:00 0 
09f6d000-0d5c5000 rw-p 00000000 00:00 0          [heap]
b7576000-b7578000 rw-p 00000000 00:00 0 
b75b2000-b75f1000 r--p 00000000 08:06 1839402    /usr/lib/locale/en_US.utf8/LC_CTYPE
b75f1000-b75f2000 r--p 00000000 08:06 1839407    /usr/lib/locale/en_US.utf8/LC_NUMERIC
b75f2000-b7710000 r--p 00000000 08:06 1839401    /usr/lib/locale/en_US.utf8/LC_COLLATE
b7710000-b7716000 rw-p 00000000 00:00 0 
b7716000-b7717000 r--p 00000000 08:06 1844068    /usr/lib/locale/en_US.utf8/LC_TIME
b7717000-b7718000 r--p 00000000 08:06 1844069    /usr/lib/locale/en_US.utf8/LC_MONETARY
b7718000-b7719000 r--p 00000000 08:06 1844070    /usr/lib/locale/en_US.utf8/LC_MESSAGES/SYS_LC_MESSAGES
b7719000-b771a000 r--p 00000000 08:06 1839655    /usr/lib/locale/en_US.utf8/LC_PAPER
b771a000-b771b000 r--p 00000000 08:06 1839289    /usr/lib/locale/en_US.utf8/LC_NAME
b771b000-b771c000 r--p 00000000 08:06 1844071    /usr/lib/locale/en_US.utf8/LC_ADDRESS
b771c000-b771d000 r--p 00000000 08:06 1844072    /usr/lib/locale/en_US.utf8/LC_TELEPHONE
b771d000-b771e000 r--p 00000000 08:06 1839651    /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
b771e000-b7725000 r--s 00000000 08:06 1832651    /usr/lib/gconv/gconv-modules.cache
b7725000-b7726000 r--p 00000000 08:06 1844073    /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
b7726000-b7728000 rw-p 00000000 00:00 0 
bff74000-bffa7000 rw-p 00000000 00:00 0          [stack]
El mapeo no identifica la memoria como "text" o "data" pero para eso podemos utilizar Size map como en la siguiente foto.
El comando cat /proc/meminfo puede traer a la pantalla algo como lo siguiente
MemTotal:        2999120 kB
MemFree:         1330344 kB
Buffers:          766668 kB
Cached:           421904 kB
SwapCached:            0 kB
Active:           511076 kB
Inactive:        1058524 kB
Muestra mas info... solo lo corte para no hacer spam

Filesystem

Para la parte correspondiente a "filesystem" utilizamos una herramienta llamada pyinotify, la cual permite monitorear los eventos en el sistema, esta herramienta es muy parecida a inotify utilizada por el kernel de Linux, en sí su principal función es darse cuenta cuando alguna carpeta o archivo han sido modificados y enviar un mensaje al sistema de que ha sucedido algún cambio.

Lo que hicimos nosotros fue ver de que manera funcionaba la herramienta y posteriormente hacer unas pruebas para saber que tan factible era utilizar algo similar en nuestro proyecto. Cabe hacer mención que no solo existe la herramienta en python si no que tambien la podemos encontrar en varios lenguajes de programación.

A continuación se encuentran un par de videos que hicimos de las pruebas de funcionamiento de pyinotify, En el primero se muestra como sucede el monitoreo de un archivo en el se muestra algunos cambios como lo son la creación del archivo, después cuando se escribe en el mismo y por ultimo cuando eliminamos el archivo.



En el segundo video se muestra el monitoreo sobre una carpeta y aquí podemos ver que el programa nos dice cuando se crea un archivo o una carpeta y cuando se eliminan los mismos.


Esta es la entrada correspondiente a la segunda presentación practica del proyecto.