Estructura de bufx

Finalidad

Amplía la estructura de buf para acomodar nuevos campos según sea necesario por razones de rendimiento y RAS.

Descripción

La estructura bufx está disponible para su uso por las extensiones de kernel de 64 bits y de kernel de 64 bits. Las extensiones de kernel de 32 bits y de kernel de 32 bits sólo tienen la opción de utilizar la estructura buf .

Variables de estructura de bufx para E/S de bloque

La estructura bufx , que se define en el archivo /usr/include/sys/buf.h , incluye los campos siguientes:

Elemento Descripción
b_flags Bits de distintivo. El valor de este campo lo construye la operación OR lógica con 0 o más de los valores siguientes:
B_WRITE
Esta operación es una operación de grabación.
B_READ
Esta operación es una operación de lectura de datos.
B_DONE
La E/S en el almacenamiento intermedio se realiza, por lo que la información de almacenamiento intermedio es más actual que otras versiones.
B_ERROR
Se ha producido un error de transferencia y la transacción ha terminado anormalmente.
B_BUSY
El bloque no está en la lista libre.
B_INFIGHT
Esta solicitud de E/S se ha enviado al controlador de dispositivo físico para su proceso.
B_AGE
Es probable que los datos no se reutilicen pronto, por lo que prefiere este almacenamiento intermedio para su reutilización. Esta bandera sugiere que el buffer va a la cabeza de la lista libre en lugar de al final.
B_ASYNC
La E/S asíncrona se está realizando en este bloque. Cuando se realiza la E/S, suelte el bloque.
B_DELWRI
El contenido de este almacenamiento intermedio todavía debe escribirse antes de que se pueda volver a utilizar el almacenamiento intermedio, aunque este bloque pueda estar en la lista libre. Esto lo utiliza la subrutina Escribir cuando el sistema espera que se produzca pronto otra grabación en el mismo bloque.
B_NOHIDE
Indica que la página de datos no debe ocultarse durante la transferencia de acceso directo a la memoria (DMA).
B_STALE
Los datos están en conflicto con los datos del disco debido a un error de E/S.
B_MORE_DONE
Cuando se establece, indica al receptor de esta estructura bufx que hay más estructuras en cola en el nivel IODONA . Esto permite que los controladores de dispositivo manejen todas las solicitudes completadas antes de procesar solicitudes nuevas.
B_SPLIT
Cuando se establece, indica que la transferencia puede empezar en cualquier lugar dentro del almacenamiento intermedio de datos.
B_BUFX
Un almacenamiento intermedio se identifica como una estructura buf ampliada si se cumplen todas las condiciones siguientes:
  • B_BUFX bit está establecido en elb_flags:NONE.
  • El puntero obtenido recombinando elbx_refptrtopy el campobx_refptrbotpuntos de campo al principio de la estructura.
  • Los 2bx_eyecatcher, que identifica si la estructura buf se ha ampliado o no, es igual a la serie ASCII " bufx".
B_BUFX_INITIAL
Cuando se establece, indica que se ha ampliado buf .
b_forw El puntero de bloque de avance ocupado.
b_back El puntero de bloque ocupado hacia atrás.
av_forw El puntero de reenvío para una cola de solicitud de controlador.
av_back El puntero hacia atrás para una cola de solicitud de controlador.
b_iodone Cualquiera que llame a la rutina estrategia debe establecer este campo para que apunte a su rutina de E/S realizada. Esta rutina se llama en el nivel INTIODONA interrupción cuando la E/S está completa.
b_dev El número de dispositivo mayor y menor.
b_bcount El recuento de bytes para la transferencia de datos.
b_un.b_addr La dirección de memoria del almacenamiento intermedio de datos.
b_blkno El número de bloque en el dispositivo.
b_resid La cantidad de datos no transferidos después del error.
b_event El ancla para la lista de sucesos.
b_xmemd El descriptor de memoria cruzada.
bx_refptrtop La mitad superior del puntero de referencia.
bx_refptrbot La mitad inferior del puntero de referencia.
bx_version La versión de la estructura bufx .
bx_eyecatcher El campo contiene la serie "bufx", que permite la fácil identificación de la estructura bufx en KDB al volcar datos y para la verificación de la estructura además de utilizar la macro BUFX_VALIDATE .
bx_flags Distintivos de Bufx con un campo de 64 bits que se pueden utilizar para los distintivos específicos de bufxque aún no se han definido.
bx_io_priority Si los dispositivos de almacenamiento subyacentes no dan soporte a la prioridad de E/S, este valor se ignora. Los 2bx_io_prioritydebe ser el valor deIOPRIORITY_UNSET(0) o un valor de 1 a 15. Los valores de prioridad de E/S inferior se consideran más importantes que los valores superiores. Por ejemplo, un valor de 1 se considera la prioridad más alta y un valor de 15 se considera la prioridad más baja. El valor deIOPRIORITY_UNSETse define en el archivo sys/extendio.h .
bx_io_cache_hint Si los dispositivos de almacenamiento subyacentes no dan soporte a las sugerencias de memoria caché de E/S, este valor se ignora. Los 2bx_io_cache_hintdebe ser el valor deCH_AGE_OUT_FASTo el valor deCH_PAGE_WRITE(definido en el archivo sys/extendio.h ). Estos valores se excluyen mutuamente. SiCH_AGE_OUT_FAST, el almacenamiento intermedio de E/S puede envejecer rápidamente desde la memoria caché del almacenamiento intermedio del dispositivo de almacenamiento. Esto es útil en las situaciones en las que la aplicación ya está almacenando en memoria caché el almacenamiento intermedio de E/S y se puede evitar el almacenamiento en caché redundante dentro de la capa de almacenamiento. SiCH_PAGE_WRITE, el almacenamiento intermedio de E/S se graba sólo en la memoria caché del dispositivo de almacenamiento y no en el disco.