Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Ver: Modo: Orden:
El Núcleo y las Versiones | 8 comentarios (8 temáticos, editoriales, 0 ocultos)
[OT]Qué casualidad (none / 0) (#2)
por Draco a las Sun Dec 12th, 2004 at 09:08:41 PM CET
(Información Usuario)

Es curioso pero este tema últimamente nos llevó de cabeza en el trabajo. Como bien has dicho, la resolución máxima en Windows por defecto son 10ms. El caso es que en Java tú puedes designar intervalos menores para dormir un thread. Lo que hace la JVM en ese caso, es realizar la llamada timeBeginPeriod(1L) y así poner la resolución a 1ms. Al salir del sleep llama a timeEndPeriod(1L) restaurando el valor inicial (que es un valor de sistema).

El problema es que estas funciones(que internamente llaman a NtSetTimerResolution), no deben ser thread-safe o tienen algún problema dependiendo del hardware porque su uso en aplicaciones multihilo puede hacer que el reloj del sistema se desincronize completamente. Doy fe de que el efecto depende totalmente del puesto, ya que una aplicación que no había dado problemas de ese tipo en año y medio comenzó a darlos al instalarla en un puesto nuevo.

En cualquier caso, ésto es algo que no creo que se pueda hacer en Linux en ejecución (si no recuerdo mal el número de interrupciones de reloj por segundo se define en la macro HZ). En Solaris parece que sí puede hacerse.
There are two major products to come out of Berkeley: LSD & BSD Unix. I don't believe this to be a coincidence.
[ Padre ]


Nop, en Linux no (none / 0) (#3)
por jorginius ("jorginius" en Google Mail) a las Sun Dec 12th, 2004 at 10:20:28 PM CET
(Información Usuario) http://www.rodriguezmoreno.com

En cualquier caso, ésto es algo que no creo que se pueda hacer en Linux en ejecución

El jiffie es fijo. Linux tampoco implementa la llamada POSIX sched_rr_set_interval, con lo que podrías ajustar el timer del sistema de los procesos planificados como SCHED_RR (Round Robin).

En el 2.4, llamando a nanosleep se simulaban esperas menores en procesos de tiempo real blando evitando la planificación y haciendo espera activa, pero en el 2.6 no nos mienten de esa manera y no puedes dormir menos que el tick del reloj del kernel.

Lo que sí puedes hacer en Linux en planificar un proceso como tiempo real, reprogramar el reloj vía ioctl y hacer read y select de /dev/rtc. Al menos no es espera activa.

El problema es que estas funciones(que internamente llaman a NtSetTimerResolution), no deben ser thread-safe o tienen algún problema dependiendo del hardware porque su uso en aplicaciones multihilo puede hacer que el reloj del sistema se desincronize completamente.

Deja vu del tiempo de DOS :-). Si andas reprogramando el canal 0 del (A)PIC, que es lo que parece que hace ese NtSetTimerResolution, la función para obtener la hora del día no funcionará durante el cambio. También puedes tener problemas con algún dispositivo, como (especialmente) la disquetera.

Si en DOS, que no era multiprogramado, aquello ya era un mundo: tenías que guardar el tiempo antes de reprogramar el PIC, ir actualizando para restaurarlo a la salida, re-reprogramar el PIC cada vez que usabas un dispositvo, etc. Lo raro es funcione alguna vez en Java :-)

De todas formas, aunque toques el reloj, no puedes tener intervalos de mayor frecuencia que 8.192 Hz (más cambio de contexto: registros y pila al menos) así que de nanos nada.

[ Padre ]


Corrección (none / 0) (#6)
por jorginius ("jorginius" en Google Mail) a las Mon Dec 13th, 2004 at 12:13:16 AM CET
(Información Usuario) http://www.rodriguezmoreno.com

Lo que sí puedes hacer en Linux en planificar un proceso como tiempo real, reprogramar el reloj vía ioctl y hacer read y select de /dev/rtc.

Esto sirve para leer tiempo con más resolución que con gettimeofday, no para dormir menos. Por mucho que el proceso sea de tiempo real en el momento que hay una petición de E/S sobre /dev/rtc se va a bloquear y, hasta que no pase el/los ms de rigor, nada.

Perdón :-).

[ Padre ]


 

El Núcleo y las Versiones | 8 comentarios (8 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:
Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda