Unix File System - Inode's

Pagina: 1
Acties:

  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don't fear

Topicstarter
Hey,

Ik ben bezig met een schoolopdracht. Heel vet, vooral omdat
ik nog weinig verstand heb van unix en het nu een keer ga doorgronden :-)

Het Unix File System is opgebouwd uit Inodes. Nou deze hebben een aantal eigenschappen. Doormiddel van een special file kun je een device gebruiken, alleen nou de vraag hoe werkt dit. Kan echt nergens iets vinden over hoe dat nou precies in zijn werk gaat. Het enige dat ik weet is:

-------
Zoals gebruikelijk wordt ook een device in het file systeem gerepresenteerd door een inode. Een inode bevat de volgende informatie:
• file mode;
• count of hard links;
• owner id;
• group id;
• time of last file access;
• time of last file modification
• time of last inode modification
• file size
• file addresses
In het ‘file mode’ veld wordt opgeslagen om wat voor soort bestand het gaat. Inhet geval van een device staat hier dat het gaat om een ‘special file’. In het ‘file size’ veld wort de specificatie van een ‘special file’ vast gelegt.
-------

Maar als ik de size opvraag van /dev/* 'files' dan krijg ik een size. Hoe werkt dit nou? Hoe wordt bijvoorbeeld een device driver aan zon inode gekoppelt.

Kan ik ook de informatie opvragen van een inode? hoe de inode van een bepaalde file er uit ziet? bijvoorbeeld door n c++ proggrammatje? Alle info is welkom :-)

thx alvast!

[gvr]muze[nl] says: fear is the mind killer


  • killercow
  • Registratie: Maart 2000
  • Laatst online: 20-02 08:34

killercow

eth0

Waarschijnlijk zie je bij /dev/* inodes niet de size van de pointer (de inode) maar van alles wat er achter schuilt? (bijvoorbeeld een andere file system?) al lijkt mij dit ook redenlijk onlogisch aangezien /dev/* objecten nog geen gemounte objecten zijn.
Waarschijnlijk koppel je de device drivers niet aan een /dev object maar maken je drivers juist die objects aan in je /dev dir. (andersom dus)

Je file system zal wel bijhouden welke driver met welke identifier een bepaald inode heeft gemaakt.

Iemand hier die het echt weet?

openkat.nl al gezien?


  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don't fear

Topicstarter
Weet nu dat door mknod een nieuwe device kan worden gemapt. En dat je hieraan een major en een minor nummer moet meegeven om iets te identificere maar wat?

[gvr]muze[nl] says: fear is the mind killer


  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
kingmuze schreef op 18 maart 2004 @ 15:32:
Weet nu dat door mknod een nieuwe device kan worden gemapt. En dat je hieraan een major en een minor nummer moet meegeven om iets te identificere maar wat?
Major number: device class ("harde schijven", "seriele poorten")
Minor number: device number (eerste harde schijf, tweede harde schijf, eerste seriele poort, tweede seriele poort)

Het major number word door de kernel gebruikt om een driver te selecteren, het minor number wordt gebruikt door die driver om iets anders te doen, meestal dus voor het onderscheid maken tussen meerdere hardware devices.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Verwijderd

De major en minor nummer geven aan wat voor soort device het is. Deze nummers zijn hardcoded in de kernel. Je kunt deze nummers vinden in /usr/src/linux/Documentation/devices.txt

Major 3/minor 0 is bijvoorbeeld de eerste IDE disk. Normaal heet die /dev/hda, maar niets let je om hem /dev/EersteIdeDisk te noemen. De naam is dus onafhankelijk van de functie.

(bovenstaande gaat uit van Linux, trouwens, op andere Unices kan het best anders werken)

  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
killercow schreef op 18 maart 2004 @ 14:53:
Waarschijnlijk zie je bij /dev/* inodes niet de size van de pointer (de inode) maar van alles wat er achter schuilt? (bijvoorbeeld een andere file system?) al lijkt mij dit ook redenlijk onlogisch
Je ziet helemaal geen grootte van /dev/* nodes, alleen de Major, Minor numbers
zo dus:
code:
1
2
3
wirf@wirf:(0)/dev$ ls -l hda
brw-rw----    1 root     disk       3,   0 Oct 24  2001 hda
wirf@wirf:(0)/dev$
Waarschijnlijk koppel je de device drivers niet aan een /dev object maar maken je drivers juist die objects aan in je /dev dir. (andersom dus)
Meestal is het zo dat je zelf (of de distributie) een special file ergens maakt (hoeft dus niet in /dev/ !) de driver doet dit meestal niet, die registreerd gewoon zijn Major number bij de kernel, de kernel activeert de driver zodra er een bestand aangeroepen wordt met dat major number.
Je kunt ook met dynamic Major numbers werken, waar de devicedriver een beschikbare major number aan de kernel vraagt. In dit geval wordt soms wel een /dev/ file gemaakt door de driver.
Sommige drivers, zoals die voor ethernet, werken niet met files en hoeven dus ook geen /dev/ file te hebben.

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • kingmuze
  • Registratie: Februari 2003
  • Laatst online: 05-11-2025

kingmuze

so don't fear

Topicstarter
Kijk :-) Zo wordt het dus al een stuk duidelijker! Het major & minor nummer wordt dus opgeslagen in het veld size van de inode? En dat soort geintjes worden niet uitgehaald door fat 32 of win-kind file systemen hè...

[ Voor 27% gewijzigd door kingmuze op 18-03-2004 15:54 ]

[gvr]muze[nl] says: fear is the mind killer


  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
kingmuze schreef op 18 maart 2004 @ 15:49:
Kijk :-) Zo wordt het dus al een stuk duidelijker! Het major & minor nummer wordt dus opgeslagen in het veld size van de inode?
Dat weet ik niet zeker, maar het zou kunnen
En dat soort geintjes worden niet uitgehaald door fat 32 of win-kind file systemen hè...
Nope, fat32 is een totaal ander systeem, geen inodes, geen special files (lage performance, lage efficiency)
Er bestaat wel zoiets als UMSdos, een (pseudo)filesysteem bovenop een DOS filesysteem die al die functies wel implementeerd, maar dat is een vieze hack

Heeft sinds kort zijn wachtwoord weer terug gevonden!


Verwijderd

kingmuze schreef op 18 maart 2004 @ 14:38:
Kan ik ook de informatie opvragen van een inode? hoe de inode van een bepaalde file er uit ziet?
zie de stat() systemcall en de tool stat (uit coreutils). Beide lezen de inode van een bepaalde file uit. Zie ook /usr/src/linux/include/linux/stat.h voor de kstat struct en /usr/src/linux/fs/stat.c voor de stat() routine zelf.

Hoe de IO van/naar devices gedaan word, durf ik je zo 123 niet te zeggen. Bij standaard block devices is het zo dat je daar voor de bulk van de transacties gewoon read() en write() kunt gebruiken, net zoals dat je dat met een normale file ook zou doen.

[ Voor 7% gewijzigd door Verwijderd op 18-03-2004 16:35 ]


  • Wirf
  • Registratie: April 2000
  • Laatst online: 09:20
Verwijderd schreef op 18 maart 2004 @ 16:30:
Hoe de IO van/naar devices gedaan word, durf ik je zo 123 niet te zeggen. Bij standaard block devices is het zo dat je daar voor de bulk van de transacties gewoon read() en write() kunt gebruiken, net zoals dat je dat met een normale file ook zou doen.
Je kunt ook read() en write() gebruiken voor character devices, met het verschil dat je op character devices niet kunt seeken.
Verder heb je meestal wel een paar ioctl() 's die je kunt gebruiken om bepaalde dingen in te stellen (mijn device driver gebruikte ioctl's om de grootte van het buffer in te stellen, bijvoorbeeld)

Heeft sinds kort zijn wachtwoord weer terug gevonden!


  • Martin Sturm
  • Registratie: December 1999
  • Laatst online: 12-02 13:47
Voor een uitleg over inodes en ook het /dev gebeuren kun je http://www.win.tue.nl/~aeb/linux/lk/ daar kijken en in het bijzonder http://www.win.tue.nl/~aeb/linux/lk/lk-10.html#ss8.6.4

(auteur is Andries Brouwer maintainer van man-pages en een Linux-kernel hacker sinds het begin)
Pagina: 1