Du darfst den virtuellen Bereich erst dann als frei markieren wenn dieser sicher aus allen TLBs gelöscht ist! Erst danach ist es sicher das dieser virtuelle Bereich für was anderes benutzt wird.
Darum muss ich mich jetzt nicht mehr kümmern bzw. kann es ignorieren. Denn der NMI wird sofort bearbeitet.
Es wurde hier ja schon mehrmals geschrieben, OS-Dev ist wirklich nicht der ideale Bereich um allgemeine Programmier-Erfahrung zu sammeln.
Sorry, aber dem kann ich nicht zustimmen. Mir wurde bereits vor 10Jahren in einer Newsgroup gesagt, was ich kann und was nicht und auch das hat sich hinterher als falsch erwiesen (ich wollte Assembler lernen indem ich nen Assembler programmiere und bin verdammt weit gekommen). Ist alles ne Frage der Hartnäckigkeit und des Willens.
Problem ist halt meistens nur, das anstatt sich selbst damit zu beschäftigen die meisten eher Copy&Paste machen, aber ich war schon immer jemand der lieber alles selbst macht (das hat natürlich auch Nachteile, vorallem in der reallen Welt
).
Du kannst für jede beteiligte Funktion ein enum bauen in dem der aktuelle Status (also der gerade ausgeführte Teil-Abschnitt der zugehörigen Funktion) drin ist, es dürfen nur bestimmte Kombinationen dieser Stati auftreten und alles andere ist ein Fehler. Diese Funktionen können bei einem SMP-System natürlich mehrmals parallel aus unterschiedlichen Kontexten aufgerufen werden so das Du diese enums dynamisch (inklusive der Call-History) erstellen musst (dafür könnte man einen statischen Pool nehmen der einfach nur groß genug sein muss um alle gültigen Kombinationen bei der gegebenen CPU-Anzahl aufzunehmen).
Ich lese in dem ganzen Text nur Bahnhof
Also diejenigen die wirklich wollen das ihr Projekt ein Erfolg wird machen das tatsächlich. Ich hab sowas schon in einigen Firmen erlebt und weil ich gelernt hab das gut geplant == halb geschafft ist mach ich das in Hobby-Projekten auch immer so.
Das setzt aber vorraus dass das jemand macht der Erfahrung hat. Wenn du keine Ahnung von den Anwendungen hast (so wie ich) und dein OS designst dann wirst du an irgendeinem Punkt feststellen dass das Design so nicht funktioniert und/oder unvollständig ist.
Ich mache mir auch vorher nen Kopf, aber ich schreibe das nicht auf oder setze mich hin mit dem Ziel, jetzt machst du mal ein Design fertig (so funktoniert das mit den guten Ideen eh nicht).
Ich weiß nicht wieviel Erfahrung du mit dem Designen von Schaltungen hast, aber ich behaupte mal du wirst auch die eine oder andere Designschwäche erst finden wenn dann alles läuft.
@Offtopic
Hast du eigentlich vor nen Emulator für dein System zu schreiben? Denn so könntest du z.B. Designschwächen schon vorher feststellen.
@Ontopic
Dann ist Dein Projekt wohl bereits jetzt schon zum Scheitern verurteilt.
Das ist einfach zu Allgemein! Denn ich sage mal ich bin schon verdammt weit gekommen (und wäre schon weiter wenn ich nicht oft Motivationsprobleme hätte) ohne das ich mein OS designt habe. Was richtig ist, das ich mir mit einigen Überlegungen den einen oder anderen Rewrite hätte sparen können, aber auch die waren im Nachhinein wichtig und gut. Denn man lernt am besten aus Fehlern.
Was denkst Du warum es all diese tollen Projekt-Management-Tools gibt?
Um viele Leute zu synchronisieren und einen bestimmten Zeitplan einhalten zu können?! Ich lerne das ja auch alles in der Uni, aber für ein ein Mann-Hobby-Projekt ist ein PMT wirklich sehr übertrieben. Ich arbeite an der Sache wo ich gerade Lust drauf habe und nicht auf irgendeinen Milestone hinaus. Auch irgendwelche Features werden halt dann implementiert wenn ich sie brauche oder über eine interessante Idee gestolpert bin die ich umsetzen will.
Was ich mal benutzen sollte, wäre ein RVS.
Deswegen sollte man ja auch erst mal mit kleinen Projekten anfangen und sich dann ordentlich hocharbeiten.
Sorry, halte ich was das Hobby betrifft auch für quatsch. Im Berufsleben ja, wo es um Leben und Tod (sinnbildlich) geht.
Ich habe mir als großes Ziel gesetzt nen OS zu schreiben. Alle sagen schaffst du eh nicht. Wenn ich dann irgendein kleineres Ziel erreicht habe (z.B. Bootloader, Kernel kann Speicher allokieren usw.) dann freue ich mich umso mehr, aber zu sagen, nur weil man sich ein verdammt hohes Ziel gesetzt hat, das man es nicht erreicht oder das es nichts bringt ist falsch!
Innerhalb eines NMI-Handlers kannst Du quasi keine Funktionen des restlichen Kernels nutzen, weil die ja alle durch einen NMI unterbrochen werden können und daher auch in kritischen Zuständen sein können.
Ist klar und deswegen überlege ich auch, die Rendevouz-Funktionalität wieder in einen normalen Int auszulagern, aber solange ich den nur für das eine Mal zum Synchronisieren nehme, ist das noch kein Problem.
Was mir noch eingefallen ist, nen NMI kann man auch wunderbar dafür nutzen um Deadlocks zu beheben (da wird ja dran geforscht, weiß nicht ob da schon was bei rausgekommen ist?).