segmentation fault vs page fault
-
Wurde ich gefragt, welche Unterschiede und Beziehungen zwischen
segmentation fault-und Seite-Fehler? -
Tut segmentation fault gehören nur der segmentierte Speicher-Modell?
Macht Seite Fehler gehören nur den ausgelagerten Speicher-Modell?
Wenn beides ja, da die meisten computer-Systeme wie x86 und Linux verwenden ausgelagerten Speicher-Modell statt segmentierter Speicher-Modell, warum GCC C-compiler berichten manchmal segmentation fault Fehler?
Dank und Grüße!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese beiden Dinge sind sehr unterschiedlich, eigentlich. Ein segmentation fault bedeutet, dass ein Programm versucht, Zugriff auf eine ungültige oder illegale Speicheradresse: zum Beispiel 0 oder einen Wert, der größer ist als alle gültigen Zeiger. Ein page fault ist, wenn ein Zeiger versucht, Zugriff auf eine Seite von address space, die derzeit nicht zugeordnet werden auf physikalischen Speicher, so dass die MMU braucht, um es zu packen aus der Festplatte, bevor es verwendet werden kann. Das erstere ist ein illegaler Zustand, und das Programm wird in der Regel abgebrochen werden; letzteres ist vollkommen normal und das Programm wird nicht einmal davon wissen.
"Segmentierung" ist nicht in allen mit Bezug auf die alte "segmented memory model" verwendet, die von den frühen x86-Prozessoren; es ist eine frühere Nutzung, die gerade bezieht sich auf einen Teil oder segment Speicher.
Segmentierung Fehler auftreten, wenn der Speicher darf nicht zugegriffen werden (nicht vorhanden oder verboten ist). Am häufigsten werden Sie auftreten, wenn Sie dereferenzieren eines null-variable, oder führen Sie über das Ende eines array. Seitenfehler treten auf, wenn der Speicher zugeordnet wird, aber nicht geladen, auf die zugegriffen wird. Sie sind keine Fehler, und das signal an das Betriebssystem, die es laden soll, die entsprechende Seite in den Speicher.