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:
|
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.