Servicio de kernel xlate_create

Finalidad

Crea estructuras de datos de pretraducción.

Sintaxis

int xlate_create (dp, baddr, count, flags)
struct xmem*dp;
caddr_t baddr;
int count;
uint flags;

Descripción

El servicio de kernel de xlate_create crea estructuras de datos de pretraducción capaces de pretraducir todas las páginas del almacenamiento intermedio virtual indicado por el parámetro baddr para la longitud de Recuento en una lista de números de página físicos, añadidos al descriptor de memoria cruzada al que apunta dp.

Si se establece el distintivo XLATE_ALLOC , sólo se crean las estructuras de datos y no se realiza ninguna pretraducción. Si no se establece el distintivo, además de las estructuras de datos que se crean, cada página del almacenamiento intermedio se traduce y se verifican los permisos de acceso, lo que requiere acceso de lectura y escritura a cada página. El distintivo XLATE_ALLOC es útil cuando el almacenamiento intermedio se inmovilizará y se utilizará más tarde, a través de los servicios de kernel de xlate_pin y xlate_unpin .

El distintivo XLATE_SPARSE se puede utilizar para indicar que sólo las partes seleccionadas de una región pretraducida pueden ser válidas (inmovilizadas y pretraducidas) en cualquier momento. El distintivo XLATE_SPARSE se puede utilizar junto con el distintivo XLATE_ALLOC para preasignar las estructuras de datos de pretraducción para una región de direcciones que se gestionará de forma dinámica.

El servicio de kernel de xlate_create se utiliza principalmente cuando los almacenamientos intermedios de memoria se reutilizarán para E/S. El uso de este servicio para crear una pretraducción para el almacenamiento intermedio de memoria evita la conversión de páginas y la sobrecarga de comprobación de acceso para todos los DMAs futuros que impliquen el almacenamiento intermedio de memoria hasta que se llame al servicio de kernel de xlate_remove .

Parámetros

Elemento Descripción
dp Apunta al descriptor de memoria cruzada.
baddr Apunta al almacenamiento intermedio virtual.
count Especifica la longitud del almacenamiento intermedio virtual.
distintivos Especifica la operación. Los valores válidos son los siguientes:
XLATE_PERSISTENT
Indica que las estructuras de datos de pretraducción deben ser persistentes a través de llamadas a servicios de pretraducción.
XLATE_ALLOC
Indica que las estructuras de datos de pretraducción sólo deben asignarse y no se debe realizar ninguna conversión.
XLATE_SPARSE
Indica que la información de pretraducción será escasa, lo que permitirá la coexistencia de regiones de pretraducción (activas) válidas y regiones de pretraducción no válidas (inactivas).

Valores de retorno

Elemento Descripción
ENOMEM No se puede asignar memoria
XMEM_FAIL Sin traducción física o sin acceso a una página
XMEM_SUCC Se ha creado una preconversión

Entorno de ejecución

El servicio de kernel de xlate_create sólo se puede llamar desde el entorno de proceso. El almacenamiento intermedio completo debe estar marcado (a menos que se establezca el distintivo XLATE_ALLOC ) y el descriptor de memoria cruzada sea válido.