Autor Thema: A20/Multitasking  (Gelesen 7331 mal)

Darkmonkey

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« am: 09. January 2008, 20:23 »
Hi,

Hab mal ein paar kleine Fragen:

1. Kann man das A20 Gate im Realmode nutzen wenn ja hat es einen Sinn?
2. Funktioniert Multitasking im Realmode gut oder überhaupt?
3. Wie funktioniert das mit den Segmenten + Offsets in Assembler?

Danke schon mal :-)

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #1 am: 09. January 2008, 20:55 »
1. Kann man das A20 Gate im Realmode nutzen wenn ja hat es einen Sinn?
Nein. Im Realmode kannst du nur 1MB adressieren.

Zitat
2. Funktioniert Multitasking im Realmode gut oder überhaupt?
Es macht keinen Sinn.

Zitat
3. Wie funktioniert das mit den Segmenten + Offsets in Assembler?
Das Segment wird in den Segmentregistern (cs, ds, es, fs, gs) gespeichert. Du gibst dann bei den Befehlen ein Segmentregister + ein Offset an. Aus dem Segment + Offset wird dann die physische Adresse errechnet, nämlich als (Segment * 16) + Offset. Ein kleines Beispiel:
mov ax, ds:[0xdead]
Das ds kann man in dem Fall auch weglassen, da standardmäßig ds als Segmentregister genommen wird, d.h.:
mov ax, [0xdead]
hat den gleichen Effekt. Hinzuzufügen ist auch noch, dass das Intel Syntax ist (im Gegensatz zur AT&T Syntax).
edit: Ich dachte jetzt an realmode Segment+Offset, falls du das im Bezug auf Protected-Mode meintest, sag was :-)

btw. mit grub bist du direkt im protected-mode (nicht mehr im realmode) und das A20 Gate wurde auch bereits aktiviert.
« Letzte Änderung: 09. January 2008, 20:57 von bluecode »
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

Osbios

  • Beiträge: 247
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 09. January 2008, 22:18 »
1. Ja, kann man!
Das A20 ist die 21 Adressleitung. Durch die Adressierung im Realmode Offset*(Segment*16) kann man auch die 21 Adressleitung beeinflussen. In alten PCs (80186) gab es diese Leitung aber noch nicht. Und aus Kompatibilitätsgründen schaltete man diese in neuen Systemen standardmäßig aus = A20 Gate.

System mit 20 Adressleitungen bzw. ausgeschaltetem A20 (21 Adressleitung):

Segment    FFFF
Offset      0010
        = 000000

System mit mehr als 20 Adressleitungen:

Segment    FFFF
Offset      0010
       =  100000

Man kann also im Realmode 0xFFFF + (0xFFFF * 0x10) = 0x10FFEF bzw. 1114095 Byte Adressieren, also über 1MiB!


2. Kann man. Jedoch fehlen die Funktionen um die Programme 100% voneinander abzuschotten. Wenn also ein Programm fehlerhaft ist und wild im Speicher rumschreibt, wird es wahrscheinlich auch die anderen Programme in Mittleidenschaft ziehen. Außerdem hat man mit ~ 640 KiB benutzbarem Arbeitsspeicher schnell ein Ressourcen Problem.

3. Wie Bluecode schon schrieb: Entweder nur das Offset angeben und DS wird als Segment benutzt oder Segment und Offset angeben. Interessanterweise haben die Befehl ohne Segmentangabe und die Befehle mit DS als Segment unterschiedlichen Bytecode?! Die Befehle machen aber alles dass selbe.

Die Schreibweisen unterschreiben sich von Assembler zu Assembler.
In Tasm (und glaube auch in Masm)  SEGMENT:[OFFSET]
In Nasm, Yasm und Fasm [SEGMENT:OFFSET]
Aber dass kannst du in den entsprechenden Dokus nachlesen.
db 0x55AA

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #3 am: 09. January 2008, 22:19 »
Nun ja, wenn das A20-Gate im RM aktiviert ist, kannst du 64 KByte minus 16 Byte mehr adressieren. *duck*

bitmaster
In the Future everyone will need OS-64!!!

Darkmonkey

  • Beiträge: 14
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 09. January 2008, 23:33 »
Danke

livinskull

  • Beiträge: 27
    • Profil anzeigen
    • Livinskulls site
Gespeichert
« Antwort #5 am: 09. January 2008, 23:36 »
wenn das A20 Gate aktiviert ist......
Das mit dem Aktivieren vom A20-Gate ist nämlich so ne Sache....
Jeder PC möchte das gerne anders aktiviert haben  :evil:

Naja, für den Realmode kannst es wohl nicht verwenden wie, bluecode und osbios schon sagten, und wenn du in den Protected Mode willst solltest du auch den Rat von den Grub-Anhängern hier berücksichtigen, es sei denn du bist so vernarrt wie ich und willst unbedingt auch den Bootloader selber schreiben.......

livinskull


jgraef

  • Beiträge: 67
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 10. January 2008, 06:34 »
Hi,

Also ich kann dir auch nur Grub empfehlen. Einen eigenen Bootloader zu schreiben ist imho Zeitverschwendung. Guck dir ein Tutorial zu Grub in unserer Wiki an und programmiere dann direkt den Kernel.

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #7 am: 10. January 2008, 07:32 »
Zitat
Einen eigenen Bootloader zu schreiben ist imho Zeitverschwendung.
Wenn man aber sein eigenes OS mit einem eigenen Dateisystem schreiben will, braucht man auch einen eigenen OS-Loader und erst dann ist das OS meiner Meinung nach auch ein eigenes. Denn der OS-Loader gehört genauso zu einem OS wie andere Sachen auch. So weit ich weiß, kennt GRUB auch nur die bereits vorhandenen Dateiformate ELF und PE. Und was ist mit eigenen? Und wenn ihr jetzt sagt, ein eigenes Dateisystem und ein eigenes Dateiformat bräuchte man nicht, wieso braucht man / proggt man dann überhaubt ein eigenes OS? Also Zeitverschwendung ist es mit Sicherheit nicht.

bitmaster
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #8 am: 10. January 2008, 07:43 »
Zitat
Interessanterweise haben die Befehl ohne Segmentangabe und die Befehle mit DS als Segment unterschiedlichen Bytecode?! Die Befehle machen aber alles dass selbe.
Es gibt auch für ds ein Segment Override Prefix (Intel Manual 1A, Kapitel 2.1.1), aber ein Assembler sollte das nur verwenden, wenn die Instruktion nicht schon implizit genau das gleiche Segment benutzt. Er kann das natürlich trotzdem hinschreiben, aber dann hat es ein Befehlsbyte mehr und bewirkt das gleiche.

Zitat
Wenn man aber sein eigenes OS mit einem eigenen Dateisystem schreiben will, braucht man auch einen eigenen OS-Loader [...]
Das ist falsch. Das tolle an open-source ist ja, dass man die Programme so anpassen kann wie man sie braucht. Grub ist natürlich open-source also kann man in ganz nettem C-Code einen eigenen Dateisystemtreiber schreiben und kriegt die vorgefertigten (und das sind einige!) einfach so dazu.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #9 am: 10. January 2008, 12:24 »
Wenn man aber sein eigenes OS mit einem eigenen Dateisystem schreiben will, braucht man auch einen eigenen OS-Loader [...]
Das ist falsch. Das tolle an open-source ist ja, dass man die Programme so anpassen kann wie man sie braucht. Grub ist natürlich open-source also kann man in ganz nettem C-Code einen eigenen Dateisystemtreiber schreiben und kriegt die vorgefertigten (und das sind einige!) einfach so dazu.
Zitat
Jo, copy and paste kann ja jeder. Ich möchte aber was eigenes machen.

bitmaster
In the Future everyone will need OS-64!!!

bluecode

  • Beiträge: 1 391
    • Profil anzeigen
    • lightOS
Gespeichert
« Antwort #10 am: 10. January 2008, 14:35 »
Jo, copy and paste kann ja jeder. Ich möchte aber was eigenes machen.
1. Das was ich vorgeschlagen hab ist nicht copy&paste. Ich würde danach nie behaupten, dass ich irgendwas außer dem Dateisystemtreiber an grub gemacht hätte.
2. Es ist eine wichtige Frage wo man mit der Eigenleistung anfängt. Man kann beim Transistorbau, beim Prozessorbau, beim PC-Zusammenbau, beim BIOS schreiben, beim Bootloader schreiben, beim Kernel schreiben, beim Treiber schreiben, beim Bibliotheken schreiben, beim Anwendungen schreiben oder beim Skripte schreiben anfangen. Überall kann man genausoviel Spaß haben und genausoviel Eigenleistung bringen und auch einiges lernen. Das jeder natürlich dazu seine eigene Meinung hat ist klar. Ich lass dir auch deine Meinung, aber es ist nicht fair die Meinung anderen mit einem "c&p kann ja jeder" niederzumachen. Würde ich ein BIOS schreiben könnte ich auch sagen, dass du 0xd00f bist, da du "erst" bei einem Bootloader anfängst.
3. Deine Aussage im Post davor war schlicht falsch und bedurfte einer Richtigstellung.
lightOS
"Überlegen sie mal 'nen Augenblick, dann lösen sich die ganzen Widersprüche auf. Die Wut wird noch größer, aber die intellektuelle Verwirrung lässt nach.", Georg Schramm

bitmaster

  • Troll
  • Beiträge: 1 138
    • Profil anzeigen
    • OS-64 = 64 Bit Operating System
Gespeichert
« Antwort #11 am: 10. January 2008, 15:18 »
@bluecode: Ist ja gut, alles im grünen Bereich. Nicht direkt aufregen.
In the Future everyone will need OS-64!!!

 

Einloggen