<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.2.3" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>Gulsin 2.0rg - El hermano feo de tux</title>
	<link>http://gulsin.org</link>
	<description>Espacio de tecnologia, software libre y sus derivados. Una horda de monos entrenados escriben de vez en cuando por aqui algunas noticias, opiniones e incluso alguna que otra cosa fuera del tema. Maqueros, favor de abstenerse que no somos lo suficientemente guapos.</description>
	<pubDate>Mon, 01 Mar 2010 02:45:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.3</generator>
	<language>en</language>
			<item>
		<title>GlassFish + Velocity + Groovlets</title>
		<link>http://gulsin.org/2010/02/28/glassfish-velocity-groovlets/</link>
		<comments>http://gulsin.org/2010/02/28/glassfish-velocity-groovlets/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 02:31:40 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Programacion]]></category>

		<guid isPermaLink="false">http://gulsin.org/2010/02/28/glassfish-velocity-groovlets/</guid>
		<description><![CDATA[1.- Primero Activamos los Groovlets








   

2.- Agregandole Velocity al asunto:
Para esto escribi una clase en java llamanda Plantilla, esta clase recibira un Map, este para los datos que manejaremos en nuestra plantilla para la vista

package agnux.util.web;

import java.io.StringWriter;
import java.util.LinkedHashMap;
import java.util.Iterator;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

public class Plantilla {

    private static VelocityContext [...]]]></description>
			<content:encoded><![CDATA[<p>1.- Primero Activamos los Groovlets<br />
<object id="scPlayer" width="616" height="480">
<param name="movie" value="http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/GlassfishGroovyScript_controller.swf"></param>
<param name="quality" value="high"></param>
<param name="bgcolor" value="#FFFFFF"></param>
<param name="flashVars" value="thumb=http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/FirstFrame.png&#038;containerwidth=616&#038;containerheight=480&#038;autostart=false&#038;showstartscreen=true&#038;thumb=FirstFrame.png&#038;color=1A1A1A,1A1A1A&#038;loop=false&#038;showendscreen=true&#038;content=http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/GlassfishGroovyScript.mp4"></param>
<param name="allowFullScreen" value="true"></param>
<param name="scale" value="showall"></param>
<param name="allowScriptAccess" value="always"></param>
<param name="base" value="http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/"></param>  <embed src="http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/GlassfishGroovyScript_controller.swf" quality="high" bgcolor="#FFFFFF" width="616" height="480" type="application/x-shockwave-flash" allowScriptAccess="always" flashVars="thumb=http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/FirstFrame.png&#038;containerwidth=616&#038;containerheight=480&#038;autostart=false&#038;showstartscreen=true&#038;thumb=FirstFrame.png&#038;color=1A1A1A,1A1A1A&#038;loop=false&#038;showendscreen=true&#038;content=http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/GlassfishGroovyScript.mp4" allowFullScreen="true" base="http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/" scale="showall"></embed> </object><br />
</br></p>
<p>2.- Agregandole Velocity al asunto:<br />
Para esto escribi una clase en java llamanda Plantilla, esta clase recibira un Map, este para los datos que manejaremos en nuestra plantilla para la vista</p>
<pre>
package agnux.util.web;

import java.io.StringWriter;
import java.util.LinkedHashMap;
import java.util.Iterator;
import java.util.Properties;
import javax.servlet.http.HttpServletRequest;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;

public class Plantilla {

    private static VelocityContext convert2context( LinkedHashMap<String,Object> params){
        VelocityContext context = new VelocityContext();
        Iterator it = params.keySet().iterator();
        while (it.hasNext()) {
            String key = ( String ) it.next();
            String value = ( String ) params.get( key );
            context.put(key , value);
        }
        return context;
    }

    public static String pegarDatosConPlantilla(String filevm , LinkedHashMap<String,Object> params,HttpServletRequest request){
        String valor_retorno = null;
        Template template = null;
        StringWriter writer = new StringWriter();
        VelocityEngine engine = new VelocityEngine();
        String servlet_root = request.getSession().getServletContext().getRealPath(&#8221;/&#8221;);

        Properties p = new Properties();
        p.setProperty(&#8221;resource.loader&#8221;, &#8220;file&#8221;);
        p.setProperty(&#8221;runtime.log.logsystem.class&#8221;, &#8220;org.apache.velocity.runtime.log.SimpleLog4JLogSystem&#8221;);
        p.setProperty(&#8221;runtime.log.logsystem.log4j.category&#8221;,&#8221;org.apache.velocity.runtime.log.SimpleLog4JLogSystem&#8221;);
        p.setProperty(&#8221;file.resource.loader.cache&#8221;,&#8221;false&#8221;);
        p.setProperty(&#8221;file.resource.loader.modificationCheckInterval&#8221;,&#8221;2&#8243;);
        p.setProperty(&#8221;file.resource.loader.class&#8221;,&#8221;org.apache.velocity.runtime.resource.loader.FileResourceLoader&#8221;);
        p.setProperty(&#8221;file.resource.loader.path&#8221;,servlet_root + &#8220;templates/&#8221;);

        try {
            engine.init(p);
            template = engine.getTemplate(filevm);
            template.merge( convert2context(params) , writer );
            valor_retorno = writer.toString();
        } catch( Exception e ) {
            System.out.println(&#8221;Exception caught: &#8221; + e.toString());
        }        

        return valor_retorno;
    }
}
</pre>
<p>Aqui mi plantilla de velocity &#8220;login.vm&#8221;: (genere una directorio llamado templates&#8230; este esta a mismo nivel que WEB-INF en el arbol de el proyecto).<br />
<a href='http://gulsin.org/wp-content/uploads/2010/02/screenshot-4.png' title='Plantilla velocity'><img src='http://gulsin.org/wp-content/uploads/2010/02/screenshot-4.thumbnail.png' alt='Plantilla velocity' /></a></p>
<p></br><br />
Y Aqui mi groovlet que  manda a llamar la plantilla:<br />
<a href='http://gulsin.org/wp-content/uploads/2010/02/screenshot-6.png' title='screenshot-6.png'><img src='http://gulsin.org/wp-content/uploads/2010/02/screenshot-6.thumbnail.png' alt='screenshot-6.png' /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2010/02/28/glassfish-velocity-groovlets/feed/</wfw:commentRss>
<enclosure url="http://content.screencast.com/users/javadude/folders/Default/media/efafb1c1-e3c1-416b-bf27-c26870529351/GlassfishGroovyScript.mp4" length="5513584" type="video/mp4" />
		</item>
		<item>
		<title>Introduccion al proyecto Zeigesth</title>
		<link>http://gulsin.org/2010/02/23/introduccion-al-proyecto-zeigesth/</link>
		<comments>http://gulsin.org/2010/02/23/introduccion-al-proyecto-zeigesth/#comments</comments>
		<pubDate>Tue, 23 Feb 2010 18:35:40 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://gulsin.org/2010/02/23/introduccion-al-proyecto-zeigesth/</guid>
		<description><![CDATA[



]]></description>
			<content:encoded><![CDATA[<p><object width="425" height="344">
<param name="movie" value="http://www.youtube.com/v/9zkuuQwxeTU&#038;hl=en_US&#038;fs=1&#038;"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/9zkuuQwxeTU&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2010/02/23/introduccion-al-proyecto-zeigesth/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Esto pasa en tu consultoria d software, por que conozco un caso asi ?</title>
		<link>http://gulsin.org/2010/02/05/esto-pasa-en-tu-consultoria-d-software/</link>
		<comments>http://gulsin.org/2010/02/05/esto-pasa-en-tu-consultoria-d-software/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 23:52:46 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Varios]]></category>

		<guid isPermaLink="false">http://gulsin.org/2010/02/05/esto-pasa-en-tu-consultoria-d-software/</guid>
		<description><![CDATA[Cartoon - Software Development Process at it&#39;s best



View more presentations from amazedsaint.

]]></description>
			<content:encoded><![CDATA[<div style="width:425px;text-align:left" id="__ss_1433738"><a style="font:14px Helvetica,Arial,Sans-serif;display:block;margin:12px 0 3px 0;text-decoration:underline;" href="http://www.slideshare.net/amazedsaint/cartoon-software-development-process" title="Cartoon - Software Development Process at it&#39;s best">Cartoon - Software Development Process at it&#39;s best</a><object style="margin:0px" width="425" height="355">
<param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cartoon-090514060458-phpapp02&#038;stripped_title=cartoon-software-development-process" />
<param name="allowFullScreen" value="true"/>
<param name="allowScriptAccess" value="always"/><embed src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=cartoon-090514060458-phpapp02&#038;stripped_title=cartoon-software-development-process" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="font-size:11px;font-family:tahoma,arial;height:26px;padding-top:2px;">View more <a style="text-decoration:underline;" href="http://www.slideshare.net/">presentations</a> from <a style="text-decoration:underline;" href="http://www.slideshare.net/amazedsaint">amazedsaint</a>.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2010/02/05/esto-pasa-en-tu-consultoria-d-software/feed/</wfw:commentRss>
		</item>
		<item>
		<title>La receta del checo para crear juegos de 260 en casa</title>
		<link>http://gulsin.org/2009/12/20/la-receta-del-checo-para-crear-juegos-de-260-en-casa/</link>
		<comments>http://gulsin.org/2009/12/20/la-receta-del-checo-para-crear-juegos-de-260-en-casa/#comments</comments>
		<pubDate>Sun, 20 Dec 2009 07:53:41 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Microsoft]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/12/20/la-receta-del-checo-para-crear-juegos-de-260-en-casa/</guid>
		<description><![CDATA[



]]></description>
			<content:encoded><![CDATA[<p><object width="560" height="340">
<param name="movie" value="http://www.youtube.com/v/euv0Lok_1j4&#038;hl=en_US&#038;fs=1&#038;"></param>
<param name="allowFullScreen" value="true"></param>
<param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/euv0Lok_1j4&#038;hl=en_US&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="560" height="340"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/12/20/la-receta-del-checo-para-crear-juegos-de-260-en-casa/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Como obtener un segmentation fault en C</title>
		<link>http://gulsin.org/2009/11/23/como-obtener-un-segmentation-fault-en-c/</link>
		<comments>http://gulsin.org/2009/11/23/como-obtener-un-segmentation-fault-en-c/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 21:04:24 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[FreeBSD]]></category>

		<category><![CDATA[Linux]]></category>

		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/11/23/como-obtener-un-segmentation-fault-en-c/</guid>
		<description><![CDATA[Las causas comunes como obtendremos esto son:

* Tratando de escribir a un puntero NULL

      char *foo = NULL;
      strcpy(foo, "bang!");


* Usando un puntero no inicializado

      char *foo;
      strcpy(foo, "bang!");


* Accesar mas alla de los limites [...]]]></description>
			<content:encoded><![CDATA[<p>Las causas comunes como obtendremos esto son:</p>
<pre>
* Tratando de escribir a un puntero NULL

      char *foo = NULL;
      strcpy(foo, "bang!");
</pre>
<pre>
* Usando un puntero no inicializado

      char *foo;
      strcpy(foo, "bang!");
</pre>
<pre>
* Accesar mas alla de los limites de un arreglo

int bar[20];
bar[27] = 6;
</pre>
<pre>
* Tratando de almacenar algo sobre memoria de solo lectura

char *foo = "My string";
strcpy(foo, "bang!");
</pre>
<pre>
* Y por ultimo utilizando de manera tonta free y malloc

char bar[80];
free(bar);

o

char *foo = malloc(27);
free(foo);
free(foo);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/11/23/como-obtener-un-segmentation-fault-en-c/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sintesis04 - Estados de los procesos en MINIX</title>
		<link>http://gulsin.org/2009/11/22/sintesis04-estados-de-los-procesos-en-minix/</link>
		<comments>http://gulsin.org/2009/11/22/sintesis04-estados-de-los-procesos-en-minix/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 03:27:07 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Minix]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/11/22/sintesis04-estados-de-los-procesos-en-minix/</guid>
		<description><![CDATA[Aunque cada proceso es una entidad independiente, con su propio contador de programa y estado interno, los procesos a menudo necesitan interactuar con otros procesos. Un proceso podría generar ciertas salidas que otro proceso utiliza como entradas. En el comando de shell 

$ cat capítulol capítulo2 capítulo3 &#124; grep árbol

El primer proceso, que ejecuta cat, [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque cada proceso es una entidad independiente, con su propio contador de programa y estado interno, los procesos a menudo necesitan interactuar con otros procesos. Un proceso podría generar ciertas salidas que otro proceso utiliza como entradas. En el comando de shell </p>
<pre>
$ cat capítulol capítulo2 capítulo3 | grep árbol
</pre>
<p>El primer proceso, que ejecuta cat, concatena y envía a la salida tres archivos. El segundo proceso, que ejecuta grep, selecciona todas las líneas que contienen la palabra “árbol”. Dependiendo de las velocidades relativas de los dos procesos (que a su vez dependen de la complejidad relativa de los programas y de cuánto tiempo de CPU ha ocupado cada uno), puede suceder que grep esté listo para ejecutarse, pero no haya entradas esperando ser procesadas por él. En tal caso, grep deberá bloquearse hasta que haya entradas disponibles.</p>
<p>Cuando un proceso se bloquea, lo hace porque le es imposible continuar lógicamente, casi siempre porque está esperando entradas que todavía no están disponibles. También puede ser que un programa que conceptualmente está listo y en condiciones de ejecutarse sea detenido porque el sistema operativo ha decidido asignar la CPU a otro proceso durante un tiempo. Estas dos condiciones son totalmente distintas. En el primer caso, la suspensión es inherente al problema (no es posible procesar la línea de comandos del usuario antes de que éste la teclee). En el segundo caso, se trata de un tecnicismo del sistema (no hay suficientes CPU para darle a cada proceso su propio procesador privado). </p>
<p>En MINIX, cuando un proceso lee de una tuberia (pipe) o archivo especial (p. ej., una terminal) y no hay entradas disponibles, se bloquea automáticamente.</p>
<p><a href='http://gulsin.org/wp-content/uploads/2009/11/screenshot-1.png' title='transiciones_procesos'><img src='http://gulsin.org/wp-content/uploads/2009/11/screenshot-1.thumbnail.png' alt='transiciones_procesos' /></a></p>
<p>Las transiciones 2 y 3 son causadas por el planificador de procesos, una parte del sistema operativo, sin que el proceso se entere siquiera de ellas. La transición 2 ocurre cuando el planificador decide que el proceso en ejecución ya se ejecutó durante suficiente tiempo y es hora de dejar que otros procesos tengan algo de tiempo de CPU. La transición 3 ocurre cuando todos los demás procesos han disfrutado de una porción justa y es hora de que el primer proceso reciba otra vez la CPU para ejecutarse. El tema de la planificación, es decir, de decidir cuál proceso debe ejecutarse cuándo y durante cuánto tiempo, es muy importante. Se han inventado muchos algoritmos para tratar de equilibrar las exigencias opuestas de eficiencia del sistema global y de equitatividad para los procesos individuales.</p>
<p>La transición 4 ocurre cuando acontece el suceso externo que un proceso estaba esperando (como la llegada de entradas). Si ningún otro proceso se está ejecutando en ese instante, se dispara de inmediato la transición 3, y el proceso comienza a ejecutarse. En caso contrario, el proceso tal vez tenga que esperar en el estado listo durante cierto tiempo hasta que la CPU esté disponible.</p>
<p>OJO:</p>
<blockquote><p>El “planificador” no sólo se refiere a planificación de procesos, sino también a manejo de interrupciones y toda la comunicación entre procesos. </p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/11/22/sintesis04-estados-de-los-procesos-en-minix/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sintesis03 - El porque de las llamadas al sistema para señalización en MINIX</title>
		<link>http://gulsin.org/2009/11/22/sintesis03-el-porque-de-las-llamadas-al-sistema-para-senalizacion-en-minix/</link>
		<comments>http://gulsin.org/2009/11/22/sintesis03-el-porque-de-las-llamadas-al-sistema-para-senalizacion-en-minix/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 02:16:00 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Minix]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/11/22/sintesis03-el-porque-de-las-llamadas-al-sistema-para-senalizacion-en-minix/</guid>
		<description><![CDATA[Aunque casi todas las formas de comunicación entre procesos son planeadas, existen situaciones en las que se requiere una comunicación inesperada. Por ejemplo, si un usuario accidentalmente le pide a un editor de textos que liste todo el contenido de un archivo muy largo, y luego se percata de su error, necesita alguna forma de [...]]]></description>
			<content:encoded><![CDATA[<p>Aunque casi todas las formas de comunicación entre procesos son planeadas, existen situaciones en las que se requiere una comunicación inesperada. Por ejemplo, si un usuario accidentalmente le pide a un editor de textos que liste todo el contenido de un archivo muy largo, y luego se percata de su error, necesita alguna forma de interrumpir el editor.</p>
<p><strong>En MINIX, el usuario puede pulsar la tecla DEL (suprimir) del teclado, la cual envía una señal al editor. El editor atrapa la señal y detiene el listado. </strong></p>
<p><em>Donde mas se puede emplear las llamadas al sistema para Señalizacion en MINIX?</em><br />
<strong>* Para informar de ciertas trampas detectadas por el hardware, como una instrucción no permitida o un desbordamiento de punto flotante.<br />
* Las expiraciones de tiempo también se implementan como señales (    En muchas aplicaciones de tiempo real se hace necesario interrumpir un proceso después de un intervalo de tiempo específico a fin de hacer algo, como retransmitir un paquete que tal vez se perdió en una línea de comunicación no confiable ).<br />
</strong><br />
OJO:  </p>
<blockquote><p>  Cuando se envía una señal a un proceso que no ha anunciado su disposición a aceptar esa señal, el proceso simplemente se termina sin más.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/11/22/sintesis03-el-porque-de-las-llamadas-al-sistema-para-senalizacion-en-minix/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sintesis02 - Introduccion a las Llamadas al sistema en MINIX</title>
		<link>http://gulsin.org/2009/11/22/sintesis02-introduccion-a-las-llamadas-al-sistema-en-minix/</link>
		<comments>http://gulsin.org/2009/11/22/sintesis02-introduccion-a-las-llamadas-al-sistema-en-minix/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 01:27:18 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Minix]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/11/22/sintesis02-introduccion-a-las-llamadas-al-sistema-en-minix/</guid>
		<description><![CDATA[Armados con nuestro conocimiento general de cómo MINIX maneja los procesos y los archivos, ahora podemos comenzar a examinar la interfaz entre el sistema operativo y sus programas de aplicación, es decir, el conjunto de llamadas al sistema. Si bien esta explicación se refiere específicamente a posix (Norma Internacional 9945-1), y por tanto también a [...]]]></description>
			<content:encoded><![CDATA[<p>Armados con nuestro conocimiento general de cómo MINIX maneja los procesos y los archivos, ahora podemos comenzar a examinar la interfaz entre el sistema operativo y sus programas de aplicación, es decir, el conjunto de llamadas al sistema. Si bien esta explicación se refiere específicamente a posix (Norma Internacional 9945-1), y por tanto también a MINIX, casi todos los sistemas operativos modernos tienen llamadas al sistema que realizan las mismas funciones, aunque los detalles sean diferentes. Puesto que el mecanismo real de<strong> la emisión de una llamada al sistema depende mucho de la máquina</strong>, y a menudo <strong>debe expresarse en código de ensamblador</strong>, se proporciona una biblioteca de procedimientos que permite <strong>efectuar llamadas al sistema desde programas en C</strong>.</p>
<p>A fin de hacer más claro el mecanismo de las llamadas al sistema, examinemos brevemente READ (leer) Esta llamada tiene tres parámetros: el primero especifica el archivo, el segundo especifica el buffer, y el tercero especifica el número de bytes por leer. Una llamada de READ desde un programa en C podría verse así:</p>
<pre>
cuenta = read(file, buffer, nbytes);
</pre>
<p>La llamada al sistema (y el procedimiento de biblioteca) devuelve en cuenta el número de bytes que realmente se leyeron. Este valor normalmente es igual a nbytes, pero puede ser menor, si, por ejemplo, se llega al fin del archivo durante la lectura.</p>
<p>Si la llamada al sistema no puede ejecutarse, ya sea a causa de un parámetro no válido o de un error de disco, se asignará el valor — 1 a cuenta, y el número del error se colocará <strong>en una variable global, errno</strong>. Los programas siempre deben revisar los resultados de una llamada al sistema para ver si ocurrió un error.  <strong>MINIX tiene un total de 53 llamadas al sistema</strong></p>
<p>Las llamadas al sistema en MINIX se clasifican en:<br />
<em>* Administracion de Archivos<br />
* Administracion de Procesos<br />
* Administracion del Tiempo<br />
* Señales<br />
* Proteccion relacionada con usuarios y grupos</em></p>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/11/22/sintesis02-introduccion-a-las-llamadas-al-sistema-en-minix/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sintesis01 - Introduccion a los Procesos en MINIX</title>
		<link>http://gulsin.org/2009/11/22/sintesis01-procesos-en-minix/</link>
		<comments>http://gulsin.org/2009/11/22/sintesis01-procesos-en-minix/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 01:00:48 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Minix]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/11/22/sintesis01-procesos-en-minix/</guid>
		<description><![CDATA[Un concepto clave en MINIX, y en todos los sistemas operativos, es el proceso. Un proceso es básicamente un programa en ejecución. Cada proceso tiene asociado un espacio de direcciones, una lista de posiciones de memoria desde algún mínimo (usualmente O) hasta algún máximo, que el proceso puede leer y escribir.
Que contiene el espacio de [...]]]></description>
			<content:encoded><![CDATA[<p>Un concepto clave en MINIX, y en todos los sistemas operativos, es el proceso. Un proceso es básicamente un programa en ejecución. Cada proceso tiene asociado un espacio de direcciones, una lista de posiciones de memoria desde algún mínimo (usualmente O) hasta algún máximo, que el proceso puede leer y escribir.</p>
<p>Que contiene el espacio de Direcciones de un Proceso?<br />
<em>* El programa ejecutable (o Segmento de Texto)<br />
* Los datos del programa<br />
* La Pila o Stack del programa</em></p>
<p>Los procesos en MINIX tienen su memoria dividida en tres segmentos: el segmento de texto (esto es,el código de programa), el segmento de datos (es decir, las variables) y el segmento de pila. El segmento de datos crece hacia arriba y el de pila lo hace hacia abajo, como se muestra en la Figura siguiente:</p>
<p><a href='http://gulsin.org/wp-content/uploads/2009/11/screenshot.png' title='Segmentos de un proceso'><img src='http://gulsin.org/wp-content/uploads/2009/11/screenshot.png' alt='Segmentos de un proceso' /></a></p>
<p>A cada proceso también se asocia un conjunto de registros, que incluyen el contador del programa, el apuntador de la pila y otros registros de hardware, así como toda la demás información necesaria para ejecutar el programa.</p>
<p><em>Tabla de procesos</em><br />
Arreglo (o lista enlazada) de estructuras, una para cada proceso existente en ese momento. Toda la información acerca de cada proceso, aparte del contenido de su propio espacio de direcciones se almacena sobre esta tabla.</p>
<p><em>Procesos padre</em><br />
Un proceso puede crear uno o más procesos distintos (denominados procesos hijos) y éstos a su vez pueden crear procesos hijos, pronto llegamos a la estructura de árbol de procesos. Los procesos relacionados que están cooperando para realizar alguna tarea a menudo necesitan comunicarse<br />
entre sí y sincronizar sus actividades. Esta comunicación se llama comunicación entre procesos (IPC).</p>
<p>El administrador del sistema asigna un uid (identificador de usuario) a cada persona autorizada para usar MINIX. Cada proceso iniciado en MINIX tiene el uid de la persona que lo inició. Un proceso hijo tiene el mismo uid que su padre. </p>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/11/22/sintesis01-procesos-en-minix/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Sintesis00 - Empezando con MINIX</title>
		<link>http://gulsin.org/2009/11/22/sintesis00-empezando-con-minix/</link>
		<comments>http://gulsin.org/2009/11/22/sintesis00-empezando-con-minix/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 00:42:39 +0000</pubDate>
		<dc:creator>Edwin Plauchu</dc:creator>
		
		<category><![CDATA[Minix]]></category>

		<guid isPermaLink="false">http://gulsin.org/2009/11/22/sintesis00-empezando-con-minix/</guid>
		<description><![CDATA[En todas estas sintesis sobre MINIX todo lo que se diga acerca de MINIX, a menos que se refiera al código en sí, también aplica a UNIX. Muchos de estos comentarios también aplican a otros sistemas. Esto debe tenerse siempre presente al leer el libro.  Como acotación, es posible que unas cuantas palabras acerca [...]]]></description>
			<content:encoded><![CDATA[<p>En todas estas sintesis sobre MINIX todo lo que se diga acerca de MINIX, a menos que se refiera al código en sí, también aplica a UNIX. Muchos de estos comentarios también aplican a otros sistemas. Esto debe tenerse siempre presente al leer el libro.  Como acotación, es posible que unas cuantas palabras acerca de LINUX y su relación con MINIX sean de interés para algunos lectores.</p>
<p>Poco después de liberarse MINIX, se formó un grupo de noticias de USENET para hablar de él. En pocas semanas, este grupo tenía 40000 suscriptores,<br />
la mayor parte de los cuales quería agregar enormes cantidades de nuevas capacidades a MINIX a fin de hacerlo más grande y mejor (bueno, al menos más grande). Cada día, varios cientos de ellos ofrecían sugerencias, ideas y fragmentos de código. El autor de MINIX resistió con éxito esta arremetida durante varios años, a fin de mantener a MINIX lo suficientemente pequeño y aseado como para que los estudiantes lo entendieran. Gradualmente, la gente comenzó a convencerse de que su posición era inamovible. Finalmente, un estudiante finlandés, Linus Torvalds, decidió escribir un clon de MINIX que pretendía ser un sistema de producción con abundantes capacidades, más que una herramienta educativa.<br />
Así fue como nació LINUX.</p>
]]></content:encoded>
			<wfw:commentRss>http://gulsin.org/2009/11/22/sintesis00-empezando-con-minix/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
