Hello,
These :
Die grossen Strings bau ich natuerlich durch Konkatenierung zusammen.
Er indiziert wahscheinlich die Teilbaüme nicht um
Klar, wenn ein "String" größer als ein Segment wird, muss er vermutlich sowieso zusammengesetzt werden, oder wird bei x366 immer über die klassischen Segmentgrenzen hinweg gearbeitet?
Ich weiß nicht mehr, wie das im Protected Mode funktioniert mit very large objects.
Die Segmentdeskriptoren haben eine 32-Bit Startadresse
und ein 20-Bit Limit.
Wenn uudem das Granularitätsbit (DW #2 / Bit #23 = Bit #54) gesetzt ist, eine Granularität von 4K ( statt 1 Byte )
4K = 2^12
2^12*2^20 = 2^32 - wie es sein soll ;-)
Aber das Paging ist wohl eher das Problem
32 Bit Basisadresse in CR3
Lneare Adresse :
Pageverzeichnis# (10Bit)
Tabelle# (10Bit)
Offset (12Bit)
( Die Einträge im Verzeichnis sind selbst 32Bit lang, in der Tabelle auch, aber von letzterem sind nur Bit #12 - Bit #31 nutzbar; Bit #0 ist das "Present Bit" das der Proz zum Page Faulting, also das OS zum Swapping braucht. )
Aber der Offset halt nur 2^12 = 4k = Pagesize des x386.
Allerdings können natürlich mehrere aufeinanderforlgende Pages durch aufeinanderfolgende Einträge inder Pagetabelle in einen logischen Block fallen.
Wobei mir gerade mal ganz peinsam einfällt ob NT dass ich nicht weiss ob NT eigentlich _immer_ Paging nutzt.
Ich glaub aber schon dass das so ist.
Technisch zwingend ist das ja aber nicht - der Mechanismus von PageFaulting / Exception / Handler kann auch ( wie z.B. auf nem Alpha ) nachgebildet werden.
Aber wenn Du mal wieder im PHP Quellcode arbeitest
;-) ;-) ;-)
unsigned long _cr0;
_asm {
push eax
/* _THIS_ way shouldn't cause an exception */
mov eax,cr0
/* _THIS_ on the other hand
mov cr0, eax
is an isuue Bootstraps ;-) */
push eax
pop _cr0
pop eax
}
// ;-)
Bit #31 ist "Paging Enabled".
Aber ich glaub schon das das nach dem Boot immer gestzt ist; im TSS ist CR0 gar nicht enthalten.
Das ist so das was ich zum Speichermodell des Wintel x386 zusammenkriege.
Grüsse
Holger
Der Einsprungspunkt wird durch den Descriptor für ein Datensegment bestimmt. Der zeigt ja eigentlich auf einen 32-Bit-Wert. Direkt kommt man an den ja gar nicht dran. Und das Dereferenz-Register hat im Prinzip ja auch 32 Bit...
P.S.: Wo klemmt's denn bei den Buffern?
Auch reiner Lesezugriff durch Mutex/Semaphore/Teufelwasauchimmer blockiert?
Ich habe das noch nicht genauer untersucht.
http://www.php.net/manual/en/function.stream-set-write-buffer.php
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom