Dateisystem addressierung

hallo!

hoffe das passt hier rein, hab irgendwie nix besseres gefunden :smile:

also:
ich lern grad auf meine klausuren (ich verrückter :stuck_out_tongue:) und bin in „systemsoftware“ in einer alten klausur über diese frage gestolpert, die ich trotz script und gegoogle nicht für mich beantworten kann; nichmal nen „ansatz“ hab ich wirklich - irgendwas mit den inodes halt, aber mehr hab ich nich herausgefunden.

die frage:

In einem klassischen Unix-Dateisystem sei die Blockgröße 1KB und kann durch
32 Bit adressiert werden. Eine Datei sei 512 KB groß. Wie viele Blöcke der Datei
müssen 2-fach indirekt adressiert werden (Begründen Sie Ihre Antwort)?

kann mich da wer erleuchten?

danke im voraus
Geisterkarle

Aber Karle…
Du weisst doch, dass hier keine Hausaufgaben beantwortet werden.
In einem IT-Studium sollte man m.E. als erstes lernen, google zu bedienen :fg:

Die Sache ist nicht to schlimm wie Du Dir das vorstellst.
Einfach mal ne Nacht drüber pennen, reinbohren bringt da garnix.

Haeng Dich mal hier rein.
google: filesystems
http://www.tldp.org/HOWTO/Filesystems-HOWTO.html

Aloha - digi (aEg)

Du weisst doch, dass hier keine Hausaufgaben beantwortet
werden.

will ich auch gar nicht; aber wenn ich vor nem berg steh, wärs nett, wenn ich irgend wo erzählt bekomme, wo der pfad nach oben is; der fehlt nämlich mir!

In einem IT-Studium sollte man m.E. als erstes lernen,
google zu bedienen :fg:

wenn ich mit allem, was ich versucht hab, nach 30 min kein land mehr sehe, geb ich halt auf!

Die Sache ist nicht to schlimm wie Du Dir das vorstellst.
Einfach mal ne Nacht drüber pennen, reinbohren bringt da
garnix.

nacht drüber pennen bringt mich in 99% der fälle nicht weiter!

Haeng Dich mal hier rein.
google: filesystems
http://www.tldp.org/HOWTO/Filesystems-HOWTO.html

50% steht (todo)
ansonsten irgendwelche verlinkungen
-> da steht wirklich absolut nix sinnvolles; da such ich lieber wo anders!

bin aber wenigstens irgendwie darüber mal zu einem verwertbaren ziel gekommen.

Es gibt im Inode-Zeiger auf die ersten 12 Blöcke die die Daten der Datei enthalten. Außerdem gibt es einen Zeiger auf einen indirekten Block (der wiederum Zeiger auf den nächsten Satz von Blöcken der Datei enthält) einen Zeiger auf einen doppelt indirekten Block (der Zeiger auf weitere indirekte Blöcke enthält) und einen Zeiger auf einen dreifach indirekten Block (der Zeiger auf doppelt indirekte Blöcke enthält).

erstmal jetzt meinen prof anschreiben, denn im script steht „10 blöcke“; weiteres gegoogelt hat (zwar auch nicht sicher, aber immerhin) aber die 12 bestätigen können.

zudem muss ich das ja noch irgendwie kapieren. vielleicht kann man mir hier wenigstens meine jetzt folgende überlegung bestätigen bzw. verreissen:

wichtig in dem zusammenhang sind 4 inodezeiger:
der erste, direkte, der auf die ersten 12 blöcke verweist.
dann den 1. indirekten, der auf einen block verweist, der im eigentlichen mit den enthaltenen daten der datei wenig zu tun hat, aber in dem die zeiger zu den nächsten 12 12er-blöcken sind.
dann den 2. indirekten, der auf einen block verweist, in dem zeiger zu 12 blöcken der 1. stufe sind. somit 2fach indirekt auf die blöcke zeigt.
und dann noch der 3. indirekte, der auf einen block der 2. stufe zeigt.

für meine aufgabenstellung wäre das dann die rechnung:
512 blöcke zu verweisen
direkt: 12, bleiben 500
1fach indirekt: 144 (12x12), bleiben 356
also müssen 356 blöcke 2fach indirekt addressiert werden.

korrekt? völliger blödsinn?

tüftelnder
Geisterkarle

Hi…

Es gibt im Inode-Zeiger auf die ersten 12 Blöcke die die
Daten der Datei enthalten. Außerdem gibt es einen Zeiger auf
einen indirekten Block (der wiederum Zeiger auf den nächsten
Satz von Blöcken der Datei enthält)

erstmal jetzt meinen prof anschreiben, denn im script steht
„10 blöcke“; weiteres gegoogelt hat (zwar auch nicht sicher,
aber immerhin) aber die 12 bestätigen können.

Den brauchst Du nicht zu fragen, stattdessen solltest Du die Aufgabenstellung nochmal aufmerksam lesen: Mit „klassisches Unix-Dateisystem“ meint er wohl System V - da waren’s noch 10. Du hast vermutlich eine ext2-Beschreibung ergoogelt, das adressiert 12 Blöcke direkt.

zudem muss ich das ja noch irgendwie kapieren. vielleicht kann
man mir hier wenigstens meine jetzt folgende überlegung
bestätigen bzw. verreissen:

wichtig in dem zusammenhang sind 4 inodezeiger:
der erste, direkte, der auf die ersten 12 blöcke verweist.
dann den 1. indirekten, der auf einen block verweist, der im
eigentlichen mit den enthaltenen daten der datei wenig zu tun
hat, aber in dem die zeiger zu den nächsten 12 12er-blöcken
sind.

Zu weit gedacht, das wäre schon doppelt indirekt.

Der indirekte Block ist (daher der Name) ein ganzer Block voll „direkter“ Adressen. SysV verwendet hier wie ext2 4 Byte pro Adresse, d.h. einfach indirekt können blocksize/4 Datenblöcke adressiert werden.

Der doppelt indirekte Block enthält die Adressen von blocksize/4 einfach indirekten Blöcken, adressiert also maximal blocksize²/16 Datenblöcke.

für meine aufgabenstellung wäre das dann die rechnung:
512 blöcke zu verweisen
direkt: 12, bleiben 500
1fach indirekt: 144 (12x12), bleiben 356
also müssen 356 blöcke 2fach indirekt addressiert werden.

korrekt? völliger blödsinn?

Bis auf die oben erklärten Korrekturen ok. Nochmal richtig rechnen darfst Du selbst :wink:

genumi

Den brauchst Du nicht zu fragen, stattdessen solltest Du die
Aufgabenstellung nochmal aufmerksam lesen: Mit „klassisches
Unix-Dateisystem“ meint er wohl System V - da waren’s noch 10.
Du hast vermutlich eine ext2-Beschreibung ergoogelt, das
adressiert 12 Blöcke direkt.

aha! mal wieder klar, dass man mit dem ältesten rumwerkeln muss, während die „welt“ sich langsam sogar auf ext3 umstellt :stuck_out_tongue:

Der indirekte Block ist (daher der Name) ein ganzer Block voll
„direkter“ Adressen. SysV verwendet hier wie ext2 4 Byte pro
Adresse, d.h. einfach indirekt können blocksize/4 Datenblöcke
adressiert werden.

Der doppelt indirekte Block enthält die Adressen von
blocksize/4 einfach indirekten Blöcken, adressiert also
maximal blocksize²/16 Datenblöcke.

und die blocksize is ebenfalls 1kb (1024 byte) !?!? bzw. hängt die inode blocksize von der datablocksize ab?

Bis auf die oben erklärten Korrekturen ok. Nochmal richtig
rechnen darfst Du selbst :wink:

direkt: 512 - 10 = 502
obiges angenommen, passt in einen block 1024/32 = 32 adressen.
1fach indirekt: 502 - 32 = 470
diese 470 müsste also 2fach sein.

nu korrekt?

*langsamlichtaufgehender*
Geisterkarle

Der Nebel lichtet sich
Hi…

Der indirekte Block ist (daher der Name) ein ganzer Block voll
„direkter“ Adressen. SysV verwendet hier wie ext2 4 Byte pro
Adresse, d.h. einfach indirekt können blocksize/4 Datenblöcke
adressiert werden.

und die blocksize is ebenfalls 1kb (1024 byte) !?!? bzw. hängt
die inode blocksize von der datablocksize ab?

Es gibt nur eine Blockgröße pro Dateisystem. Der indirekte Adressblock ist ein Filesystem-Block wie jeder andere, insbesondere ist er genauso groß.

direkt: 512 - 10 = 502

Soweit noch ganz einfach und auch richtig.

obiges angenommen, passt in einen block 1024/32 = 32 adressen.

Du hast Spaß dran, Dinge zu verwechseln, oder? 1 Bit != 1 Byte :wink:
In 1024 Byte passen daher 256 32-Bit-Adressen. Bleiben 246 Blöcke, die doppelt indirekt addressiert werden.

Und damit Du jetzt nicht völlig klar siehst, noch ein bisschen Verwirrung stiften: SysV FS adressiert seine Blöcke nur mit 24 Bit.
Im Inode ist es dann auch so sparsam, nur drei Byte pro Adresse zu verwenden, während in den indirekten Adressblöcken jedes vierte Byte einfach Null ist.

genumi

Du hast Spaß dran, Dinge zu verwechseln, oder? 1 Bit != 1 Byte
:wink:

da komm ich auf die idee, dass ich ja das 1kb in byte umrechnen muss und mache bei byte gleich weiter o.O
wie wärs 8192/32 (bit) *g*

na! aufgabe wohl endlich gelöst! danke an alle :wink:

gruß
Geisterkarle