<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-14499482</id><updated>2012-01-20T21:32:29.206-08:00</updated><category term='spinlock'/><category term='IBM'/><category term='driver'/><category term='conferencia'/><category term='cambio de contexto'/><category term='tarjeta de red'/><category term='planificador'/><category term='dedicado'/><category term='Thread'/><category term='Lock'/><category term='numa'/><category term='GDT'/><category term='multicore'/><category term='Hypertransport'/><category term='semaforos'/><category term='e1000'/><category term='SMP'/><category term='anillos'/><category term='hilo cooperativo'/><category term='protección'/><category term='migracion'/><category term='TORO'/><category term='kernel'/><category term='Multiprocesamiento'/><category term='AMD'/><category term='QPI'/><category term='Operacion Atomicas'/><category term='proteccion'/><category term='Pascal'/><category term='Hilo'/><category term='x86-64'/><title type='text'>Toro kernel</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>57</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-14499482.post-1488690649670056455</id><published>2012-01-05T13:09:00.000-08:00</published><updated>2012-01-20T21:32:29.209-08:00</updated><title type='text'>IOAPIC soportado!</title><content type='html'>&lt;div style="text-align: justify;"&gt;Acabo de subir al repositorio GIT las modificaciones necesarias para utilizar el controlador de interrupciones IOAPIC en vez del antiguo 8259 en entornos multicore.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El 8259 es el controlador estandar de interrupciones. Con el surgimiento de los procesadores con más de un core el 8259 fue reemplazado por el IOAPIC y el LAPIC, aunque se preservó por compatibilidad. En general, cada PC tiene un IOAPIC que recibe las IRQ y las dirige a los LAPIC, cada procesador posee uno propio.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El problema con el 8259 es que todas las IRQ son capturadas por el BSP, o procesador de booteo. Esto claramente va encontra de la política de dedicación de recursos seguida por TORO.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;De esta forma, en sistemas multicore, cuando se dedica un hardware a un core dado, las IRQ serán capturadas por ese core, descongestionando el procesador de boot.&lt;/div&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-1488690649670056455?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/1488690649670056455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=1488690649670056455' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/1488690649670056455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/1488690649670056455'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2012/01/ioapic-soportado.html' title='IOAPIC soportado!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4642467540863784686</id><published>2011-12-12T20:21:00.000-08:00</published><updated>2011-12-13T09:33:37.933-08:00</updated><title type='text'>Importante bug solucionado en la migración de threads</title><content type='html'>&lt;div style="text-align: justify;"&gt;A continuación &amp;nbsp;describiré brevemente acerca del problema descubierto en la migración de thread y como fue solucionado, no ahondaré en detalles.&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;En las versiones anteriores de Toro, cuando un thread intentaba crear otro thread remoto, la función ThreadCreate era ejecutada localmente y eran alocadas las estructuras:&lt;i&gt; TThread&lt;/i&gt;,&lt;i&gt; TLS&lt;/i&gt; y el &lt;i&gt;Stack&lt;/i&gt;. Luego la &amp;nbsp; estructura completa era migrada al core remoto.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;El problema en este procedimiento era que los bloques de memoria &lt;i&gt;TThread&lt;/i&gt;,&lt;i&gt; TLS&lt;/i&gt; &amp;nbsp;y &lt;i&gt;Stack&lt;/i&gt; ya no eran locales lo cual significa una grave infracción en el modelo &lt;i&gt;NUMA&lt;/i&gt;.&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;De este modo, se reemplazó la migración de la estrucutura &lt;i&gt;TThread&lt;/i&gt; por la migración de un conjunto de parametros tales como: tamaño de pila, puntero al código de ejecución, etc. Así, &lt;i&gt;ThreadCreate&lt;/i&gt; es ejecutado remotamente y le son pasados los parámetros guardados en esta estructura. Como antes, se retorna al thread padre el &lt;i&gt;ThreadID&lt;/i&gt; del recien nacido.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se puede observar que mientras la creación de un thread local es instantánea, la creación de un thread remoto involucra dos pasos: primero se migran los parámetros y luego se retorna el identificador de thread.&lt;/div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4642467540863784686?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4642467540863784686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4642467540863784686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4642467540863784686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4642467540863784686'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/12/importante-bug-solucionado-en-la.html' title='Importante bug solucionado en la migración de threads'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5475891755218269482</id><published>2011-08-25T19:43:00.001-07:00</published><updated>2011-08-25T20:02:58.087-07:00</updated><title type='text'>Parcheando GDB 7.3 para debug remoto</title><content type='html'>&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 34, 34); font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px; "&gt;Esta vez voy a mostrar como parchear GDB 7.3 con el fin de debuguear de forma remota un kernel corriendo sobre la maquina virtual QEMU. Cuando corremos GDB e intentamos debuguear de forma remota nos retorna el siguiente mensaje de error:&lt;/span&gt;&lt;span class="Apple-style-span" style="color: rgb(34, 34, 34); font-size: 13px; line-height: 18px; "&gt;&lt;div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; text-align: justify; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; text-align: left; "&gt;&lt;span class="Apple-style-span" style="font-size: 12px; line-height: 14px; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "&gt;Remote packet too long: 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ...&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; text-align: justify; "&gt;No estoy muy seguro del origen del problema pero parece que es por el tamaño de los registros. Cuando la máquina virtual salta de modo real a modo long o protegido, los registros cambian su tamaño pero GDB no detecta esta situación. Asi, cuando GDB recibe un paquete más grande que el esperado, tira este error. De esta manera, el parche implementado solo se encarga de incrementar el buffer de recepción cuándo suceden aquellos casos.&lt;/div&gt;&lt;div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; text-align: justify; "&gt;El primer paso es bajarse el source de GDB 7.3 desde &lt;a href="http://www.gnu.org/s/gdb/download/" style="text-decoration: none; color: rgb(34, 136, 187); "&gt;http://www.gnu.org/s/gdb/download/&lt;/a&gt;, no estoy seguro si funciona en versiones más viejas pero supongo que si.&lt;/div&gt;&lt;div style="text-align: justify; "&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;Una vez bajado y descomprimido, editar el archivo &lt;/span&gt;&lt;i style="font-family: arial; "&gt;gdb-7.3/gdb/remote.c, &lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;línea&lt;/span&gt;&lt;i style="font-family: arial; "&gt; &lt;/i&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;5693. Aqui nos encontramos con el procedimiento &lt;/span&gt;&lt;span class="Apple-style-span"&gt;process_g_packet&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: arial; "&gt;. Ahora será necesario buscar y reemplazar el código original por las siguientes líneas:&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;/* Further sanity checks, with knowledge of the architecture. */&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;//if (buf_len &amp;gt; 2 * rsa-&amp;gt;sizeof_g_packet)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;// error (_("Remote 'g' packet reply is too long: %s"), rs-&amp;gt;buf);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;if (buf_len &amp;gt; 2 * rsa-&amp;gt;sizeof_g_packet)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;{&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;rsa-&amp;gt;sizeof_g_packet = buf_len;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;for (i = 0; i &amp;lt; gdbarch_num_regs (gdbarch); i++)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; if (rsa-&amp;gt;regs[i].pnum == -1)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; continue;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; if (rsa-&amp;gt;regs[i].offset &amp;gt;= rsa-&amp;gt;sizeof_g_packet)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; rsa-&amp;gt;regs[i].in_g_packet = 0;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; else&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; rsa-&amp;gt;regs[i].in_g_packet = 1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-tab-span" style="white-space: pre; "&gt;	&lt;/span&gt; }&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;Finálmente, solo resta compilar:&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ ./configure&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;$ make&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;Esto debería ser suficiente para ejecutar GDB correctamente.&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;Matias E. Vara&lt;/div&gt;&lt;div style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; "&gt;www.torokernel.org&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5475891755218269482?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5475891755218269482/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5475891755218269482' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5475891755218269482'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5475891755218269482'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/08/parcheando-gdb-73-para-debug-remoto.html' title='Parcheando GDB 7.3 para debug remoto'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4760509617441047806</id><published>2011-08-23T14:33:00.000-07:00</published><updated>2011-08-23T14:59:51.839-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conferencia'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='dedicado'/><title type='text'>Toro en el Congreso de Micro-electronica  (UNLP)</title><content type='html'>Presentaré un artículo referido al nucleo dedicado TORO en el Congreso de Microelectrónica a desarrollarse en la Universidad Nacional de La Plata, Facultad de Ingeniería. La presentación será el dia Jueves 8 de Septiembre a las 16.20 hs en la Sala A. La web del evento es http://www.ing.unlp.edu.ar/uea2011/ para mayor información. Saludos!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Matias E. Vara&lt;/div&gt;&lt;div&gt;www.torokernel.org&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4760509617441047806?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4760509617441047806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4760509617441047806' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4760509617441047806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4760509617441047806'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/08/toro-en-el-congreso-de-micro.html' title='Toro en el Congreso de Micro-electronica  (UNLP)'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4694340846568933193</id><published>2011-07-30T15:43:00.000-07:00</published><updated>2011-07-30T15:49:24.608-07:00</updated><title type='text'>Toro en Ubuntu 11.04!</title><content type='html'>Finalmente es posible compilar TORO en Linux Ubuntu 11.04. Supongo que de aquí en más trabajaré solo sobre esta plataforma. También he dejado de utilizar SVN para comenzar con GIT. &lt;div&gt;En el&lt;i&gt; wiki&lt;/i&gt; pueden encontrar el procedimiento para instalar  y testear TORO en ubuntu.  He realizado algunos cambios en la estructura del proyecto con el fin de facilitar la comprensión y permitir un mejor crecimiento del proyecto. Saludos.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Matias E. Vara&lt;/div&gt;&lt;div&gt;www.torokernel.org&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4694340846568933193?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4694340846568933193/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4694340846568933193' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4694340846568933193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4694340846568933193'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/07/toro-en-ubuntu-1104.html' title='Toro en Ubuntu 11.04!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-6017859324168480124</id><published>2011-06-24T04:45:00.000-07:00</published><updated>2011-06-24T05:07:55.943-07:00</updated><title type='text'>Toro bootloader</title><content type='html'>&lt;meta equiv="content-type" content="text/html; charset=utf-8"&gt;&lt;div style="text-align: justify;"&gt;Como puedo empezar?. El bootloader es un proyecto en sí mismo. Si se quiere escribir un OS por Hobby, no hay que empezar por el bootloader claramente. Lleva tiempo, el debug es oscuro y te vas a decepcionar rápidamente. Terminás, no haciendo nada y dejando el proyecto de escritura de un OS. Creo que lo más importante e interesante ocurre dentro del kernel, es decir, una vez que el SO ya ha sido cargado en memoria. De todas formas, hay gente loca por ahi que aun quiere armarse su propio bootloader. Dirigido a ese tipo de personas he comenzado a escribir un poco de documentación sobre el &lt;b&gt;Toro's bootloader&lt;/b&gt; en el &lt;b&gt;wiki&lt;/b&gt;. Espero que lo encuentren interesante y aprecien el esfuerzo hecho (si, no me gusta escribir documentación, pero reconozco lo importante que es ;) ). El conocimiento es tal, si y solo si, es comunicado. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Matias E. Vara&lt;/div&gt;&lt;div&gt;www.torokernel.org&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-6017859324168480124?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/6017859324168480124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=6017859324168480124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/6017859324168480124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/6017859324168480124'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/06/toro-bootloader.html' title='Toro bootloader'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-3096016997767671221</id><published>2011-05-04T13:40:00.001-07:00</published><updated>2011-05-08T07:36:14.683-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SMP'/><category scheme='http://www.blogger.com/atom/ns#' term='spinlock'/><category scheme='http://www.blogger.com/atom/ns#' term='semaforos'/><category scheme='http://www.blogger.com/atom/ns#' term='Operacion Atomicas'/><title type='text'>Mecanismos de comunicación entre procesos</title><content type='html'>&lt;div style="text-align: justify;"&gt;Como se observó en el post anterior, es necesario disponer de mecanismos que sincronicen el acceso a variables compartidas. Los algoritmos más comunes para proteger recursos son: semáforos, paso de mensajes y  spin-lock.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Estos mecanismos permiten hacer cumplir la exclusión mutua, requerida para el acceso a variables compartidas, es decir, que se garantiza que en un instante dado sólo un proceso está leyendo o escribiendo sobre la variable.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Los semáforos son manejados por dos primitivas P y V, ambas utilizan operaciones atómicas para incrementar y decrementar el contador del semáforo. Éstos son fáciles de implementar y requieren poca memoria.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Otro mecanismo muy utilizado es el paso de mensajes. Este permite el paso de información entre procesos. Las primitivas utilizadas son Send y Receiv. La principal ventaja de este mecanismo es que las partes intervinientes pueden ser totalmente independientes unas de otras.&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Los spin-lock&lt;/span&gt;&lt;div&gt;&lt;div style="text-align: justify;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;span&gt;&lt;div style="text-align: justify;"&gt;Los procedimientos más utilizados para proteger recursos en sistemas de Multiprocesamiento en el entorno del kernel son los denominados spin-lock.  Los mecanismos de comunicación antes mencionados son construidos internamente con spin-lock.&lt;/div&gt;&lt;/span&gt;&lt;div style="text-align: justify;"&gt;Los recursos son protegidos con variables de cierre denominados Locks, estas son variables binarias; la variable tomará el valor “1” si un proceso se encuentra utilizando el recurso o “0” si ningún proceso está utilizando el recurso. Cuando hablamos de recurso nos referimos a una dada variable del sistema.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para modificar una variable Lock se utilizan operaciones atómicas, por ejemplo la instrucción: &lt;i&gt;Test and Set&lt;/i&gt;. Esto garantiza que el procesador que se quede con el recurso sea uno solo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El proceso que quiere acceder a una zona crítica permanece en un bucle realizando Polling hasta que la variable Lock  vuelva a “0”. Cuando esto ocurre la vuelve “1” (esta última operación se realiza en un solo paso). Mientras la variable está en estado “ocupado” el proceso se encuentra en un bucle. El proceso saldrá del bucle cuando logre cambiar el valor de la variable Lock.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;En sistemas con pocos procesadores un proceso suele estar poco tiempo en el bucle intentando modificar a la variable Lock. Pero a medida que incrementamos el número de procesos, este tiempo se vuelve crítico, y la solución simple de implementar un spin-lock para proteger recursos compartidos, debe ser re-evaluada.&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Impacto del uso de spin-lock&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;En el test[1] realizado sobre 5 aplicaciones Linux, se compara el número de procesos involucrados y el porcentaje de tiempo que los procesos permanecen en el bucle de Lock (denominado  &lt;i&gt;Lock Overhead&lt;/i&gt;).&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Para cada tarea se fue incrementando el número de procesos involucrados, cada uno trabajando en paralelo.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Se observa que a medida que más procesos se utilizan, más tiempo pasa la aplicación realizando Locking debido a la utilización de variables compartidas por todos los procesos. De esta manera si utilizamos variables compartidas estamos limitando la paralelización de una aplicación porque a medida que incrementamos el número de procesos involucrados la aplicación destina más tiempo en obtener el permiso para usar una variable compartida que para realizar trabajo efectivo.&lt;/div&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: justify;"&gt;&lt;div style="text-align: justify;"&gt;[1]  Yoav Etison, Dan Tsafrir et. al.: Fine Grained Kernel Logging with KLogger:&lt;/div&gt;&lt;div style="text-align: justify;"&gt;       Experience and Insights. Hebrew University, 2005.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Matias E. Vara&lt;/div&gt;&lt;div&gt;www.torokernel.org&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-3096016997767671221?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/3096016997767671221/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=3096016997767671221' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3096016997767671221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3096016997767671221'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/05/mecanismos-de-comunicacion-entre.html' title='Mecanismos de comunicación entre procesos'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4034577396266174296</id><published>2011-04-14T14:29:00.000-07:00</published><updated>2011-04-30T05:40:23.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lock'/><category scheme='http://www.blogger.com/atom/ns#' term='multicore'/><category scheme='http://www.blogger.com/atom/ns#' term='Multiprocesamiento'/><category scheme='http://www.blogger.com/atom/ns#' term='protección'/><title type='text'>Protección de memoria en sistemas multicore</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este artículo forma parte del trabajo final “Paralelización de algoritmos numéricos con TORO kernel” por Matías Vara, para el título de Ingeniería en Electrónica, Universidad Nacional de La Plata. Estos apuntes teóricos sirven para poder entender el diseño del núcleo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Introducción&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Cuando se diseña un kernel para un sistema multicore la memoria compartida deberá ser protegida de accesos de escritura concurrentes. Las protecciones que utiliza el kernel incrementan la complejidad del código y decrementan el desempeño del SO.&lt;br /&gt;Si uno o más procesadores acceden a los mismos datos al mismo tiempo, en el caso de sistemas multitarea debe cumplirse la exclusión mutua para proteger a los datos compartidos.&lt;br /&gt;Para el caso de sistemas monoprocesadores multitarea apropiativos ocurre que cada cierto tiempo el planificador cambia de tarea, por lo tanto el único riesgo que se tiene es que mientras los datos están siendo modificados por un proceso, el planificador decida cambiar de tarea. La protección implementada en este caso es sencilla: simplemente se deshabilita el planificador mientras el proceso está en su zona crítica y luego se habilita nuevamente.&lt;br /&gt;En sistemas con más de un procesador esta solución no puede ser implementada. Esto es debido a que los procesos se ejecutan en paralelo en los diferentes procesadores y puede existir otro proceso ejecutando la misma línea de código al mismo tiempo; por lo tanto de nada serviría inhabilitar el planificador del procesador local.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Metodos de proteccion de recursos  &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Para poder proteger recursos en sistemas con multiprocesamiento primero debemos definir operaciones atómicas. Estas son operaciones que si bien pueden estar constituidas por pasos más pequeños conforman un paquete indivisible de ejecución.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Operaciones atomicas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En los microprocesadores las operaciones tanto de escritura como de lectura tomadas de forma individual son siempre atómicas. Esto quiere decir que se garantiza que la operación terminará antes que cualquier otro procesador acceda a esa región de memoria.&lt;br /&gt;Para ciertas operaciones el procesador utiliza el bloqueo del bus de memoria para controlar la lectura o escritura de una región. Para ello se proporciona la línea de control #Lock que es levantada cuando se realizan operaciones críticas de memoria. Mientras esta señal está en alto, las solicitudes provenientes de otros procesadores son bloqueadas.&lt;br /&gt;El acceso al bus es no determinístico; esto quiere decir que el procesador que se quedará con el bus es el que llegue antes. Cada procesador compite con el resto, lo cual es un problema a medida que incrementamos el número de procesadores.&lt;br /&gt;Pero ¿Por qué son necesarias las operaciones atómicas? Supongamos que queremos incrementar una variable contador, el código Pascal de esto sería:&lt;br /&gt;&lt;br /&gt;contador = contador + 1 ;&lt;br /&gt;&lt;br /&gt;Si esta línea se ejecuta simultáneamente en dos procesadores el resultado será incorrecto sino se utiliza protección.&lt;br /&gt;El valor correcto de contador es 2 pero utilizando instrucciones que se realizan de forma atómica.&lt;br /&gt;Al utilizar operaciones atómicas los procesadores se sincronizan para modificar de a uno la variable, y el resultado es correcto. El tiempo necesario para sincronizar la ejecución de la instrucción se incrementa con el número de procesadores que intentan acceder a la variable.&lt;br /&gt;&lt;div style="text-align: justify;"&gt;Las operaciones atómicas más comunes son TEST and SET y COMPARE and SWAP.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Impacto de las operaciones atomicas&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La utilización de operaciones atómicas en sistemas con pocos procesadores no supone una gran carga para el sistema y es una solución rápida a problemas de memoria compartida; pero a medida que incrementamos el número de procesadores éstas se tornan en un cuello de botella.&lt;br /&gt;Si suponemos una PC con 8 núcleos de 1.45 GHz cada uno [1], mientras     que el tiempo consumido en promedio por instrucción es 0.24 ns, una instrucción de incremento atómico demora 42.09 ns.&lt;br /&gt;Es claro que el tiempo consumido por las operaciones atómicas empieza a ser crítico.&lt;br /&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;o:officedocumentsettings&gt;   &lt;o:relyonvml/&gt;   &lt;o:allowpng/&gt;  &lt;/o:OfficeDocumentSettings&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val=""&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:narylim&gt;&lt;/m:intlim&gt; &lt;/m:wrapindent&gt;&lt;!--[endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Rockwell","serif";  mso-ascii-font-family:Rockwell;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Rockwell;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;&lt;br /&gt;[1]  Paula McKenney: RCU vs. Locking Performance on Different Types of CPUs.&lt;br /&gt;   http://www.rdrop.com/users/paulmck/RCU/LCA2004.02.13a.pdf, 2005&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4034577396266174296?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4034577396266174296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4034577396266174296' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4034577396266174296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4034577396266174296'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/04/proteccion-de-memoria-en-sistemas.html' title='Protección de memoria en sistemas multicore'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-2294414793440860811</id><published>2011-04-05T14:59:00.000-07:00</published><updated>2011-04-06T02:29:10.400-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multiprocesamiento'/><category scheme='http://www.blogger.com/atom/ns#' term='numa'/><title type='text'>Organizacion de memoria en arquitecturas multicore: Conclusion.</title><content type='html'>&lt;div style="text-align: justify;"&gt;Desde la perspectiva del programador, la memoria remota y la local se acceden de forma transparente. En teoría un sistema NUMA podría implementarse en un sistema SMP sin problemas. Sin embargo el SO debería realizar un manejo eficiente de la asignación de memoria para sacar provecho a estas tecnologías.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Una de las principales ventajas del acceso uniforme a memoria es que la administración de la memoria por parte del SO es fácil de implementar, mientras que en un sistema de NUMA, no. El SO deberá asignar memoria a los procesos dependiendo sobre qué CPU esta ejecutándose y exige que se tenga un banco de memoria para cada CPU. La performance se degrada rápidamente si prevalecen los accesos remotos sobre los locales.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;El SO Windows soporta NUMA desde la versión Server 2003 e incluye un conjunto de llamadas al sistema que permiten al programador explotar este recurso. Por otro lado Linux también es compatible con NUMA a partir de la versión 2.6.X.&lt;/div&gt;&lt;div style="text-align: justify;"&gt;Este aspecto se tuvo en cuenta en el desarrollo del kernel dedicado con el fin aprovechar las nuevas tecnologías NUMA presentes en los procesadores modernos. La única manera posible por el momento de optimizar los accesos a memoria en sistemas multicore es a través de buses dedicados y con un modelo de memoria NUMA. En especial en entornos de alta performance estas optimizaciones no pueden ser no tenidas en cuenta.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Matias E. Vara&lt;/div&gt;&lt;div&gt;www.torokernel.org&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-2294414793440860811?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/2294414793440860811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=2294414793440860811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/2294414793440860811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/2294414793440860811'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/04/organizacion-de-memoria-en-sistemas.html' title='Organizacion de memoria en arquitecturas multicore: Conclusion.'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-731906178597713771</id><published>2011-03-13T04:37:00.000-07:00</published><updated>2011-03-13T04:43:10.362-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='e1000'/><category scheme='http://www.blogger.com/atom/ns#' term='tarjeta de red'/><category scheme='http://www.blogger.com/atom/ns#' term='driver'/><title type='text'>e1000 driver para TORO</title><content type='html'>He comenzado el desarrollo del driver para tarjetas de red del tipo e1000, Intel Gigabit o compatibles. Estoy usando de base el codigo de Minix3 el cuál es muy claro y como emulador el qemu. La version 0.12.0 permite emular la placa e1000.&lt;br /&gt;Aquí les pongo un screen de la detección y lectura de la MAC, por ahora es lo que tengo en el SVN.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-WbX-dpVt4Zo/TXytdKBlRGI/AAAAAAAAAMQ/uecyzfI-VD4/s1600/toro-qemu.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 240px;" src="http://4.bp.blogspot.com/-WbX-dpVt4Zo/TXytdKBlRGI/AAAAAAAAAMQ/uecyzfI-VD4/s400/toro-qemu.JPG" alt="" id="BLOGGER_PHOTO_ID_5583528354451375202" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Saludos!.&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-731906178597713771?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/731906178597713771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=731906178597713771' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/731906178597713771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/731906178597713771'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/03/e1000-driver-para-toro.html' title='e1000 driver para TORO'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-WbX-dpVt4Zo/TXytdKBlRGI/AAAAAAAAAMQ/uecyzfI-VD4/s72-c/toro-qemu.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7812767567723060875</id><published>2011-03-05T14:58:00.000-08:00</published><updated>2011-03-06T13:55:47.790-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Multiprocesamiento'/><category scheme='http://www.blogger.com/atom/ns#' term='IBM'/><category scheme='http://www.blogger.com/atom/ns#' term='Hypertransport'/><category scheme='http://www.blogger.com/atom/ns#' term='numa'/><category scheme='http://www.blogger.com/atom/ns#' term='QPI'/><category scheme='http://www.blogger.com/atom/ns#' term='AMD'/><title type='text'>Organizacion de memoria en arquitecturas multicore II</title><content type='html'>&lt;div style="text-align: left;"&gt;Continuación del artículo "Organización de memoria en arquitecturas multicore".&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: justify;"&gt;&lt;span style="font-weight: bold;"&gt;Arquitecturas de memoria no uniforme.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Las arquitecturas de memoria no uniforme (NUMA por sus siglas en inglés) utilizan (como en SMP) un único espacio de direcciones, pero en este caso cada procesador es dueño de una parte de la memoria, a la cual puede acceder más rápido. Utiliza pasaje de mensajes escondido para el acceso a memoria remota.&lt;br /&gt;&lt;br /&gt;En un entorno NUMA el programador puede acceder de forma transparente a cualquier posición de memoria y es el hardware quien crea esta abstracción.&lt;br /&gt;&lt;br /&gt;Unas de las pioneras en tecnología NUMA fue la empresa Sequent Computer Systems, quien introdujo los sistemas de multiprocesamiento y diseño de memoria NUMA a comienzo de los ‘90. Luego fue adquirida por IBM y estos desarrollos fueron implementados en los procesadores Power.&lt;br /&gt;&lt;br /&gt;La arquitectura análoga a la NUMA desarrollada por IBM fue denominada SE (Shared Everything por sus siglas en ingles). En la actualidad esta tecnología se encuentra integrada en los procesadores Power6, los cuales la heredaron de los Power4.&lt;br /&gt;&lt;br /&gt;La tecnología desarrollada por Intel se denomina QuickPath Interconnect, incluye un controlador de memoria en el chipset y permite compartir toda la memoria física entre los procesadores de forma transparente para el Sistema Operativo. Cada procesador posee un enlace punto a punto de alta velocidad.&lt;br /&gt;&lt;br /&gt;AMD implementó el sistema de acceso a memoria no uniforme (NUMA) que permite la conexión entre procesadores a través de enlaces de alta velocidad denominados Hypertransport Links. En este diseño cada procesador posee su propio controlador de memoria  y su propia memoria local. Cuando el procesador accede a la memoria local, la latencia es baja; mientras que si intenta acceder a memoria remota (memoria alocada en otro procesador) la latencia es alta.&lt;br /&gt;&lt;br /&gt;Cada uno de los procesadores está conectado entre sí a través de un enlace coherente de Hypertransport de alta velocidad. Cada procesador posee un enlace bidireccional no coherente para dispositivos de entrada-salida y dos enlaces bidireccionales coherentes, que permiten la conexión entre los procesadores.&lt;br /&gt;&lt;br /&gt;Los accesos punto a punto permiten acceder a ciertas regiones de memoria de forma más rápida y penaliza el acceso a otras. Por ejemplo en una PC con 2 GB de memoria  y dos procesadores, se podría privilegiar el acceso al primer GB para un procesador y el acceso al segundo GB para el otro procesador. Cada procesador tendría su propio controlador de acceso a memoria y ya no sería requerido un bus compartido por ambos procesadores.&lt;br /&gt;&lt;br /&gt;Cada CPU en un sistema NUMA pueden acceder a dos tipos de memoria: memoria local y memoria remota. La memoria local es aquella que se encuentra en el mismo nodo que la CPU, que se accede con baja latencia, y la memoria remota se encuentra en otro nodo, en otra CPU. La CPU debería acceder a través del nodo de interconexión para la memoria remota, el cual presentaría una alta latencia.&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1.LOS/LOCALS%7E1/Temp/moz-screenshot-1.png" alt="" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7812767567723060875?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7812767567723060875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7812767567723060875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7812767567723060875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7812767567723060875'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/03/organizacion-de-memoria-en.html' title='Organizacion de memoria en arquitecturas multicore II'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4153747709281416355</id><published>2011-01-15T10:28:00.000-08:00</published><updated>2011-01-15T13:40:45.161-08:00</updated><title type='text'>Organizacion de memoria en arquitecturas multicore</title><content type='html'>&lt;div style="text-align: justify;"&gt;Este artículo forma parte del trabajo final “ Paralelización de algoritmos numéricos con TORO kernel ” por Matías Vara, para el título de Ingeniería en Electrónica, Universidad Nacional de La Plata. Continuaré agregando partes de mi trabajo final al blog.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Organizacion de memoria en arquitecturas multicore &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El sistema más común de multiprocesamiento utilizado en la actualidad es el de acceso uniforme a memoria (SMP por sus siglas en inglés).&lt;br /&gt;En esta arquitectura cada procesador puede acceder a cualquier región de memoria  independiente uno del otro. El acceso se realiza por un único bus compartido, o sea que  cada procesador compite con el resto para escribir o leer. Los accesos se realizan de a uno por  vez –es decir- que solo un procesador en un instante dado, puede utilizar al  bus. Todos los procesadores son similares y tienen capacidades equivalentes. Todos los procesadores tienen el mismo tiempo de acceso a cualquier posición de memoria. En ambientes SMP el acceso a memoria por el programador es totalmente transparente.&lt;br /&gt;&lt;br /&gt;El primer microprocesador de Intel con soporte para multiprocesamiento, fue el Pentium PRO en 1992. El bus utilizado para la interconexión de la CPU con la memoria fue denominado Front Side Bus (FSB desde ahora).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TTHpESf4zII/AAAAAAAAALs/nfa8U2lp1R0/s1600/im1.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 395px; height: 255px;" src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TTHpESf4zII/AAAAAAAAALs/nfa8U2lp1R0/s400/im1.JPG" alt="" id="BLOGGER_PHOTO_ID_5562483274673605762" border="0" /&gt;&lt;/a&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="0" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;&lt;span style="" lang="ES"&gt;Este es un bus bidireccional muy simple; el costo es bajo y en teoría no hay límite acerca del número de procesadores que se pueden interconectar.&lt;/span&gt;&lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;El siguiente paso dado por Intel para incrementar el ancho de banda del FSB fue dividir el bus en dos buses independientes. Sin embargo el ancho de banda se vio reducido debido al tráfico que debía ser reenviado por todo los buses para mantener los caches coherentes. &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="0" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;&lt;a href="http://3.bp.blogspot.com/_F2PUAK0QAGQ/TTHpTw8MNxI/AAAAAAAAAL0/WgJrvFWglMA/s1600/im2.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 364px; height: 249px;" src="http://3.bp.blogspot.com/_F2PUAK0QAGQ/TTHpTw8MNxI/AAAAAAAAAL0/WgJrvFWglMA/s400/im2.JPG" alt="" id="BLOGGER_PHOTO_ID_5562483540543420178" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;En 2007 se implementó un bus dedicado por procesador.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;w:browserlevel&gt;MicrosoftInternetExplorer4&lt;/w:BrowserLevel&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="0" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;  &lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;a href="http://4.bp.blogspot.com/_F2PUAK0QAGQ/TTHpmKjck8I/AAAAAAAAAL8/ZVB50NZQyYA/s1600/im3.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 383px; height: 190px;" src="http://4.bp.blogspot.com/_F2PUAK0QAGQ/TTHpmKjck8I/AAAAAAAAAL8/ZVB50NZQyYA/s400/im3.JPG" alt="" id="BLOGGER_PHOTO_ID_5562483856656602050" border="0" /&gt;&lt;/a&gt;&lt;span style="" lang="ES"&gt;En la actualidad esta arquitectura es utilizada por los procesadores Atom, Celeron, Pentium y Core 2 de Intel. &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;A medida que se incrementaron el número de procesadores en las computadoras modernas también se incrementó el tráfico por el bus, convirtiéndolo en un cuello de botella y degradando la performance de la configuración SMP,&lt;span style=""&gt;  &lt;/span&gt;fijando un límite entre 16 a 64 procesadores. &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;El FSB fue fuertemente criticado debido a que éste representa una barrera para las nuevas tecnologías emergentes multicore. &lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Mientras que una CPU puede ejecutar instrucciones rápidamente, esta velocidad será desperdiciada si no puede hacer la captura y decodificación de las instrucciones tan rápido como las ejecuta. Cuando ocurre esto la CPU debe esperar por lo menos un ciclo más de reloj hasta retornar el valor desde la memoria.&lt;/span&gt;&lt;/p&gt;&lt;div style="text-align: justify;"&gt;  &lt;/div&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;El FSB se comenzó a sustituir a partir de 2001 por dispositivos de acceso punto a punto como Hypertransport de AMD o QuickPath Interconnect de Intel, remplazándose el modelo de acceso uniforme por el modelo de acceso no uniforme.&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;Matias E. Vara                                                                                                            &lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="text-align: justify;" class="MsoNormal"&gt;&lt;span style="" lang="ES"&gt;www.torokernel.org&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="" lang="ES"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4153747709281416355?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4153747709281416355/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4153747709281416355' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4153747709281416355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4153747709281416355'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2011/01/organizacion-de-memoria-en.html' title='Organizacion de memoria en arquitecturas multicore'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F2PUAK0QAGQ/TTHpESf4zII/AAAAAAAAALs/nfa8U2lp1R0/s72-c/im1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7263446305966518239</id><published>2010-12-30T18:04:00.000-08:00</published><updated>2010-12-30T18:37:29.357-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TORO'/><category scheme='http://www.blogger.com/atom/ns#' term='GDT'/><category scheme='http://www.blogger.com/atom/ns#' term='anillos'/><category scheme='http://www.blogger.com/atom/ns#' term='proteccion'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><title type='text'>Utilización de los anillos de privilegio del x86 en TORO</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:worddocument&gt;   &lt;w:view&gt;Normal&lt;/w:View&gt;   &lt;w:zoom&gt;0&lt;/w:Zoom&gt;   &lt;w:trackmoves/&gt;   &lt;w:trackformatting/&gt;   &lt;w:punctuationkerning/&gt;   &lt;w:validateagainstschemas/&gt;   &lt;w:saveifxmlinvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;   &lt;w:ignoremixedcontent&gt;false&lt;/w:IgnoreMixedContent&gt;   &lt;w:alwaysshowplaceholdertext&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;   &lt;w:donotpromoteqf/&gt;   &lt;w:lidthemeother&gt;EN-US&lt;/w:LidThemeOther&gt;   &lt;w:lidthemeasian&gt;X-NONE&lt;/w:LidThemeAsian&gt;   &lt;w:lidthemecomplexscript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;   &lt;w:compatibility&gt;    &lt;w:breakwrappedtables/&gt;    &lt;w:snaptogridincell/&gt;    &lt;w:wraptextwithpunct/&gt;    &lt;w:useasianbreakrules/&gt;    &lt;w:dontgrowautofit/&gt;    &lt;w:splitpgbreakandparamark/&gt;    &lt;w:dontvertaligncellwithsp/&gt;    &lt;w:dontbreakconstrainedforcedtables/&gt;    &lt;w:dontvertalignintxbx/&gt;    &lt;w:word11kerningpairs/&gt;    &lt;w:cachedcolbalance/&gt;   &lt;/w:Compatibility&gt;   &lt;m:mathpr&gt;    &lt;m:mathfont val="Cambria Math"&gt;    &lt;m:brkbin val="before"&gt;    &lt;m:brkbinsub val="--"&gt;    &lt;m:smallfrac val="off"&gt;    &lt;m:dispdef/&gt;    &lt;m:lmargin val="0"&gt;    &lt;m:rmargin val="0"&gt;    &lt;m:defjc val="centerGroup"&gt;    &lt;m:wrapindent val="1440"&gt;    &lt;m:intlim val="subSup"&gt;    &lt;m:narylim val="undOvr"&gt;   &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt;  &lt;w:latentstyles deflockedstate="false" defunhidewhenused="true" defsemihidden="true" defqformat="false" defpriority="99" latentstylecount="267"&gt;   &lt;w:lsdexception locked="false" priority="0" semihidden="false" unhidewhenused="false" qformat="true" name="Normal"&gt;   &lt;w:lsdexception locked="false" priority="9" semihidden="false" unhidewhenused="false" qformat="true" name="heading 1"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 2"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 3"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 4"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 5"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 6"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 7"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 8"&gt;   &lt;w:lsdexception locked="false" priority="9" qformat="true" name="heading 9"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 1"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 2"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 3"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 4"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 5"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 6"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 7"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 8"&gt;   &lt;w:lsdexception locked="false" priority="39" name="toc 9"&gt;   &lt;w:lsdexception locked="false" priority="35" qformat="true" name="caption"&gt;   &lt;w:lsdexception locked="false" priority="10" semihidden="false" unhidewhenused="false" qformat="true" name="Title"&gt;   &lt;w:lsdexception locked="false" priority="1" name="Default Paragraph Font"&gt;   &lt;w:lsdexception locked="false" priority="11" semihidden="false" unhidewhenused="false" qformat="true" name="Subtitle"&gt;   &lt;w:lsdexception locked="false" priority="22" semihidden="false" unhidewhenused="false" qformat="true" name="Strong"&gt;   &lt;w:lsdexception locked="false" priority="20" semihidden="false" unhidewhenused="false" qformat="true" name="Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="59" semihidden="false" unhidewhenused="false" name="Table Grid"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Placeholder Text"&gt;   &lt;w:lsdexception locked="false" priority="1" semihidden="false" unhidewhenused="false" qformat="true" name="No Spacing"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" unhidewhenused="false" name="Revision"&gt;   &lt;w:lsdexception locked="false" priority="34" semihidden="false" unhidewhenused="false" qformat="true" name="List Paragraph"&gt;   &lt;w:lsdexception locked="false" priority="29" semihidden="false" unhidewhenused="false" qformat="true" name="Quote"&gt;   &lt;w:lsdexception locked="false" priority="30" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Quote"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 1"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 2"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 3"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 4"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 5"&gt;   &lt;w:lsdexception locked="false" priority="60" semihidden="false" unhidewhenused="false" name="Light Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="61" semihidden="false" unhidewhenused="false" name="Light List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="62" semihidden="false" unhidewhenused="false" name="Light Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="63" semihidden="false" unhidewhenused="false" name="Medium Shading 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="64" semihidden="false" unhidewhenused="false" name="Medium Shading 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="65" semihidden="false" unhidewhenused="false" name="Medium List 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="66" semihidden="false" unhidewhenused="false" name="Medium List 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="67" semihidden="false" unhidewhenused="false" name="Medium Grid 1 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="68" semihidden="false" unhidewhenused="false" name="Medium Grid 2 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="69" semihidden="false" unhidewhenused="false" name="Medium Grid 3 Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="70" semihidden="false" unhidewhenused="false" name="Dark List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="71" semihidden="false" unhidewhenused="false" name="Colorful Shading Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="72" semihidden="false" unhidewhenused="false" name="Colorful List Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="73" semihidden="false" unhidewhenused="false" name="Colorful Grid Accent 6"&gt;   &lt;w:lsdexception locked="false" priority="19" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="21" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Emphasis"&gt;   &lt;w:lsdexception locked="false" priority="31" semihidden="false" unhidewhenused="false" qformat="true" name="Subtle Reference"&gt;   &lt;w:lsdexception locked="false" priority="32" semihidden="false" unhidewhenused="false" qformat="true" name="Intense Reference"&gt;   &lt;w:lsdexception locked="false" priority="33" semihidden="false" unhidewhenused="false" qformat="true" name="Book Title"&gt;   &lt;w:lsdexception locked="false" priority="37" name="Bibliography"&gt;   &lt;w:lsdexception locked="false" priority="39" qformat="true" name="TOC Heading"&gt;  &lt;/w:LatentStyles&gt; &lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt; &lt;style&gt;  /* Style Definitions */  table.MsoNormalTable  {mso-style-name:"Tabla normal";  mso-tstyle-rowband-size:0;  mso-tstyle-colband-size:0;  mso-style-noshow:yes;  mso-style-priority:99;  mso-style-qformat:yes;  mso-style-parent:"";  mso-padding-alt:0in 5.4pt 0in 5.4pt;  mso-para-margin-top:0in;  mso-para-margin-right:0in;  mso-para-margin-bottom:10.0pt;  mso-para-margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:"Calibri","sans-serif";  mso-ascii-font-family:Calibri;  mso-ascii-theme-font:minor-latin;  mso-fareast-font-family:"Times New Roman";  mso-fareast-theme-font:minor-fareast;  mso-hansi-font-family:Calibri;  mso-hansi-theme-font:minor-latin;} &lt;/style&gt; &lt;![endif]--&gt;&lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;En la arquitectura x86 existen 4 niveles de privilegio, siendo el anillo 0 el más privilegiado y el anillo 3 el menos. En un sistema operativo tradicional el nivel de mayor privilegio es del kernel y el de menor nivel es el del usuario. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;Al usar un SO de uso general, el código y datos del kernel utilizan descriptores de anillo 0, mientras que la aplicación de usuario utiliza el anillo 3. La capacidad de la GDT es de 8192 descriptores pero estos no se utilizan en general, usándose solo 4 descriptores, dos descriptores para datos y código de usuario, y dos más para datos y código del kernel. Estos descriptores se utilizan para el acceso a toda la memoria, es decir, que permiten acceder a los 4 GB (caso del direccionamiento de 32 bits).&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;El hecho de utilizar diferentes niveles de privilegio agrega latencias debido a que el procesador deberá corroborar que cada acceso de escritura/lectura/ejecución es válido. &lt;span style=""&gt; &lt;/span&gt;En un SO de uso general la utilización de diferentes niveles de privilegios es totalmente necesario, permite que se ejecuten varios procesos y que éstos no se solapen; y por otro lado que aplicaciones mal programadas no sobreescriban código del kernel.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;Si suponemos que corremos una aplicación dedicada multihilo, que ésta se ejecuta sola en el sistema y que la aplicación fue escrita con suficiente cuidado como para no realizar escrituras sobre zonas prohibidas, será necesaria la protección?, suponiendo una situación así podemos simplificar bastante el SO. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;Primero, tanto la aplicación de usuario como el código y datos del kernel estarían en el mismo nivel de privilegio , por lo tanto, cuando debemos realizar una llamada al sistema no habría ningún salto de nivel de privilegio &lt;span style=""&gt; &lt;/span&gt;y se podrían implementar simplemente con la instrucción “call”. Recordemos que actualmente para soportar las llamadas al sistema se utiliza una interrupción que permite realizar el salto de nivel de privilegio de anillo 3 a anillo 0 y es muy costosa.&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;Segundo, cuando los dispositivos de hardware producen interrupciones y nos encontramos ejecutando código de usuario se producirán saltos de niveles de privilegio. Ésto se debe a que dejamos de ejecutar código de anillo 3 para ejecutar una rutina de manejo de interrupción que se encuentra en anillo 0. Si la aplicación de usuario se ejecuta en el mismo nivel del kernel nos ahorramos la latencia que presenta saltar a un mayor nivel de privilegio. &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"  style="text-align: justify;font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;En el caso de TORO, el kernel y la aplicación de usuario se ejecutan en anillo 0, por otro lado, como ambos se compilan juntos, las llamadas al sistema son implementadas como simples instrucciones “call” a funciones del kernel. &lt;/span&gt;&lt;/p&gt;  &lt;p  class="MsoNormal" style="font-family:arial;"&gt;&lt;span lang="ES"  style="font-size:100%;"&gt;Matias E. Vara&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style=";font-family:&amp;quot;;"  lang="ES"&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;span style=""&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7263446305966518239?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7263446305966518239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7263446305966518239' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7263446305966518239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7263446305966518239'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/12/utilizacion-de-los-niveles-de.html' title='Utilización de los anillos de privilegio del x86 en TORO'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7434989490200071148</id><published>2010-11-27T08:09:00.000-08:00</published><updated>2010-11-27T08:18:43.200-08:00</updated><title type='text'>Ese viejo TORO</title><content type='html'>&lt;div style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Desde el 2006, año en el cual se vieron modificados los objetivos de TORO, se discontinuó el proyecto TORO OS correspondiente a las versión 1.x.x. Estas versiones lograron un gran éxito en cuanto funcionalidad. La versión más estable fue la 1.1.3, de vez en cuando me pongo a ver el source de esas versiones y me da mucha lástima haberlo dejado, de todas formas me era imposible llevar a cabo ambos proyectos de forma simultanea. Por eso he decidido hacer un pequeño homenaje a esas versiones. Para eso muestro a continuación como testear toro 1.1.3 a través de BOCHS. He puesto un par de screenshots para que observen la belleza de una shell en PASCAL. Diviértanse!&lt;/span&gt;&lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Par estas simulaciones es necesario BOCHS para x86, recuerden que las versión 1.1.3 son solo para 32 bits. Aquí les incluyo el contenido del archivo &lt;i&gt;torobch.bxrc&lt;/i&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;margin-bottom: 0.0001pt; "&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;&lt;span class="Apple-style-span" &gt;megs: 256&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;margin-bottom: 0.0001pt; "&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" &gt;romimage: file=BIOS-bochs-latest, address=0xf0000&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;margin-bottom: 0.0001pt; "&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" &gt;floppya: 1_44=toro-1.1.3.img, status=inserted&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;margin-bottom: 0.0001pt; "&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;&lt;span class="Apple-style-span" &gt;boot: floppy&lt;/span&gt;&lt;span class="Apple-style-span" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;margin-bottom: 0.0001pt; "&gt;&lt;span lang="EN-US"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Es necesario bajar la imagen de toro-1.1.3 desde el link: &lt;span lang="EN-US"&gt;&lt;a href="http://sourceforge.net/projects/toro/files/images/toro-1.1.3/toro-1.1.3.img/download"&gt;&lt;span lang="ES"&gt;http://sourceforge.net/projects/toro/files/images/toro-1.1.3/toro-1.1.3.img/download&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Si todo anda bien, la primer ventana que verán cuando ejecuten BOCHS será:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; "&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TPEuTYYsRDI/AAAAAAAAAG0/UPgR55US5g4/s400/sc1.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263526768198706" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Corresponde el bootloader GRUB, allí se elige la opción TORO-1.1.3 y se le da enter.&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Comenzará a cargar el SO y luego la Shell:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify; "&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://3.bp.blogspot.com/_F2PUAK0QAGQ/TPEuTBSbdYI/AAAAAAAAAGs/lVtVcOXUShE/s400/sc2.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263520567915906" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Estamos listo para ingresar comandos a TORO. El primer comando que veremos es el &lt;i&gt;ls &lt;/i&gt;que como todos ya sabrán lista el directorio actual.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; "&gt;&lt;a href="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TPEt8XQA0sI/AAAAAAAAAGk/8I1CPxYPL38/s1600/sc3.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TPEt8XQA0sI/AAAAAAAAAGk/8I1CPxYPL38/s400/sc3.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263131326370498" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;Ahora vamos a ir hasta el directorio donde se encuentra el source de TORO utilizando &lt;i&gt;cd.&lt;o:p&gt;&lt;/o:p&gt;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://4.bp.blogspot.com/_F2PUAK0QAGQ/TPEt8MyACXI/AAAAAAAAAGc/PS2IP1OwXPI/s400/sc4.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263128516135282" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Y vamos a ejecutar &lt;i&gt;echo printk.pas &lt;/i&gt;esto despliega el contenido del archivo en pantalla.&lt;/span&gt;&lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://2.bp.blogspot.com/_F2PUAK0QAGQ/TPEt6wGH6fI/AAAAAAAAAGU/dF9aJrUF0tw/s400/SC5.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263103636040178" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Todos los comandos de la Shell los pueden ver en el directorio /BIN como es de esperar, estos son:&lt;/span&gt;&lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TPEt6f4A3sI/AAAAAAAAAGM/x2rW2iJab8Q/s400/SC6.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263099281891010" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Bueno ejecutando &lt;i&gt;reboot&lt;/i&gt; el sistema es cerrado y podemos apagar tranquilos la maquina virtual.&lt;/span&gt;&lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Georgia, serif; font-size: 16px; -webkit-text-decorations-in-effect: underline; "&gt;&lt;img src="http://2.bp.blogspot.com/_F2PUAK0QAGQ/TPEt6MNOP0I/AAAAAAAAAGE/8UkvbIxaZ28/s400/sc7.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5544263094002138946" style="display: block; margin-top: 0px; margin-right: auto; margin-bottom: 10px; margin-left: auto; text-align: center; cursor: pointer; width: 400px; height: 250px; " /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial; font-size: small; "&gt;Espero que les haya gustado, hagan sus propias experiencias ejecutando comandos. También pueden quemar la imagen en un disket de 3 ½ y probarlo en una maquina real.&lt;/span&gt;&lt;/div&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;ATENCION: Las versiones 1.x.x no tienen nada que ver con las versión 0.XX son cosas diferentes.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" &gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; color: rgb(34, 34, 34); line-height: 18px; "&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: 12pt; "&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="apple-style-span"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;Matias E. Vara&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin-bottom: 0.0001pt; line-height: 12pt; "&gt;&lt;span class="Apple-style-span" &gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="apple-style-span"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;&lt;span lang="ES"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="font-size: small; "&gt;www.torokernel.org&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="text-align: justify;"&gt;&lt;span style="font-family:&amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;;mso-ansi-language: ES;mso-fareast-language:JA"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language:ES"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="mso-ansi-language:ES"&gt;&lt;span style="mso-spacerun:yes"&gt; &lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7434989490200071148?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7434989490200071148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7434989490200071148' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7434989490200071148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7434989490200071148'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/11/ese-viejo-toro.html' title='Ese viejo TORO'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F2PUAK0QAGQ/TPEuTYYsRDI/AAAAAAAAAG0/UPgR55US5g4/s72-c/sc1.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5759343443015081059</id><published>2010-11-20T15:27:00.000-08:00</published><updated>2010-11-21T10:41:13.416-08:00</updated><title type='text'>Toro Builder subido!</title><content type='html'>Se encuentra disponible la interfaz de desarrollo de Toro, esta permite la compilacion y debug del núcleo muy fácilmente a través de ECLIPSE y QEMU, para bajarlo hacer &lt;a href="http://sourceforge.net/projects/toro/files/Toro%20Builder/ToroBuilder-x86_64-setup-1.0.exe/download"&gt;click aqui&lt;/a&gt; pero antes visitar el nuevo &lt;a href="http://sourceforge.net/apps/mediawiki/toro/"&gt;WIKI&lt;/a&gt; de TORO para mayor información. Si hay alguien interesado en ser EDITOR del WIKI por favor contáctese conmigo a torokernel@gmail.com, saludos.&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5759343443015081059?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5759343443015081059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5759343443015081059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5759343443015081059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5759343443015081059'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/11/toro-builder-subido.html' title='Toro Builder subido!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-1333578310971221115</id><published>2010-11-10T15:24:00.000-08:00</published><updated>2010-11-11T21:06:38.908-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='planificador'/><category scheme='http://www.blogger.com/atom/ns#' term='x86-64'/><category scheme='http://www.blogger.com/atom/ns#' term='cambio de contexto'/><category scheme='http://www.blogger.com/atom/ns#' term='hilo cooperativo'/><title type='text'>Cambio de Contexto</title><content type='html'>&lt;div&gt;&lt;p class="Style-2" style="text-align: justify;"&gt;&lt;/p&gt;&lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;En este artículo intentaré dar una breve descripción de qué es un cambio de contexto y en particular como lo implementa TORO en las versiones a partir de la 0.01. No hablaré acerca de cómo lo implementa TORO OS en las versiones 1.x.x, solo diré que utiliza cambio de contexto por hardware. En futuros artículos mostraré la implementación en pascal de todas estas ideas. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style=";font-family:arial;font-size:small;"  &gt;Cualquier duda a las referencias! Diviértanse!.&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Como sabemos el encargado de distribuir los hilos en un kernel es el planificador. A parte de implementar el algoritmo de planificación éste realiza el procedimiento de “cambio de contexto”. Al seleccionar un nuevo hilo, el planificador llena los registros del procesador con los valores que tenían justo antes de que el hilo invoque al núcleo (OJO este comentario está ligado al algoritmo de planificación de TORO que es el de hilo cooperativo).&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:12pt;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TNsp9cGuboI/AAAAAAAAAEs/MZwWvvRZwic/s1600/switch.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 246px;" src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/TNsp9cGuboI/AAAAAAAAAEs/MZwWvvRZwic/s400/switch.JPG" alt="" id="BLOGGER_PHOTO_ID_5538066302275317378" border="0" /&gt;&lt;/a&gt;&lt;span style="line-height: 115%;" lang="ES"&gt;&lt;div style="text-align: center;"&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;span style="line-height: 115%;" lang="ES"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;Imagen &lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;span style="line-height: 115%;" lang="ES"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;1&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="line-height: normal;"&gt;&lt;span style="line-height: 115%;" lang="ES"&gt;&lt;b&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt;. Procedimiento de carga de un Nuevo proceso.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;p class="Style-2" style="text-align: justify;"&gt;&lt;b&gt;&lt;span lang="ES"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"  style="font-size:x-small;"&gt; &lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="Style-2" style="text-align: justify;"&gt;&lt;/p&gt;&lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;En la arquitectura x86-64 algunos de los registros de uso general son RAX, RBX, RCX, etc. Además de éstos registros también deben ser actualizados algunos registros de sistema como son el CR3. Éstos guardan información acerca del directorio de páginas del hilo que va ser cargado. El procedimiento se denomina “Cambio de contexto” y es una operación crítica debido a que se ejecuta de forma continua por lo que debe ser muy rápida. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;El procedimiento de cambio de  contexto puede ser implementado tanto por software como por hardware. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Cuando se implementa por hardware, se hace uso de los mecanismos que brinda una arquitectura en particular para realizar el cambio de contexto. Por ejemplo, para la arquitectura x86, se utilizan las estructuras denominadas descriptores de tareas, estas se encuentran en la GDT (Global Descriptor Table) y cuando se debe cargar una nueva tarea simplemente se utiliza la instrucción “&lt;i&gt;call”&lt;/i&gt; al descriptor de tarea (denominado en la literatura como TSS)[1].  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Por otro lado, en la implementación por software, el cambio de contexto se realiza “a mano” y es una rutina escrita por el programador la encargada de salvar el valor de los registros.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;A primera vista el cambio de contexto por hardware parece la opción más óptima debido a que no interviene el programador y se realiza de forma “automática”. Pero en general ocurre que en los cambios de contexto por hardware se guardan los valores de todos los registros, pero resulta que a veces no se están utilizando todos los registros. De esta forma la implementación por hardware puede no ser la más óptima. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Por este motivo &lt;span style="color:black;"&gt;el cambio de contexto implementado en TORO es por software, se utilizan técnicas de programación para no utilizar los mecanismos de cambio de contexto que brinda un hardware en particular. El planificador al seleccionar un nuevo hilo, carga en los registros del procesador los valores que corresponde al nuevo hilo, y luego comienza su ejecución; el hilo comienza su ejecución justo después del momento en que se llamó al procedimiento &lt;i&gt;SysThreadSwitch&lt;/i&gt;. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span  lang="ES" style="color:black;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Como el cambio de contexto se realiza siempre luego de haberse invocado a la función &lt;i&gt;SysThreadSwitch,&lt;/i&gt; el planificador supone que en ese instante los registros del procesador no están siendo utilizados por la aplicación de usuario. De esta forma se limita únicamente a salvar el estado de la pila del hilo que debe ser removido. Para la implementación sobre la arquitectura x86-64, esto se logra salvando en la estructura &lt;i&gt;TThread&lt;/i&gt; el valor del registro RSP, el cual guarda la posición dentro de la pila.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span  lang="ES" style="color:black;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;El cambio de contexto implementado en TORO es más rápido que el de hardware y que el implementado en un SO de uso general. La elección del método de cambio de contexto se encuentra directamente relacionado con el modelo de hilo cooperativo.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="Style-2" style="text-align: justify;"&gt;&lt;span  lang="ES" style="color:black;"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Así la utilización de cambio de contexto por software suma portabilidad y velocidad [2].   &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="ES"&gt;&lt;o:p&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[1]. Intel. IA-32 Intel® Architecture Software Developer’s Manual. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="ES"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;Vol3. 2004.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span lang="EN-US"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span"  style="font-size:small;"&gt;[2]. Osdev Wiki, Context Switching, http://wiki.osdev.org/Context_Switching.&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;font-size:13px;" &gt;Matias E. Vara&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span class="Apple-style-span"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;font-size:13px;" &gt;www.torokernel.org&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-1333578310971221115?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/1333578310971221115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=1333578310971221115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/1333578310971221115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/1333578310971221115'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/11/cambio-de-contexto.html' title='Cambio de Contexto'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F2PUAK0QAGQ/TNsp9cGuboI/AAAAAAAAAEs/MZwWvvRZwic/s72-c/switch.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-1890963623835002269</id><published>2010-11-08T18:54:00.000-08:00</published><updated>2010-11-08T18:58:37.479-08:00</updated><title type='text'>Cambios en el SVN</title><content type='html'>Estaré realizando algunos cambios en la estructura de directorios del SVN asi que tal vez esté fuera de servicio algunas horas. Recomiendo hacer un update de las carpetas.&lt;br /&gt;&lt;br /&gt;Saludos&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-1890963623835002269?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/1890963623835002269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=1890963623835002269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/1890963623835002269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/1890963623835002269'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/11/cambios-en-el-svn.html' title='Cambios en el SVN'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-3956584852954172127</id><published>2010-10-28T14:29:00.001-07:00</published><updated>2010-10-28T14:30:26.381-07:00</updated><title type='text'>Presentacion de BugCON 2010</title><content type='html'>Aquí les dejo el &lt;a href="http://sourceforge.net/projects/toro/files/Documentation/%5BUnnamed%20release%5D/Toro%20BugCon%202010.pdf/download"&gt;link&lt;/a&gt; a la presentacion que hice para BugCon 2010. Espero se diviertan, saludos.&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-3956584852954172127?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/3956584852954172127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=3956584852954172127' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3956584852954172127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3956584852954172127'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/10/presentacion-de-bugcon-2010.html' title='Presentacion de BugCON 2010'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-3308244477299829472</id><published>2010-09-19T17:34:00.000-07:00</published><updated>2010-09-19T21:44:02.263-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='migracion'/><category scheme='http://www.blogger.com/atom/ns#' term='Lock'/><category scheme='http://www.blogger.com/atom/ns#' term='TORO'/><category scheme='http://www.blogger.com/atom/ns#' term='Multiprocesamiento'/><category scheme='http://www.blogger.com/atom/ns#' term='Thread'/><category scheme='http://www.blogger.com/atom/ns#' term='Pascal'/><category scheme='http://www.blogger.com/atom/ns#' term='Operacion Atomicas'/><category scheme='http://www.blogger.com/atom/ns#' term='Hilo'/><title type='text'>Migracion de Hilos sobre TORO</title><content type='html'>En ambientes multicore es preciso contar con la capacidad de crear hilos no sólo en el procesador local sino en procesadores remotos. TORO brinda la posibilidad de crear hilos en cualquier procesador, desde cualquier procesador, a través de la llamada al sistema &lt;span style="font-family:courier new;"&gt;BeginThread()&lt;/span&gt;.&lt;br /&gt;Podemos diferenciar dos procedimientos en el kernel:&lt;a href="http://4.bp.blogspot.com/_F2PUAK0QAGQ/TJaxuTPSenI/AAAAAAAAADM/YTT67tvfpAs/s1600/test.JPG"&gt;&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;- La emigración de hilos: cuando los hilos se dirigen hacia otro procesador diferente a donde se está ejecutando el hilo que los creo.&lt;br /&gt;- La inmigración de hilos: cuando el procesador huésped encola en el planificador local a los hilos que provienen de otros procesadores.&lt;br /&gt;&lt;br /&gt;Este es el único punto del núcleo en el cual se requiere de algún tipo de mecanismo de sincronización entre los procesadores para poder enviar y recibir los procesos que deben migrar. El mecanismo es denominado “Exchange Slot”, y permite la comunicación entre procesadores sin utilizar operaciones atómicas. En este caso particular, se utiliza para el envío de nuevos hilos, pero puede ser utilizada para el envío de cualquier tipo de datos.&lt;br /&gt;Por cada procesador existe una estructura denominada &lt;span style="font-family:courier new;"&gt;TSchedulerExchangeSlot&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-family:courier new;"&gt;TSchedulerExchangeSlot = record&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;           &lt;br /&gt;DispatcherArray: array[0..MAX_CPU-1] of PThread;&lt;/span&gt; &lt;span style="font-family:courier new;"&gt;           &lt;br /&gt;EmigrateArray: array[0..MAX_CPU-1] of PThread;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;end; &lt;/span&gt;&lt;br /&gt;                                               &lt;br /&gt;&lt;/div&gt;Siendo &lt;span style="font-family:courier new;"&gt;MAX_CPU&lt;/span&gt; el número de procesadores y &lt;span style="font-family:courier new;"&gt;PThread&lt;/span&gt; un puntero a una estructura &lt;span style="font-family:courier new;"&gt;TThread&lt;/span&gt;. De la definición de la estructura, se observa que cada procesador posee dos arreglos (&lt;span style="font-family:courier new;"&gt;DispatcherArray&lt;/span&gt; y &lt;span style="font-family:courier new;"&gt;EmigrateArray&lt;/span&gt;), y cada uno puntea a un grupo de hilos.&lt;br /&gt;El procedimiento de envío de hilos hacia otros procesadores puede ser descripto en tres niveles:&lt;br /&gt;1   –  El usuario invoca al procedimiento &lt;span style="font-family:courier new;"&gt;BeginThread()&lt;/span&gt;para crear un nuevo hilo, si el parámetro &lt;span style="font-family:courier new;"&gt;CPUID&lt;/span&gt; es diferente al identificador de la CPU local, el kernel sabe que este nuevo hilo deberá ser migrado, y entonces lo agrega a la lista ligada &lt;span style="font-family:courier new;"&gt;DispatcherArray[CPUID]&lt;/span&gt;.&lt;br /&gt;2  –  Cuando se ejecuta el planificador del procesador local (se invoca la llamada al sistema &lt;span style="font-family:courier new;"&gt;SysThreadSwitch&lt;/span&gt;), el procedimiento &lt;span style="font-family:courier new;"&gt;Emigrating()&lt;/span&gt; chequea si alguna de las entradas del arreglo &lt;span style="font-family:courier new;"&gt;EmigrateArray[]&lt;/span&gt; es nula. De ser así, desplaza todos los hilos desde la entrada correspondiente a &lt;span style="font-family:courier new;"&gt;DispatcherArray[]&lt;/span&gt; hasta  &lt;span style="font-family:courier new;"&gt;EmigrateArray[]&lt;/span&gt;.&lt;br /&gt;3 – Durante la planificación de un procesador remoto el procedimiento &lt;span style="font-family:courier new;"&gt;Inmigrating()&lt;/span&gt; chequea la entrada del arreglo &lt;span style="font-family:courier new;"&gt;EmigrateArray[]&lt;/span&gt; correspondiente a su CPUID de la estructura  &lt;span style="font-family:courier new;"&gt;TSchedulerExchangeSlot &lt;span style="font-family:arial;"&gt;&lt;/span&gt;&lt;/span&gt;de cada procesador. Si no es nula, esta contiene un puntero al primer elemento de una cola ligada de procesos que están intentando migrar hacia su procesador. El procedimiento toma la cola de hilos y los coloca en la lista de hilos listos para ser ejecutados, luego vuelve a la entrada en el arreglo&lt;span style="font-family:courier new;"&gt; EmigrateArray[]&lt;/span&gt; nula.&lt;br /&gt;Es claro que el arreglo &lt;span style="font-family:courier new;"&gt;DispatcherArray[]&lt;/span&gt; es de lectura/escritura solo para el procesador local. Mientras el arreglo &lt;span style="font-family:courier new;"&gt;EmigrateArray[] &lt;/span&gt;es de escritura/lectura para el procesador local y remoto, pero que la escritura sobre éste es sincronizada a través de la utilización del puntero nulo.&lt;br /&gt;El “Exchange Slot” no requiere de ningún procedimiento que involucre un “pooling” de una variable del tipo “Lock”, evitando la utilización de operaciones atómicas y todo lo que ellas conllevan.&lt;br /&gt;&lt;img src="file:///C:/DOCUME%7E1/ADMINI%7E1.LOS/LOCALS%7E1/Temp/moz-screenshot.png" alt="" /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_F2PUAK0QAGQ/TJaxuTPSenI/AAAAAAAAADM/YTT67tvfpAs/s1600/test.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 299px; height: 350px;" src="http://4.bp.blogspot.com/_F2PUAK0QAGQ/TJaxuTPSenI/AAAAAAAAADM/YTT67tvfpAs/s400/test.JPG" alt="" id="BLOGGER_PHOTO_ID_5518793802385619570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;La inmigración y emigración de hilos entre procesadores se realiza únicamente cuando se invoca al planificador -es decir- cuando el hilo cede el procesador al kernel. En ese momento el Sistema realiza tareas de mantenimiento. Como se observa en la figura, cuando se llama al planificador, éste primero realiza la inmigración de hilos, luego realiza la emigración de hilos, y finalmente realiza la planificación de un nuevo hilo para el procesador local.&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-3308244477299829472?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/3308244477299829472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=3308244477299829472' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3308244477299829472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3308244477299829472'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/09/migracion-de-hilos-sobre-toro.html' title='Migracion de Hilos sobre TORO'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_F2PUAK0QAGQ/TJaxuTPSenI/AAAAAAAAADM/YTT67tvfpAs/s72-c/test.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5556224761661711763</id><published>2010-07-22T18:05:00.000-07:00</published><updated>2010-07-22T18:15:33.968-07:00</updated><title type='text'>Toro en BugCon 2010!</title><content type='html'>Toro estará presente en BUGCON 2010, Mexico DF. Realizaré una presentacion mostrando las funcionalidades de TORO y que problemas viene a solucionar. Tambien hare una demostracion en vivo de la compilacion del nucleo y el testeo paso a paso utilizando Eclipse y QEMU. Espero verlos alli.&lt;br /&gt;Aqui les dejo el &lt;a href="http://www.bugcon.org/speakers2010"&gt;link&lt;/a&gt; para ver a los otros expositores.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5556224761661711763?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5556224761661711763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5556224761661711763' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5556224761661711763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5556224761661711763'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/07/toro-en-bugcon-2010.html' title='Toro en BugCon 2010!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-8278181885165429544</id><published>2010-06-13T10:15:00.000-07:00</published><updated>2010-06-15T14:27:54.378-07:00</updated><title type='text'>Debugueando TORO con ECLIPSE+QEMU en  WIN64 , parte 2</title><content type='html'>Bueno luego de mucho trabajo he logrado construir un entorno para compilar y testear TORO muy rápidamente utilizando ECLIPSE y emulando TORO sobre QEMU. Básicamente lo que hace ECLIPSE es ser la interfaz gráfica entre GDB y QEMU. Para esto estoy utilizando GDB en forma de debug remoto , caracterisca que esta presente en QEMU. Para entusiarmarlos aqui les pongo un pequeño video en Win64, esta medio desprolijo pero prometo hace un buen tutorial hacerca de eso.&lt;br /&gt;&lt;br /&gt;&lt;object id='stUEhQQkVLRFtYRltfXFtfX1BQ' width='425' height='344' type='application/x-shockwave-flash' data='http://www.screentoaster.com/swf/STPlayer.swf'  codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0'&gt;&lt;param name='movie' value='http://www.screentoaster.com/swf/STPlayer.swf'/&gt;&lt;param name='allowFullScreen' value='true'/&gt;&lt;param name='allowScriptAccess' value='always'/&gt;&lt;param name='flashvars' value='video=stUEhQQkVLRFtYRltfXFtfX1BQ'/&gt;&lt;/object&gt;&lt;div style='width: 425px; text-align: right;'&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Por otro lado estoy creando un paquete(como se en el video) con todas los ejecutables incluidos de forma de que simplemente sea bajar y ejecutar ECLIPSE, sin necesitar ninguna otra herramienta más.&lt;br /&gt;El mismo procedimiento lo he hecho en Linux y funciona bien , como muestran los screenshot del post anterior.&lt;br /&gt;&lt;br /&gt;Un saludo .&lt;br /&gt;Matias E. Vara&lt;br /&gt;www.torokernel.org&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-8278181885165429544?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/8278181885165429544/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=8278181885165429544' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/8278181885165429544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/8278181885165429544'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/06/debugueando-toro-con-eclipseqemu-en.html' title='Debugueando TORO con ECLIPSE+QEMU en  WIN64 , parte 2'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5046256445472469107</id><published>2010-04-12T06:42:00.001-07:00</published><updated>2010-04-12T06:42:50.218-07:00</updated><title type='text'>Debugueando TORO en Eclipse+QEMU sobre Win64</title><content type='html'>Al intentar hacer lo mismo sobre Windows me encontré con un grave error en la aplicación GDB. Recordemos que para hacer el Debug , la IDE se conecta al gdbserver a traves del gdb cliente (gdb.exe).Al intenter introducir breakpoints , ocurria el siguiente error :&lt;br /&gt;&lt;pre&gt;"Remote 'g' packet reply is too long:&lt;br /&gt;&gt; 0000000000000000000000000000000000000000000000002306000 "&lt;/pre&gt;Esto pasa cuando la maquina virtual llega al &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;breakpoint&lt;/span&gt; y el &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;gdbserver&lt;/span&gt; le enviaba &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_2"&gt;información&lt;/span&gt; acerca del estado de la maquina al cliente &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;&lt;/span&gt;. Luego de buscar este problema en otros foros , no &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_4"&gt;encontré&lt;/span&gt; ninguna &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_5"&gt;solución&lt;/span&gt;. Con cambiar la arquitectura,&lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_9"&gt; debería&lt;/span&gt; ser suficiente :&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;"&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;SET&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;ARCHITECTURE&lt;/span&gt; I386:X86-64:&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;INTEL&lt;/span&gt;"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;.En &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;Linux&lt;/span&gt; esto funciono bien , pero no en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;Windows&lt;/span&gt;. Lo que ocurre es que cuando el cliente &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;gdb&lt;/span&gt; se conecta a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;qemu&lt;/span&gt; , este le informa que los tamaños de registros corresponden al de una maquina en modo real de 16 bits. Pero cuando uno pone un &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;breakpoint&lt;/span&gt; en el &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_15"&gt;código&lt;/span&gt; de toro, la maquina virtual se encuentra en Modo &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;Long&lt;/span&gt; con registros de 64bits , con lo cual el paquete enviado sobrepasa el tamaño fijado al comienzo de la &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_17"&gt;conexion&lt;/span&gt; y &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_18"&gt;gdb&lt;/span&gt; tira ese error.&lt;br /&gt;Lo que hice fue recompilar &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_19"&gt;gdb&lt;/span&gt;-7.0 en &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_20"&gt;Win&lt;/span&gt;64 y aplicar un parche &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_21"&gt;sencillo&lt;/span&gt; por el momento, pero que funciona muy bien. &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_22"&gt;Subiré&lt;/span&gt; mi &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_23"&gt;versión&lt;/span&gt; de &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_24"&gt;GDB&lt;/span&gt; en el &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_25"&gt;próximo&lt;/span&gt; paquete que estoy construyendo con todas las herramientas para compilar y testear TORO incluidas.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;br /&gt;Matias E. Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5046256445472469107?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5046256445472469107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5046256445472469107' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5046256445472469107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5046256445472469107'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/04/debugueando-toro-en-eclipseqemu-sobre.html' title='Debugueando TORO en Eclipse+QEMU sobre Win64'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-3939483747161569218</id><published>2010-04-05T19:52:00.000-07:00</published><updated>2010-04-05T20:07:23.350-07:00</updated><title type='text'>Debugueando TORO en Eclipse+QEMU</title><content type='html'>Hola, luego de mucho tiempo buscando la herramienta ideal para compilar y testear toro rapidamente creo haberla encontrado. Casi de casualidad me encontre con la IDE Eclipse y la posibilidad de debugear Linux desde  la IDE , y por otro lado encontre un plug-in para dar soporte al lenguaje pascal desde Eclipse. Uniendo estas dos herramientas pude compilar y ejecutar toro paso a paso , linea por linea , colocar breakpoints , etc . Resulto ser una muy potente herramienta que permitira encontrar problemas facilmente. Estoy utilizando la ultima version de Eclipse en un Ubuntu de 64 bits.&lt;br /&gt;Aqui subo un par de screen para motivarlos. Todavia no lo tengo funcionando al 100% .&lt;br /&gt;Pantallas de la ejecucion paso a paso :&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F2PUAK0QAGQ/S7qkSEvgdII/AAAAAAAAACA/tGgVp_sNGN4/s1600/screen1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 284px;" src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/S7qkSEvgdII/AAAAAAAAACA/tGgVp_sNGN4/s400/screen1.png" alt="" id="BLOGGER_PHOTO_ID_5456854528930378882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_F2PUAK0QAGQ/S7qkfJsdiDI/AAAAAAAAACI/D9Z_mV-rSk4/s1600/screen2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 300px;" src="http://2.bp.blogspot.com/_F2PUAK0QAGQ/S7qkfJsdiDI/AAAAAAAAACI/D9Z_mV-rSk4/s400/screen2.png" alt="" id="BLOGGER_PHOTO_ID_5456854753598081074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Esta es la ventana de qemu que estaba utilizando.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_F2PUAK0QAGQ/S7qlEW4--UI/AAAAAAAAACQ/DvXdDM6xx28/s1600/screen3.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 235px;" src="http://4.bp.blogspot.com/_F2PUAK0QAGQ/S7qlEW4--UI/AAAAAAAAACQ/DvXdDM6xx28/s400/screen3.png" alt="" id="BLOGGER_PHOTO_ID_5456855392795425090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-3939483747161569218?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/3939483747161569218/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=3939483747161569218' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3939483747161569218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3939483747161569218'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/04/debugueando-toro-en-eclipseqemu.html' title='Debugueando TORO en Eclipse+QEMU'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F2PUAK0QAGQ/S7qkSEvgdII/AAAAAAAAACA/tGgVp_sNGN4/s72-c/screen1.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7625388604692012887</id><published>2010-01-07T08:44:00.000-08:00</published><updated>2010-01-07T09:31:25.532-08:00</updated><title type='text'>Lazarus + GDB + QEMU</title><content type='html'>Estoy trabajando duro para obtener una plataforma para compilar y testear TORO de forma rapida y facil . Para esto estoy haciendo modificaciones sobre el codigo de Lazarus . Lazarus es una IDE para el compilador FREEPASCAL. Estas modificaciones haces posible que cuando se ejecuta "RUN" en la IDE , esta realiza :&lt;br /&gt;- Genera  toro.exe&lt;br /&gt;- Genera la imagen booteable de toro .&lt;br /&gt;- Corre QEMU&lt;br /&gt;- Permite debuguear TORO directamente desde la IDE utilizando un cliente GDB.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;br /&gt;Matias E. Vara.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7625388604692012887?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7625388604692012887/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7625388604692012887' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7625388604692012887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7625388604692012887'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2010/01/lazarus-gdb-qemu.html' title='Lazarus + GDB + QEMU'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7499535890556250755</id><published>2009-12-27T17:39:00.000-08:00</published><updated>2010-03-24T13:43:17.864-07:00</updated><title type='text'>Charlas sobre TORO en la UNLP</title><content type='html'>Hola, he estado pensando organizar una charla sobre TORO en la Universidad Nacional de La Plata. calle 1 y 47 , La Plata , Buenos Aires , Argentina .&lt;br /&gt;Las tematica seria :&lt;br /&gt;- Origen y Objetivos.&lt;br /&gt;- Compilacion.&lt;br /&gt;- Testeo.&lt;br /&gt;&lt;br /&gt;Se realizaria a fines de Febrero 2010 . La gente Interesada por favor comente, asi se que cantidad de gente esperar.&lt;br /&gt;&lt;br /&gt;Saludos.&lt;br /&gt;Matias Vara.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;NOTA: Por el momento no he podido coordinar la charla , cuando tenga alguna novedad la postearé.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7499535890556250755?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7499535890556250755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7499535890556250755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7499535890556250755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7499535890556250755'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/12/charlas-sobre-toro-en-la-unlp.html' title='Charlas sobre TORO en la UNLP'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4203454736537571063</id><published>2009-10-27T18:48:00.000-07:00</published><updated>2009-10-27T18:55:44.328-07:00</updated><title type='text'>Manejador de Cache del procesador</title><content type='html'>Estube trabajando en alguna manera de manejar de forma mas eficiente el Cache del procesador(L1,L2 Y L3) . Para esto he escrito dos procedimientos en la unidad Arch.pas para marcar como cacheable o no-cacheable una pagina. En un primer momento se cachea solo el codigo y datos  del kernel y de la aplicacion de usuario, queda en el usuario definir otras posibles regiones de cacheo.&lt;br /&gt;Si es posible saber cuales regiones de memoria son las mas accedidas , sera  posible optimizar el uso del cache del micro.&lt;br /&gt;Ya he subido el codigo al SVN , pero todavia me faltan las syscalls para el usuario que implementare en la unidad Memory.pas&lt;br /&gt;Saludos .&lt;br /&gt;Matias E. Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4203454736537571063?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4203454736537571063/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4203454736537571063' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4203454736537571063'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4203454736537571063'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/10/manejador-de-cache-del-procesador.html' title='Manejador de Cache del procesador'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7067043744517115622</id><published>2009-08-26T21:05:00.000-07:00</published><updated>2009-08-26T21:12:15.624-07:00</updated><title type='text'>Compilando Toro sobre Linux II</title><content type='html'>He subido al &lt;span style="font-weight: bold;"&gt;SVN&lt;/span&gt; las modificaciones al programa &lt;span style="font-weight: bold; font-style: italic;"&gt;Build&lt;/span&gt; para dar soporte a ejecutables en el formato&lt;span style="font-weight: bold; font-style: italic;"&gt; ELF&lt;/span&gt; y poder crear la imagen booteable desde Linux. &lt;span style="font-style: italic; font-weight: bold;"&gt;Build&lt;/span&gt; toma el archivo ejecutable(ya sea PECOFF o ELF) y lo convierte al fichero &lt;span style="font-weight: bold; font-style: italic;"&gt;ToroImage.img&lt;/span&gt;.&lt;br /&gt;Los pasos para la compilacion sobre Linux es :&lt;br /&gt;1 - Hacer un &lt;span style="font-style: italic; font-weight: bold;"&gt;UPDATE&lt;/span&gt; sobre la carpeta  SVN donde se encuentre el codigo de &lt;span style="font-weight: bold; font-style: italic;"&gt;TORO&lt;/span&gt;.&lt;br /&gt;2 - Ejecutar en la terminal  "&lt;span style="font-style: italic; font-weight: bold;"&gt;sh compile.sh&lt;/span&gt;"&lt;br /&gt;3 - Si la compilacion fue correcta el resultado es el fichero ToroImage.img para testear el sistema en una maquina virtual como &lt;span style="font-weight: bold; font-style: italic;"&gt;QEMU&lt;/span&gt;. Yo he realizado la compilacion usando fpc &lt;span style="font-weight: bold;"&gt;2.2.4&lt;/span&gt; for &lt;span style="font-weight: bold;"&gt;x86-64&lt;/span&gt; y funciono .&lt;br /&gt;Tal vez sea necesario editar el archivo &lt;span style="font-weight: bold; font-style: italic;"&gt;compile.sh&lt;/span&gt; para colocar las rutas a los ejecutables como &lt;span style="font-weight: bold; font-style: italic;"&gt;build&lt;/span&gt; y&lt;span style="font-weight: bold; font-style: italic;"&gt; fpc&lt;/span&gt; de forma correcta .&lt;br /&gt;Cualquier opinion estoy a la espera .&lt;br /&gt;&lt;br /&gt;Saludos .&lt;br /&gt;Matias Vara.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7067043744517115622?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7067043744517115622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7067043744517115622' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7067043744517115622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7067043744517115622'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/08/compilando-toro-sobre-linux-ii.html' title='Compilando Toro sobre Linux II'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-8372756545208360314</id><published>2009-08-23T14:26:00.000-07:00</published><updated>2009-08-23T14:27:10.148-07:00</updated><title type='text'>Compilando TORO sobre Linux .</title><content type='html'>He subido al SVN las modificaciones necesarias para compilar TORO sobre Linux , usando FPC 2.2.4 for x86_64 .  Al correr &lt;span style="font-style: italic;"&gt;compile.sh &lt;/span&gt;se compila el nucleo y se genera un ELF   , todavia me encuentro trabajando sobre el &lt;span style="font-style: italic;"&gt;Build&lt;/span&gt; para que pase del formato ELF a la imagen, tal como lo hace para ficheros PECOFF64.&lt;br /&gt;Saludos.  Matias Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-8372756545208360314?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/8372756545208360314/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=8372756545208360314' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/8372756545208360314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/8372756545208360314'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/08/compilando-toro-sobre-linux.html' title='Compilando TORO sobre Linux .'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-6846298741731120379</id><published>2009-08-10T18:43:00.000-07:00</published><updated>2009-08-10T18:52:39.674-07:00</updated><title type='text'>Primera implementacion del TCP-Stack con Multiplex IO al nivel del kernel</title><content type='html'>Como dice en el titulo , he subido la primera version de Stack TCP con sus Apis reescritas de forma de implementacion acceso a los socketes no-bloqueant y reducir el numero de cambios de contextos de forma drastica . Prometo liberar los Manuales de compilacion y programacion pronto.&lt;br /&gt;Saludos.&lt;br /&gt;Matias E. Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-6846298741731120379?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/6846298741731120379/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=6846298741731120379' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/6846298741731120379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/6846298741731120379'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/08/primera-implementacion-del-tcp-stack.html' title='Primera implementacion del TCP-Stack con Multiplex IO al nivel del kernel'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-2489439669092878014</id><published>2009-05-30T19:28:00.000-07:00</published><updated>2009-05-30T19:34:40.124-07:00</updated><title type='text'>Implementacion de Taskfreak!</title><content type='html'>He implementado el administrador de Tareas Taskfreak! que provee SourceForge. Alli he puesto todas las tareas que estoy realizando para el proyecto y cuales se estaran realizando proximamente, tambien informan el plazo de finalizacion y el porcentaje de realizacion .&lt;br /&gt;Saludos&lt;br /&gt;&lt;br /&gt;PD: El &lt;a href="http://apps.sourceforge.net/taskfreak/toro/"&gt;link&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-2489439669092878014?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/2489439669092878014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=2489439669092878014' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/2489439669092878014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/2489439669092878014'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/05/implementacion-de-taskfreak.html' title='Implementacion de Taskfreak!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-4864447441272793168</id><published>2009-05-19T19:22:00.000-07:00</published><updated>2009-05-19T19:28:41.275-07:00</updated><title type='text'>Multicore hecho!</title><content type='html'>He subido al SVN las ultima version de TORO. He agregado soporte para la deteccion de microprocesadores con mas un core.He testeado esta version sobre la arquitectura Intel x86-64 y ha funcionado muy bien.&lt;br /&gt;Se han solucionado gran cantidad de problemas en la unidad de Memoria  , y se ha reemplazado el mecanismo para el calculo de la memoria fisica disponible por la informacion obtenida a traves de la INT 15H.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-4864447441272793168?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/4864447441272793168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=4864447441272793168' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4864447441272793168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/4864447441272793168'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/05/multicore-hecho.html' title='Multicore hecho!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-7765194665279461317</id><published>2009-03-31T20:55:00.000-07:00</published><updated>2009-03-31T20:56:39.091-07:00</updated><title type='text'>Se buscan Comentarios!</title><content type='html'>Estoy reescribiendo los Manuales de compilacion y desarrollo sobre TORO , cualquier aporte sera muy util.&lt;br /&gt;Saludos .&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-7765194665279461317?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/7765194665279461317/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=7765194665279461317' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7765194665279461317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/7765194665279461317'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/03/se-buscan-comentarios.html' title='Se buscan Comentarios!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-3129304317418128800</id><published>2009-02-18T13:10:00.000-08:00</published><updated>2009-02-18T13:18:06.925-08:00</updated><title type='text'>Codigo de Toro subido al SVN de sourceforge</title><content type='html'>He subido la version con la que estoy trabajando al Repositorio SVN de Sourceforge.&lt;br /&gt;La idea es manterner lo mas actulizado posible el repositorio  para no tener que estar esperando un paquete durante un año , por ejempo .&lt;br /&gt;Se puede acceder desde la pagina de sf o desde este &lt;a href="http://toro.svn.sourceforge.net/viewvc/toro/"&gt;link &lt;/a&gt;.&lt;br /&gt;Saludos , Matias E. Vara.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-3129304317418128800?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/3129304317418128800/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=3129304317418128800' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3129304317418128800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/3129304317418128800'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2009/02/codigo-de-toro-subido-al-svn-de.html' title='Codigo de Toro subido al SVN de sourceforge'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-6010993930379896020</id><published>2008-07-13T15:54:00.001-07:00</published><updated>2008-07-13T16:03:12.957-07:00</updated><title type='text'>Compilando TORO con  FPC 2.2.3</title><content type='html'>He modificado la unidad system.pas para poder se compilada con FPC 2.2.3 partiendo de la RTL para win64 . Esta implementacion se vera en la proxima version.&lt;br /&gt;Saludos .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-6010993930379896020?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/6010993930379896020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=6010993930379896020' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/6010993930379896020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/6010993930379896020'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2008/07/compilando-toro-con-fpc-223.html' title='Compilando TORO con  FPC 2.2.3'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-2477416040715534732</id><published>2008-03-25T13:49:00.000-07:00</published><updated>2008-03-25T13:51:01.203-07:00</updated><title type='text'>Toro 0.03 esta listo!</title><content type='html'>Se ha implementado el Stack TCP-IP y se ha creado un driver para tarjetas de red ethernet ne2000 , tambien se han solucionado gran cantidad de bugs .&lt;br /&gt;Saludos Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-2477416040715534732?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/2477416040715534732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=2477416040715534732' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/2477416040715534732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/2477416040715534732'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2008/03/toro-003-esta-listo.html' title='Toro 0.03 esta listo!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5922856517110314738</id><published>2007-12-30T09:21:00.000-08:00</published><updated>2008-12-08T14:14:21.108-08:00</updated><title type='text'>Toro Habla!</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_F2PUAK0QAGQ/R3fUub-uceI/AAAAAAAAAA8/Qpx5wX6tCAs/s1600-h/telnettotoro.bmp"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_F2PUAK0QAGQ/R3fUub-uceI/AAAAAAAAAA8/Qpx5wX6tCAs/s320/telnettotoro.bmp" alt="" id="BLOGGER_PHOTO_ID_5149818593171370466" border="0" /&gt;&lt;/a&gt;Bueno luego de un gran periodo de inactividad debido a mis estudios he retomado el Stack TCP-IP , en el screenshot se puede ver a TORO respondiendo un telnet , ha sido una ardua tarea pero va encaminada , en muy poco tiempo tendre lista la nueva version .&lt;br /&gt;Un saludo Matias E. Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5922856517110314738?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5922856517110314738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5922856517110314738' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5922856517110314738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5922856517110314738'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/12/toro-habla.html' title='Toro Habla!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_F2PUAK0QAGQ/R3fUub-uceI/AAAAAAAAAA8/Qpx5wX6tCAs/s72-c/telnettotoro.bmp' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-8322361508778001504</id><published>2007-10-01T19:18:00.000-07:00</published><updated>2007-10-01T19:19:34.638-07:00</updated><title type='text'>Articulo sobre Sistemas Operativos</title><content type='html'>Aqui les dejo el &lt;a href="http://www.revista-sl.org/data/downloads/RevistaSL8.pdf"&gt;link&lt;/a&gt; a un articulo que he publicado en la Revista SL , espero sus comentarios ,&lt;br /&gt;Un saludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-8322361508778001504?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/8322361508778001504/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=8322361508778001504' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/8322361508778001504'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/8322361508778001504'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/10/articulo-sobre-sistemas-operativos.html' title='Articulo sobre Sistemas Operativos'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5258720910109746365</id><published>2007-07-16T09:01:00.000-07:00</published><updated>2007-07-16T09:05:03.742-07:00</updated><title type='text'>Trabajando con Stack TCP-IP</title><content type='html'>Hola, dejo este post para comentar por donde ando con TORO, ahora me encuentro desarrollando un driver para la placa de red ne2000 , tambien he desarrollado un Cache para la manipulacion de gran cantidad de paquetes , y me encuentro escribiendo los drivers para los protocolos del stack tcp-ip .&lt;br /&gt;Espero poder liberar todo el Stack  TCP-IP para la version 0.03&lt;br /&gt;, un saludo Matias E. Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5258720910109746365?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5258720910109746365/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5258720910109746365' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5258720910109746365'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5258720910109746365'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/07/trabajando-con-stack-tcp-ip.html' title='Trabajando con Stack TCP-IP'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-877366383890822798</id><published>2007-05-15T21:47:00.000-07:00</published><updated>2007-05-15T21:49:19.461-07:00</updated><title type='text'>Toro 0.02</title><content type='html'>La version 0.02 de Toro ya esta lista , implementa un Sistema de Archivo Virtual y drivers para discos ATA y EXT2 Filesystem. Es recomendable bajar la documentacion actualizada para su compilacion de &lt;a href="http://toro.sourceforge.net"&gt;http://toro.sourceforge.net&lt;/a&gt;&lt;br /&gt;Un saludo Matias Vara.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-877366383890822798?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/877366383890822798/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=877366383890822798' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/877366383890822798'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/877366383890822798'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/05/toro-002.html' title='Toro 0.02'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-5487890505050809944</id><published>2007-02-23T13:54:00.000-08:00</published><updated>2007-02-23T14:12:14.277-08:00</updated><title type='text'>Trabajando en el  Filesystem</title><content type='html'>Hola, dejo este post para comentar en que estoy trabajando . Me encuentro escribiendo los drivers para discos ATA con soporte de 8 unidades . En un futuro proximo lo actualizare para disco SATA con la controladora AHCI de Intel , de la cual es la unica que se encuentra informacion en la red.&lt;br /&gt;Por otro lado estoy escriiendo un Filesystem tipo el Virtual Filesystem y pienso crear un driver minimo para EXT2.&lt;br /&gt;Espero todo esto poder entregarlo en la proxima version .&lt;br /&gt;Un saludo Matias Vara.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-5487890505050809944?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/5487890505050809944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=5487890505050809944' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5487890505050809944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/5487890505050809944'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/02/trabajando-el-filesystem.html' title='Trabajando en el  Filesystem'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-116993378674530745</id><published>2007-01-27T13:25:00.000-08:00</published><updated>2007-01-27T13:36:26.756-08:00</updated><title type='text'>Toro 0.01 !</title><content type='html'>Bueno luego de 6 meses de trabajo renace TORO , en breve subire documentacion explicando paso a paso su compilacion  , las caracteristicas las pueden encontrar &lt;a href="http://sourceforge.net/project/shownotes.php?release_id=481398&amp;amp;group_id=109734"&gt;aqui&lt;/a&gt; .&lt;br /&gt;Un saludo Matias Vara.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-116993378674530745?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/116993378674530745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=116993378674530745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/116993378674530745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/116993378674530745'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/01/toro-001.html' title='Toro 0.01 !'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-116959697642333101</id><published>2007-01-23T16:00:00.000-08:00</published><updated>2007-01-24T15:14:29.060-08:00</updated><title type='text'>Algun Screen.</title><content type='html'>Aqui les dejo un ScreenShot de Toro 0.01 booteando sobre un AMD x86-64 con SMP en QEMU:&lt;br /&gt;&lt;a href="https://sourceforge.net/project/screenshots.php?group_id=109734&amp;ssid=51547"&gt;https://sourceforge.net/project/screenshots.php?group_id=109734&amp;amp;ssid=51547&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-116959697642333101?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/116959697642333101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=116959697642333101' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/116959697642333101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/116959697642333101'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2007/01/algun-screen.html' title='Algun Screen.'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-116553286357651002</id><published>2006-12-07T14:48:00.000-08:00</published><updated>2006-12-07T15:09:47.866-08:00</updated><title type='text'>Buenas Nuevas</title><content type='html'>Toro sigue vivo , silencio significa mucho trabajo ,supongo que en dos meses liberare un nuevo paquete , ya he portado gran parte del codigo de la RTL para Win32 como el driver de memoria , driver the threads , soporte para Multiprocesamiento paralelo (ya lo he emulado con bochs con hasta 8 procesadores) .&lt;br /&gt;La idea -repito- es poder dividir una aplicacion en miles de threads ejecutandose en paralelo , para eso se implemento un modelo de thread cooperativo , tambien se implementaron mejoras como cambios de contextos por software , no se utiliza la instruccion "lock" , etc .&lt;br /&gt;Todo incluido en una RTL para FPC .&lt;br /&gt;Un saludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-116553286357651002?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/116553286357651002/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=116553286357651002' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/116553286357651002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/116553286357651002'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2006/12/buenas-nuevas.html' title='Buenas Nuevas'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-115473637450310993</id><published>2006-08-04T17:05:00.000-07:00</published><updated>2006-08-04T17:07:57.586-07:00</updated><title type='text'>Toro rtl</title><content type='html'>Hola , bueno querria poder explicar un poco en que estoy trabajando en este momento , puesto que la direccion del proyecto se modifico bastante de la original .&lt;br /&gt;Bueno como sabran freepascal posee la unidad rtl que crea una capa de abstraccion entre el s.o. y el compilador con lo que hace que portar fpc a culaquier sistema resulte una tarea dentro de todo facil . La unidad rtl de la version 2.0.2 de fpc posee versiones para linux , win32 , unix , beos , etc , yo mismo he hecho una rtl para toro utilizando la version 1.0.6 de fpc , pero que resulta no compatible con la version 2.0.2 . Luego de este preambulo , les pasare a comer el rumbo de toro , estoy trabajando en una rtl para fpc 2.0.2 la cual posee incluida en la misma rtl todo el codigo del sistema operativo , en este caso Toro . Por lo tanto cuando conmpilas un prog utilizando esta nueva rtl se genera una ejecutable booteable en grub que incluye todo el kernel y el programa de usuario .Ustedes diran que ventaja trae aparejado esto para el usuario final , bueno el kernel tendra soporte para multiprocesadores , soporte para procesadores de 64 bits , stack tcp ip , y un monton de otras caracteristicas en cuanto a cambios de contextos , proteccion de exclusion mutua , tecnologia multitransport , etc . El programa de usuario tiene acceso a todas estas caractericas a traves de la rtl , y todos los recursos de la maquina a su alcance (hablamos de grandes maquinas) , no hay s.o. intermediario .Para una simple aplicacion pascal no hay mejora pero para servidores , programas de tiempo real y procesos que necesitan rapidas respuesta , se buscara ir por esos usuarios . Bueno me gustaria mucho que comenten hacerca de las utilidades que se le puedan dar a esto y sus dudas , un saludo Matias Vara .&lt;br /&gt;&lt;br /&gt;PD : Por supuesto que sera una ardua tarea , pero ya he comenzado .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-115473637450310993?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/115473637450310993/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=115473637450310993' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/115473637450310993'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/115473637450310993'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2006/08/toro-rtl.html' title='Toro rtl'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-114807794012877445</id><published>2006-05-19T15:27:00.000-07:00</published><updated>2006-05-23T16:10:42.210-07:00</updated><title type='text'>Toro 1.1.3!</title><content type='html'>Bueno aqui subo tal vez la ultima version de Toro para fpc 1.0.6 en la que estaba trabajando antes de virar rumbo a 64 bits . Esta cubre un gran cantidad de bugs referidos al fs y al tratamientos de los nombres de archivos .&lt;br /&gt;&lt;br /&gt;Un saludo Matias Vara .&lt;br /&gt;&lt;br /&gt;Aqui les dejo los links para bajar un version minimal de &lt;a href="http://prdownloads.sourceforge.net/toro/pp.zip?download"&gt;fpc 1.0.6&lt;/a&gt; y el linkeador &lt;a href="http://prdownloads.sourceforge.net/toro/ld.exe?download"&gt;ld&lt;/a&gt; necesario , este corre con cygwin 2.427 o superior  .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-114807794012877445?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/114807794012877445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=114807794012877445' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/114807794012877445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/114807794012877445'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2006/05/toro-113.html' title='Toro 1.1.3!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-114730284213787414</id><published>2006-05-10T16:00:00.000-07:00</published><updated>2006-05-10T16:15:17.493-07:00</updated><title type='text'>Rumbo de Toro</title><content type='html'>En este momento han surgido cosas que me han hecho virar el rumbo del proyecto Toro , por lo tanto no se como seguire con la distruibucion del codigo , los mantendre lo mas actualizado posible.&lt;br /&gt;Aqui citare a grandes rasgos los nuevas implementaciones a realizar en el futuro a largo plazo :&lt;br /&gt;- Traduccion de Toro a fpc 2.x.x&lt;br /&gt;- Portar toro 32 bits a 64 bits . Soporte Multicore y Multiprocesadores .&lt;br /&gt;- Implementacion de un stack TCP/IP&lt;br /&gt;- Creacion de drivers para discos SATA .&lt;br /&gt;&lt;br /&gt;Bueno a groso modo este sera el nuevo camino .&lt;br /&gt;&lt;br /&gt;Un saludo Matias E. Vara&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-114730284213787414?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/114730284213787414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=114730284213787414' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/114730284213787414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/114730284213787414'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2006/05/rumbo-de-toro.html' title='Rumbo de Toro'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-114031284760241175</id><published>2006-02-18T17:30:00.000-08:00</published><updated>2006-02-18T17:34:07.613-08:00</updated><title type='text'>Toro 1.1.2 !!</title><content type='html'>Bueno luego de casi 6 meses de no publicar nada , libero todo de golpe!  .&lt;br /&gt;&lt;br /&gt;He subido 4 nuevos paquetes  , los cuales pueden bajar de &lt;a href="http://toro.sourceforge.net/download.htm"&gt;aqui&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Aquí pasare a explicar cada uno :&lt;br /&gt;&lt;br /&gt;Toro-1.1.2-src.zip   y toro-1.1.2.img :&lt;br /&gt;&lt;br /&gt;Source de la nueva versión de Toro  , esta implementa las siguientes mejoras :&lt;br /&gt;&lt;br /&gt;-         Timers del kernel .&lt;br /&gt;-         Reescritura del planificador .&lt;br /&gt;-         Son escritas algunas llamadas al sistema faltantes en el VFS , y son solucionados gran cantidad de bugs .&lt;br /&gt;&lt;br /&gt;También subo la imagen de un disquete de 3 ½ para aquellos que no quieren tener que compilar todo el source .&lt;br /&gt;&lt;br /&gt;fpc-1.0.6-rtl-toro-bin   y   fpc-1.0.6-rtl-toro-src :&lt;br /&gt;&lt;br /&gt;Después de mucho trabajo porte la librería rtl de freepascal 1.0.6 para toro . Es bastante simple pero permite generar aplicaciones directamente desde FPC  ,  por ahora solo para la versión 1.0.6 .&lt;br /&gt;&lt;br /&gt;Incluyo los binarios compilados que deberan ser extraídos en fpc/units/target , donde target puede ser : win32 , go32v2  ,depende para el sistema que fue bajado  .&lt;br /&gt;Cuidado que los archivos son sobrescritos , por lo tanto ya no se podrá compilador sobre la plataforma anteriormente instalada   .&lt;br /&gt;&lt;br /&gt;Y también he subido los sources  , que deberan ser extraídos dentro de la estructura de directorios del source de freepascal en el directorio source/rtl/&lt;br /&gt;&lt;br /&gt;Gracias ha esto he reescrito las aplicaciones de /USR/TOOLS  , la shell la he hecho un poco mas “completa” , pero es bastante sencilla , espero que ahora alguien se anime y haga un shell como la gente .&lt;br /&gt;&lt;br /&gt;Espero que disfruten de todo esto , tanto como yo cuando lo escribí .&lt;br /&gt;&lt;br /&gt;Un saludo Matías Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-114031284760241175?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/114031284760241175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=114031284760241175' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/114031284760241175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/114031284760241175'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2006/02/toro-112.html' title='Toro 1.1.2 !!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-113814231054906099</id><published>2006-01-24T14:32:00.000-08:00</published><updated>2006-01-24T14:38:30.560-08:00</updated><title type='text'>Estado actual de TORO.</title><content type='html'>En este momento se esta optimizando todo el codigo de TORO  , se ha modificado la planificacion  ,  las  irq , se han implementado los timers del kernel , se han modificado el driver de fdc , entre otras cosas .&lt;br /&gt;&lt;br /&gt;Tambien se esta comenzado a portar FPC para TORO , lo que representara un paso muy importante puesto que la escritura de soft sera mucho mas facil .&lt;br /&gt;&lt;br /&gt;La nueva version estara , supongo , para los primeros dias de Marzo 06 .&lt;br /&gt;&lt;br /&gt;Un saludo  ,  Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-113814231054906099?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/113814231054906099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=113814231054906099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113814231054906099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113814231054906099'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2006/01/estado-actual-de-toro.html' title='Estado actual de TORO.'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-113564160311378757</id><published>2005-12-26T15:58:00.000-08:00</published><updated>2005-12-26T16:01:43.310-08:00</updated><title type='text'>Implementación de colas ligadas en Toro</title><content type='html'>Implementación de colas ligadas en Toro :&lt;br /&gt;&lt;br /&gt;Las colas ligadas son un método eficaz para mantener agrupados una cantidad ilimitada de elementos . En Toro son utilizadas para agrupar los procesos , los timers , los superbloques , los inodos , los buffers , etc. , se le ha dado gran cantida de uso .&lt;br /&gt;&lt;br /&gt;Podemos clasificarlas en dos tipo : simplemente ligadas o doblemente ligadas .&lt;br /&gt;&lt;br /&gt;Por lo general las estructuras que se encuentran en una cola simplemente ligada posee solo un campo que apunta a la siguiente estructura y la ultima de la cola posee este campo a un puntero nulo , es decir solo pueden ser recorridas en un solo sentido .&lt;br /&gt;A diferencia de estas , las doblemente ligadas posee dos campos una punteando a la siguiente estructura y otra a la anterior , pudiéndose así recorrerla en ambos sentidos y de manera cíclica .&lt;br /&gt;&lt;br /&gt;La principal diferencia es para què van a ser utilizada . Por un lado las simplemente ligadas posee un campo menos , es decir ocupan menos memoria , pero si en la cola se están agregando y quitando elementos continuamente se consume mucha cpu , porque por cada elemento que debo quitar debo recorrer toda la cola para encontrar el anterior! .&lt;br /&gt;Este problema se soluciona creando un nuevo campo apuntando al elemento anterior , así surgen las doblemente ligadas .&lt;br /&gt;Es por eso que las colas que mantiene a los procesos , inodos , timers ,etc. , son colas doblemente ligadas , mientras que las colas que mantiene a los buffers que deben ser escritos a disco se encuentran en colas simplemente ligadas , cada buffer es agregado al comienzo y cuando deben ser quitados por la llamada sync() , se recorre la lista desde el inicio sacando de a uno todos .&lt;br /&gt;&lt;br /&gt;Todo muy lindo , pero el hecho de que sean tan utilizadas hace necesarios procedimiento muy rápidos y eficientes , y este es el motivo del articulo .&lt;br /&gt;Lo que se trato de crear fue procedimientos generales para el tratamiento de colas ligadas , tal como lo hace linux , pero en freepascal .&lt;br /&gt;&lt;br /&gt;Todo el código del manejo de colas ligadas se encuentra en el archivo Include/Head/list.h&lt;br /&gt;&lt;br /&gt;Este como se ve no es una unidad sino solo un archivo que debe ser incluido en la unidad luego de IMPLEMENTATION&lt;br /&gt;&lt;br /&gt;Para que funcione deben ser declarados en la unidad cuatro símbolos ,de la manera tradicional , {$DEFINE Use_Tail} , estos son :&lt;br /&gt;&lt;br /&gt;Use_Tail : le indica al compilador que el código de manejo de las lista debe ser incluido&lt;br /&gt;&lt;br /&gt;nodo_struct : Debe contener la estructura de los elementos dentro de la cola , por ejemplo para una cola ligada de procesos valdría :&lt;br /&gt;&lt;br /&gt;{$DEFINE nodo_struct = p_tarea_struc}&lt;br /&gt;&lt;br /&gt;Siempre se considera a nodo_struct como un puntero .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;nodo_tail : Puntea al elemento cabecera de la lista , puede estar definido o no .&lt;br /&gt;&lt;br /&gt;next_nodo y prev_nodo : Estas estructuras poseen los campo dentro de los elementos de la lista que puntean al siguiente elemento y al anterior , por ejemplo para el caso de cola de procesos , estos valdrían :&lt;br /&gt;&lt;br /&gt;{$DEFINE next_nodo = next_tarea }&lt;br /&gt;{$DEFINE prev_nodo = prev_tarea}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El procedimiento para encolar un elemento , si se ha definido nodo_tail :&lt;br /&gt;&lt;br /&gt;procedure Push_Node(Nodo : nodo_struct) ; inline ;&lt;br /&gt;&lt;br /&gt;o en el caso de que no se haya definido nodo_tail :&lt;br /&gt;&lt;br /&gt;procedure Push_Node(Nodo : nodo_struct;var Nodo_Tail : nodo_struct);inline;&lt;br /&gt;&lt;br /&gt;La diferencia de que se defina o no nodo_tail , es la capacidad de trabajar en una unidad con mas de una cola ligada , puesto que de lo contrario se definiría un único valor para el símbolo nodo_tail , con esto se especifica el nodo cabecera de la cola en cada llamada .&lt;br /&gt;&lt;br /&gt;Siempre el elemento es agregado al comienzo de la cola .&lt;br /&gt;&lt;br /&gt;Ojo! nodo_tail no es una estructura sino solo un puntero al primer elemento de la cola .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para quitar un elemento sucede lo mismo :&lt;br /&gt;&lt;br /&gt;El procedimiento para quitar un elemento , si se ha definido nodo_tail :&lt;br /&gt;&lt;br /&gt;procedure Pop_Node(Nodo : nodo_struct );inline;&lt;br /&gt;&lt;br /&gt;o en el caso de que no se haya definido nodo_tail :&lt;br /&gt;&lt;br /&gt;procedure Pop_Node(Nodo : nodo_struct;var Nodo_tail : nodo_struct);inline;&lt;br /&gt;&lt;br /&gt;Como se ve todos los procedimiento son declarados como inline para acelerar su ejecución&lt;br /&gt;&lt;br /&gt;Para hacer un poco mas “entendible” el código suelo definir otro símbolo que oculte a estos procedimientos :&lt;br /&gt;&lt;br /&gt;{$DEFINE push_buffer = push_node }&lt;br /&gt;{$DEFINE pop_buffer = pop_node }&lt;br /&gt;&lt;br /&gt;Lo bueno de esto que definiendo un par de símbolos ya tenes todo el código para la manipulación de listas ligadas sin importar las estructuras , campos , etc .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para el caso de colas simplemente ligadas , se debe definir el símbolo Use_Simple_Tail&lt;br /&gt;para comenzar a trabajar con ella .&lt;br /&gt;Igual que en el caso de las doblemente ligadas se cuenta con los procedimientos :&lt;br /&gt;&lt;br /&gt;para agregar un elemento :&lt;br /&gt;&lt;br /&gt;procedure Push_Snode (Nodo , sNodo_Tail : snode_struct);inline;&lt;br /&gt;&lt;br /&gt;y para quitar un elemento :&lt;br /&gt;&lt;br /&gt;procedure Pop_Snode (Nodo,sNodo_Tail : snode_struct);inline;&lt;br /&gt;&lt;br /&gt;Ahora los símbolos nodo_struct y nodo_tail pasan a llamarse snode_tail y snode_struct respectivamente&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que les haya servido este pequeño articulo .&lt;br /&gt;Una saludo&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;Toro.sourceforge.net&lt;br /&gt;matiasvara@yahoo.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-113564160311378757?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/113564160311378757/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=113564160311378757' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113564160311378757'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113564160311378757'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/12/implementacin-de-colas-ligadas-en-toro.html' title='Implementación de colas ligadas en Toro'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-113131881459868278</id><published>2005-11-06T15:11:00.000-08:00</published><updated>2005-11-06T15:13:34.610-08:00</updated><title type='text'>Generando un kernel con FreePascal</title><content type='html'>Bueno tal  vez el titulo no sea muy descriptivo pero básicamente lo que tratare de explicar es como generar un ejecutable en freepascal sin que este utilice llamadas al sistema   , llevando obviamente a la caída del sistema .&lt;br /&gt;&lt;br /&gt;A la hora de comenzar a escribir un S.O. la principal duda q se me planteo fue que compilador iba a utilizar  . Elegí Freepascal  , porque además de gustarme el lenguaje  me era fácil portarlo  puesto que es independiente  del S.O. sobre el cual corra , esto no significa que no utilice llamadas al sistema sino que posee un capa de abstracción  de llamadas primitivas las cuales son adaptadas al S.O. sobre el cual corra   , es por eso que al compilador no le interesa el S.O. sobre el que se ejecuta .&lt;br /&gt;&lt;br /&gt;En el caso de la versión 1.0.6 de FP utilizando el extensor go32v2 el tema es bastante fácil  . Cuando se utilizan procedimientos  y funciones dependientes del S.O. como por ejemplo writeln , write , read  ,etc . ( no así sizeof () , len() , etc . ) el compilador enlazada nuestro ejecutable al archivo objeto donde se encuentran estas llamadas , básicamente lo que se hizo en Toro es capturar estas llamadas , creando el archivo Lib/fpclib/fpclib.pas con estas llamadas y linkeandolo junto con todo el kernel  .&lt;br /&gt;Por ejemplo  :&lt;br /&gt;&lt;br /&gt; llamada muy utilizada para el tratamiento de strings&lt;br /&gt;&lt;br /&gt;procedure int_strconcat(s1,s2:pointer);[public,alias:'FPC_SHORTSTR_CONCAT'];&lt;br /&gt;var&lt;br /&gt;s1l, s2l : byte;&lt;br /&gt;type&lt;br /&gt;pstring = ^string;&lt;br /&gt;begin&lt;br /&gt;if (s1=nil) or (s2=nil) then&lt;br /&gt;exit;&lt;br /&gt;s1l:=length(pstring(s1)^);&lt;br /&gt;s2l:=length(pstring(s2)^);&lt;br /&gt;if s1l+s2l&gt;255 then&lt;br /&gt;s1l:=255-s2l;&lt;br /&gt;move(pstring(s1)^[1],pstring(s2)^[s2l+1],s1l);&lt;br /&gt;pstring(s2)^[0]:=chr(s1l+s2l);&lt;br /&gt;end;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;También se podría haber linkeado directamente el archivo objeto de FP donde se encontrase la llamada , pero haría crecer el kernel enormemente!!! .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En las  unidades mientras no se utilicen llamadas que depende del S.O. o que provengan de unidades externas no hay problema  ,  el compilador no realizara llamadas al sistema .&lt;br /&gt;La cosa cambia con un ejecutable . Cuando se compila el archivo kernel/kernel.pas   , este ya no es una unidad sino que es un programa  , para volverlo “limpio” de llamadas al sistema lo que se hace es simplemente quitarlas del código assembler :&lt;br /&gt;&lt;br /&gt;Extracto del archivo /kernel/Makefile .&lt;br /&gt;&lt;br /&gt;            $(FPC) $(FPC_FLAGS) kernel.pas&lt;br /&gt;&lt;br /&gt;            $(GREP) -iv "INIT$$SYSTEM" kernel.s &gt; kernel.tmq&lt;br /&gt;            $(GREP) -iv "FPC_INITIALIZEUNITS" kernel.tmq &gt; kernel.tmp&lt;br /&gt;            $(GREP) -iv "FPC_DO_EXIT" kernel.tmp &gt; kernel.kkk&lt;br /&gt;            $(GREP) -iv "OBJPAS" kernel.kkk &gt; kernel.s&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Estas son los símbolos que deben ser retirados  y que llevan a la caída del kernel cuando bootea ( a la caída me refiero a una excepción , muy común la 13 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Una vez  compilados todos los archivos objetos son linkeados con ld   ,  puede pasar que tire errores de símbolos desconocidos  , es decir hay funciones  o procedimiento que están llamando a otros que no se encuentran en los archivos objetos linkeados  . Lo mas posible es que haya errores en el tipeado de nombres ,  o que el head de la función no haya sido declara como publica . Si todo esto no es correcto habría que ver si es una llamada a librerías del compilador , si es así   , se debería buscar el procedimiento o función en el código de FP , copiarlo al archivo lib/fpclib/fpclib.pas   y declararlo como publico con el alias devuelto como error  en ld  .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;FPC 2.0.0  sobre win32 y linux :&lt;br /&gt;&lt;br /&gt;Sobre estas plataformas la cosa no me resulto fácil  , lamento informa que no he llegado a una versión booteable del kernel de toro compilado sobre win32  , es por eso que las distribuciones  se harán por ahora para go32v2 y para linux , o tal ves solo para linux puesto que se dejaron producir versiones  de FPC para DOS .&lt;br /&gt;&lt;br /&gt;Para  el caso de FPC 2.0.0 sobre linux  , al compilar el archivo kernel/kernel.pas solo se quita el símbolo :&lt;br /&gt;&lt;br /&gt;$(GREP) -i 'FPC_INITIALIZEUNITS' -v kernel.s &gt; kernel.q &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para el caso de llamadas al sistema lo que opte hacer ahora fue directamente el linkeo de los archivos objeto que contienen las llamadas utilizadas por el compilador estas son :&lt;br /&gt;&lt;br /&gt;/usr/lib/fpc/2.0.0/units/i386-linux/rtl/prt0.o&lt;br /&gt;/usr/lib/fpc/2.0.0/units/i386-linux/rtl/system.o&lt;br /&gt;/usr/lib/fpc/2.0.0/units/i386-linux/rtl/objpas.o&lt;br /&gt;&lt;br /&gt;Lo que hace es incrementar enormemente el archivo toro-1.1  , que posee casi el triple del mismo archivo generado con el FPC para DOS .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;La unidad Lib/fpclib/fpclib.pas deja de utilizarse para el FPC sobre linux . Por supuesto , posiblemente dentro de estos archivos objetos hayan funciones que realicen llamadas al sistema , pero no causaran problemas mientras no se las llame :)  .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Espero que este articulo les sirva para saber como se  puede generar un ejecutable totalmente booteable (por ejemplo un elf para grub o un binario para un booteador propio)  sin que posibles llamadas del compilador lleven a excepciones no deseadas .&lt;br /&gt;&lt;br /&gt;Aclaración! si el elf generado va a ser utilizado por un booteador como grub tiene que ser creado bajo la norma multiboot sino grub no podrá levantarlo  , toro fue creado bajo ese Standard  , en próximos documentos describiré como hacer un elf que pueda ser levantado con grub .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Matias Vara&lt;br /&gt;Toro.sourceforge.net&lt;br /&gt;matiasvara@yahoo.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-113131881459868278?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/113131881459868278/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=113131881459868278' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113131881459868278'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113131881459868278'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/11/generando-un-kernel-con-freepascal.html' title='Generando un kernel con FreePascal'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-113088952616597449</id><published>2005-11-01T15:57:00.000-08:00</published><updated>2005-11-01T15:58:46.166-08:00</updated><title type='text'>Compilando el kernel de Toro – 1.1</title><content type='html'>Este procedimiento es aplicable  a partir de la versión 1.1 de Toro .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Una vez obtenido el paquete zip de la versión de Toro debe ser extraído sobre un directorio cualquiera o bien sobre un disket sobre el cual previamente se debe haber instalado grub . En el raíz del disket deben figurar tres directorio : usr , bin  y boot , para que grub pueda bootear .&lt;br /&gt;&lt;br /&gt;Para comenzar la compilación se debe  modificar el archivo /usr/toro-1.1/make.rules completando las variables de make con sus ubicaciones correctas .&lt;br /&gt;&lt;br /&gt;El siguiente paso es hacer un make sobre el directorio /usr/toro-1.1/ y listo! , si todo resulta bien será generado el archivo elf ejecutable toro-1.1 y se moverá al directorio /boot para ser levantado por grub durante el booteo  .&lt;br /&gt;&lt;br /&gt;También deberán ser compiladas la utilidades que se encuentran en el directorio /usr/tools realizando un make en cada directorio  y los ejecutables serán movidos al directorio /bin donde se encuentran todos los binarios  .&lt;br /&gt;&lt;br /&gt;Una vez tenido compilado correctamente Toro sobre el disket podrá ser booteado bien sobre un emulador o directamente sobre la maquina .&lt;br /&gt;&lt;br /&gt;También pude ser compilado sobre linux cualquiera sea el booteador instalado mientras levante el elf de Toro , pero de todos modos en este caso también Toro buscara la shell en la disketera . &lt;br /&gt;&lt;br /&gt;En próximas versión Toro podrá bootear sobre discos duros o cualquier dispositivo  siempre y cuando tenga los drivers requeridos .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Matias E. Vara&lt;br /&gt;Toro.sourceforge.net&lt;br /&gt;matiasvara@yahoo.com&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-113088952616597449?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/113088952616597449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=113088952616597449' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113088952616597449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113088952616597449'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/11/compilando-el-kernel-de-toro-11.html' title='Compilando el kernel de Toro – 1.1'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-113088914641214106</id><published>2005-11-01T15:51:00.000-08:00</published><updated>2005-11-01T15:52:26.413-08:00</updated><title type='text'>Nuevos posteos</title><content type='html'>Ire posteando los documentos que se encontraban en papers y otros docuementos de como programar sobre , etc . Espero que les sea interesante . Un sa ludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-113088914641214106?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/113088914641214106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=113088914641214106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113088914641214106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/113088914641214106'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/11/nuevos-posteos.html' title='Nuevos posteos'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-112907464519432470</id><published>2005-10-11T16:45:00.000-07:00</published><updated>2005-10-11T16:50:45.200-07:00</updated><title type='text'>Trabajando en la version 1.1.1</title><content type='html'>Estoy trabajando en volver alta mente estable la version 1.1  , esta nueva version no incluira nuevas implementacion  solo sera muy estable . Espero que me comenten los bug que encontraron en la version 1.1  y asi podre depurarla bien .&lt;br /&gt;Un saludo Matias Vara .&lt;br /&gt;&lt;br /&gt;Pd : Ahora puede postear cualquiera asi espero sus comentarios .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-112907464519432470?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/112907464519432470/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=112907464519432470' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112907464519432470'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112907464519432470'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/10/trabajando-en-la-version-111.html' title='Trabajando en la version 1.1.1'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-112682551352412710</id><published>2005-09-15T15:52:00.000-07:00</published><updated>2005-09-15T16:05:13.526-07:00</updated><title type='text'>Bug en el paquete de la version 1.1</title><content type='html'>He encontrado un error en el codigo de la version 1.1  , este se encuentra en el archivo toro-1.1/filesystem/exec.pas , el error se encuentra en la declaracion de la funcion Sys_Exec  , esta deveria ser  : [public , alias : 'SYS_EXEC'] , en vez de 'SYS_EXE'  , Esta se encuentra tanto en el paquete para go32v2 como para el de linux .&lt;br /&gt;Un saludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-112682551352412710?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/112682551352412710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=112682551352412710' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112682551352412710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112682551352412710'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/09/bug-en-el-paquete-de-la-version-11.html' title='Bug en el paquete de la version 1.1'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-112450154897972617</id><published>2005-08-19T18:32:00.000-07:00</published><updated>2005-08-19T18:32:28.983-07:00</updated><title type='text'>Toro compilado sobre fpc-linux</title><content type='html'>Ya esta disponible el paquete .zip te toro-1.1 para ser compilado sobre la utlima version de fpc sobre linux .&lt;br /&gt;Un saludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-112450154897972617?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/112450154897972617/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=112450154897972617' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112450154897972617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112450154897972617'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/08/toro-compilado-sobre-fpc-linux.html' title='Toro compilado sobre fpc-linux'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-112294689317169490</id><published>2005-08-01T18:37:00.000-07:00</published><updated>2005-08-01T18:41:33.176-07:00</updated><title type='text'>Recien salido del horno Toro 1.1!!</title><content type='html'>Despues de mucho trabajo ya se encuentra la version 1.1 de Toro . Esta fue distribuda de dos formas un paquete zip con todo el codigo y listo para ser compilado; y la imagen de un disket de 3 1/2 listo para ser ejecutado   . Bueno espero que la pruben y me den sus comentarios . Esta version fue compilada con la version de FPC para go32v2  , puesto que me esta trayendo dolor de cabeza compilarlo con la version para win32 .&lt;br /&gt;Un saludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-112294689317169490?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/112294689317169490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=112294689317169490' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112294689317169490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112294689317169490'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/08/recien-salido-del-horno-toro-11.html' title='Recien salido del horno Toro 1.1!!'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-14499482.post-112155521573719420</id><published>2005-07-16T15:52:00.000-07:00</published><updated>2005-07-16T16:09:33.223-07:00</updated><title type='text'>Implementaciones de Toro 1.1</title><content type='html'>Aunque la version de Toro 1.1 todavia no ha sido publicada el principal motivo es la gran cantidad de cambios que esta presenta , a continuacion se citaran algunas :&lt;br /&gt;&lt;br /&gt;- Implementacion del VFS .&lt;br /&gt;- Se deja de utilizar el torofs para implementar driver para fat12fs .&lt;br /&gt;- Soporte multiboot , toro es booteable sobre grub .&lt;br /&gt;- Reescritura de la unidad dma.pas .Creacion de una pila con paginas para dma .&lt;br /&gt;- Reserva de areas de memoria para io con dispositivos hard.&lt;br /&gt;- Reescritura de la unidad scheduler.pas , Implementacion de los algoritmos RR y FIFO en tiempo real .&lt;br /&gt;- Reescritura de la unidad signal.pas&lt;br /&gt;Y algunas cosas mas&lt;br /&gt;&lt;br /&gt;Es por eso que mencionar una fecha es imposible .&lt;br /&gt;Un saludo Matias Vara .&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/14499482-112155521573719420?l=torokernel.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://torokernel.blogspot.com/feeds/112155521573719420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=14499482&amp;postID=112155521573719420' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112155521573719420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/14499482/posts/default/112155521573719420'/><link rel='alternate' type='text/html' href='http://torokernel.blogspot.com/2005/07/implementaciones-de-toro-11.html' title='Implementaciones de Toro 1.1'/><author><name>Matias E. Vara</name><uri>http://www.blogger.com/profile/09517270768003489287</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/-884WGOqUZeM/TubPZzbUhCI/AAAAAAAAAOo/DKqg4Sh8-48/s220/01342b8.jpg'/></author><thr:total>2</thr:total></entry></feed>
