Publicidad

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.


Que es Multithreading???

hola chavos esta vez decidi subir algo que esta relacionado con los sistemas operativos espero que les guste.

En la informática moderna de PC, los últimos sistemas operativos y el software se escriben para sacar ventaja de procesadores más rápidos y potentes. Mucho del software actual está escrito con instrucciones ejecutadas secuencialmente. Si hay una parada en el hilo de instrucciones, todas las instrucciones que están por debajo en el hilo tienen que esperar hasta que la ejecución continúe.

Y que si el software pudiera continuar hacia abajo del hilo de instrucciones sin tener que esperar? Bueno, se puede. Los desarrolladores de Software están comenzando a escribir sistemas operativos y aplicaciones de tal forma que el software se divide en diferentes piezas llamadas hilos (threads). Esto permite que porciones del software se ejecuten mientras otras están detenidas. Por ejemplo en Microsoft Outlook*, un usuario puede imprimir un e-mail y escribir uno al mismo tiempo. La impresión ocurre en un hilo mientras que la escritura ocurre en otro. En los PCs actuales con solo un procesador, los hilos son ejecutados secuencialmente donde a cada hilo se le da una tajada del tiempo del procesador. En esencia estos hilos se turnan para utilizar el procesador. Este intercambio puede ser especialmente útil cuando un hilo envuelve esperar por una respuesta del usuario o la entrada de un comando.

Otro hilo puede continuar usando el procesador mientras que el primer hilo espera por el usuario. La tecnología Hyper-Threading fue diseñada para permitir que un solo procesador puede ejecutar ambos hilos al mismo tiempo. Los procesadores actuales tienen muchos recursos de ejecución que no son utilizados. La tecnología Hyper-Threading permite un uso más eficiente del procesador dándole a un hilo el acceso a algunos recursos de ejecución y a otro hilo acceso a otros recursos de ejecución al mismo tiempo. Si los hilos no compiten por los mismos recursos, el usuario puede experimentar un mayor rendimiento con tecnología HT.

Los sistemas operativos modernos como Microsoft Windows XP ya soportan multithread y soportan la tecnología Hyper-Threading. También hay muchas aplicaciones que fueron escritas para sacar ventaja de sistemas de doble procesador, de las cuales la tecnología HT puede sacar ventaja. Más aún, muchos desarrolladores de software están actualmente añadiendo funcionalidad de hilos a futuras versiones de aplicaciones como Adobe* AfterEffects* 5.5, XMPEG* 4.5/Divx* 5.02, y Magix* MP3 maker, en las cuales los usuarios verán un aumento de velocidad gracias a la tecnología HT.

eso es todo, hasta la proxima, para mayor información: http://www.active-hardware.com/spanish/reviews/processor/3Ghz-7.htm

PROGRAMACION PARALELA

Hola compañeros en esta ocasión les hablare un poco sobre la programacion paralela.

La programación paralela define la división de una labor de procesamiento entre múltiples procesadores que operan simultáneamente. El resultado esperado es realizar tal procesamiento en forma más eficiente comparada con su ejecución en un sistema uniprocesador. Su principal ventaja es su habilidad de llevar a cabo tareas de una escala que no sería realista o costo-efectivo para otros sistemas. Sin embargo, en general la programación paralela representa una labor sumamente compleja.

la programación paralela es simplemente aplicar múltiples procesadores a un solo problema. En la práctica, la programación paralela tiene un alto costo, no solo por el valor de la plataforma de hardware que involucra, sino que además requiere un mayor esfuerzo por parte del programador y diseñador, quien debe programar y entender el problema y su solución en forma paralela para la creación del software necesario. Las técnicas tradicionales utilizadas para revisar y corregir defectos de la programación y mejorar el desempeño en sistemas secuenciales (de un solo procesador) no son directamente portables o aplicables a la programación paralela. Más aun, es necesario considerar que el ambiente de ejecución paralelo es inherentemente inestable e impredecible. Tal ambiente de ejecución puede tratarse de un grupo de computadoras personales, estaciones de trabajo, o un sofisticado sistema de cómputo de alto rendimiento. Resulta común que, tras meses de labor para programar una aplicación paralela, se encuentre que ésta arroja resultados incorrectos, o se ejecuta en forma mas lenta que su contraparte secuencial. Se hace necesario, entonces, el estudio y el análisis más profundo de las técnicas y experiencias en programación paralela, así como de su enseñanza.

Bueno para mas informacion les escribo la direccion donde habla un poco mas sobre lo que es la programacion paralela.

http://www.matematicas.unam.mx/jloa/Paralelismo/antecedentes.html

lunes, 10 de noviembre de 2008

Binultils???

Bueno de acuerdo a lo que se trató en la clase sobre las bibliotecas decidí subir mi información encontrada en la red:

1.1. Qué es GNU Binutils
El paquete GNU Binutils es una colección de herramientas para la manipulación de ficheros binarios resultado de la compilación, ensamblado y enlazado de programas. Las principales herramientas son:

ld - El enlazador de GNU
as - El ensamblador de GNU

Aunque también incluye muchas otras herramientas, también muy útiles, como:

1.- addr2line - Convierte direcciones en nombres de ficheros y lineas de código fuente.
2-. ar - Utilidad para crear, modificar y extraer librerías.
3-. c++filt - Filtro para decodificar símbolos C++.
4-. ngprof - Muestra información de “profiling”.
5-. nlmconv - Convierte código objeto en NLM ( Netware Loadable Module ).
6-. nm - Muestra los símbolos de un fichero objeto.
7-. objcopy - Copia y transforma ficheros objeto.
8-. objdump - Muestra todo tipo de información sobre ficheros objeto.
9-. ranlib - Genera un índice del contenido de una librería.
10-. readelf - Muestra información de un fichero objeto de tipo ELF.
11-. size - Muestra los tamaños de las secciones de un fichero objeto o de una librería.
12-. strings - Muestra cadenas de carácteres imprimibles de un fichero.
13-. strip - Quita símbolos.
14-. windres - Compilador de ficheros de recursos de Windows.

domingo, 9 de noviembre de 2008

¿Qué es una API?

Aqui les dejo un articulo muy interesante... Nos vemos en clase!!!!! :)

Una API (Application Programming Interface en inglés) constituye un conjunto de rutinas, procedimientos, protocolos, funciones y herramientas que una determinada biblioteca pone a disposición para que sean utilizados por otro software como una capa de abstracción. En otras palabras, es una interfaz que permite la comunicación entre distintos componentes software. Representa, entonces, un método para alcanzar abstracción a la hora de programar, en particular en la relación entre niveles superiores e inferiores del software.

De esta forma, podemos decir que una de las funciones centrales de una API es la de ofrecer un grupo de funciones generales, como sería la de dibujar uno o más íconos en la pantalla. Esto tiene como resultado principal que los programadores se vean beneficiados gracias a estas API, en la medida en que al utilizar sus funcionalidades se evitan la necesidad de programar todo desde el inicio. Sin embargo, es cierto también que una API con un alto nivel tiende a perder flexibilidad en su uso. Así, cuando elegimos usar una API es necesario que logremos un determinado equilibrio, contemplando tanto su potencia como su simplicidad y su grado de flexibilidad.

Veamos ahora algunos ejemplos de APIs para ilustrar mejor la explicación:

1. API de Youtube: permite elegir videos y ponerlos en una página web propia. Incluso es posible, con su nueva versión, deshacerse del logo de Youtube para colocar uno personal. Esto resulta particularmente interesante para cualquier medio de comunicación encargado de producir videos, ya que le permite no tener que invertir dinero en hosting.

2. API Win 32: permite que una aplicación determinada corra en Windows. Entre sus funciones específicas se encuentran, entre otras: comunicación entre procesos, depuración de errores o manejo de energía.

3. OpenGL (Open Graphics Library): define una API para aplicaciones que creen gráficos en dos y tres dimensiones, ofreciendo más de 250 funciones distintas. Tiene variadas aplicaciones, como pueden ser la representación científica, el desarrollo de juegos de video o la realidad virtual.

Fuente el Guru Programador:
http://www.elguruprogramador.com.ar/articulos/que-es-una-api.htm?utm_source=emBlue_elgurunuevo2&utm_medium=Oferta:645831




sábado, 8 de noviembre de 2008

PARSER

Parsers XML Versión: 1.0,

1. Introducción: Parser con validación y sin validación

Un parser o procesador o analizador sintáctico lee el documento XML y verifica que es XML bien formado , algunos también comprueban que el código XML sea válido.
El parser o procesador de XML es la herramienta principal de cualquier aplicación XML. Mediante el parser no solamente podemos comprobar si nuestros documentos son bien formados o válidos, sino que también podemos incorporarlos a nuestras aplicaciones, de manera que estas puedan manipular y trabajar con documentos XML.
Podemos dividir los parsers XML en dos grupos principales:

sin validación: el parser no valida el documento utilizando un DTD, sino que sólo chequea que el documento esté bien formado de acuerdo a las reglas de sintaxis de XML (sólo hay una etiqueta raíz, las etiquetas están cerradas, etc).

con validación: además de comprobar que el documento está bien formado según las reglas anteriores, comprueba el documento utilizando un DTD (ya sea interno o externo).

En el caso de utilizar un DTD, es preferible utilizar un parser con validación.

2. Parsers XML
Normalmente no nos tendremos que preocupar de buscar un parser concreto para comprobar la validez de nuestros documentos XML, ya que los desarrolladores de las aplicaciones que utilizaremos como navegadores o visualizadores o transformadores de esos documentos en el documento final que el usuario ve, incluirán sus propios parsers. Un ejemplo de esto es el caso del Microsoft Internet Explorer 5 (o superior), que utiliza el parser de MS (incluido en la librería MSXML.DLL); o el caso de Mozilla, que internamente utiliza el parser EXPAT (escrito en C).
A continuación teneis un parser sin validación escrito en JavaScript. Presenta el árbol del documento a comprobar.

EJEMPLO:


titulo

un parrafo
segundo parrafo
tercer parrafo





Ejercicio: tomando el programa anterior, ampliarlo de forma que se lleve a cabo un chequeo de errores para evitar que se definan elementos fuera de su sitio, esto es, una sección no puede estar definida dentro de un párrafo (por ejemplo).
Ejemplo:



Joaquín Sabina
SABINA Y CIA Nos sobran los motivos
MP3
Varios CD5

-->
3. Modelo de Objeto Documento (DOM)
Para extraer la información que contiene un documento XML, se podría escribir código para analizar el contenido del archivo XML, pues no deja de ser un archivo de texto, tal y como lo podríamos hacer con HTML. Sin embargo, esta solución no es muy aconsejable y desaprovecharía una de las ventajas de XML: el ser una forma estructurada de representar datos.
La mejor forma de recuperar información de archivos XML es utilizar un parser de XML, que sea compatible con el modelo de objeto de documento (DOM) de XML. DOM define un conjunto estándar de comandos que los parsers devuelven para facilitar el acceso al contenido de los documentos XML desde sus programas. Un analizador de XML compatible con DOM toma los datos de un documento XML y los expone mediante un conjunto de objetos que se pueden programar.
DOM para XML es un modelo de objetos estándar (propuesto por el W3C) que muestra el contenido de un documento XML. La Especificación del Modelo de Objeto de documento (DOM) del W3C define actualmente lo que debería mostrar un DOM como propiedades, métodos y eventos.

Lenguajes Funcionales

Ya sabemos como es el BNF, un serie de reglas de transformación que sirven para descomponer un símbolo en otros símbolos hasta llegar en símbolos terminales, o sea primitivos. BNF es para definir un lenguaje como un lenguage de programación. Pero, el BNF es también un lenguaje, sólo que no es un lenguaje de programación. Existen lenguajes de programación que son parecidos al BNF. Un programa funcional consiste nada en más que funciones definidas en términos de otras funciones hasta llegar en funciones primativas. En programas imperativos normalmente hay una función principal (“main”) que llama otras funciones. En programas funcionales normalmente hay una función principal definida por otros funciones hasta llegar en funciones primitivas, como es el BNF. O se puede pensar en un programa funcional como un serie de llamadas a otras funciones, que llaman otras funciones sin nada más (por ejemplo, sin reasignacion del valor de un variable).

Cuando se corre un programa funcional una función está remplazado con otras funciones declaradas como equivalentes hasta llegar en funciones primativas, que son muy simples. El programador crea las reglas de tranformación, o sea equivalencias, y estas reglas forman el conteudo del programa. Porque las lineas del programa son puras transformaciones de funciones equivalentes (suponiendo que el programador tiene su lógica correcta) nada neuvo esta agregado. No hay pasos afuera de estas tranformaciones como reasignaciones de valores varias veces. Hay unos valores de entrada y un valor de salida y nada más en cada paso. Nada pasa afuera de los definiciones y tranformaciones de una definición en unas otras. Por ejemplo, en vez de hacer una asignación como “i = i + 1” tienes que “llamar” a una funcion que toma el primero valor de i como entrada y da el segundo valor de i como salida. (Solo es permitido inicializacion de variables a ser pasado a una funcion, no reasignaciones dentro de la funcion llamada.)

Programación funcional facilita modularización de un programa porque su naturaleza es un serie de descomposiciones. Una otra ventaje de un programa de puros equivalencias es que el orden de las lineas no importa. Es como un dicionario: se busca la linea que dá la definicion precisa para complir una tranformación. El compilador puede generar código para que el procesador regrese a la linea cierta para poder hacer esto. Entonces, se puede cambiar el orden de un programa sin nada inesperada, o hasta que tener más que un procesador corriendo diferentes partes del mismo programa en paralelo. Si la parte del programa corriendo en un procesador necesita los resultados del parte corriendo en un otro procesador, el primero procesador simplemente espera para ellos.