<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://windowstecnico.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>Windows Técnico : Usabilidad, Wait Chain</title><link>http://windowstecnico.com/archive/tags/Usabilidad/Wait+Chain/default.aspx</link><description>Etiquetas: Usabilidad, Wait Chain</description><dc:language /><generator>CommunityServer 2008.5 (Build: 30929.2835)</generator><item><title>Windows 7 y Wait Chain Traversal</title><link>http://windowstecnico.com/archive/2009/06/02/windows-7-y-wait-chain-traversal.aspx</link><pubDate>Tue, 02 Jun 2009 16:46:46 GMT</pubDate><guid isPermaLink="false">f5fee4ed-c2ed-43f2-a57e-69c2e2dfbdde:293</guid><dc:creator>Pedro Laguna</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://windowstecnico.com/rsscomments.aspx?PostID=293</wfw:commentRss><comments>http://windowstecnico.com/archive/2009/06/02/windows-7-y-wait-chain-traversal.aspx#comments</comments><description>&lt;p align="justify"&gt;Hoy nos vamos a meter un poco en temas menos estéticos y efectistas de Windows 7 y vamos a comentar una nueva característica presente desde Windows Vista pero que ahora toma mayor protagonismo facilitando en esta nueva versión de Windows su uso.&lt;/p&gt;  &lt;p align="justify"&gt;Desde Windows Vista incorpora Microsoft a su sistema operativo una característica llamada &lt;a href="http://msdn.microsoft.com/en-us/library/ms681622.aspx"&gt;Wait Chain Traversal&lt;/a&gt;. Esta característica nos permite usar un programa debugger para conocer cuáles son los motivos por los cuales un proceso está bloqueado.&lt;/p&gt;  &lt;p align="justify"&gt;A veces un programa lanza varios hilos. Estos hilos pueden llegar a necesitar la información que otro posee y el otro necesita que el anterior le pase algún parámetro para poder trabajar. En estos casos (y en otro tipo de situaciones) se puede producir un interbloqueo. Esto hará que los programas se queden como congelados esperando a que el conflicto se resuelva (y esto, evidentemente, no va a suceder).&lt;/p&gt;  &lt;p align="justify"&gt;Para conocer los motivos por los cuales un programa está parado o simplemente para ver cuál es la lista de procesos que ha lanzado un programa para ver cuál es el proceso que está tardando más tiempo en completarse, existe en Windows 7 una nueva ventana que nos proporcionara esta información.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_32808552.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_thumb_5F00_37EEF5F6.png" width="306" height="174" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Esta ventana forma parte del genial &lt;a href="http://www.windowstecnico.com/archive/2009/01/15/mejoras-en-el-monitor-de-recursos-en-windows-7.aspx"&gt;monitor de recursos que incorpora Windows 7&lt;/a&gt; y del que ya hablo hace tiempo nuestro compañero &lt;a href="http://www.saenzguijarro.com/"&gt;Joshua Sáenz&lt;/a&gt;. Como es tan complejo y tiene tanta información aun nos ocultaba una sorpresa. Un menú contextual sobre cada proceso con la opción de ver la cadena de espera de un proceso.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_019DCDE7.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_thumb_5F00_584685E8.png" width="431" height="330" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;En la captura anterior se puede observar como hemos capturado un proceso de un instalador que ha ejecutado varios hilos para realizar las acciones asociadas a la instalación. Desde aquí podríamos seleccionar uno de los procesos y detenerlo o simplemente ver el PID asociado a este proceso y, suponiendo que está bloqueado, volcar la memoria asociada y analizarlo con WinDBG.&lt;/p&gt;  &lt;p align="justify"&gt;Para probar distintos entornos existe un ejemplo creado por &lt;a href="http://www.wintellect.com/CS/blogs/jrobbins/default.aspx"&gt;John Robbins&lt;/a&gt; llamado &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163395.aspx"&gt;Bugslayer&lt;/a&gt;. Este se compone de dos aplicaciones, una programada en C# para analizar la Wait Chain Traversal y otra en C++ para provocar bloqueos entre hilos. En este caso vamos a usar esta segunda para analizar cómo se comporta el monitor de recursos de Windows 7.&lt;/p&gt;  &lt;p align="justify"&gt;La aplicación (llamada apropiadamente &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc164469.aspx?code=true&amp;amp;level=root%2cDead"&gt;Dead&lt;/a&gt;) permite bloquear la propia aplicación de distintas maneras, pero nosotros aquí nos vamos a decantar por empezar haciendo que nuestra aplicación quede bloqueada esperando a que responda el proceso explorer.exe&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_75D860E7.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_thumb_5F00_1E471D2F.png" width="681" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Si accedemos ahora al monitor de recursos y analizamos la cadena de espera de Dead.exe tenemos que el proceso está esperando a que explorer.exe le devuelva el control. Esto, evidentemente, nunca va a pasar, pero el sistema operativo no puede saberlo.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_0F4FC848.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_thumb_5F00_25C266CF.png" width="431" height="330" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Otro ejemplo de cómo puede quedar bloqueado un programa y Windows 7 nos puede ayudar a resolverlo es el caso en el que dos hilos se llamen entre sí, quedando ambos a la espera de que el otro le devuelva el control. Esto lo podemos simular de nuevo mediante la aplicación Dead.exe&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_6A22580E.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_thumb_5F00_07185059.png" width="681" height="346" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;En este caso el monitor de recursos a través de su visor de la cadena de espera podemos ver como los hilos están marcados en rojos y se nos informa que es imposible desbloquear los procesos y se nos invita a pararlos. Esto es un interbloqueo o, en ingles, deadlock.&lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_5A7EFAA5.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://blogserver.informatica64.com/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/windowstecnico/image_5F00_thumb_5F00_1BC9FD3F.png" width="431" height="330" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Como veis Windows 7 nos (me) sigue sorprendiendo y ofreciendo nuevas funcionalidades que nos permitirán conocer mucho mejor el funcionamiento de nuestro sistema operativo. Un saludo y espero que esto os sirva de utilidad antes de maldecir al sistema operativo por quedarse colgado cuando realmente es una aplicación mal programada (o al menos maldecirlo con conocimiento de causa)&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://windowstecnico.com/aggbug.aspx?PostID=293" width="1" height="1"&gt;</description><category domain="http://windowstecnico.com/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://windowstecnico.com/archive/tags/Wait+Chain/default.aspx">Wait Chain</category><category domain="http://windowstecnico.com/archive/tags/Usabilidad/default.aspx">Usabilidad</category></item></channel></rss>