Estoy tratando de completar la imagen de cómo la PC y el sistema operativo interactúan juntos. Y estoy en el punto, donde estoy un poco fuera de toda duda cuando se trata de controladores de dispositivos.Controladores de dispositivos y Windows
Por favor, no escriba cosas como si fuera demasiado complicado, o no necesita saber cuando usa funciones de lenguaje de alta programación y winapi. Quiero saber, es para fines de estudio.
Por lo tanto, la misma estructura básica de cómo OS y PC (por PC me refiero, por supuesto, HW) es como lo veo es que todos los que no sean órdenes directas de la CPU, lo que puede hacer la CPU en sí mismo (operación aritmética, sus registros acceso y acceso a la memoria) debe pasar a través del sistema operativo. Principalmente por el nivel de anillo 3, no se pueden usar instrucciones de entrada y salida que se utilizan para eliminar otros HW. Sé que hay MMIO, pero primero debe establecerse mediante comunicación de puerto.
No fue así todo el tiempo. Incluso si soy un poco joven para recordar MSDOS, sé que podrías acceder a HW directamente, ya que no hay limitaciones, no hay modo de timbre. Por lo tanto, podría escribir una cadena para usar la función DOS de diplay, o acceder directamente a la memoria de la tarjeta de video y escribirla usted mismo.
Pero a medida que se desarrolla el sistema operativo, ya no existe esta posibilidad. Pero está bien, ya que el sistema operativo ahora maneja toda la comunicación HW, y francamente es más conveniente y mucho más seguro (diría que la única opción) en el entorno multitarea. Así que hoy en día, en lugar de usar instrucciones int para usar la función mapeada BIOS o la función DOS, llama a dll internamente que maneja todo lo que no necesita saber.
Entiendo esto. También entiendo que los controladores de dispositivo es la pieza de código que se ejecuta en el nivel de anillo 0, por lo que puede hacer todas las interacciones de HW. Pero lo que no entiendo es la conexión entre el sistema operativo y el controlador del dispositivo. Tomemos un ejemplo: quiero hacer que una tarjeta de sonido haga un sonido. Así que llamo a Windows API para acceder a la tarjeta de sonido, pero ¿qué ocurre? ¿Windows llama a los controladores del dispositivo para hacerlo?
Pero si llama al controlador del dispositivo, ¿significa que todos los controladores de dispositivo que se pueden llamar mediante la función winAPI deben tener rutinas nombradas de alguna manera específica? Quiero decir, cuando tengo una nueva tarjeta de sonido, ¿sus controladores deben tener funciones con el mismo nombre que la anterior? Entonces, ¿Windows realmente puede llamar a la misma función desde su perspectiva? Pero si Windows tiene conjuntos predefinidos de funciones requeridas por los controladores de dispositivos, no puede usar controladores nuevos que no existían antes de que saliera la última versión del sistema operativo.
Por favor, ayúdame a entender este lío. Realmente me estoy enojando. Gracias.
Gracias, buena respuesta. ¿Puedo tener uno más? Si entiendo corectly, para dispositivos "conocidos" para OS, hay un conjunto predefinido de nombres de funciones y para que OS pueda llamar, por ejemplo, la función "get_sector()" no importa qué controlador se use para acceso a HDD (SCSI, SATA, ATA. ..). Pero si tengo un dispositivo nuevo, con qué sistema operativo no puede manipular WinAPI, ¿puedo escribir controladores para él y luego llamarlos desde mi programa? Gracias. –
@ b-gen-jack-o-neill - Sí: las aplicaciones de Windows pueden usar la función [DeviceIoControl] (http://msdn.microsoft.com/en-us/library/aa363216.aspx) para enviar/recibir datos arbitrarios a un controlador de dispositivo. – ChrisW