<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://msmvps.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Daniel Martín's blog : Historia</title><link>http://msmvps.com/blogs/dmartin/archive/tags/Historia/default.aspx</link><description>Tags: Historia</description><dc:language>en</dc:language><generator>CommunityServer 2008.5 SP2 (Build: 40407.4157)</generator><item><title>¿Qué hay detrás del mensaje "Win 16 Subsystem no tiene suficientes recursos..."?</title><link>http://msmvps.com/blogs/dmartin/archive/2008/11/06/191-qu-233-hay-detr-225-s-del-mensaje-quot-win-16-subsystem-no-tiene-suficientes-recursos-quot.aspx</link><pubDate>Thu, 06 Nov 2008 20:16:00 GMT</pubDate><guid isPermaLink="false">d67277c4-116b-43f1-b688-e9ef184ea916:1653311</guid><dc:creator>dmartin</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/rsscomments.aspx?PostID=1653311</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://msmvps.com/blogs/dmartin/commentapi.aspx?PostID=1653311</wfw:comment><comments>http://msmvps.com/blogs/dmartin/archive/2008/11/06/191-qu-233-hay-detr-225-s-del-mensaje-quot-win-16-subsystem-no-tiene-suficientes-recursos-quot.aspx#comments</comments><description>&lt;p&gt;Si usa Windows XP es posible que en alguna ocasi&amp;oacute;n se haya encontrado con el siguiente mensaje de aviso:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Win 16 Subsystem no tiene suficientes recursos para que contin&amp;uacute;e ejecut&amp;aacute;ndose. Haga clic en Aceptar, cierre sus aplicaciones y reinicie su equipo.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;iquest;Qu&amp;eacute; quiere decir exactamente este mensaje? B&amp;aacute;sicamente, es la consecuencia de una desacertada&amp;nbsp;decisi&amp;oacute;n de dise&amp;ntilde;o que Microsoft tom&amp;oacute; hace d&amp;eacute;cadas y&amp;nbsp;que&amp;nbsp;provoc&amp;oacute; una serie de fallos&amp;nbsp;descubiertos&amp;nbsp;poco tiempo antes de la salida al mercado de Windows XP. Este art&amp;iacute;culo indagar&amp;aacute; un poco en este tema tan curioso.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un poco de historia&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Windows incorpora desde sus comienzos una interfaz que permite a los programadores dise&amp;ntilde;ar elementos gr&amp;aacute;ficos para sus aplicaciones. Esta interfaz recibe el nombre de &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Graphics_Device_Interface"&gt;GDI&lt;/a&gt; (&lt;em&gt;Graphics Device Interface&lt;/em&gt;). Ya desde Windows 3.1, Microsoft supuso que GDI solamente podr&amp;iacute;a generar &lt;em&gt;handles&lt;/em&gt; de tama&amp;ntilde;o menor de 16 K. En aquellos tiempos, los &lt;em&gt;handles&lt;/em&gt;&amp;nbsp;se implementaban en el mont&amp;oacute;n (&lt;em&gt;heap&lt;/em&gt;) de GDI y estaban limitados a 14 de los 16 bits posibles. Es decir, los dos &amp;uacute;ltimos bits estaban reservados (el &amp;uacute;ltimo bit siempre era cero porque las direcciones de memoria ten&amp;iacute;an que ser pares). Con la llegada de los 32 bits, lleg&amp;oacute; GDI32 y con &amp;eacute;l los &lt;em&gt;handles&lt;/em&gt; pasaron a ocupar una palabra de longitud: La mitad inferior conten&amp;iacute;a el valor en s&amp;iacute; y la mitad superior una serie de bits para dar &lt;a target="_blank" href="http://support.microsoft.com/kb/94917/en-us"&gt;unicidad&lt;/a&gt; al &lt;em&gt;handle&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Como supongo que ya sabr&amp;aacute;, los sistemas operativos Windows de 32 bits incorporan un subsistema de 16 bits encargado de hacer funcionar aplicaciones antiguas de 16 bits. Este subsistema recibe el nombre de WoW (&lt;em&gt;Windows on Windows&lt;/em&gt;). Obviamente, dicho subsistema tiene que tener alguna manera de convertir un &lt;em&gt;handle&lt;/em&gt; GDI de&amp;nbsp;32 bits a uno de&amp;nbsp;16 bits y viceversa. Hasta la llegada de&amp;nbsp;Windows XP lo que se hab&amp;iacute;a venido haciendo es simplemente descartar la mitad superior, quedarse con la mitad inferior y desplazarla dos posiciones hacia la izquierda. Como los &lt;em&gt;handles&lt;/em&gt; eran menores de 16 K, el desplazamiento no supon&amp;iacute;a p&amp;eacute;rdida de informaci&amp;oacute;n y todo funcionaba a pedir de boca... hasta que lleg&amp;oacute; Windows XP.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Con Windows XP empezaron los problemas&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Con la llegada de Windows XP, surgi&amp;oacute; la necesidad de tener&amp;nbsp;&lt;em&gt;handles&lt;/em&gt; GDI de tama&amp;ntilde;o superior a 16 K. Por este motivo, el equipo de GDI decidi&amp;oacute; utilizar completamente los 16 bits de la parte inferior del &lt;em&gt;handle&lt;/em&gt; (recuerde que hasta entonces solo se usaban 14 bits). El problema, como puede empezar a vislumbrar, suced&amp;iacute;a cuando un &lt;em&gt;handle&lt;/em&gt; de tama&amp;ntilde;o &lt;em&gt;mayor de 16 K&lt;/em&gt; ten&amp;iacute;a que ser convertido por la m&amp;aacute;quina virtual de 16 bits. Al hacer el desplazamiento de los bits, ya s&amp;iacute; se perd&amp;iacute;a informaci&amp;oacute;n, y los efectos negativos no tardaron en aparecer.&lt;/p&gt;
&lt;p&gt;Este problema se descubri&amp;oacute; en una fase muy tard&amp;iacute;a de la &lt;em&gt;beta&lt;/em&gt; de XP, por lo que Microsoft no tuvo otra opci&amp;oacute;n que implementar r&amp;aacute;pidamente&amp;nbsp;una soluci&amp;oacute;n&amp;nbsp;temporal:&amp;nbsp;Concretamente decidi&amp;oacute; que, antes de convertir,&amp;nbsp;se&amp;nbsp;comprobara el tama&amp;ntilde;o del &lt;em&gt;handle&lt;/em&gt;; si &amp;eacute;ste fuese superior a 16 K, se mostrar&amp;iacute;a el mensaje de aviso del principio de este art&amp;iacute;culo y se finalizar&amp;iacute;a la ejecuci&amp;oacute;n de la m&amp;aacute;quina virtual de 16 bits. La soluci&amp;oacute;n adoptada en Windows Vista y Windows Server 2008, ya con tiempo suficiente para comprobarla exhaustivamente, consiste en una tabla de correspondencias entre &lt;em&gt;handles&lt;/em&gt; de 32 bits&amp;nbsp;y &lt;em&gt;handles&lt;/em&gt; de 16 bits.&lt;/p&gt;
&lt;p&gt;Es curioso ver que una soluci&amp;oacute;n&amp;nbsp;v&amp;aacute;lida durante un determinado contexto temporal&amp;nbsp;(desplazamiento de bits para convertir &lt;em&gt;handles&lt;/em&gt; de 32 bits a 16 bits, y viceversa) puede ser totalmente err&amp;oacute;nea en el momento que&amp;nbsp;se introduzca alg&amp;uacute;n tipo de &amp;quot;ampliaci&amp;oacute;n&amp;quot; con la que no se contaba en ese momento. La implementaci&amp;oacute;n desde un principio de la tabla de correspondencias habr&amp;iacute;a ahorrado un buen n&amp;uacute;mero de &lt;a target="_blank" href="http://www.google.com/search?hl=en&amp;amp;q=%22The+Win+16+Subsystem+has+insufficient+resources+to+continue+running%22"&gt;usuarios disgustados&lt;/a&gt; por la soluci&amp;oacute;n temporal.&lt;/p&gt;
&lt;p&gt;Ya como curiosidad final,&amp;nbsp;y esto ya es m&amp;aacute;s una opini&amp;oacute;n personal,&amp;nbsp;si se da cuenta,&amp;nbsp;la cadena de texto en espa&amp;ntilde;ol contiene la nomenclatura inglesa (&amp;quot;Win 16 Subsystem&amp;quot;), cuando el resto de cadenas de Wow32.dll que hacen referencia a este concepto&amp;nbsp;usan su acertada traducci&amp;oacute;n al espa&amp;ntilde;ol, &amp;quot;Subsistema Windows de 16 bits&amp;quot;. &amp;Eacute;sta podr&amp;iacute;a ser otra prueba m&amp;aacute;s de que la implementaci&amp;oacute;n de esta soluci&amp;oacute;n temporal lleg&amp;oacute; muy, pero que muy tarde en el ciclo de desarrollo de Windows XP.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://msmvps.com/aggbug.aspx?PostID=1653311" width="1" height="1"&gt;</description><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Curiosidades/default.aspx">Curiosidades</category><category domain="http://msmvps.com/blogs/dmartin/archive/tags/Historia/default.aspx">Historia</category></item></channel></rss>