Devices

II Devices, partities en bestandssystemen

1 Devices

Devices (apparaten) vormen een belangrijk deel van het Linux besturingssysteem. Het is namelijk de manier waarop een Linux-systeem communiceert met de aangesloten hardware. De kernel doet veel op het gebied van de communicatie met de aangesloten randapparaten. Een harde schijf bijvoorbeeld bevat een heleboel informatie over bestanden en een apart gedeelte voor de 'boekhouding'. In dat boekhoudgedeelte wordt bijgehouden welke bestanden er bestaan, hoe groot ze zijn, etc. Als je een bestand opslaat op de harde schijf terwijl een andere gebruiker dat ook doet en de kernel zou zich niet met de boekhouding bemoeien, dan zou het een behoorlijke chaos worden op de harde schijf. Daarom doet de kernel de boekhouding en is zij ook de enige die daadwerkelijk bestanden wegschrijft.

Kernel

Algemeen gedeelte:
  • geheugenbeheer

  • procesbeheer

  • bestandsbeheer

Harddisk driver

WLAN driver

USB poort

Grafische kaart

Zoals je op de afbeelding kunt zien bestaat de kernel uit een aantal onderdelen. Links zie je de softwarecomponenten die zich bezig houden met zaken die een kernel altijd doet, zoals geheugenbeheer, procesbeheer en bestandsbeheer. Aan de rechterkant zie je een schematische weergave van aanwezige drivers (stuurprogramma's) in de kernel. Dit zijn stukjes software die in een kernel aanwezig kunnen zijn, maar dat hoeft niet. Er kan een driver aanwezig zijn voor een WLAN kaart, maar dat is niet verplicht.

De manier waarop een programma op een Linux-systeem communiceert met de in de kernel aanwezige drivers is via bestanden. Eigenlijk bestaat een Linux-systeem alleen maar uit bestanden en processen. Het betreft hier wel speciale bestanden, de zogenaamde apparaat bestanden (device files). De interactie tussen de hardware en gebruikers vindt plaats via deze apparaat-bestanden:

hardware > kernel driver > apparaat-bestand > programma

Deze bestanden staan in de /dev-map. Deze bevat vaak de volgende interessante device files:

Zoals je ziet worden veel onderdelen van een computersysteem gesymboliseerd door een bestand in de /dev/ map. Een aantal van deze bestanden zullen een belangrijke rol spelen in dit hoofdstuk.

2 Gevorderde devices

Nu je wat meer weet over device-bestanden gaat dit gedeelte er nog wat dieper op in. Hier komen block en character devices, major en minor device-nummers aan bod.

Block/character/FIFO

In feite bestaan er drie soorten device files en het verschil daartussen is te zien aan het eerste karakter bij een `ls -l` opdracht:

crw-rw-r-- 1 root root 189, 0 jul 6 19:43 /dev/bus/usb/001/001
brw-rw---- 1 root disk 8, 0 jul 6 19:43 /dev/sda

Bij de usb-poort staat een 'c', en bij de 'sda' (de harde schijf) staat een 'b'.

De 'b' staat hier voor een 'block' device en de 'c' voor een 'character' device. De block device file is voor gebufferde communicatie en de character device file is voor ongebufferde communicatie. Het verschil is eenvoudig. Als iemand achter een terminal werkt waarvan het toetsenbord is aangesloten op de tweede USB-poort, dan wil die gebruiker waarschijnlijk niet dat de computer wacht tot een buffer vol is voordat de inhoud wordt verwerkt. Hij wil dat, zodra hij een toets indrukt, deze ook door het systeem wordt ontvangen.

Een programma dat gebruik maakt van een DVD-brander of harde schijf wil graag gebruik maken van gebufferde communicatie want dat komt de efficiëntie ten goede.

Een ander zeer apart device-bestand is FIFO, ook wel 'named pipe' genoemd. Het is een bestand dat door twee programma's gebruikt kan worden om met elkaar te communiceren. Het eerste programma opent het bestand om naar te schrijven, een ander programma opent het bestand om van te lezen. De tekst FIFO betekent First In First Out, oftewel: “wat er als eerste in gaat, komt er ook als eerste uit”. Een FIFO wordt met een 'p' gedefinieerd.

major en minor

De in de /dev/ aanwezige bestanden wijken bij een `ls -l` opdracht enigszins af van wat je normaal gesproken ziet:

brw-rw---- 1 root disk 8, 0 jul 6 19:43 /dev/sda
-rw-r--r-- 1 root root 1307 jul 2 21:03 /etc/passwd

Geeft de normale versie de grootte van een bestand weer, bij een device file staan hier twee getallen. Het eerste getal wordt ook wel het 'major device number' genoemd. Met dit getal wordt aangegeven welke driver in de kernel bij deze device file hoort.
Elke driver in de kernel heeft zijn eigen major device number toegekend gekregen. Het tweede getal is het 'minor device number'. Dit getal geeft binnen de driver aan om welke variant het hier gaat. Bijvoorbeeld:

brw-rw---- 1 root disk 8, 0 jul 6 19:43 /dev/sda
brw-rw---- 1 root disk 8, 1 jul 6 19:43 /dev/sda1
brw-rw---- 1 root disk 8, 2 jul 6 19:43 /dev/sda2

Zoals je in bovenstaande lijst kunt zien maken al deze device files gebruik van hetzelfde major device number. Ze variëren onderling met het minor device number. Is minor 0 de driver voor de eerste SATA-harddisk, minor 1 is de driver voor de eerste partitie op deze disk en minor 2 is de driver voor de tweede partitie.

3 Harde schijf

De meeste Linux systemen zijn op dit moment pc's en deze zijn meestal voorzien van een harddisk, ook wel 'harde schijf' genoemd. Een harde schijf is een onderdeel in de computer waarin een aantal schijven zitten met daarop een magnetische laag waarop gegevens kunnen worden opgeslagen. De schijven in dit onderdeel draaien zeer snel rond. Boven het oppervlak van de schijf zweeft een opnamekop die gegevens opslaat. De schijven draaien zo snel dat de kop op een zeer kleine afstand boven de schijf blijft zweven.

Een bedieningsarm zorgt er voor dat de kop net als bij een platenspeler heen en weer kan bewegen boven de schijf. Eén en ander is te zien op de afbeelding.

Een schijf wordt opgedeeld in een aantal onderdelen. Ten eerste het aantal 'tracks' of 'cilinders'. Dit is te vergelijken met de jaarringen van een boom. Elke harde schijf heeft op elke schijf een aantal tracks naast elkaar liggen. Elke track is ook weer opgedeeld in delen, 'sectoren' genaamd. Omdat een harde schijf meerdere magnetische schijven kan bevatten, wordt ook vaak het aantal lees/schrijf-koppen vermeld, het aantal 'heads'.

De prijs van harde schijven is door de jaren heen drastisch gedaald. Had de eerste harde schijven een maximale opslagcapaciteit van 5 MB en een prijs van vele duizenden euro's, tegenwoordig kun je voor een luttel bedrag al een harde schijf kopen met een capaciteit van 500 GB.

Een harde schijf wordt altijd aangesloten op een controller. Dit is een stuk elektronica dat de communicatie met de harde schijf regelt. Ook DVD-spelers en tape-units communiceren op dezelfde manier met de controller. Er zijn drie verschillende soorten controllers (en dus ook harde schijven, cd-rom spelers, tape-units, etc.) in omloop.

IDE

IDE is de afkorting van Integrated Drive Electronics. Dit type harde schijf was populair en relatief goedkoop. Op een IDE-controller kun je normaliter twee apparaten aansluiten. De eerste wordt daarbij aangeduid als master en de ander als slave. In oudere computers zitten twee IDE-controllers zodat je maximaal 4 schijven (zowel harde schijven als DVD-spelers!) kunt aansluiten. Eigenlijk gebruiken de computers Enhanced IDE (EIDE) omdat IDE zelf maximaal 528 MB schijven ondersteunde en deze capaciteit tegenwoordig enigszins achterhaald is.

SATA

De Serial ATA-controller is vandaag de dag standaard en sneller dan IDE. Serial ATA biedt boven Parallel ATA (IDE) vele voordelen: zo zijn de kabels dunner (beter voor de luchtcirculatie) en de aansluiting op de harde schijven is minder gevoelig.

Voor alle controllers geldt dat ze niet onderling uitwisselbaar zijn. M.a.w.: je kunt niet een Serial ATA harde schijf aansluiten op een IDE-aansluiting in uw computer. Kijk in de documentatie van uw computer of moederbord welke controllers uw computer ondersteunt.

Opdrachten

  1. Start een terminal.

  2. Voer de opdracht `cat /dev/random` uit. Wat merk je?
    Onderbreek de opdracht met de toetscombinatie <Ctrl+C>.

  3. Bepaal tot welke soort de volgende device file behoren:

    /dev/audio:

    /dev/bootsplash:

    /dev/dvd:

    /dev/console:

    dev/initctl:

    /dev/dsp:

    /dev/sda:

    /dev/loop0:

    /dev/lp0:

    /dev/input/mouse0:

    /dev/mixer:

    /dev/tty:

    /dev/snd/seq:

    /dev/xconsole:

  4. Zoek het major en minor device number op van de volgende device files:

    /dev/audio:

    /dev/console:

    /dev/dsp:

    /dev/mixer:

    /dev/sda:

    /dev/loop0:

    /dev/snd/seq:

    /dev/tty:

    1. Welke hierboven opgesomde devices gebruiken dezelfde driver: