Publicidad

lunes, 15 de diciembre de 2008

sistema operativo Red Hat

hola compañeros esta ocasión de manera breve les comento sobre Red Hat


Red Hat es la compañía responsable de la creación y mantenimiento de una distribución del sistema operativo GNU/Linux que lleva el mismo nombre: Red Hat Enterprise Linux, y de otra más, Fedora. Así mismo, en el mundo del middleware patrocina jboss.org, y distribuye la versión profesional bajo la marca JBoss Enterprise.

Red Hat es famoso en todo el mundo por los diferentes esfuerzos orientados a apoyar el movimiento del Software libre. No sólo trabajan en el desarrollo de una de las distribuciones más populares de Linux, sino también en la comercialización de diferentes productos y servicios basados en software de código abierto. Asimismo, poseen una amplia infraestructura en la que se cuentan más de 2.000 empleados en 28 lugares del mundo.

Programadores empleados de Red Hat han desarrollado múltiples Paquetes de software libre, los cuales han beneficiado a toda la comunidad. Algunas de las contribuciones más notables han sido la creación de un sistema de empaquetación de software (RPM), y varias utilidades para la administración y configuración de equipos, como sndconfig o mouseconfig.

Algunas de las distribuciones basadas en RedHat Linux más importantes son: Mandriva Linux, Yellow Dog Linux (sólo para Power PC), y CentOS (compilada a partir de las fuentes de Red Hat).

sábado, 13 de diciembre de 2008

¿La PC te irrita los ojos?

Hola chavos sabían que con sólo dos horas seguidas frente a la máquina ya se pone en riesgo la salud visual. En este artículo hay algunos consejos para evitar males.

Distintos estudios científicos estiman que el 85% de las personas que trabajan diariamente con computadoras sufre del síndrome de visión de computadora (CVS, por sus siglas en inglés).
Se trata de un sobreesfuerzo de los ojos que provoca fatiga e irritación ocular, acompañado por dolores de cabeza, espalda y brazos. Realizar ejercicios para relajar la vista, cuidar el entorno y consultar al oftalmólogo con regularidad son los tres pilares para combatirlo.

Ojos lubricados, ojos protegidos

Una persona que trabaja con una PC realiza a diario entre 12 y 33 mil movimientos de cabeza y ojos, y sus pupilas reaccionan entre 4 y 17 mil veces. Para colmo de males, la exposición ante una pantalla provoca una disminución del parpadeo. Mientras que normalmente una persona pestañea unas 15 veces por minuto, al estar frente a la computadora (o el televisor) lo reduce de 5 a 7 veces.

El objetivo básico del parpadeo es mantener la humedad corneal. Sin esta lubricación, se producen irritaciones, sensación de arenilla y visión borrosa.
Pero con parpadear no alcanza para descansar la vista. Uno de los métodos fue bautizado por los estadounidenses como 20-20-20. Consiste en cada 20 minutos frente a la pantalla tomarse 20 segundos para mirar algo que esté a 20 pies (6 metros).

Otro ejercicio es sentarse derecho y mirar al frente, hacia el monitor. Después, sin mover la cabeza, desviar todo lo posible la mirada hacia la izquierda y luego hacia la derecha.
Atención con el entorno

Hay cuestiones básicas que se pueden adoptar en la oficina o en casa al momento de usar la PC.
La primera de ellas es colocar el monitor a una distancia de entre 55 y 70 centímetros de la cara, y con una leve inclinación hacia atrás.

Si la letra resulta muy pequeña o no se alcanza a leer claramente, lo conveniente es hacer zoom con el programa que se esté utilizando. De esta manera se evita inclinar el cuerpo hacia adelante y sumarle al potencial problema de la vista otro de la columna. Para los que tipean todo el día, es conveniente tener los papeles en un atril (las casas especializadas venden una especie de brazo con un broche) para no estar subiendo y bajando tanto la cabeza.

Por último, si el monitor es convexo, conviene colocarle un filtro antibrillo para evitar los reflejos. Tanto el protector como la pantalla deben estar siempre bien limpios.

Visitas al médico

Los especialistas aconsejan visitar al menos una vez al año al médico oftalmólogo, el único especialista acreditado para recetar anteojos con antirreflejo, gotas para evitar la resequedad o cualquier otro medicamento. Si la persona tiene además otros problemas visuales, la visita debe hacerse cada seis meses.
Bueno chavos ojala y pongan mas atención a su salud después de haber leído este artículo .
ATTE.
Antonio Viveros Balderas

Logitech presenta gameboard G13



Para los que nos gusta esto:D

El gameboard avanzado Logitech G13 incluye diseño de formas naturales, memoria integrada y retroiluminación personalizada.

Diario Ti: Logitech presentó el gameboard avanzado Logitech G13, teclado de juego híbrido diseñado para complementar teclado y mouse ofreciendo comodidad y control para jugar en una computadora Mac o PC.
“Si realmente te gustan los juegos, no hay mejor sensación que jugar con el gameboard G13 de tu lado", aseguró Rubén Mookerjee, director de Marketing de productos para juego de Logitech. “A diferencia de otros gameboards que se enfocan sólo en la programabilidad, el gameboard avanzado G13 incorpora los principios de nuestro diseño Comfort Wave".Con tres modos de juego, 25 teclas programables y un stick análogo que puede programarse, el gameboard G13 ofrece hasta 87 formas de controlar un juego (se requiere instalar el software). Y puede definir perfiles por botón para cada uno de los títulos favoritos.G13 también ofrece ajustes preconfigurados para muchos de los juegos más populares, incluyendo World of Warcraft: Burning Crusade, Lord of the Rings Online: Shadows of Angmar, Call of Duty 4: Modern Warfare y muchos otros.

viernes, 12 de diciembre de 2008

valgrind

Utilización de valgrind
Valgrind (www.valgrind.org) es una herramienta de SW libre que ayuda a detectar problemas de memoria.
Si queremos utilizar valgrind para detectar errores en nuestros programas debemos hacer lo siguiente:
• Compilar nuestro programa de la siguiente manera:
gcc -Wall -g fichero1.c fichero2.c -o miejecutable
• Ejecutar nuestro programa poniendo en línea de comandos:
valgrind --leak-check=full miejecutable param1 param2 ...
• Si nuestro programa tiene errores de memoria, valgrind nos mostrará las líneas donde ha detectado el error.


Ejemplo:
􀂾 Valgrind detecta zonas de memoria mal reservadas. Por ejemplo, imaginad que tenemos el programa siguiente en
un fichero llamado mio.c:
1. #include
2.
3. void testMem(int * a)
4. {
5. a[11]=0; //inicializar el elemento numero 11 del array (no esta reservada)
6. }
7.
8. int main(void)
9. {
10.
11. int *array;
12. array=malloc(10*sizeof(int)); //reservar un array de 10 enteros
13. testMem(array);
14. return 0; //no se ha liberado la memoria array)
15. }
y ejecutamos el programa con valgrind, nos mostrará el siguiente mensaje de error:
==12059== Invalid write of size 4
==12059== at 0x8048351: testMem (mio.c:5)
==12059== by 0x8048383: main (mio.c:13)
==12059== Address 0x401D054 is 4 bytes after a block of size 40 alloc'd
==12059== at 0x4004639: malloc (vg_replace_malloc.c:149)
==12059== by 0x8048372: main (mio.c:12)
significa que estamos escribiendo cuatro bytes en una zona de memoria inválida. Esto ocurre dentro de la función
testMem en la línea 5 de nuestro fichero mio.c, al que se llama desde el programa main de mio.c en la línea
13. Esta memoria se ha reservado con un malloc, dentro del programa main en la línea 12 del fichero mio.c.
􀂾 También, valgrind detecta memorias sin liberar. Por ejemplo, para nuestro programa mio.c, valgrind nos da:
==12087== malloc/free: in use at exit: 40 bytes in 1 blocks.
==12070== malloc/free: 1 allocs, 0 frees, 40 bytes allocated.
diciendo que hemos hecho una reserva de memoria (1 malloc en nuestro caso) y cero instrucciones de liberación
(0 free), es decir falta un free. Y al final mostrará:
==12087== 40 bytes in 1 blocks are definitely lost in loss record 1 of 1
==12087== at 0x4004639: malloc (vg_replace_malloc.c:149)
==12087== by 0x8048372: main (mio.c:12)
significa la memoria perdida (sin liberar) se ha reservado dentro del programa main en la línea 12 del mio.c.

jueves, 11 de diciembre de 2008

Depurador GDB

Hola que tal compañeros...como estamos trabajando con una práctica sobre el depurador de linux GDB...me hice a la tarea de buscar información sobre este depurador...

La información se me hace importante ya que en si podemos darnos cuenta las utilidades que se pueden realizar y los diferentes comandos de GDB...Saludos...

Yrvin Ossiel Dorantes Carreon

El proposito de un depurador como GDB es permitir al usuario ver lo que
está ocurriendo ‘‘dentro’’ de otro programa mientras que se está ejecu‐
tando — o lo que estaba haciendo en el momento que falló.

GDB puede hacer cuatro tipo de cosas (más otras cosas para dar soporte
a éstas) para ayudarte a capturar errores en el acto:

· Comenzar tu programa, especificando cualquier cosa que pueda
afectar a su comportamiento.

· Hacer que tu programa se pare al cumplirse las condiciones
especificadas.

· Examinar que ha pasado, cuando tu programa se ha parado.

· Cambiar cosas de tu programa, de tal manera que puedas experi‐
mentar corrigiendo los efectos de un fallo y continuar para des‐
cubrir otros.

Puedes usar GDB para depurar programas escritos en C, C++, y Modula-2.
El soporte para Fortran se añadirá cuando esté listo un compilador GNU
Fortran.

GDB se invoca con la orden de shell gdb. Una vez comenzado, lee
órdenes del terminal hasta que le dices que salga con la orden GDB
quit. Usando la orden help puedes obtener una ayuda directa del gdb.

Se puede ejecutar gdb sin argumentos ni opciones; pero la manera más
común de comenzar GDB es con uno o dos argumentos, especificando un
programa ejecutable con el argumento:

gdb programa

También puedes comenzar con un programa ejecutable y un fichero core
específico:

gdb programa core

Puedes, en su lugar, especificar un ID de proceso como segundo argu‐
mento, si quieres depurar un proceso en ejecución:

gdb programa 1234

ligaría GDB al proceso 1234 (al menos que también tengas un fichero
denominado ‘1234’; GDB busca un fichero core en primer lugar).

Aquí están las ordenes más frecuentemente necesitadas en GDB:

break [fichero:]función
Pone un punto de ruptura en función (en fichero).

run [arglist]
Comienza tu programa (con arglist, si se especifica).

bt Backtrace: muestra la pila del programa.

print expr
Muestra el valor de una expresión.

c Continua ejecutando tu programa (después de parar, p.e. en un
punto de ruptura).

next Ejecuta la siguiente línea del programa (después de parar); pasa
sobre cualquier llamada a función que apareciera en la línea.

step Ejecuta la siguiente línea del programa (despué de parar);
entrando en cualquier llamada a función que apareciera en la
línea.

help [nombre]
Muestra información sobre la orden GDB nombre, o información
general sobre como utilizar GDB.

quit Salir de GDB.

Para todos los detaller sobre GDB, véase Using GDB: A Guide to the GNU
Source-Level Debugger, by Richard M. Stallman and Roland H. Pesch. El
mismo texto está disponible en línea como la entrada gdb en el programa
info.

miércoles, 10 de diciembre de 2008

¿Qué significa vulnerabilidad?.

¿Qué significa vulnerabilidad?.
La vulnerabilidad es la incapacidad de resistencia cuando se presenta un fenómeno amenazante, o la incapacidad para reponerse después de que ha ocurrido un desastre.

Las 20 vulnerabilidades más críticas en Internet

1. Instalaciones por defecto de sistemas y aplicaciones
2. Cuentas sin contraseña o contraseñas débiles
3. Respaldos (backups) incompletos o inexistentes
4. Gran número de puertos abiertos
5. Insuficiente filtrado de los paquetes con direcciones de inicio y destino inadecuadas
6. Registro de eventos (logging) incompleto o inexistente
7. Programas CGI vulnerables
Vulnerabilidades más críticas en sistemas Windows8. Vulnerabilidad Unicode (Salto de directorio en servidores Web - Web Server Folder Traversal)
9. Desbordamiento de Buffer en extensiones ISAPI
10. Exploit para RDS del IIS (Servicios de información remota Microsoft)
11. NETBIOS - recursos compartidos en red no protegidos
12. Fuga de información a través de conexiones de tipo "sesión nula"
13. Hashing débil en SAM (LM hash)
Vulnerabilidades más críticas en sistemas Unix
14. Desbordamiento de Buffer en los servicios RPC
15. Vulnerabilidades en sendmail
16. Debilidades en BIND
17. Los comandos "r" (Los comandos "r" permiten acceder a sistemas remotos sin tener que introducir ninguna contraseña)
18. LPD (demonio del protocolo de impresión remota)
19. Sadmind y Mountd (Sadmind permite la administración remota de sistemas Solaris, proporcionando un interfaz gráfico para labores de administración de sistemas)
20. Nombres de comunidad SNMP por omisión

sábado, 6 de diciembre de 2008

OpenGL

hola compañeros esta ocasión les envio información de OpenGL espero sus comentarios acerca del mismo.

Open Graphics Library. Es un conjunto de especificaciones estándar que definen una API multilenguaje y multiplataforma para escribir aplicaciones o juegos que producen gráficos en 3D. Fue desarrollada originalmente por Silicon Graphics Incorporated (SGI).Ofrece al programador un API sencilla y estable para que pueda generar gráficos en 2D y 3D por hardware. Consiste en más de 250 funciones diferentes que pueden ser usadas para graficar complejos escenarios tridimensionales usando simples primitivas.Es muy popular en la industria de los videojuegos y es competencia directa (en plataformas Windows) del Direct3D desarrollado por Microsoft.OpenGL es compatible para múltiples plataformas como ser Windows, Unix (Linux, MacOS), Playstation 3, etc.

conceptos utilizados en la explicación anterior:

API: Interfaz de Programación de Aplicaciones). Grupo de rutinas (conformando una interfaz) que provee un sistema operativo, una aplicación o una biblioteca, que definen cómo invocar desde un programa un servicio que éstos prestan. En otras palabras, una API representa un interfaz de comunicación entre componentes software.
MULTIPLATAFORMA: Cross-platform en inglés. Que tiene la capacidad de soportar múltiples plataformas.Esto significa que el hardware o software que es multiplataforma tiene la característica de funcionar de forma similar en distintas plataformas (distintos sistemas operativos por ejemplo).
DIRECT3D: Un API, parte de DirectX, para la programación de gráficos 3D, facilitando el manejo y dibujo de elementos en tres dimensiones: líneas, polígonos, texturas, transparencias, etc. y permite aprovechar también una tarjeta aceleradora gráfica.Direct3D es utilizada por la mayoría de juegos 3D para el sistema operativo Windows.

crera una biblioteca dinaminca

Antes de crear una biblioteca dinámica debemos pensar si realmente será útil. Las bibliotecas dinámicas provocan una sobrecarga en el sistema debido a varios elementos:
La carga del programa se realiza en varios pasos, uno para el programa principal, mas uno por cada biblioteca dinámica que use dicho programa (veremos que si la biblioteca dinámica es apropiada, este último punto deja de ser un inconveniente y pasa a ser una ventaja)

Las bibliotecas dinámicas deben contener código reubicable, ya que la posición de carga dentro del espacio de direcciones virtuales del proceso no se sabrá hasta el momento de dicha carga. Esto obliga al compilador a reservar un registro para mantener la posición de carga de la biblioteca y por tanto tenemos un registro menos para el optimizador de código. Este caso es un mal menor, ya que la sobrecarga introducida por esta situación no representa mas de un 5% de sobrecarga en la mayoría de los casos.
Para que una biblioteca dinámica sea apropiada debe ser utilizada la mayor parte del tiempo por algún programa (esto evita el problema de cargar el texto de la biblioteca, ya que permanece cargada en memoria, tras la muerte del proceso que la usa al haber otros procesos usándola)
La biblioteca compartida se carga en memoria completa (no solo los módulos utilizados) así que para que sea util, debe serlo en su totalidad. No son buenas bibliotecas dinámicas aquellas donde solo se usa una funcion y el noventa por ciento de la biblioteca no se usa la mayor parte del tiempo.
Un buen ejemplo de biblioteca dinámica es la biblioteca estandar de C (la usan todos los programas escritos en C ;). Por termino medio todas las funciones se utilizan en uno u otro caso.
En una biblioteca estática suele importar poco incluir funciones cuyo uso sea infrecuente, siempre que dichas funciones ocupen un módulo propio, no serán enlazadas en aquellos programas que no las usen.
.

Que es y para que sirve el archivo Pagefile.sys

Hola compañeros hoy subo algo muy interesante sobre el archivo Pagefile,sys, este archivo es muy especial y lo usa Windows para almacenar temporalmente datos los cuales son intercambiados entre la memoria RAM y éste, con el fin de disponer de un bloque mas grande de memoria, a ésta se le conoce como MEMORIA VIRTUAL. El nombre del archivo es pagefile.sys y se crea en el momento de la instalación de Windows en la unidad raíz (normalmente C:\) donde se encuentra el boot del sistema y sus atributos son de oculto. El archivo pagefile.sys normalmente no se debería poder ver en el explorador de Windows, a menos que hayas desactivado la opción "Ocultar archivos protegidos del sistema".El tamaño de archivo pagefile.sys normalmente es 1.5 veces mas grande que la memoria RAM del sistema. (Por ejemplo, si tienes 1GB de RAM, el archivo debería pesar algo como 1.5GB, si tienes 256MB, el archivo debería pesar algo como 384B, y así, etc.)

En la página donde encontré esta información hay más cosas interesantes sobre el archivo pagefile.sys como:
- Como optimizar y cual es la mejor ubicacion del archivo Pagefile.sys
- Como crear ó establecer un archivo pagefile.sys?
- Mi sistema puede funcionar sin un archivo pagefile.sys?
- Puedo ver el tamaño que está usando actualmente el archivo pagefile.sys?
- etc..

Para mas información visiten esta página web.
http://www.wilkinsonpc.com.co/free/articulos/archivo-pagefile-sys.html

Nuevo fallo global. Esta vez el TCP/IP


HOla de neuvo, ya casi terminando el curso, es vueno estar enterados de las noticias más importantes de la computación e informática a nivel mundial, y encontré este artículo muy interesante, sobre todo en el ámbito de redes, algunos vimos algo en Porgramación Avanzada, y los que ya llevan redes sabrán de la importancia


En general parece que ha llegado el tiempo de levantar la alfombra y ver toda la basura que tenia la red, puesto que otra vulnerabilidad global le ha sido descubierta. Como ya ocurriera con el fallo del DNS, una nueva amenaza se ha encontrado en los protocolos TCP/IP que se utilizan en la comunicación de internet, en la forma de múltiples vulnerabilidades que pueden llegar a provocar en masivas denegaciones de servicio.
Los descubridores son Robert E. Lee y Jack Louis, quienes haciendo pruebas de seguridad para
Outpost24, se dieron cuenta de unos extraños comportamientos con las pérdidas de paquetes de información, similares a los de una denegación de servicios. Según estos investigadores, el parcheado de este problema requiere la coordinación con los proveedores de sistemas operativos, firewalls, la Web y dispositivos habilitados.


El artículo está en inglés, les traduzco parte de él, ahi me corrigen si algo está mal traducido jeje:


"Dos investigadores en Suecia han encontrado múltiples fallas en la pila TCP que podría dar lugar a masivos de denegación de servicio si los ataques de explotación. En la actualidad no hay ninguna solución y no hay parches disponibles. La pila TCP define un conjunto de normas por las que un ordenador puede comunicarse a través de cualquier red. Robert E. Lee, Oficial Jefe de Seguridad de Outpost24, le dijo a CNET Noticias ", los vendedores que se encuentran en conversaciones con parecen estar tomando en serio la amenaza". El descubrimiento sigue una prueba con un puerto de escáner llamado UnicornScan, que Lee y superior de la seguridad investigador Jack Louis creado. La herramienta se utiliza para la evaluación de la vulnerabilidad y pruebas de penetración en Outpost24. Lee le dijo a un podcast sueco que, cuando no podían obtener un escaneo de puertos hecho lo suficientemente pronto, se decidió trasladar la pila TCP en el programa para que sea más distribuido. Fue entonces cuando Louis comenzó a notar un comportamiento extraño. "Jack encontrado algunas anomalías en las máquinas que se dejan de funcionar en algunas circunstancias muy concretas, mientras que está siendo escaneado," dijo Lee noticias CNET. Uno de los comportamientos experimentado la pérdida de paquetes es que los paquetes sólo siguieron tratando y tratando y tratando, la creación, más o menos, una denegación de servicio (DoS) en esa máquina. No parece ser sólo una vulnerabilidad, sino varias, de acuerdo con Robert Hansen, el primero que escribí sobre este viernes. Hansen dice que el potencial de estas vulnerabilidades, como él lo entiende, si explota, podría resultar en un gran daño. Y la fijación que requieren la coordinación con los proveedores de sistemas operativos, firewalls, la Web y dispositivos habilitados. Para explotar los defectos, para ver si el TCP vulnerabilidades son reales, Lee y Louis creado un programa llamado "sockstress" intencionalmente hizo que algunas cosas mal con el protocolo TCP / IP apretón de manos proceso. Sockstress El programa fue muy eficaz en la producción de ataques de DoS. La pareja no tiene planes para liberar sockstress."

y para que sigan leyendo el artículo está en el siguiente link


http://news.cnet.com/8301-1009_3-10056759-83.html?tag=newsEditorsPicksArea.0


Windows 7 Beta para principios de 2009


Ola que tal compañeros un saludo de antemano..aqui les dejo esta mequeñainformación sobre otro sistema que se esta construyendo para windows...saludos



Rumores corren por la red acerca del nuevo Windows 7, el siguiente sistema operativo sucesor de Windows Vista. Al parecer ya tendríamos una versión Beta disponible en principios de este próximo año 2009, según informó Keith Combs de Technet. Si quieres ser una de esas priemeras personas en probar este nuevo sistema de MS podrás adquirir el DVD con la Beta el próximo 13 de Enero de 2009 en la Microsoft Developer’s Conference (conferencia de desarrolladores MS) que se llevará a cabo conjuntamente en las ciudades de Minneapolis y Chicago.
Seguramente durante el año 2009 podremos ver versiones de prueba, mientras que la versión final podríamos esperarla para principios de 2010.

lunes, 1 de diciembre de 2008

Cahé de Inodos ....

Algo de in formacion espero sea de interes:



Caché de Inodos e Interacción con DcacheEn orden para soportar múltiples sistemas de archivos, Linux contiene un nivel especial de interfaces del núcleo llamado VFS (Interruptor de Sistemas de Ficheros Virtuales). Esto es muy similar a la interfaz vnode/vfs encontrada en los derivados de SVR4 (originalmente venían de BSD y de las implementaciones originales de Sun).

La antememoria de inodos de Linux es implementada en un simple fichero, fs/inode.c, el cual consiste de 977 lineas de código. Es interesante notar que no se han realizado muchos cambios en él durante los últimos 5-7 años: uno todavía puede reconocer algún código comparando la última version con, digamos, 1.3.42.

La estructura de la antememoria de inodos Linux es como sigue:


Una tabla global hash, inode_hashtable, donde cada inodo es ordenado por el valor del puntero del superbloque y el número de inodo de 32bit. Los inodos sin un superbloque (inode->i_sb
NULL) son añadidos a la lista doblemente enlazada encabezada por anon_hash_chain en su lugar. Ejemplos de inodos anónimos son los conectores creados por net/socket.c:sock_alloc(), llamado por fs/inode.c:get_empty_inode().
Una lista global del tipo "en_uso" (inode_in_use), la cual contiene los inodos válidos con i_count>0 y i_nlink>0. Los inodos nuevamente asignados por get_empty_inode() y get_new_inode() son añadidos a la lista inode_in_use.
Una lista global del tipo "sin_usar" (inode_unused), la cual contiene los inodos válidos con i_count = 0.
Una lista por cada superbloque del tipo "sucia" (sb->s_dirty) que contiene los inodos válidos con i_count>0, i_nlink>0 y i_state & I_DIRTY. Cuando el inodo es marcado como sucio, es añadido a la lista sb->s_dirty si el está también ordenado. Manteniendo una lista sucia por superbloque de inodos nos permite rápidamente sincronizar los inodos.
Una antememoria propia de inodos - una antememoria SLAB llamada inode_cachep. Tal como los objetos inodos son asignados como libres, ellos son tomados y devueltos a esta antememoria SLAB.

Los tipos de listas son sujetadas desde inode->i_list, la tabla hash desde inode->i_hash. Cada inodo puede estar en una tabla hash y en uno, y en sólo uno, tipo de lista (en_uso, sin_usar o sucia).

Todas estas listas están protegidas por un spinlock simple: inode_lock.

El subsistema de caché de inodos es inicializado cuando la función inode_init() es llamada desde init/main.c:start_kernel(). La función es marcada como init, lo que significa que el código será lanzado posteriormente. Se le pasa un argumento simple - el número de páginas físicas en el sistema. Esto es por lo que la antememoria de inodos puede configurarse ella misma dependiendo de cuanta memoria está disponible, esto es, crea una tabla hash más grande si hay suficiente memoria.

Las únicas estadísticas de información sobre la antememoria de inodos es el número de inodos sin usar, almacenados en inodes_stat.nr_unused y accesibles por los programas de usuario a través de los archivos /proc/sys/fs/inode-nr y /proc/sys/fs/inode-state.

Podemos examinar una de las listas desde gdb en un núcleo en funcionamiento de esta forma:



--------------------------------------------------------------------------------
(gdb) printf "%d\n", (unsigned long)(&((struct inode *)0)->i_list)
8
(gdb) p inode_unused
$34 = 0xdfa992a8
(gdb) p (struct list_head)inode_unused
$35 = {next = 0xdfa992a8, prev = 0xdfcdd5a8}
(gdb) p ((struct list_head)inode_unused).prev
$36 = (struct list_head *) 0xdfcdd5a8
(gdb) p (((struct list_head)inode_unused).prev)->prev
$37 = (struct list_head *) 0xdfb5a2e8
(gdb) set $i = (struct inode *)0xdfb5a2e0
(gdb) p $i->i_ino
$38 = 0x3bec7
(gdb) p $i->i_count
$39 = {counter = 0x0}


***************************************************
********Inodo***************(Wikipedia....
En informática, un inodo, nodo-i, nodo índice o i-node en inglés es una estructura de datos propia de los sistemas de archivos tradicionalmente empleados en los sistemas operativos tipo UNIX como es el caso de Linux. Un inodo contiene las características (permisos, fechas, ubicación, pero NO el nombre) de un archivo regular, directorio, o cualquier otro objeto que pueda contener el sistema de ficheros.

El término "inodo" refiere generalmente a inodos en discos (dispositivos en modo bloque) que almacenan archivos regulares, directorios, y enlaces simbólicos. El concepto es particularmente importante para la recuperación de los sistemas de archivos dañados.

Cada inodo queda identificado por un número entero, único dentro del sistema de ficheros, y los directorios recogen una lista de parejas formadas por un número de inodo y nombre identificativo que permite acceder al archivo en cuestión: cada archivo tiene un único inodo, pero puede tener más de un nombre en distintos o incluso en el mismo directorio para facilitar su localización.

Denominacion;
No existe una explicación clara para la denominación "inodo". Dennis Ritchie, precursor de UNIX lo explicó así:

'Realmente, tampoco lo sé. Era simplemente el nombre que comenzamos a utilizar. "Índice" es lo mejor que se me ocurre, debido a la estructura algo inusual de un sistema de ficheros que almacenaba la información del acceso a los archivos como una lista plana en disco, dejando al margen toda la información jerárquica de los directorios. Así el número "i'" es un índice sobre la lista, el nodo "i" es el elemento seleccionado de la lista. (En la primera edición del manual se empleó la notación "i-nodo"; el guión fue desapareciendo poco a poco).'

sábado, 29 de noviembre de 2008

¿Qué son las Cookies?

Hola compañeros hoy encontre un articulo muy interesante sobre las cookies, en realidad antes de leer este articulo no tenia una idea muy claro sobre que eran las cookies, ahora se que las cookies son unos trozos de información que los servidores en la Web Mundial pueden grabar en su disco duro. Las Cookies graban información acerca de su visita a un sitio en particular, y sólo el sitio que los creó los puede leer más tarde. Se usan cookies para hacer que su navegación en la Web sea más personal y conveniente, pero hay gente que tiene miedo que el abuso de las cookies nos pueda llevar a una pérdida de privacidad.


Cada vez crece más la cantidad de sitios que usan las cookies para realzar su experiencia en la Web y para posibilitar algunas características bastante geniales. El popular servicio de My Yahoo! (http://www.yahoo.com) usa cookies para ayudarle a personalizar el sitio para que se ajuste a sus preferencias. Si especifica que desea recibir los resultados de los partidos de béisbol, los titulares políticos y unas cotizaciones de la bolsa de valores, Yahoo grabará estas preferencias en un cookie. Y, luego, cada vez que entre, el servidor de Yahoo leerá este cookie y personalizará el sitio como debe ser. Es un poquito como ir a un restaurante donde el mesero se acuerda de su nombre y sabe cuál es su salsa preferida para la ensalada y que les gustan más caladitos en la ensalada.
En general ustedes ¿Qué opinan de las cookies?.

Multitasking y Multitarea

Definición: multitarea o varias tareas al mismo tiempo. Una modalidad de operación del sistema operativo en el cual una computadora trabaja en una o más aplicaciones al mismo tiempo. Con la habilidad de poder correr varios programas al mismo tiempo, el sistema permite que el usuario se mueva fácilmente entre programas y aplicaciones, compartiendo información entre ellos.

Multitasking se refiere a la ejecución contemporánea de mas de un programa. Pudiera parecer un noción poco importante, pero como Windows y otros sistemas operativos consienten el trabajo en ambiente multitasking se puede trabajar con un programa de elaboración de textos mientras cualquier web browser están trabajando descargando un file enorme desde la red. Windows 9x hace automáticamente utilizables en contemporanea todos los programas que operan en este ambiente; cuando en Windows 9x se abren más programas, se habla de multitasking.

Multitarea:Es una característica de un sistema operativo moderno. Permite que varios procesos sean ejecutados al mismo tiempo compartiendo uno o más procesadores.Tipos de multitarea:Nula: El sistema operativo carece de multitarea. Aun así puede lograrse a veces algo parecido a una multitarea implementándola en espacio de usuario, o usando trucos como los TSR de MS-DOS. Un ejemplo típico de un sistema no multitarea es MS-DOS y sus clones.Cooperativa: Los procesos de usuario son quienes ceden la CPU al sistema operativo a intervalos regulares. Muy problemática, puesto que si el proceso de usuario se interrumpe y no cede la CPU al sistema operativo, todo el sistema estará trabado, es decir, sin poder hacer nada. Da lugar también a latencias muy irregulares, y la imposibilidad de tener en cuenta este esquema en sistemas operativos de tiempo real. Un ejemplo sería Windows hasta la versión 95.Preferente: El sistema operativo es el encargado de administrar el/los procesador(es), repartiendo el tiempo de uso de este entre los procesos que estén esperando para utilizarlo. Cada proceso utiliza el procesador durante cortos períodos de tiempo, pero el resultado final es prácticamente igual que si estuviesen ejecutándose al mismo tiempo. Ejemplos de sistemas de este tipo serían Unix y sus clones (FreeBSD, Linux...), VMS y derivados, AmigaOS, Windows NT...Real: Sólo se da en sistemas multiprocesador. Es aquella en la que varios procesos se ejecutan realmente al mismo tiempo, en distintos microprocesadores. Suele ser también preferente. Ejemplos de sistemas operativos con esa capacidad: variantes Unix, Linux, Windows NT, Mac OS X, etc...

Intel y Microsoft promueven software para los multinúcleo

HOla compañeros, encontré un artículo en inglés que habla sobre las dos empresas dominantes del mercado informático, Intel y Microsoft, están financiando estudios de investigación en la Universidad de Berkeley, que desarrollan programación específica para procesadores multinúcleo. El patrocinio es de 2 millones de dólares durante 5 años.
Este patrocinio es debido, al poco aprovechamiento de los programas actuales, de las capacidades multihilo que tienen los nuevos procesadores. La alta complejidad de la programación de procesos paralelos, en los entornos heterogéneos de hardware, es el principal problema que intentan salvar. Así de esta manera, se acelera el desarrollo de un software acorde con la tecnología de los últimos procesadores.

El artículo más o menos dice:
"Microsoft e Intel, esperan poner en marcha una iniciativa de investigación conjunta para hacer frente a la programación para procesadores multinúcleo. Los dos gigantes de la industria PC enviaron una alerta de los medios de comunicación diciendo que será anfitrión de una teleconferencia para anunciar la empresa de investigación.
The Wall Street Journal informó que la empresa se centrará en la programación multinúcleo y que la mayor parte de los trabajos se llevará a cabo en la Universidad de California en Berkeley. La necesidad de más investigación se deriva de la aparición de los procesadores con dos o más unidades de procesamiento, o para núcleos de fundición, que se han convertido ahora en general. Con múltiples núcleos, los diseñadores de chip puede impulsar una máquina de transformación del músculo en una mayor eficiencia energética de forma por el aumento del reloj del procesador de velocidad. Sin embargo, la tecnología multinúcleo plantea reto importante tanto de hardware como de software y proveedores. Sin escribir programas para ser optimizado para procesadores multinúcleo, las solicitudes no se benefician de la potencia chip añadido, o podría correr más lento que los anteriores chips. Tanto Microsoft e Intel - así como otras empresas - han realizado herramientas de programación para el procesamiento multinúcleo una alta prioridad en términos de desarrollo de productos y la investigación."

Más o menos es una parte del artículo, si lo quieren terminar de leer la dirección es la siguiente:
http://news.cnet.com/8301-10784_3-9895504-7.html?part=rss&subj=news&tag=2547-1_3-0-5

domingo, 23 de noviembre de 2008

Servi Pack 1 de .net 3.5 y de Visual Studio 2008???

bueno no tuve tiempo ayert pero hoy si y subi esto espero y les interese:
una duda la verdad estuve leyendo algunos documentos de C y no encontre la funcion de -f y -p, si alguien la encontró pues que me la explicara o algun link para leer la informacion solo encontre las demas y otra manos esas:
Servi Pack 1 de .net 3.5 y de Visual Studio 2008???
Como ya habréis visto anunciado en muchos sitios, desde hoy está disponible el Serive Pack 1 de Visual Studio 2008, que incluye muchas nvedades.
Las principales a destacar son las siguientes:
Plataforma .NET
Mejoras de rendimiento de entre el 25 y el 40% en aplicaciones WPF. Y sin tener que cambiar ni una sola línea de código.
Nuevos sistemas de acceso a datos: Entity Framework y Data Services, así como soporte para las nuevas características de SQL Server 2008.
Algunas mejoras en WCF.
Visual Studio 2008:
Soporte para SQL Server 2008 (salido la semana pasada)
Mejores diseñadores de WPF.
Diseñadores para acceso a datos con Entity Framework.
Mejoras en Team Foundation Server relacionadas con el control de versiones, control de items de trabajo y migración desde Source Safe entre otras. Cabe destacar una gran mejora de rendimiento en servidores de TFS con gran cantidad de proyectos, tanto en el servidor como en el cliente.
En cuanto a lo que a mi me interesa, que es el desarrollo Web, las principales mejoras tienen que ver con la inclusión de Dynamic Data, para crear rápidamente aplicaciones orientadas a datos, los ADO.NET Data Services para exponer datos como servicios REST, el soporte para el historial del navegador en AJAX, mejoras en el Intellisense de JavaScript que ahora soporta a muchas bibliotecas conocidas como ExtJS o Scriptaculous, y la posibilidad de combinar varios scripts en uno automáticamente para disminuir las descargas individuales de este tipo de archovos desde el servidor (lo que mejora el rendimiento).
Ah, también una cosa muy interesante: .NET 3.5 SP1 añade soporte para Click-Once en Firefox, que ahora está ya al alcance de esta estupenda forma de distribuir aplicaciones:
Y como detalle simpático comentar que además el SP1 cambia el icono asociado a Visual Studio, que ahora incorpora la versión en todos los tamaños de accesos directos:

sábado, 22 de noviembre de 2008

Microsoft se prepara para acabar con Windows


Hola compañeros, pues encontré esta publicacion que a grandes rasgos nos dice que:


Los chicos de Redmond empiezan a preparar un nuevo Sistema Operativo, de nombre en código “Midori“, de concepto absolutamente diferente a Windows y que será su relevo definitivo.
Microsoft nos ha estado hablando de que se analizaba la necesidad de un cambio radical en el concepto de Windows.
Parece que se han puesto manos a la obra con el equipo técnico que desarrolla el Singularity. Midori es un sistema operativo, “central de internet”, diseñado para ejecutarse directamente sobre hardware nativo, si bien será necesaria tecnología de virtualización. El objetivo del sistema operativo es centralizar las conexiones locales y distribuidas de los usuarios, englobando cualquier dispositivo con conectividad. Para ello están trabajando en una tecnología de arquitectura totalmente adaptada.
Midori sería compatible con aplicaciones Windows, con lo cual no tendríamos que temer por las transiciones dramáticas ( o sí, según se mire), en cualquier caso esto no va a suceder hasta dentro de una década más o menos.


Recomiendo la lectura del extensisimo articulo fuente, con una infinidad de detalles técnicos, viene en inglés, pero es muy interesandte de verdad, a continuaci{on les dejo el link para que lo puedan leer.


http://www.sdtimes.com/MICROSOFT_S_PLANS_FOR_POST_WINDOWS_OS_REVEALED/About_CLOUDCOMPUTING_and_MOBILEDEVELOPMENT_and_NET_and_SOASAAS_and_SOFTWAREDEVELOPMENT_and_WINDOWS_and_MICROSOFT/32627


FIREWALLS

Hola chavos esta vez les subo información acerca de los firewalls también conocidos como cortafuegos,estos son empleados para proteger sistemas de red privada en seguda doy una explicación que encontre espero que les guste.

Un firewall en internet es un sistema o grupo de sistema que impone una politica de seguridad entre la organizacion de red privada y el internet. El firewall determina cual de los servicios de red pueden ser accesados dentro de esta por los que están fuera, es decir quien puede entrar para utilizar los recursos de red pertenecientes a la organizacion. Para que un firewall sea efectivo, todo trafico de informacion a través del internet deberá pasar a través del mismo donde podrá ser inspeccionada la informacion. El firewall podrá únicamente autorizar el paso del trafico, y el mismo podrá ser inmune a la penetración. desafortunadamente, este sistema no puede ofrecer protección alguna una vez que el agresor lo traspasa o permanece entorno a este.


Beneficios de un firewall en Internet

Los firewalls en internet administran los accesos posibles del internet a la red privada. Sin un firewall, cada uno de los servidores propios del sistema se exponen al ataque de otros servidores en el Internet. Esto significa que la seguridad en la red privada depende de la "Dureza" con que cada uno de los servidores cuenta y es únicamente tanto como la seguridad en la fragilidad posible del sistema.

El firewall permite al administrador de la red definir un "choke point" (envudo), manteniendo al margen los usuarios no-autorizados (tal, como., hackers, crakers, vándalos, y espías) fuera de la red, prohibiendo potencialmente la entrada o salida al vulnerar los servicios de la red, y proporcionar la protección para varios tipos de ataques posibles. Uno de los beneficios clave de un firewall en Internet es que ayuda a simplificar los trabajos de administracion, una vez que se consolida la seguridad en el sistema firewall, es mejor que distribuirla en cada uno de los servidores que integran nuestra red privada.

El firewall ofrece un punto donde la seguridad puede ser monitoreada y si aparece alguna actividad sospechosa , este generara una alarma ante la posibilidad de que ocurra un ataque, o suceda algún problema en el transito de los datos. Esto se podrá notar al acceder la organizacion al Internet, la pregunta general es "si" pero "cuando" ocurrirá el ataque. Esto es extremadamente importante para que el administrador audite y lleve una bitácora del trafico significativo a través del firewall. También, si el administrador de la red toma el tiempo para responder una alarma y examina regularmente los registros de base. Esto es innecesario para el firewall, desde que el administrador de red desconoce si ha sido exitosamente atacado!.

  1. Limitaciones de un firewall

Un firewall no puede protegerse contra aquellos ataques que se efectúen fuera de su punto de operación.

Por ejemplo, si existe una coneccion dial-out sin restricciones que permita entrar a nuestra red protegida, el usuario puede hacer una coneccion SLIP o PPP al Internet. Los usuarios con sentido común suelen "irritarse" cuando se requiere una autenticación adicional requerida por un Firewall Proxy server (FPS) lo cual se puede ser provocado por un sistema de seguridad circunvecino que esta incluido en una conexión directa SLIP o PPP del ISP.

Este tipo de conexiones derivan la seguridad provista por firewall construido cuidadosamente, creando una puerta de ataque. Los usuarios pueden estar consientes de que este tipo de conexiones no son permitidas como parte de integral de la arquitectura de la seguridad en la organizacion.

espero y haya sido de su agrado si quieren saber mas vayan a: http://www.monografias.com/trabajos3/firewalls/firewalls.shtml

Manual de C

Hola compañeros en esta ocacion los invito a visitar esta pagina web:

http://www.fismat.umich.mx/mn1/manual/node1.html

en ella pude resolver muchas dudas, como por ejemplo:

como ejecutar comandos de UNIX desde C

Se pueden ejecutar comandos desde un programa de C como si se estuviera en la línea de comandos de UNIX usando la función system(). NOTA: se puede ahorrar bastante tiempo y confusión en vez de ejecutar otros programas, scripts, etc. para hacer las tareas.

int system(char *mandato) -- donde mandato puede ser el nombre de una utilería de UNIX, un shell ejecutable o un programa del usuario. La función regresa el status de salida del shell. La función tiene su prototipo en

La función system es una llamada que esta construida de otras 3 llamadas del sistema: execl(), wait() y fork() (las cuales tienen su prototipo en ).

en fin si tienes mas dudas, buscalas en la pagina que mencione antes.

viernes, 21 de noviembre de 2008

BIBLIOTECAS DINAMICAS EN LINUX

hola compañeros pues aqui les dejo un ejemplo de biliotecas dinamicas espero le entiendan por que yo tratare de hacer lo mismo jeje..... ´pues me estoy confundiendo con esto de las bibliotecas a mi me gustaria que nos lo explicaran un poco mas detallado por que me empiso a confundir feito ........... bueno niños los dejo.
A veces, varios programas necesitan hacer las mismas cosas, como E/S por ejemplo. Hace ya bastante tiempo se desarrolló el concepto de biblioteca (o librería) para adaptar esto. Las funciones se colocan en un archivo, y luego, cada vez que se crea un programa, este extrae de la biblioteca las funciones que necesita.

Este programa tiene dos archivos fuente. Supongamos que nuestra función tirarDado (del archivo tirador.c) nos es muy útil, no solo en nuestro programa, sino en muchos otros programas que utilicen dados. Podemos pensar entonces en colocar dicha función en una biblioteca para que otros programas puedan usarla.
Primero necesitamos crear la biblioteca compartida. Para ello compilamos el archivo que contiene la función así:
gcc -fPIC -c tirador.c
Ahora lo convertimos en una biblioteca compartida llamada libtirar.so.1.0:
gcc -shared -Wl,-soname,libtirar.so.1 -o libtirar.so.1.0 tirador.o
Por último crearemos un enlace para libtirar.so, para que el programa en ejecución no necesite mantener un registro de la información de versión en el nombre de la biblioteca compartida:
ln -s libtirar.so.1.0 libtirar.so.1ln -s libtirar.so.1 libtirar.so
Ahora que tenemos la biblioteca, debemos crear el programa principal para que enlace con esa biblioteca en tiempo de ejecución, en lugar de incluir el código dentro del ejecutable:
gcc -o juego juego.c -L. -ltirar
La opción -L. le indica al compilador que busque bibliotecas en el directorio actual, y la opción -ltirar le indica que busque una biblioteca llamada libtirar.so.
Al ejecutar el programa, el sistema operativo cargará dinámicamente la biblioteca correcta, pero tiene que saber donde buscarla. Si la biblioteca no se encuentra en un lugar estándar (/usr/lib por ejemplo), puede asignar una variable de entorno para que le indique en dónde localizar bibliotecas adicionales:
export LD_LIBRARY_PATH=/home/usuario/mislibrerias
Por último, para ver qué librerías usa un programa, utilice el comando ldd:
ldd juegolibtirar.so.1 =>/mnt/hda1/home/casidiablo/juegolibrerias/libtirar.so.1 (0x40018000)libc.so.6 => /lib/libc.so.6 (0x40029000)/lib/ld-linux.so.2 =>/lib/ld-linux.so.2 (0x40000000

Práctica Bibliotecas Dinámicas (Completa)

Directorio: include --> Contiene el arhivo de cabecera
Directorio: lib --> Contiene la biblioteca

Para compilar:
$ gcc ­-I./include ­-L./lib -o programa_ejecutable programa.c ­-lestatica

Bibliotecas Compartidas

gcc -c -fPIC funcion1.c funcion2.c

Generar la biblioteca compartida:

gcc -shared -o libcompartida.so funcion1.o funcion2.o

Generar el ejecutable:

gcc -o ejecutable principal.c -L. -lcompartida

Falta modificar las variables de entorno, ejecute lo siguiente desde la interfaz de línea de comandos:

LD_LIBRARY_PATH=.
export LD_LIBRARY_PATH

genere el ejecutable.

2.- Si ya siguió los pasos, haga lo siguiente:

a) Verifique que funcione el programa principal.
¿Funciona?
¿Falta algo?
c) Una vez que se haya resuelto el problema si es que existiera, pruebe mover el archivo (ejecutable) a una ubicación distinta a la actual, funciona?
Si ¿por qué?
No ¿Por qué?

jueves, 20 de noviembre de 2008

Utilerias

Hola que tal compañeros..esta vez les voy hablar sobre utilerias..que es uno de los temas que veremos mas adelante en la materia pero pues yo empeze a investigar un poco para que cuando nos toque hablar sobre el tema podamos tener ideas sobre ello..

Yrvin Ossiel Dorantes Carreon

UTILERIAS

este tipo de programas son los que te ayudan a mejorar los servicios de otros programas, es decir, mejoran el desempeño de otros programas, por ejemplo, NetPumper que te sirve para optimizar los downloads en tu PC, Internet Accelerator, te sirve para optimizar tu conexion a internet por medio de dial-up...etc

Son programas o rutinas del sistema operativo que realizan diversas funciones de uso común o aplicación frecuente y son:
°utilerías del sistema
°utilerías para archivo
°utilerías independientes

¿cómo y para qué se aplican las utilerías?
°asistente para transferencia de archivos y configuraciones: Es con el fin de transferir configuraciones de un equipo a otro.
°centro de seguridad: Sirve para ver el estado de protección del equipo.
°copia de seguridad: $Es la copia de datos de tal forma que éstas copias adicionales puedan restaurar un sistema después de una pérdida de información.
°desfragmentación de un disco: Es el proceso mediante el cual se acomodan los archivos de tal forma que no quede espacios sin usar.
°información del sistema: Es un conjunto organizado de elementos.
° liberador de espacios en discos: Nos indica aquellas aplicaciones y archivos que almacenan datos y que no hacen más que ocupar espacio sin utilidad alguna.
°mapa de caracteres: Es un programa de ordenador que permite la visualización de todas las fuentes tipográficas en el sistema.
°restaurar sistema: Sirve para devolver el equipo auun estado de funcionamiento anterior.
°tareas programadas: Se puede programar cualquier secuencia de comandos, programa o documento para que se ejecute en hora y fecha determinada.

martes, 18 de noviembre de 2008

Llamadas al sistema

En Computación, llamada al sistema o System Call, en inglés, es el mecanismo usado por un programa aplicativo para solicitar un servicio al Sistema Operativo.
Las llamadas al sistema comúnmente usan una instrucción especial de la CPU que causa que el procesador transfiera el control a un código privilegiado, previamente especificado por el mismo código. Esto permite al código privilegiado especificar donde el va a ser conectado así como el estado del procesador.
Cuando una llamada al sistema es invocada, la ejecución del programa que invoca es interrumpida y sus datos son guardados, normalmente en su PCB, para poder continuar ejecutándose luego. El procesador entonces comienza a ejecutar las instrucciones de código de alto nivel de privilegio, para realizar la tarea requerida. Cuando esta finaliza, se retorna al proceso original, y continúa su ejecución. El retorno al proceso demandante no obligatoriamente es inmediato, depende del tiempo de ejecución de la llamada al sistema y del algoritmo de planificación de CPU.
Generalmente, los sistemas operativos proveen librerías que relacionan los programas de usuario y el resto del sistema operativo, usualmente una librería C como glibc o el runtime de Microsoft C. Esta librería maneja los detalles de bajo nivel para transferir información al kernel y conmutar a modo supervisor, así como cualquier procesamiento de datos o tareas que deba ser realizada en modo supervisor. Idealmente, esto reduce la dependencia entre el sistema operativo y la aplicación, e incrementa su portabilidad.

sábado, 15 de noviembre de 2008

M4???

Hola!!!
No supe como subir la presentación aquí les dejo mejor la información si es que les quedó duda sale:
Introducción a M4

Para las personas a las que nos da pereza escribir demasiado nos gusta descubrir formas de que el ordenador escriba por nosotros. Una de ellas es usando M4.
¿Qué es M4?
M4 es un procesador de macros. Por macros se entiende expansiones de texto. Para entender esto basta recordar el conocido procesador de macros CPP utilizado en todas las suites de compiladores de C.
Todo el que ha programado en C sabe utilizar el CPP. Se sabe que usando #define SUMA(a, b) (a) + (b), antes de compilar se procesará todo el fichero fuente buscando SUMA(talo, cualo) para ser substituido por (talo) + (cualo). M4 tiene la misma función, la diferencia está en que utiliza un lenguaje de macros diferente y de propósito general; lo cual resulta más potente.
Funcionamiento
Si ejecutáis el comando m4 (o gm4 si estáis con *BSD y queréis usar GNU M4, BSD trae su propio procesador M4 para la configuración del sendmail) sin argumentos el comando espera texto por la entrada estándar. Tras cada línea introducida, ésta se procesa y se imprime el resultado por la salida estándar. También se puede usar con tuberías y, si como argumentos le pasáis nombres de ficheros, éstos se procesan de forma secuencial imprimiendo el resultado por la salida estándar.
Utilidades de M4
La mayor utilidad que se le ha dado a M4 ha sido en las famosas autotools de GNU (autoconf, automake, etc). Realmente el procesador de M4 se limita a substituir ciertas cadenas de texto por otras (a lo que llamaremos expansión), así podemos usarlo para tantas situaciones como nuestra imaginación nos permita. Otro ejemplo es utilizar M4 para escribir páginas web, creando una abstracción por encima del HTML.
Introducción a la sintaxis de M4
De M4 lo único que cuesta aprender es la forma de expansión que lleva a cabo al encontrar una macro. A pesar de ello el manual oficial lo explica todo muy bien. Pero como en todo se aprende y se entiende practicando.
Utilización de macros
Para utilizar una macro basta con escribir su nombre. Si tenemos que utilizar parámetros en dicha macro los rodearemos por paréntesis. Por ejemplo, si tenemos la macro CANTINFLAS la podemos utilizar escribiendo su nombre en una palabra por sí misma. Las siguientes líneas expanden la macro CANTINFLAS:CANTINFLASHola señor CANTINFLASHola señor CANTINFLAS()puntoycoma.Hola señor CANTINFLAS(punto, y, coma).Hola señor CANTINFLAS(punto y coma).
Las dos primeras expanden la macro sin argumentos, la tercera expande la macro con el argumento de cadena vacía (se consigue escribiendo un quoteado vacío `'), la cuarta expande la macro con tres argumentos y la quinta expande la macro con un argumento.
Las siguientes líneas NO expanden la macro CANTINFLAS:eseCANTINFLASpoderosoCANTINFLASilloantiCANTINFLAS()
Definición de macros
La macro más esencial que necesitamos es aquella que nos permite definir nuevas macros. Esta macro se llama define; que admite dos argumentos: el primero es el nombre de la nueva macro y el segundo es el texto por el que será reemplazada cada aparición de dicha macro. Es la misma idea que los #define del CPP. Veamos unos ejemplos:define(`CANTINFLAS', `Bigote arrocet')define(`BOLD', `$1')define(HOLA, Hola mundo cruel)
Así, cada vez que se encuentre CANTINFLAS será substituido por Bigote arrocet, de la misma forma que cada vez que se encuentre HOLA se expandirá en Hola mundo cruel.
El $1 se expande por el primer argumento que se le pase a la macro. Por lo que si escribimos BOLD(hola) será substituido por hola. Pasa lo mismo para $2, $3, etc...
También se puede usar $0 que se expande como el nombre de la macro. Después tenemos $* que expande todos los argumentos separados por comas y $@ que hace lo mismo pero además quotea el resultado para evitar expansiones del mismo. La cadena $# se expande como el número de argumentos pasados a la macro.
IMPORTANTE: El uso de $1, $@ y demás expansiones especiales únicamente funcionan dentro de la macro define. Si, dentro de una macro define, queréis que se expanda literalmente, por ejemplo, $@ tendréis que hacerlo escribiendo algo como $`'@. Como siempre, lo mejor es probar.
Comentarios
En M4 existen dos tipos de comentarios: los que se se omiten en el resultado de la expansión y los que no se interpretan pero pasan tal cual hacia la salida estándar. Probad esto con vuestro M4 y veréis la diferencia:dnl Comentario que no aparecerá en el resultado.# Comentario que sí aparecerá en el resultado
Quoteado o protección de cadenas de texto
Los delimitadores de cadenas, digamos, protegidas son ` y '. Pero es posible cambiarlos con la macro changequote. Voy a intentar explicar esto con cuidado pues es la clave para entender el funcionamiento de M4.
Cuando hablamos de una expansión nos referimos a dos cosas:
Expandir una macro o
Si se trata de un texto rodeado por ` ' simplemente se eliminan las comillas.
Si se ha dado el segundo caso no hacemos nada más. Pero el proceso de expansión de una macro es algo más sofisticado y, además, recursivo. Cuando M4 reconoce una macro procede a expandirla de la siguiente forma:
Expansión de los argumentos
Se procede a la substitución del texto
Se vuelve a procesar el resultado de esta expansión
Mucho ojo porque esto pasa para cada macro que se encuentra. Si resulta que mientras se expanden los argumentos de una macro se reconoce otra macro se realiza este mismo proceso para esta última. He aquí la importancia de saber proteger el texto quoteándolo. Así pues, para la inclusión de cadenas literales en el argumento de una macro basta con rodearla de comillas dobles, como por ejemplo:define(`CANTINFLAS', `$1')Hola señor CANTINFLAS(``Y esto aparece tal cual, metamos lo quemetamos'')
El procedimiento sería el siguiente. Se reconoce la macro define por lo que se expanden sus argumentos. Como los argumentos estaban quoteados, se quitan las comillas y no se produce ninguna expansión extra. Esta macro se expande en la cadena vacía `'.
Posteriormente se encuentra la macro CANTINFLAS (previamente definida) y se procede a su expansión. Se expande su argumento (que estaba protegido) por lo que se le quitan las comillas externas. La expansión de la macro produce dicho argumento tal cual fue expandido, es decir, `Y esto aparece tal cual, metamos lo que metamos'. Tras esto se vuelve a procesar este texto resultante por lo que se vuelven a eliminar las comillas quedando el texto literal.
Nótese que si se encuentra una macro mientras se procesaba otra (paso 3), se vuelve a llevar a cabo todo el proceso de expansión sobre aquella. Para aprender mejor este proceso os recomiendo que hagáis las siguientes pruebas:define(`echo1', `$*')define(`echo2', `$@')define(`echo3', `$1')echo3(`echo2(una, `prueba')'), tonta)echo3(echo1(`echo2(una)', `prueba'), `tonta')echo2(`echo1(echo3(una))', echo2(`prueba', tonta))
...y así sucesivamente.
Ramificaciones
Con M4 es posible retrasar la salida de texto gracias a las ramificaciones (en inglés: diversions). Cuando cambiamos de ramificación el texto generado se guarda temporalmente para ser expulsado por nosotros manualmente o automáticamente al final. Las macros involucradas en éste proceso son divert y undivert. Ambas aceptan un único parámetro numérico que es el número de ramificación.
La ramificación por defecto es la número 0. Cuando cambiamos de rama con divert e introducimos texto éste se guarda en la rama correspondiente. Cuando se acaba la entrada estándar es expulsado por orden ascendente de ramificación. A no ser que lo expulsemos nosotros manualmente con undivert. Vamos a ver algunos ejemplos.Aquí pongo texto normaldivert(2)Éste texto se ramifica por la rama 2.divert(3)Hola hola ésto es la ramificación divnum !!!divert(1)Éste texto se ramifica por la rama 1 pero aparece antes que el de larama 2.divert(0)Volvemos a la salida estándar.undivert(3)divert(-1)Éste texto NO APARECE en la salida
En realidad divert se expande en la cadena vacía pero cambia la ramificación actual. Sin embargo undivert se expande por el texto almacenado en la rama indicada. Hay otra macro relacionada llamada divnum que no necesita argumentos y que se expande por el número de ramificación actual.
Notas finales
Si necesitamos que una macro se expanda entre texto que no está separado por espacios podemos usar la cadena vacía `'. Por ejemplo:ese`'CANTINFLAS`'poderosoanti`'CANTINFLAS()
También mencionar que M4 tiene macros para implementar condicionales, como ifdef e ifelse. Pero realmente os recomiendo echarle un vistazo al manual que es muy completo salvo por la explicación de la expansión.
Finalmente, quiero hacer notar de que M4 no es un lenguaje de programación sino un procesador de macros. Simplemente se limita a reconocer y expandir macros. En el manual hay un ejemplo de como implementar un bucle (de forma recursiva) pero como ejemplo ilustrativo. Si tenéis ganas de ver M4 en su máximo esplendor echadle un vistazo a los ficheros .m4 de las distribuciones de autoconf y automake.
6.18.1. Instalación de M4
Prepara M4 para su compilación: ./configure --prefix=/usr
Compila el paquete: make
Para comprobar los resultados, ejecuta: make check.
Instala el paquete: make install
6.18.2. Contenido de M4
Programa instalado: m4
Descripción corta
m4
Copia los ficheros dados expandiendo en el proceso las macros que contengan. Estas macros pueden ser internas o definidas por el usuario y pueden tomar cualquier número de argumentos. Además de hacer la expansión de macros, m4 tiene funciones internas para incluir los ficheros indicados, lanzar comandos UNIX, hacer aritmética entera, manipular texto de diversas formas, recursión, etc. El programa m4 puede ser usado como interfaz para un compilador o como procesador de macros por sí mismo.

Macros en ensamblador

Hola a casi todos, quiero compartir con ustedes una pequeñita información acerca del uso de Macros en ensamblador ... ojalá que sea de utilidad

Macros

Al programar en lenguaje ensamblador encontramos en muchas ocasiones que parte del código se repite. Existen diferentes alternativas para no escribir ese código cada vez que lo necesitemos.

  • Usar procedimientos e invocarlos cuando sean necesarios. La desventaja de usarlos es que se podría hacer el programa medio lento.
  • Usar macros.

Partes de una macros

La definición de una macros es una forma de asignarle nombre a un fragmento de texto. En general las macros se componen de las siguientes partes:

1. Cabecera de macro: Da el nombre de la macro que se está definiendo.

2. Cuerpo de la macro: Las acciones a realizar.

3. Una pseudoinstrucción: Marca el final de la definición (%endmacro).





%macro imprime 2 CABECERA DE MACRO
mov dx,%1 mov cx,%2

Definición de mov bx,1 CUERPO DE LA MACRO

macro mov ax,4 int 80h

%endmacro FIN DE LA MACRO

Cada vez que el ensamblador encuentra en su código una definición de macro la guarda en la tabla de definición de macros. Así, cada vez que el nombre de la macro aparezca en el código de operación el ensamblador la busca en la tabla de definición de macros y sustituye el nombre por el cuerpo de la macro.

Usar el nombre de la macro como código se denomina llamada a macro y la sustitución de éste por el cuerpo de la macro se llama expansión de macro, la cual se efectúa durante el ensamblado y no en la ejecución del programa. Cuando finaliza la expansión de la macro el ensamblador desecha las definiciones de macros.

Una llamada a una macro es una instrucción al ensamblador para sustituir el nombre de la macro por el cuerpo de la misma, por lo tanto, no se provoca un salto en el registro IP; mientras que una llamada a un procedimiento es una instrucción de máquina que se inserta en el programa objeto y que posteriormente se ejecutará para llamar al procedimiento, guardando la “posición actual”, haciendo un salto en el registro IP, y posteriormente retomando la posición donde fue llamada.

Ya habíamos estudiado anteriormente que existen ensambladores de dos pasadas. En la primer pasada, las definiciones de macros se guardan y las llamadas a macros se expanden. En la segunda pasada el programa fuente se ha transformado en otro que eliminó las definiciones de macros.

En ocasiones las secuencias de instrucciones sólo varían en las variables a las cuales son aplicadas; entonces, podemos definir macros con parámetros formales que al ser expandidas sustituyan éstos parámetros formales por los parámetros reales correspondientes.

En este sentido, podemos definir a las macros en dos grupos:

  • Macro de una sola línea: Se definen mediante la palabra reservada define su sintaxis es:

%define nombre ( parámetros_formales ) código

%define incrementa ( x, y ) add x,y

  • Macros multilínea: Son macros que contienen mas de una línea en el código del cuerpo de la macro, para englobar el conjunto de instrucciones que pertenecen a la macro usamos las instrucciones %macro y %endmacro:

%macro nombre num_de_parametros

<>

%endmacro

%macro hacer_algo 2

mov ax, %1

mov bx, %2

%endmacro

Para utilizar una macro solo es necesario llamarla por su nombre, como si fuera una instrucción más del ensamblador, ya no son necesarias las directivas como en el caso de los procedimientos.

En el curso de Arquitectura de Computadoras II, estudiamos el uso de etiquetas en lenguaje ensamblador. Una de las “reglas” fue que no podía haber más de una etiqueta con el mismo nombre a lo largo del programa.

¿Qué sucede entonces cuando al definir macros necesitamos emplear etiquetas? La respuesta es: declarar etiquetas localmente, la manera de declararlas es anteponiendo al nombre de la etiqueta el símbolo %%.

%macro nombre_macro num_parámetros %macro repite 0

Línea 1; mov cx,10

Línea 2; mov dx,1

%%ciclo:

%%nombre_etiqueta: inc dx

<> loop %%ciclo

%endmacro

MasLíneas

%endmacro


Si hacemos uso de un grupo de macros, podemos guardarlas en un archivo con extensión .inc (mismacros.inc). Para que alguna de estas macros pueda ser usada en un programa se debe incluir la palabra reservada %include seguida del nombre del archivo que contiene las macros entre comillas


%include “mismacros.inc”


Cada vez que el ensamblador llega a una definición de macro, se crea una entrada en la tabla de macros con el nombre de ésta, el número de parámetros formales y un apuntador a otra tabla en la cual se encuentra almacenado el cuerpo de la macro. También se construye una lista de parámetros formales que se usarán al procesar la definición. Luego se lee el cuerpo de la macro y se guarda en la tabla de definiciones de macros. Los parámetros formales que ocurren dentro del cuerpo se indican con algún símbolo especial.



Durante la primer pasada del ensamblador las macros se expanden, cada vez que se encuentra una definición de macro se guarda en la tabla de macros. Cuando se invoca una macro, el ensamblador suspende temporalmente la lectura del dispositivo de entrada y comienza a leer el cuerpo almacenado de la macro, los parámetros formales se extraen del cuerpo almacenado de la macro y se sustituyen por los parámetros reales proporcionados en la llamada. La presencia del % antes de los parámetros formales permite al ensamblador reconocerlos fácilmente.