[LoN]Kamikaze said:
Ich dachte ein Segfault wäre wenn eine Speicheradresse nicht an der Wortlänge ausgerichtet ist und ein Page Fault wenn man auf eine Speicheradresse zugreift, die einem nicht (mehr) gehört.
Nein, das Ausrichten an Wortlängen ist ein plattformspezifisches Problem, das vom Compiler korrekt gehandhabt werden muß. Wenn der Compiler dabei fehlerhaften Code produziert, kann natürlich ein Segmentation Fault auftreten. Das ist aber nur
eine mögliche Ursache für einen Segmentation Fault, und zudem schon eine ziemlich spezifische, die mir persönlich bisher bei keinem Compiler untergekommen ist. (Das heißt natürlich nicht, daß das nicht mal irgendeinem Compiler irgendwann mal passiert sein mag.)
Ganz allgemein passiert ein Segmentation Fault immer dann, wenn man auf Speicherbereiche zugreift, die man nicht (mehr) für sich reserviert hat und dementsprechend in diesen Speicherbereichen einfach nichts zu suchen hat. Dieses Problem hat der Anwendungsprogrammierer dann selbst verbockt, woraufhin der Kernel das Programm zwangsweise terminiert.
Ein Page Fault dagegen könnte etwa beim folgenden Code auftreten, wenn der Speicherbereich, auf den
string verweist, zwischen den beiden Anweisungen in den Swap rausgeschrieben würde:
Code:
char* string = malloc(sizeof("Hello World!"));
string = "Hello World!";
Dann müßte dieser Speicherbereich erst wieder in den RAM geschoben werden, damit die zweite Anweisung ausgeführt werden kann. Dies sollte normalerweise kein Problem sein, da bei einem Page Fault in den Kernel-Modus geschaltet wird und dieser die benötigten Speicherseiten reinkopiert. Anschließend wird das Programm fortgesetzt - es hat nichts von dem Page Fault mitbekommen.
Ein Page Fault ist also ein durch den Kernel reparabler "Fehler" und bei Systemen mit virtueller Speicherverwaltung ganz alltäglich. Wenn dabei was schiefgeht, liegt ein Fehler im Betriebssystem oder ein Hardwarefehler vor. Die Anwendung ist dabei unschuldig, denn sie kann das Paging gar nicht beeinflussen.
Ich möchte das Thema an dieser Stelle nicht weiter breittreten, da es dem OP nichts bringt, sondern eher auf passende Literatur (wie etwa "Modern Operating Systems" von Tanenbaum) verweisen.
sunny said:
Kannst du mir paar commands an den Kopf werden wie ich weiter komme?
Schau dir mal
http://wwww.lemis.com/grog/Papers/Debug-tutorial/tutorial.pdf an, das ist IMO eine gute und umfassende Einführung in das Thema (ist übrigens vom Autor des Buches "The Complete FreeBSD").