Naive Frage bzgl. C anhand des Beispiels des Universal Memory Allocator (Slap allocator)?

  • Ersteller Ersteller das.chaos
  • Erstellt am Erstellt am
D

das.chaos

Guest
Mir ist aufgefallen, dass bspw. Deklarationen von Variablen des Typs
>
> uma_zone_t my_xxx_zone;
>
siehe bspw. hier (Beispiel 1)
>
> http://fxr.watson.org/fxr/source/net/if_bridge.c?v=FREEBSD92#L236
>
bzw.
>
> http://fxr.watson.org/fxr/ident?v=FREEBSD92;i=bridge_rtnode_zone
>
oder hier (Beispiel 2)
>
> http://fxr.watson.org/fxr/source/netgraph/ng_pipe.c?v=FREEBSD92#L135
>
welche nur intern von Modulen (bzgl. o. g. Beispiele) verwendet werden (und nicht von Anderen).

Anhand dieses Gegenbeispiels (Beispiel 3)
>
> http://fxr.watson.org/fxr/ident?v=FREEBSD92;i=socket_zone
>
ist es mir nachvollziehbar, dass diese Deklaration (hier) nicht statisch
erfolgt.

Mir ist durchaus bekannt wie uma(9) implemtiert ist und wie dieses Subsystem
mit dem Kernel interagiert bzw. wie bzgl. uma(9) beschriebenes KPI verwendet
wird. Wie die Implementierung von uma(9) funktioniert habe ich verstanden und
wieso abundan ein Slap Allocator verwendet wird.

Zur eigendlichen Frage:

Existiert ein spezieller Grund (bspw. Wiederverwendbarkeit bzgl. moeglicher
Erweiterungen, was logisch nachvollziehbar sei), warum diese bei Kernelmodulen
(wo bspw. Vorkommnisse von uma_zone_t nur modulintern verwendet werden)
als nicht statisch deklariertsind? Bspw. erschliesst sich mir kein logischer Grund
(bzgl. Beispiel 1), warum keine statische Deklaration gegeben ist, denn hier ist
Strukturdefinition von
>
> http://fxr.watson.org/fxr/source/net/if_bridge.c?v=FREEBSD92#L192
>
bzw.
>
> http://fxr.watson.org/fxr/ident?v=FREEBSD92;i=bridge_rtnode
>
modulintern (da wuerde modulexterne Wiederverwendbarkeit dieser Zone keinen
Sinn ergeben).

Bzw. ist diese Tatsache mit einer Konvention verbunden (bspw. alle Variablen
des Typs X muessen nach Art und Weise Y deklariert sein) oder ist diese
Tatsache mit einem mir einen unbekannten "technischen" Zusammenhang
(bspw. ein technologischer Standard oder einer technologischen Norm) begruendet
(man kann ja nicht alles wissen, da ich auf meiner Reise in die Welt der
Systemprogrammierung bzw. der Betriebssystemarcitekturen, bzgl. selbstkritischer
Eigenbetrachtung, noch quasi am "Anfang" befinde)?

Man verzeihe mir diese naive Frage, aber momentan habe ich einen logischen
Knoten im Kopf und beisse in die Tischkante (vielleicht denke ich zu viel ueber
moegliche Ursachen scheinbar "unwichtiger Kleinigkeiten" nach und sollte
bestimmte Tatsachen als "gottgegeben anerkennen", aber womit ich mich nicht
Abfinden kann :-) oder es liegt am Wetter *kopftisch*).
 
Mmmmmmhhh... scheint wohl niemand die Frage verstanden zu haben.

Also, anders gefragt:

Warum werden bestimmte Vorkommnisse (innerhalb des Kernels) von Variablen,
bestimmten Datentyps (bspw. uma_zone_t), konsequent als nicht statisch deklariert,
obwohl diese teilweise (nur) lokal (bspw. siehe if_bridge(4)) verwendet werden und
Zugriff von externen Modulen keinen Sinn ergeben kann, da in Zone abgebildeter
Strukturdatentyp nur modulintern definiert wurde?

Was ist der Grund, dass alle Vorkommnisse definierter Zonen nicht als statisch deklariert
wurden?

Ist dieser Umstand auf eine nicht mir bekannte Programmiertechnik zurueckzufuehren?

Hat dies andere (nicht mir bekannte) Gruende? Oder wurde es einfach willkuerlich definiert,
alle Vorkommnisse (als bspw. uma_zone_t deklarierter Variablen), einheitlich, als nicht
statisch zu deklarieren?

Falls vorangegangenes Posting als Provokation (bspw. als Trollerei) missverstanden wurde,
so tut es mir leid. Ich versuche nur etwas zu lernen bzw. mir (aufgrund meiner Unwissenheit)
unlogisch erscheinendes zu verstehen. :-)
 
Zurück
Oben