[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ** RE: [escepticos] FW: virus alert



Xavier Nieto wrote:
> 
> Borja, porfa, cuenta, cuenta, aunque sea en un privado, pero me interesa.

	Iba a mandar un par en privado, pero hay mucha demanda :-)

	Aviso, eso sí (y pido disculpas por ello) que esto es un tema
bastante técnico. Pero merece la pena entenderlo, es un ejemplo de
calidad
de software, aunque se manifiesta en circunstancias un tanto atipicas.
Pero
mi experiencia me dice que este tipo de chapuzas suelen "morder" cuando
uno menos lo espera.


	Allá va.

	1 - EL EXTRAÑO FENÓMENO

	Estaba yo una tarde depurando un programa con un compañero, un
programa que corría en Windows (95,98,NT,2000...) y se conectaba por
TCP/IP a otra máquina. 

	Dicho programa, además, establecía más de una conexión, cosa
que según parece no debe ser habitual en entornos Windows. (Aunque
un navegador abre un promedio de 4 al cargar una página).

	El programa estaba bajo el control del depurador, parado
en un breakpoint, y en un momento dado decidieron pararlo para 
actualizar una cosa y recompilar.

	Y, oh, maravilla! De las tres conexiones que tenía el programa
abiertas, solamente una se cerraba, a pesar de que habíamos eliminado
el proceso entero.

	(A esto sucedió mi habitual sarta de improperios que no
reproduzco por no saber si hay menores de edad leyendo la lista...)

	Es decir, si el proceso está parado por un depurador y lo matamos
"bruscamente", no cierra más que UNA conexión, lo cual es más
sorprendente 
si cabe que si no cerrara ninguna.

	2 - LA INTERPRETACION

	¿Por qué me parece esto tan alarmante? Pues por una razón: se supone
que en un sistema operativo serio, hay dos áreas de responsabilidad a la
hora de ejecutar cosas; por un lado están las aplicaciones (es decir, el
programa que estábamos probando) y por otro el sistema operativo. Y éste
último, como todo el mundo sabe, es el encargado de controlar los
recursos
del ordenador. Concretamente, si un programa que tiene ficheros abiertos
(por
poner un ejemplo) termina aunque sea de forma anormal, el sistema
operativo
tiene la sagrada obligación de cerrar TODOS los ficheros abiertos y
liberar
TODOS los recursos asociados al programa.

	Sin embargo, nos encontramos con que un proceso "congelado" por
el depurador, no cierra sus conexiones al salir (al ser violentamente 
arrancado del mundo de los programas en ejecución, que viene a ser como
el mundo de los vivos). Existe una diferencia fundamental entre terminar
un programa de esta forma y cerrarlo "civilizadamente". En el segundo
caso,
el sistema manda un mensaje al programa y éste puede ejecutar lo que
necesite
para cerrarse correctamente.

	¿Cuál es la gran chapuza en este caso? Todo apunta a dos chapuzas.
La primera de ellas, parece que es responsabilidad de una parte del
programa que
se ejecuta como proceso de usuario cerrar las conexiones. Al estar
"congelado",
dicha parte no se ejecutó. En un sistema operativo bien hecho, esto no
debería
ocurrir, ya que si se produce un error grave en el programa, puede que
esto no
llegue a ejecutarse.

	Por tanto, tenemos que el núcleo del sistema operativo debe encargarse
de que las conexiones se cierren. Pues bien, aquí una vez más Microsoft
nos
presenta una propuesta atrevida e innovadora (cómo le gusta decir esto a
su
gurú): cierra SOLAMENTE UNA CONEXIÓN con lo cual el comportamiento es
aún máx
extraño. Mi interpretación de esto me asusta a mi mismo: comprueban al
destruir
el bloque de control de proceso si hay "conexión de red" y en ese caso
la 
cierran ASUMIENDO QUE UN PROCESO TENDRÁ SOLAMENTE UNA??????? Pues eso
parece.
Digo que me asusta porque rutinariamente trabajo con "daemons" que
pueden tener
abiertas 100. Claro que, como no he perdido el juicio, no hago esas
cosas en
Windows.

	En un diseño bien hecho, esto no ocurriría. Lo hemos comprobado
en 95, 98, NT y una beta de Windows 2000.



	En fin, dicen que "quien con infante pernocta..."



	Borja.

-- 
***********************************************************************
Borja Marcos			* Internet: borjamar en sarenet.es
Alangoeta, 11 1 izq		*	    borjam en we.lc.ehu.es
48990 - Algorta (Vizcaya)	*           borjam en well.com
SPAIN				*
***********************************************************************