Enhetsfil

Från Wikipedia, den fria encyklopedin
Hoppa till navigation Hoppa till sökning

Enhetsfiler ( engelska enhet fil) är speciella filer att under nästan alla Unix derivat och många andra operativsystem används. De möjliggör enkel kommunikation mellan användarutrymme , till exempel vanliga användarprogram , och kärnan och därmed slutligen maskinvaran på en dator . Denna kommunikation är transparent eftersom enhetsfiler används som vanliga filer.

Enhetsfiler under Unix

Typer av enhetsfiler

Filsystemen för Unix och liknande operativsystem skiljer mellan "normala" filer (binära / ASCII), kataloger , namngivna rör (även kallade FIFO ), symboliska länkar , uttag och datablock . Även om "normala" filer och kataloger är en del av standardfunktionen för vanliga filsystem, spelar namngivna rör redan en särskild roll, men är inte en del av enhetsfilerna. Endast de tre senaste typerna är enhetsfiler. Därför görs en åtskillnad mellan tre typer av enhetsfiler:

Kommandon som ls eller file är lämpliga för att mata ut typen av en (enhet) file .

/dev i Konquerors filsystems webbläsare . Du kan se ikonerna för de många olika enhetsfilerna

Eftersom det vanligtvis finns en separat enhetsfil för varje enhet, samlades dessa filer redan i /dev -katalogen i tidiga versioner av Unix. Det här förfarandet har standardiserats för Linux med filsystemhierarki -standarden ( Solaris lagrar enhetsfilerna under det virtuella filsystemet i /devices och genererar automatiskt symlänkar som pekar från /dev till de faktiska filerna i /devices ), och det föreskrivs också vilket enhetsfiler finns i den här katalogen under vilket namn måste finnas (se listorna nedan). Moderna Unix -derivat använder ofta speciella (virtuella) filsystem för att hålla den här katalogen uppdaterad. Under lång tid var devfs populärt under Linux för detta ändamål, men nu tar udev hand om administrationen av enhetsfiler.

Enhetsfiler används som ett gränssnitt mellan enhetsdrivrutiner eller systemkomponenter och applikationsprogram som körs i användarutrymme . Du kan till exempel skriva ut på en LPT -skrivare som är ansluten till datorn via parallellporten genom att skriva text direkt i /dev/lp0 . Begreppet enhetsfiler innebär att program i princip separeras från de enhetsdrivrutiner som fungerar i kärnan. Dessutom verkar användningen av en enhet helt transparent - du behöver inte använda ett speciellt program först utan kan skriva till en fil som motsvarar skrivaren. Detta möjliggör intuitiv användning av hårdvaran.

Begreppet enhetsfiler är en av grunden för Unix -principen Allt är en fil och utvidgades till exempel med tillvägagångssätt som derivatplan 9 .

Blockorienterade enheter

Block Devices (även block lagringsenhet, block enhet eller engelska. Block enhet) överför data i block av data och används därför ofta för parallella dataöverföringar som används. Alla dessa enheter använder operativsystemets egen buffert .

Exempel på filnamn för blockorienterade enheter
Beskrivning av enheten Linux FreeBSD NetBSD / OpenBSD Mac OS Solaris
1. Diskett fd0
IDE hårddisk eller IDE CD-ROM-enhet på 1: a anslutnings master (i Linux ) hda ad0 wd0
IDE-hårddisk eller IDE-CD-ROM-enhet på den första slavanslutningen hdb ad1
1. primär partition av den första IDE -hårddisken hda1
15. logisk partition av den första IDE -disken hda15
1. Skiva av den första IDE -skivan ad0s1
15. Skiva av den första IDE -skivan ad0s15
1: a partitionen i den första delen av den första IDE -disken ad0s1a
2: a partitionen i den första delen av den första IDE -disken ad0s1b
IDE CD-ROM-enhet på den första anslutningsmastern acd0
IDE CD-ROM-enhet på den första slavanslutningen acd1
1. SCSI CD-ROM-enhet scd0 cd0
SCSI - (flyttbar) disk, minsta SCSI -ID sda disk0
SCSI - (flyttbar) disk, nästa större SCSI -ID sdb disk1
1. primär partition av den första SCSI (flyttbara) disken sda1 disk0s0
11. logisk partition av den första SCSI (flyttbara) disken sda15
SCSI (flyttbar) disk, minsta SCSI ID da0 disk0
5: e partitionen i den andra delen av den andra SCSI (flyttbara) disken da1s2e
C th SCSI controller med SCSI ID = T D: te hårddisken och på det S: e skiva c C t T d D s S
symbolisk länk på CD-ROM-enheten cdrom
Det första namnområdet för den första registrerade NVMe -enheten nvme0n1
Den första partitionen av det första namnområdet för den första registrerade NVMe -enheten nvme0n1p1

Karaktärsorienterade enheter

Teckenorienterade enheter överför bara ett tecken (vanligtvis en byte ) åt gången, så de måste tilldelas seriell dataöverföring . Vanligtvis, men inte alltid, överförs data obuffrad - dvs. omedelbart.

Exempel på filnamn för teckenenheter
Beskrivning av enheten Linux DOS / Windows Mac OS
1. Seriellt gränssnitt ttyS0 COM
1. Parallellt gränssnitt lp0 LPT1
2. Parallellt gränssnitt lp1 LPT2
symboliska länkar för pseudoterminaler tty X
Enhetsfiler för USB -enheter samt alla virtuella enhetsfiler usbdev1.1
symbolisk länk till musenhetsfil mouse
Fil av en rambuffert (t.ex. bildskärm) fb X
Drivfil i ritläge ( macOS ). rdisk0, rdisk1, ... motsvarar här den första, andra, ... hårddisken som en enhet i sig, medan rdisk0s1 till exempel är den första partitionen på den första hårddisken. rdisk#

rdisk#s#

Enhetsstyrenheten för den första registrerade NVMe -enheten nvme0

Nätverkskorten ( t.ex.Ethernet ,ISDN ) adresseras inte under Linux via enhetsfiler, utan via TCP / IP-stacken , även om enhetsfiler ofta också finns för speciella applikationer som t.ex. direktkontroll av hårdvaran ( netlink- enhet, D-kanal, etc.).

Uttagsorienterade enheter

Socket-orienterade enheter är inte enhetsfiler, utan en form av kommunikation mellan processer . Liksom FIFO är de inte enhetsfiler, men de kan också användas för att kommunicera med kärnan och utföra en liknande uppgift som karaktärsorienterade enheter.

Exempel på socketorienterade enheter
Filnamn menande
/dev/log Uttag för syslog -demonen
/dev/gpmdata Uttag för GPM musen multiplexer
/dev/printer Uttag för lpd

Falska enheter

En enhetsfil har inte en verklig enhet motsvarar, men kan också stå för en så kallad virtuell enhet (virtuell enhet) eller pseudo-enhet (pseudo-enhet). Detta är ett arbetsverktyg vars funktionalitet hanteras av operativsystemet (kärna, kärntillägg, drivrutin).

I motsats till vad termen virtuell enhet föreslår, återges inte nödvändigtvis en fysisk enhet här (se virtualisering ).

Följande är en lista över de vanligaste pseudodevices (alla teckenorienterade) i Unix och liknande system :

/dev/null kasserar alla ingångar utan att producera någon utgång
/dev/zero producerar en teckenström som bara består av nulltecken (i C -notation: '\0' )
/dev/full producerar en teckenström som, under läsåtkomst, endast består av nulltecken (i C -notation: '\0' ). Det finns ett ENOSPC -fel ("disk full") under skrivåtkomst.
/dev/random producerar riktiga slumpmässiga tal eller åtminstone kryptografiskt starka pseudo- slumpmässiga nummer (mestadels baserade på hårdvaruingångar)
/dev/urandom producerar pseudoslumpmässiga nummer (mestadels i motsats till /dev/random utan att blockera om ingen hårdvarudata genereras)

Hantering av enhetsfiler med Linux som exempel

Det Linux-specifika kommandot mknod används för att skapa enhetsfiler, vilket kräver tillhörande större och mindre nummer för att skapa en enhetsfil.

Om en användare installerade en ny drivrutin i tidiga Linux -versioner, måste en eller flera mknod skapas med detta mknod med hjälp av förardokumentationen och specificera det nödvändiga major / minor -numret för att kunna skapa det nödvändiga gränssnittet. Många Linux -distributioner gav därför redan tusentals enhetsfiler i /dev -katalogträdet, oavsett om de någonsin skulle behövas. Å ena sidan var det förvirrande, å andra sidan var det svårt att automatiskt ladda nya drivrutiner för ny maskinvara, eftersom enhetsfilerna alltid måste underhållas manuellt.

Inom flera år och kärnutgåvor utvecklades två nya koncept:

devfs

Devfs introducerades i Linux -kärnträdet 2.2. Den bakomliggande tanken var att kärnmodulerna själva bär information om namnen på de enhetsfiler de genererar, tillsammans med de mindre och stora talen och typen. Detta gjorde att kärnan kunde generera själva enhetsfilerna för första gången.

Kärnan skapade sedan automatiskt de enhetsfiler som krävs eller tillhandahålls av kärnan och dess moduler i devfs -filsystemet med hjälp av devfsd -demonen . Filsystemet var vanligtvis monterat i katalogen /dev .

udev

Efter noggrann övervägande verkade systemet med devfs vara för oflexibelt. Det krävdes ett system som reagerar när ny maskinvara är ansluten ( hotplugging ), laddar motsvarande kärnmoduler och skapar enhetsfilerna och tar bort dem igen när enheterna kopplas bort. Dessutom bör det vara möjligt att använda en uppsättning regler för att definiera vilket namngivningsschema du vill använda för dina enhetsfiler, hur de ska struktureras i underkataloger etc.

Med introduktionen av Kernel 2.6 blev udev detta nya enhetshanteringskoncept. I likhet med devfs finns det en demon som körs i användarutrymmet och gör det verkliga arbetet. Udev använder dock inte sitt eget filsystem, och den nödvändiga kärnkomponenten är mycket smalare, dvs mindre och enklare.

Enhetsfiler under Windows

Det finns också enhetsfiler i Windows : Du kan komma åt dem som programmerare använder CreateFile() subrutin . Namnet på en enhetsfil har formatet \\.\NAME . Enhetsfiler finns inte under normala kataloger, som under Unix, och kommunikationen är följaktligen inte transparent (för användaren). I allmänhet, som en användare med Windows skal, det finns inget sätt att komma åt enhetsfiler.

litteratur

webb-länkar