Oracle es en mi opinión la base de datos relacional mejor instrumentada del mercado, entre sus tantos archivos y eventos tanto documentados como no documentados hay referencias a las mismas llamadas al sistema operativo. ¿Cómo interpretar los nombres de las funciones del llamado subsistema de entrada/salida?
Como antecedente considero importante dejar claro que los sistemas operativos tienen diferencias muy fuertes entre ellos, incluso entre las distintas versiones comerciales de Unix y las versiones de Linux -hablaré de ellas en un post futuro-. Aún así existen estándares como el de POSIX (Portable Operating Systems based on Unix de IEEE) que es una ventaja enorme al momento de diagnosticar un problema. El estándar POSIX 1003.1 define una librería con funciones para acceder archivos de manera asíncrona.
Un acceso asíncrono significa que cuando un proceso en modo usuario invoca una función de lectura/escritura, la función termina su ejecución tan pronto como la operación de lectura/escritura ha sido encolada pasa su proceso. Ésto significa que la función se termina de ejecutar -y de instrumentar- antes que la operación sea ejecutada y el proceso que hizo la llamada continúa su ejecución mientras los datos son transferidos. ¿Es ésto incorrecto? de ninguna manera, como siempre todo dependerá de lo que queremos que haga el proceso que hace la llamada, lo importante es saber qué es un acceso síncrono y qué uno asíncrono antes de diseñar nuestro proceso.
Las funciones asíncronas de entrada/salida de acuerdo al estándar POSIX 1003.1 son
aio_cancel() cancela una operación asíncrona pendiente
aio_error() regresa el código del error de una operación asíncrona
aio_fsync() cancela todas las operaciones asíncronas pendientes
aio_read() encola una lectura asíncrona para su ejecución
aio_return() solicita el código de retorno para una operación asíncrona
aio_suspend() suspende la ejecución de un proceso hasta que al menos una de varias operaciones asíncronas finalice su ejecución
aio_write() encola una lectura asíncrona para su ejecución
Ya me imagino que algunos de ustedes se estarán preguntando para qué sirve conocer ésto. A mí me ha servido muchísimo, por ejemplo al analizar una bitácora de un proceso que ejecuta accesos asíncronos a dispositivos de entrada/salida identificando la función en la bitácora sé con exactitud qué se le solicitó al sistema operativo y también por qué es que tenemos cierto comportamiento en un ambiente.
Conocer las llamadas a las librerías del sistema nos ayuda también a poder hacer casos de prueba específicos y que modelen con exactitud lo que está haciendo la aplicación, sobre todo en el caso de aplicaciones de las que tenemos únicamente los archivos binarios y que para hacer casos de prueba necesitemos simular con programas hechos en el momento cómo se comporta un ambiente.