Wird die Speicherverwaltung im Linux-Kernel mithilfe von Paging oder Segmentierung oder beidem durchgeführt?
quelle
Wird die Speicherverwaltung im Linux-Kernel mithilfe von Paging oder Segmentierung oder beidem durchgeführt?
Linux verwendet beides. Es verwendet die Segmentierung, um den gesamten verfügbaren Adressraum zuzuordnen und gleichzeitig verschiedene Zugriffsrechte zu gewähren: im Grunde eine Kernel- und eine Benutzerraumansicht. Sie können den Linux-Quellcode für KERNEL_DS (Kernel-Datensegment) für einige Beispiele durchsuchen.
Paging wird dann zum Implementieren des virtuellen Speichers verwendet (Grep für "struct gdt_page" im Kernel als Ausgangspunkt)
Die Speicherverwaltung unter Linux erfolgt ausschließlich durch Paging.
Linux unterstützt sowohl "kleine" (normalerweise 4 KB) als auch "große" (2 MB) Seiten. Ersteres "funktioniert einfach", ohne dass Sie etwas Besonderes wissen oder tun, und Letzteres muss speziell behandelt werden (muss beim Booten reserviert und über ein spezielles Gerät zugeordnet werden).
Der einzige Kontext, in dem "Segment" unter Linux angezeigt wird, ist der brk () - Systemaufruf, mit dem das Datensegment eines Prozesses vergrößert wird (dies wird normalerweise nicht benötigt, malloc erledigt dies, ohne dass Sie sich darum kümmern müssen). In beiden Fällen wird der Speicher in Seiten bereitgestellt und in Seiten verwaltet. Dies hat nichts mit der x86-Segmentierung zu tun.