Okay, aber wozu braucht man das?
Die Idee der Segmentierung ist den Speicher zu unterteilen und jedem Programm ein Teil davon zu geben. Für jedes Programm gibt es dann einen Eintrag (= Deskriptor) in der GDT, der die Adresse und Größe X des Speicherbereichs (= Segment) enthält. Während ein Programm läuft, sind die Segmentregister mit entsprechenden Selektoren geladen, die besagen, welcher Eintrag genutzt werden soll. Aus Sicht des Programms beginnt der Speicher bei 0 und hat die Länge X. Die CPU schaut dann bei einem Speicherzugriff in der GDT nach, welche Basisadresse im Deskriptor steht und addiert sie zu der vom Programm referenzierten Speicheradresse. Außerdem prüft sie, ob diese Adresse innerhalb des Segments liegt. Die errechnete Adresse ist die lineare Adresse. Die kann dann genutzt werden, um auf den physischen Speicher zuzugreifen.
Die Idee dahinter ist, die Programme voreinander zu schützen (daher das "Protected" in "Protected Mode"), indem man die Segmente so einrichtet, dass sie sich nicht überlappen. Programme die versuchen über die Segmentgrenzen hinaus auf Speicher zuzugreifen, werden vom Betriebssystem daran gehindert. So wie ich das beschrieben habe, macht es allerdings niemand und die Segmentierung wird von kommerziellen Systemen ignoriert. Stattdessen wird Paging eingesetzt, das flexibler ist (keine feste Größe der Segmente). Allerdings ist die Segmentierung nicht abschaltbar, und man legt deswegen ein großes Segment an, dass bei der Adresse 0 beginnt und 4 GB groß ist (maximale Größe bei 32-Bit-Systemen). Damit ist Segmentierung im Prinzip ausgehebelt.
Woran erkenne ich, in welchem Mode ich gerade bin?
Wie man es erkennt, hat Svenska ja schon beschrieben, aber normalerweise weiß man es. Wenn der Computer gerade gestartet wurde oder dein Betriebssystem vom BIOS geladen wurde, ist das System im Real Mode. Wenn du dein Betriebssystem von einem Multiboot-kompatiblen Bootloader laden lässt, ist die CPU im Protected Mode. Und über Wechsel zwischen den Modi hast du (bzw. der Kernel) die Kontrolle.