Redest du jetzt von physisch nicht zusammenhängend oder virtuell nicht zusammenhängend? Ich finde deinen Eingangsbeitrag sehr verwirrend, was das angeht. Du redest zwar von physischem Speicher, aber meinst das Mapping. Irgendwas passt da für mich nicht zusammen.
Autor: Svenska
Ich rede von virtuell zusammenhängend, aber nicht physisch zusammenhängend. Bisher kann ich entweder eine Page oder viele physisch zusammenhängende Pages mappen (physische Pages in den virtuellen Adressraum mappen).
Fehler sollten aber normalerweise nicht auftreten
Eigentlich nicht, aber da meine momentane Variante auch noch die PageTables mappt (und dafür eine Page braucht, was ja fehlschlagen könnte) und ich halt darauf überprüfe ob versucht wird, auf eine schon vorhandene Page zu mappen, kann es halt doch zu Fehlern kommen.
Ich habe bei meinem PMM (der auf Bitmaps basierte) auch immer überprüft ob die Page wirklich benutzt ist, bevor ich sie freigegeben habe und ich überprüfe auch immer das alles was auf Pages arbeitet, mir auch wirklich eine Pageadresse gegeben hat. Sollte/kann ich denn sowas weglassen?
Ich dachte eigentlich das Linux und Windows dieses MAP_LAZY machen?!
Auf eine Frage habt ihr aber noch nicht geantwortet, wie bekommt ihr mehrere Pages an die Mapping-Funktion übergeben? Ich habe ja kein malloc() und einfach mal ein statisches Array auf dem Stack kann ich auch nicht erzeugen (jedenfalls nicht zu groß), da ich im Kernel nur 4kb Stack habe.
Ich will das dann so machen, das der VMM immer schon die physischen Pages in den PageTables reinschreibt (und somit auch für das PageTable Mapping verantwortlich ist) und die Mapping-Funktion dann nur noch die Flags setzen muss und die entsprechenden TLB Einträge ungültig macht.
tyndur mappt normal nur in Tateinheit mit Allokation, das macht die Interfaces gleich etwas einfacher.
Irgendwie steh ich hier aufm Schlauch