stringtranslate.com

Archivo de dispositivo

En los sistemas operativos tipo Unix , un archivo de dispositivo , un nodo de dispositivo o un archivo especial es una interfaz para un controlador de dispositivo que aparece en un sistema de archivos como si fuera un archivo normal . También hay archivos especiales en DOS , OS/2 y Windows . Estos archivos especiales permiten que un programa de aplicación interactúe con un dispositivo utilizando su controlador de dispositivo a través de llamadas estándar al sistema de entrada/salida . El uso de llamadas al sistema estándar simplifica muchas tareas de programación y conduce a mecanismos de E/S consistentes en el espacio del usuario, independientemente de las características y funciones del dispositivo.

Descripción general

Los archivos de dispositivo generalmente proporcionan interfaces simples para dispositivos estándar (como impresoras y puertos serie), pero también se pueden usar para acceder a recursos únicos específicos en esos dispositivos, como particiones de disco . Además, los archivos de dispositivo son útiles para acceder a recursos del sistema que no tienen conexión con ningún dispositivo real, como receptores de datos y generadores de números aleatorios .

Hay dos tipos generales de archivos de dispositivo en sistemas operativos tipo Unix, conocidos como archivos especiales de caracteres y archivos especiales de bloque . La diferencia entre ellos radica en la cantidad de datos que lee y escribe el sistema operativo y el hardware. Estos juntos pueden denominarse archivos especiales de dispositivo , a diferencia de las canalizaciones con nombre , que no están conectadas a un dispositivo pero tampoco son archivos normales.

MS-DOS tomó prestado el concepto de archivos especiales de Unix pero les cambió el nombre a dispositivos . [1] Debido a que las primeras versiones de MS-DOS no admitían una jerarquía de directorios , los dispositivos se distinguían de los archivos normales haciendo que sus nombres fueran palabras reservadas , por ejemplo: el infame CON. Estos fueron elegidos por cierto grado de compatibilidad con CP/M y todavía están presentes en Windows moderno para compatibilidad con versiones anteriores.

En algunos sistemas tipo Unix, la mayoría de los archivos de dispositivos se administran como parte de un sistema de archivos virtual tradicionalmente montado en /dev, posiblemente asociado con un demonio controlador, que monitorea la adición y eliminación de hardware en tiempo de ejecución, realizando los cambios correspondientes en el sistema de archivos del dispositivo si es necesario. El kernel no lo realiza automáticamente y posiblemente invoca scripts en el sistema o en el espacio del usuario para manejar necesidades especiales del dispositivo. FreeBSD , DragonFly BSD y Darwin tienen un sistema de archivos dedicado devfs ; Los nodos del dispositivo son administrados automáticamente por este sistema de archivos, en el espacio del kernel . Linux solía tener una implementación devfs similar , pero fue abandonada más tarde y luego eliminada desde la versión 2.6.17; [2] Linux ahora utiliza principalmente una implementación de espacio de usuario conocida como udev , pero existen muchas variantes.

En los sistemas Unix que admiten el aislamiento de procesos chroot , como los contenedores Solaris , normalmente cada entorno chroot necesita el suyo propio /dev; Estos puntos de montaje serán visibles en el sistema operativo host en varios nodos del árbol del sistema de archivos global. Al restringir los nodos de dispositivo poblados en instancias chroot de /dev, el entorno chroot puede imponer el aislamiento del hardware (un programa no puede interferir con hardware que no puede ver ni nombrar, una forma de control de acceso aún más fuerte que los permisos del sistema de archivos Unix ).

Contención de dispositivos de hardware administrados por MS-DOS (consulte el programa terminar y permanecer residente ) haciendo que cada archivo de dispositivo esté abierto de forma exclusiva. Una aplicación que intente acceder a un dispositivo que ya está en uso descubrirá que no puede abrir el nodo de archivo del dispositivo. En Unix y Linux se implementa una variedad de semánticas de controladores de dispositivos con respecto al acceso concurrente . [3]

Sistemas Unix y similares a Unix

Una estructura simplificada del kernel de Linux. Los sistemas de archivos se implementan como parte del subsistema de E/S.

Los nodos de dispositivo corresponden a recursos que el núcleo de un sistema operativo ya ha asignado. Unix identifica esos recursos mediante un número mayor y un número menor , [4] ambos almacenados como parte de la estructura de un nodo . La asignación de estos números se produce de forma única en diferentes sistemas operativos y en diferentes plataformas informáticas . Generalmente, el número mayor identifica al controlador del dispositivo y el número menor identifica un dispositivo en particular (posiblemente entre muchos) que controla el conductor: [5] en este caso, el sistema puede pasar el número menor a un conductor. Sin embargo, en presencia de asignación dinámica de números, este puede no ser el caso (por ejemplo, en FreeBSD 5 y superiores).

Al igual que con otros tipos de archivos especiales, el sistema informático accede a los nodos del dispositivo mediante llamadas al sistema estándar y los trata como archivos informáticos normales. Existen dos tipos estándar de archivos de dispositivo; desafortunadamente, sus nombres son bastante contrarios a la intuición por razones históricas y, como resultado, las explicaciones de la diferencia entre los dos suelen ser incorrectas.

Dispositivos de personajes

Los archivos de caracteres especiales o dispositivos de caracteres proporcionan acceso directo y sin búfer al dispositivo de hardware. No necesariamente permiten que los programas lean o escriban caracteres individuales a la vez; eso depende del dispositivo en cuestión. El dispositivo de caracteres para un disco duro, por ejemplo, normalmente requerirá que todas las lecturas y escrituras estén alineadas para bloquear los límites y ciertamente no permitirá leer un solo byte.

Los dispositivos de caracteres a veces se conocen como dispositivos sin formato para evitar la confusión que rodea el hecho de que un dispositivo de caracteres para una pieza de hardware basado en bloques normalmente requerirá programas para leer y escribir bloques alineados.

Bloquear dispositivos

Los archivos especiales de bloque o los dispositivos de bloque brindan acceso almacenado en búfer a los dispositivos de hardware y brindan cierta abstracción de sus detalles específicos. [6] A diferencia de los dispositivos de caracteres, los dispositivos de bloques siempre permitirán al programador leer o escribir un bloque de cualquier tamaño (incluidos caracteres/bytes individuales) y cualquier alineación. La desventaja es que debido a que los dispositivos de bloque están almacenados en buffer, el programador no sabe cuánto tiempo tomará antes de que los datos escritos pasen de los buffers del kernel al dispositivo real, o incluso en qué orden llegarán dos escrituras separadas al dispositivo físico. Además, si el mismo hardware expone dispositivos de caracteres y de bloques, existe el riesgo de que se dañen los datos debido a que los clientes que utilizan el dispositivo de caracteres no se dan cuenta de los cambios realizados en los buffers del dispositivo de bloques.

La mayoría de los sistemas crean dispositivos de bloques y de caracteres para representar hardware como discos duros. FreeBSD y Linux, en particular, no lo hacen; el primero ha eliminado el soporte para dispositivos de bloque, [7] mientras que el segundo solo crea dispositivos de bloque. En Linux, para obtener un dispositivo de caracteres para un disco, se debe usar el controlador "sin formato", aunque se puede obtener el mismo efecto que abrir un dispositivo de caracteres abriendo el dispositivo de bloque con el indicador O_DIRECT específico de Linux .

Pseudodispositivos

Los nodos de dispositivos en sistemas tipo Unix no necesariamente tienen que corresponder a dispositivos físicos . Los nodos que carecen de esta correspondencia forman el grupo de los pseudodispositivos . Proporcionan varias funciones manejadas por el sistema operativo. Algunos de los pseudodispositivos (basados ​​en caracteres) más utilizados incluyen:

Además, los pseudodispositivos específicos de BSD con una interfaz ioctl también pueden incluir:

Creación de nodos

Los nodos se crean mediante la llamada al sistema mknod . El programa de línea de comandos para crear nodos también se llama mknod . Los nodos se pueden mover o eliminar mediante las llamadas habituales al sistema de archivos ( rename , unlink ) y comandos ( mv , rm ).

Algunas versiones de Unix incluyen un script llamado makedev o MAKEDEV para crear todos los dispositivos necesarios en el directorio /dev . Sólo tiene sentido en sistemas a cuyos dispositivos se les asignan números mayores estáticamente (por ejemplo, mediante codificación en su módulo del kernel).

Algunos otros sistemas Unix, como FreeBSD, utilizan la gestión de nodos de dispositivos basada en kernel únicamente a través de devfs y no admiten la creación manual de nodos. La llamada al sistema mknod(2) y el comando mknod(8) existen para mantener la compatibilidad con POSIX, pero los nodos de dispositivos creados manualmente fuera de devfs no funcionarán en absoluto. [9]

Convenciones de nombres

Los siguientes prefijos se utilizan para los nombres de algunos dispositivos en la jerarquía /dev , para identificar el tipo de dispositivo:

Algunos prefijos adicionales se han vuelto de uso común en algunos sistemas operativos:

La lista canónica de los prefijos utilizados en Linux se puede encontrar en Linux Device List , el registro oficial de números de dispositivos asignados y nodos del directorio /dev para el sistema operativo Linux. [10]

Para la mayoría de los dispositivos, este prefijo va seguido de un número que identifica de forma exclusiva el dispositivo en particular. Para los discos duros, se utiliza una letra para identificar los dispositivos y va seguida de un número para identificar las particiones . Por lo tanto, un sistema de archivos puede "conocer" un área en un disco como /dev/sda3 , por ejemplo, o "ver" una sesión de terminal en red asociada con /dev/pts/14 .

En los discos que utilizan el típico registro de arranque maestro de PC , los números de dispositivo de la partición primaria y extendida opcional están numerados del 1 al 4, mientras que los índices de cualquier partición lógica son del 5 en adelante, independientemente del diseño de las particiones anteriores (sus particiones extendidas principales). No es necesario que la partición sea la cuarta partición del disco, ni que existan las cuatro particiones primarias).

Los nombres de los dispositivos generalmente no son portátiles entre diferentes variantes de sistemas tipo Unix; por ejemplo, en algunos sistemas BSD , los dispositivos IDE se denominan /dev/wd0 , /dev/wd1 , etc.

devfs

devfs es una implementación específica de un sistema de archivos de dispositivos en sistemas operativos tipo Unix, que se utiliza para presentar archivos de dispositivos. El mecanismo subyacente de implementación puede variar, según el sistema operativo.

Mantener estos archivos especiales en un sistema de archivos implementado físicamente, como un disco duro, es inconveniente y, como de todos modos necesita asistencia del kernel, surgió la idea de un sistema de archivos lógico de propósito especial que no esté almacenado físicamente.

Definir cuándo los dispositivos están listos para aparecer no es trivial. El enfoque devfs consiste en que el controlador del dispositivo solicite la creación y eliminación de entradas devfs relacionadas con los dispositivos que habilita y deshabilita.

PC DOS, TOS, OS/2 y Windows

Un archivo de dispositivo es una palabra clave reservada que se utiliza en los sistemas PC DOS , TOS , OS/2 y Windows para permitir el acceso a ciertos puertos y dispositivos.

MS-DOS tomó prestado el concepto de archivos especiales de Unix pero les cambió el nombre a dispositivos . [1] Debido a que las primeras versiones de MS-DOS no admitían una jerarquía de directorios , los dispositivos se distinguían de los archivos normales haciendo que sus nombres fueran palabras reservadas . Esto significa que ciertos nombres de archivos estaban reservados para dispositivos y no deberían usarse para nombrar archivos o directorios nuevos. [11] Los nombres reservados fueron elegidos para ser compatibles con el manejo de PIPcomandos de "archivos especiales" en CP/M . Había dos tipos de dispositivos en DOS: dispositivos de bloque (utilizados para unidades de disco) y dispositivos de caracteres (generalmente todos los demás dispositivos, incluidos los dispositivos COM y PRN). [12]

DOS utiliza archivos de dispositivo para acceder a impresoras y puertos. La mayoría de versiones de Windows también contienen este soporte, lo que puede causar confusión al intentar crear archivos y carpetas con ciertos nombres, ya que no pueden tener estos nombres. [13] Las versiones 2.x de MS-DOS proporcionan el parámetro AVAILDEV CONFIG.SYS que, si se establece en FALSE, hace que estos nombres especiales sólo se activen si tienen el prefijo \DEV\, permitiendo así que se creen archivos normales con estos nombres. [14]

GEMDOS , la parte similar a DOS de Atari TOS , admitía nombres de dispositivos similares a los de DOS, pero a diferencia de DOS requería un carácter final ":" (en DOS, esto es opcional) para identificarlos como dispositivos en lugar de los nombres de archivos normales (por lo tanto, " CON:" funcionaría tanto en DOS como en TOS, pero "CON" nombraría un archivo normal en TOS pero el dispositivo de consola en DOS). En MiNT y MagiC , una vista especial del sistema de archivos unificado similar a UNIX a la que se accede a través de la letra de unidad "U:" también colocaba los archivos del dispositivo en "U:\DEV".

Mediante la redirección de shell y canalizaciones, se pueden enviar o recibir datos desde un dispositivo. Por ejemplo, escribir lo siguiente enviará el archivo c:\data.txta la impresora:

TIPO c:\datos.txt > PRN

PIPE, MAILSLOT y MUP son otros dispositivos estándar de Windows. [20]

COI

El sistema operativo de 8 bits de las computadoras de bolsillo Sharp como PC-E500 , PC-E500S , etc. consta de un intérprete BÁSICO , un sistema de control de archivos (FCS) similar a DOS 2 que implementa un sistema de archivos rudimentario similar a FAT de 12 bits y un sistema de control de entrada/salida (IOCS) similar a BIOS que implementa una serie de controladores de dispositivos de bloques y caracteres estándar, así como dispositivos de archivos especiales, incluidos STDO:/SCRN: (pantalla), STDI:/KYBD: (teclado), COM: ( E/S serie), STDL:/PRN: (impresora), CAS: (cinta de casete), E:/F:/G: (archivo de memoria), S1:/S2:/S3: (tarjeta de memoria), X: /Y: (disquete), SYSTM: (sistema) y NIL: (función). [21]

Implementaciones

Ver también

Referencias

  1. ^ ab "Windows para trabajo en grupo: cómo VSHARE.386 gestiona el uso compartido de archivos". Soporte.microsoft.com. 1999-09-22 . Consultado el 22 de enero de 2014 .
  2. ^ Kroah-Hartman, Greg (20 de junio de 2005). "[PATCH] devfs: elimine devfs del árbol del kernel". Árbol de fuentes del kernel de Linux . Consultado el 12 de junio de 2021 .
  3. ^ Corbet, Jonathan; Kroah-Hartman, Greg; Rubini, Alejandro (2005). "Control de acceso a un archivo de dispositivo". Controladores de dispositivos Linux, tercera edición. O'Reilly . Consultado el 28 de abril de 2017 . El siguiente paso más allá de un dispositivo de apertura única es permitir que un solo usuario abra un dispositivo en múltiples procesos, pero permitir que solo un usuario tenga el dispositivo abierto a la vez.
  4. ^ Kernighan, Brian W .; Pike, Rob (1984). El entorno de programación UNIX . Prentice Hall . pag. 66.ISBN 0-13-937681-X.
  5. ^ Neil Brown (27 de octubre de 2010). "Ghosts of Unix Past: una búsqueda histórica de patrones de diseño". Noticias semanales de Linux . Consultado el 30 de marzo de 2014 .
  6. ^ "IEEE Std 1003.1, edición 2013" . Consultado el 24 de abril de 2014 .
  7. ^ "Manual de arquitectura de FreeBSD" . Consultado el 7 de marzo de 2013 .
  8. ^ "usr.sbin/envstat/envstat.c". Referencia cruzada de BSD . NetBSD . Noviembre de 2021.
    • "envstat - utilidad para manejar sensores ambientales". Manual del administrador del sistema NetBSD. Archivado desde el original el 23 de marzo de 2019.
  9. ^ "mknod(8)". Páginas del manual de FreeBSD . El proyecto FreeBSD. 03/10/2016 . Consultado el 12 de junio de 2021 .
  10. ^ Autoridad de números y nombres asignados de Linux (6 de abril de 2009). "Dispositivos asignados Linux (versión 2.6+)". Kernel de Linux (Documentación/dispositivos.txt) . Archivado desde el original el 24 de abril de 2016 . Consultado el 8 de junio de 2013 .
  11. ^ "Evite crear nombres de archivos Macintosh que sean nombres de dispositivos NT". Soporte.microsoft.com. 2006-11-01 . Consultado el 22 de enero de 2014 .
  12. ^ "atributos del dispositivo". Stanislavs.org . Consultado el 22 de enero de 2014 .
  13. ^ ab "Los nombres de los controladores de dispositivos MS-DOS no se pueden utilizar como nombres de archivos". Revisión 2.0. Microsoft . 2003-05-12. KB74496, Q74496. Archivado desde el original el 21 de julio de 2012.
  14. ^ "Comandos indocumentados". 4dos.info . Kevtrónica. 2002-04-12 . Consultado el 16 de mayo de 2014 .
  15. ^ abcdef Referencia técnica del sistema operativo IBM/2: familia de programación (PDF) . vol. 1 (1ª ed.). IBM . Septiembre de 1987 [1986]. Archivado (PDF) desde el original el 3 de enero de 2017.
  16. ^ abcdefghi Hewlett-Packard - Manual de referencia técnica - Portable PLUS (1 ed.). Corvallis, OR, EE.UU.: Hewlett-Packard Company , División de Computadoras Portátiles. Agosto de 1985. 45559-90001 . Consultado el 27 de noviembre de 2016 .
  17. ^ abcdefghi Hewlett-Packard - Manual de referencia técnica - Portable PLUS (PDF) (2 ed.). División de Computadoras Portátiles, Corvallis, Oregón, EE. UU.: Hewlett-Packard Company . Diciembre de 1986 [agosto de 1985]. 45559-90006. Archivado (PDF) desde el original el 28 de noviembre de 2016 . Consultado el 27 de noviembre de 2016 .
  18. ^ abc Paul, Matthias R. (2 de octubre de 1997). "Caldera OpenDOS 7.01/7.02 Actualización Alpha 3 IBMBIO.COM README.TXT". Archivado desde el original el 4 de octubre de 2003 . Consultado el 29 de marzo de 2009 .[1]
  19. ^ Paterson, Tim ; Microsoft (19 de diciembre de 2013) [1983]. "Microsoft DOS V1.1 y V2.0: /msdos/v20source/SKELIO.TXT, /msdos/v20source/HRDDRV.ASM". Museo de Historia de la Computación , Microsoft . Consultado el 25 de marzo de 2014 .(Nota: si bien los editores afirman que esto sería MS-DOS 1.1 y 2.0, en realidad es SCP MS-DOS 1.25 y una mezcla de Altos MS-DOS 2.11 y TeleVideo PC DOS 2.11 ).
  20. ^ "REG: Entradas CurrentControlSet PARTE 2: SessionManager". Soporte.microsoft.com. 2006-11-01 . Consultado el 22 de enero de 2014 .
  21. ^ Manual de referencia técnica PC-E500 (PDF) . Sharp Corporation , Grupo de Sistemas de Información, División de Equipos Personales. Marzo de 1990. p. 17. Archivado (PDF) desde el original el 14 de marzo de 2017 . Consultado el 14 de marzo de 2017 .
  22. ^ Gooch, Richard (20 de agosto de 2002). "Preguntas frecuentes sobre Linux Devfs (sistema de archivos de dispositivos)" . Consultado el 13 de junio de 2021 .
  23. ^ Gooch, Richard. "Mis contribuciones a Linux" . Consultado el 13 de junio de 2021 . Devfsd proporciona administración configurable de nodos de dispositivos utilizando el sistema de archivos de dispositivos Linux.
  24. ^ "Driver Core: devtmpfs - /dev basado en tmpfs mantenido por el kernel". LWN . Consultado el 10 de agosto de 2009 .
  25. ^ "devfs(7FS)". Sección 7 de las páginas de manual: Interfaces de dispositivo y de red . Oráculo. 2014 . Consultado el 12 de junio de 2021 .
  26. ^ "Registro de cambios de Project Black" . Consultado el 15 de mayo de 2016 .
  27. ^ "La unidad U: en MagiC". 2016-03-28. Archivado desde el original el 15 de enero de 2017 . Consultado el 9 de enero de 2017 .
  28. ^ "Portal FreeMiNT - mint.doc". 2000-04-27. Archivado desde el original el 15 de enero de 2017 . Consultado el 9 de enero de 2017 .

Otras lecturas