Compartir a través de


Funcionalidades proporcionadas por el puerto SCSI

El controlador de puerto SCSI proporciona las siguientes funcionalidades:

  • Microsoft Windows admite sistemas que contienen diferentes tipos de buses de E/S o varios buses de E/S del mismo tipo. Se necesita un esquema de direccionamiento común para controlar esta variedad.

  • Los dispositivos PCI pueden tener recursos de registro de memoria y puerto de E/S. Las direcciones lógicas ayudan a que esta distinción sea transparente para el controlador de puerto.

  • Algunos sistemas contienen HBA que están conectados a más de un bus; este tipo de HBA puede requerir varios conjuntos de traducciones de direcciones.

  • Las direcciones lógicas son necesarias para la portabilidad en máquinas basadas en CISC y basadas en RISC.

  • Reintentar IRP cuando un dispositivo está demasiado ocupado para procesarlos.

    Los controladores de clase de almacenamiento no tienen que implementar algoritmos para reintentar IRP cuando los dispositivos están demasiado ocupados para procesarlos. El controlador de puerto SCSI implementa esta funcionalidad.

  • Aplicar valores de tiempo de espera para las solicitudes.

    El controlador de clase establece un valor de tiempo de espera para las solicitudes y el puerto SCSI es responsable de aplicarlo. Sin embargo, el controlador de puerto SCSI puede aplicar los valores de tiempo de espera del controlador de clase de forma flexible, teniendo en cuenta el estado del bus. Por ejemplo, si un vínculo de canal de fibra administrado por el puerto SCSI cae durante 20 segundos, el puerto SCSI podría suspender el contador de tiempo de espera durante el tiempo de instrucciones, de modo que, por ejemplo, las solicitudes con un tiempo de espera de 10 segundos no producirán errores hasta 10 segundos después de que se vuelva a realizar la copia de seguridad del vínculo. El puerto SCSI aumenta los valores de tiempo de espera asignados a las solicitudes en respuesta a un aumento del tráfico de E/S, ya que con tráfico de E/S más pesado, los dispositivos requerirán más tiempo para completar las solicitudes.

  • Control de errores de destino y ocupados por el controlador, así como condiciones de error de transporte (es decir, errores relacionados con la transmisión real de datos en el bus). Por ejemplo:

    • errores de paridad de bus
    • tiempo de espera de selección
  • Proporcionar a los controladores de clase información sobre las limitaciones del adaptador de host.

    Es responsabilidad del controlador de clase regular el tamaño de las transferencias de datos para adaptarse a los límites de los adaptadores de bus host (HBA). Sin embargo, el puerto SCSI proporciona al controlador de clase la información que necesita para realizar esta tarea. El puerto SCSI proporciona esta información en un descriptor de adaptador (STORAGE_ADAPTER_DESCRIPTOR) en respuesta a una solicitud IOCTL_STORAGE_QUERY_PROPERTY IOCTL. El controlador de clase es responsable de dividir las solicitudes en fragmentos del tamaño adecuado en función de la información notificada en este descriptor.

  • Traducción de direcciones relativas de bus a direcciones lógicas.

    Cuando se consulta, los adaptadores suministran direcciones relativas a bus para puertos de E/S, registros de comandos y registros de estado de control. Sin embargo, un controlador de minipuerto no puede usar direcciones relativas al bus para comunicarse con su adaptador de bus host (HBA). El puerto SCSI traduce las direcciones relativas del bus a direcciones lógicas, de modo que los controladores de minipuerto puedan acceder a las direcciones de bus de forma transparente. Hay varias razones para esto:

  • Asegurarse de que un dispositivo y todos sus dispositivos subyacentes estén encendidos (en el estado de alimentación del dispositivo D0) antes de que se inicie el dispositivo.

    Cuando un dispositivo no está listo para encenderse, el puerto SCSI pone en cola una solicitud D0 para ese dispositivo hasta que el dispositivo esté listo.

  • Poner en cola las solicitudes asincrónicas de los controladores de clase y reenviarlas de forma sincrónica al dispositivo de destino.

    Los controladores de clase no tienen que esperar a que se complete una solicitud antes de enviar la siguiente solicitud. El puerto SCSI asume la responsabilidad de poner en cola estas solicitudes para evitar sobrecargar la potencia de procesamiento del hardware subyacente.

  • Compatibilidad con la administración interna y externa de colas de solicitudes de E/S internas.

    La mayoría de las operaciones de administración de colas las inicia el propio puerto SCSI. Por ejemplo, el puerto SCSI bloquea su cola cuando se produce un error e informa de la condición de error al controlador de clase, de modo que el controlador de clase pueda responder antes de que se procesen más solicitudes. Sin embargo, el puerto SCSI también responde a las solicitudes del controlador de clase u otros controladores de nivel superior para bloquear, desbloquear, inmovilizar o descongelar su cola de solicitudes interna. Los controladores de nivel superior pueden forzar que el puerto SCSI descongele su cola interna mediante la solicitud de SRB_FUNCTION_RELEASE_QUEUE. Para obtener una explicación de lo que significa "inmovilizar", "bloquear" o "desbloquear" una cola, consulte Administración de colas del controlador de puerto SCSI.

  • Traducción de errores notificados por el dispositivo en formato de datos de detección SCSI-2 para su procesamiento por parte del controlador de clase.

El puerto SCSI proporciona servicios al controlador de minipuerto mediante las rutinas de biblioteca de puertos SCSI. Los escritores de controladores de minipuerto pueden llamar a estas rutinas en lugar de codificar la funcionalidad que proporcionan en un único controlador de puerto monolítico. Algunos de los servicios más importantes que se proporcionan mediante estas rutinas son los siguientes:

  • Un controlador de miniporte de puerto SCSI puede delegar muchas operaciones de inicialización dependientes del sistema operativo a la rutina de biblioteca ScsiPortInitialize del puerto SCSI. Esto hace que un controlador de miniporte de puerto SCSI sea más portátil en diferentes versiones del sistema operativo. Para obtener una explicación de las tareas de inicialización de un controlador de miniporte de puerto SCSI, consulte Rutina DriverEntry del controlador SCSI Miniport.

  • Los controladores de minipuerto de puerto SCSI para dispositivos que no son PnP se reservan la tarea de localizar adaptadores e informar de sus recursos al administrador de PnP. Esto se hace en ScsiPortInitialize.

  • Los controladores de miniporte de puerto SCSI no inicializan los puntos de entrada de envío en el objeto del controlador. El controlador de puerto SCSI lo hace en nombre del controlador de minipuerto cuando el controlador de minipuerto llama a ScsiPortInitialize.

  • Los controladores de minipuerto de puerto SCSI no convierten direcciones relativas a bus en direcciones lógicas mediante HalTranslateBusAddress. Los controladores de minipuerto de puerto SCSI lo hacen mediante una llamada a ScsiPortGetDeviceBase.

Para obtener un resumen de las rutinas de biblioteca que el puerto SCSI pone a disposición de los controladores de miniporte de puerto SCSI, consulte Rutinas de compatibilidad del controlador de puerto SCSI.