Das in jedem OS für x86 Segmentierung benutzt wird liegt größtenteils daran, dass man auf x86 Prozessoren die Segmentierung nicht ausschalten kann
. Aber mal Spaß bei Seite, es kommt doch drauf an was man damit macht. Paging wird ja benutzt um jedem Programm einen eigenen virtuellen Speicherbereich zu verschaffen und so die einzelnen Programme voneinander und vom Kernel abzuschotten. Dazu "hebelt" man die Segmentierung aus indem man alle Segmente über den gesamten Adressraum setzt, und nur das Minimum an Segmenten, sprich Kernel-Code, Kernel-Daten, User-Code und User-Daten setzt. Wenn man jedoch aus irgendwelchen Gründen kein Paging implementieren möchte, kann man die virtuellen Adressbereiche und die damit verbundene Sicherheit auch mit Segmentierung simulieren, indem man jedem Programm ein Code und Daten Segment gibt. Diese zeigen jedoch für jedes Programm auf denselben Speicherabschnitt. Also findet aus Sicht des Programmes garkeine Segmentierung statt. Aus Sicht des Kernels müssen halt nur beim Taskwechsel andere Segmente geladen werden und es ist ein wenig mehr Verwaltungsaufwand für die Segmente nötig.
Bei der richtigen Segmentierung teilst du hingegen dein Programm in mehrere Segmente auf, mit unterschiedlichen Segmentbasisadressen und -gnenzen, und das macht heut wirklich fast keiner mehr und das wird auch nicht vom GCC unterstützt, liegt wohl auch daran dass dies fast nur von x86 Prozzis unterstützt wird.