2010-05-31 7 views
5

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.

Respuesta

7

Un controlador de dispositivo de Windows es un poco como un archivo DLL: excepto que en lugar de una aplicación dinámica que lo vincula/carga, es el O/S que los enlaces dinámicos/lo carga.

Las entradas de registro le dicen a los O/S qué controladores de dispositivo existen (para que el O/S sepa qué controladores de dispositivo deben vincularse/cargarse dinámicamente).

Los controladores de dispositivo se ejecutan en el anillo 0. En el anillo cero, ellos (controladores de dispositivo) no tienen acceso a API de Windows (no pueden enlazar ni usar): en su lugar tienen acceso a varias API de kernel de NT.

Pero si llama al controlador del dispositivo, ¿significa que todos los controladores de dispositivo que pueden llamarse 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?

Básicamente sí. Todos los controladores de dispositivo dentro de un tipo o clase determinados (p.todos los controladores de video, o todos los controladores de disco) tienen una API similar, que es invocada por el O/S (y/o invocada por controladores de nivel superior, por ejemplo, controladores de sistema de archivos utilizan/invocan controladores de disco).

El Kit de controladores de dispositivos de Windows define las distintas API e incluye controladores de muestra para los distintos tipos de dispositivos.

Pero si Windows tiene conjuntos predefinidos de funciones requeridas por los controladores de dispositivo, no puede usar controladores nuevos que no existían antes de que saliera la última versión del sistema operativo.

El O/S se vincula dinámicamente a las funciones del controlador del dispositivo: dado que las API del controlador del dispositivo están predefinidas, los controladores del dispositivo son intercambiables en lo que respecta al O/S; Se pueden escribir nuevos controladores de dispositivo, siempre que admitan (sean compatibles con versiones anteriores) con la API de controlador de dispositivo estándar.

El mecanismo de enlace dinámico es muy similar a la forma en que los objetos COM o las clases C++ implementan cualquier interfaz predefinida puramente abstracta: un archivo de cabecera en el DDK declara la interfaz puramente abstracta (como funciones virtuales), controladores de dispositivo implementar estas funciones, y el O/S carga los controladores e invoca estas funciones.

+0

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

+0

@ 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

0

Los fundamentos: Tenga en cuenta que esta explicación se simplifica y en algún momento sólo es cierto para la mayoría de los casos, y no todos.

La mayoría de los dispositivos HW que pueda encontrar tendrán estas operaciones básicas: Escribir en la memoria (o Registros) en ellos. Leer de la memoria (o Registros) en ellos.

Esto es suficiente para controlar el HW, para darle los datos que necesita y para obtener los datos que desea de él.

Estas áreas de memoria se asignan por el BIOS y/o el sistema operativo para el rango de memoria física en el PC (al que puede accederse a su vez por su conductor.)

lo que ahora tenemos dos operaciones de leer y escribir que el controlador del dispositivo sabe que hacer.

Además, el controlador puede leer y escribir de una manera que no involucra la CPU. Esto se llama acceso directo a memoria (DMA) y generalmente lo realiza su HW.

El último tipo de operación se llama INTERRUPCIONES y está destinado a que su HW notifique a su controlador algo que acaba de ocurrir. Esto generalmente lo hace el HW al interrumpir la CPU y llamar al controlador para realizar alguna operación de alta prioridad. Por ejemplo: una imagen está lista en el HW para ser leída por el controlador.

Cuestiones relacionadas