Hallo,
Wenn wir beide mit unseren OSen fertig sind können wir ja gegenseitig versuchen unsere Systeme zu knacken, mal sehen wer damit reichhaltigeren Erfolg hat.
Das Passwort und die Wohnungstür sind eben nur 2 verschiedene Ebenen an Sicherheit. Kein normaler Mensch würde auf die Idee kommen auch nur eine dieser beiden Ebenen zu vernachlässigen. Sicherheit entsteht auch immer zu einem guten Anteil durch Redundanz!

Grüße
Erik
Denn was hier gemacht wird ist Symptom Bekämpfung und nicht die Ursachen beseitigen!Die Ursache ist das der Mensch (als Programmierer) nicht perfekt ist! Daran kann man prinzipiell nichts ändern oder willst Du die Programmierer abschaffen und SW-Design nur noch den Computern selber überlassen?
Warum sollte sich denn ein Programmierer um solche Sachen wie nen Bufferoverflow kümmern, wenn das OS es doch macht und es so auch noch performanter ist? Ich will nicht die Bequemlichkeit der Programmierer unterstützen.Menschen machen nun mal Fehler und wenn Du trotz dessen eine hohe Sicherheit erreichen willst dann funktioniert das nur wenn Du auf jeder Ebene versuchst ein Maximum an Sicherheit zu erreichen. Es bringt nichts einfach alles auf die letzte Ebene zu schieben und zu sagen "der hätte eben besser programmieren müssen"!
Wenn wir beide mit unseren OSen fertig sind können wir ja gegenseitig versuchen unsere Systeme zu knacken, mal sehen wer damit reichhaltigeren Erfolg hat.

Aber welchen Teil des virtuellen Speichers der Heap belegt, das wird halt nicht (unbedingt) im UserSpace gemacht!Nein, normalerweise nicht, aber laut POSIX legt das OS einen Bereich im virtuellen Adressraum fest und der User-Code (die Heap-Verwaltung) kann diesen Bereich vergrößern und verkleinern (der Bereich bleibt also in einem Stück).
Das sollte eigentlich klar sein. Ich meine sowas wie ne libc von GNU und ne libc von LLVM und ne dietlibc usw. Alle können andere Algos implementieren, aber laufen auf deinem OS.Keine derzeit existierende libc wird auf meinem OS laufen, dafür gehe ich einfach an zu vielen Stellen zu sehr andere Wege.
Anders gefragt, was für eine Datenstruktur willst du denn einsetzen, dass es nicht signifikant langsamer wird (schreib aber bitte ob das nur mit deinen Segmenten funktioniert)?Ich werde meine Segmente als Array benutzen da ich die einfach vergrößern und verkleinern kann (um das defragmentieren im linearen Speicher kümmert sich das OS) und für jede Objekt-Größe ein eigenes Segment. Aber das funktioniert natürlich nur mit unabhängigen dynamischen Segmenten, sorry.
machst du jetzt aber die Annahme das auch Blöcke mit den Größen der 2er Potenzen reichen, kannst du schon viel schneller und einfacher sortien, nämlich in O(1).Also ich will das schon etwas feiner unterteilen, muss aber auch dafür nicht suchen sondern nur rechnen (ein bisschen Bitschieberei usw.), bleibt also bei O(1).
Programmierer sind faul und bequem (andere Interpretation: unter enormem Zeitdruck, enormem Featuredruck und nur wenig Qualitätssicherung).Exakt so ist es. Ich musste auch schon Abstriche machen nur um Terminvorgaben halten zu können. Ich möchte nicht wissen was bei MS die Abteilung die den Kernel entwickelt sagt wenn das Management den Auslieferungstermin des nächsten Windows festgelegt hat oder andersrum was die Manager sagen wenn das Kernel-Entwicklerteam kurz vor der Auslieferung doch noch einen Bug gefunden hat oder einen zusätzlichen Feature-Request erhält bzw. wegen Zeitmangel ablehnt.
Wozu Passwörter übers Netz mit MD5 hashen und auch noch verschlüsselt auf der Festplatte abspeichern?Wozu überhaupt Passwörter, ich hab doch ne Wohnungstür? Oder andersrum: Warum ne Wohnungstür, ich doch nen Passwort?
Das Passwort und die Wohnungstür sind eben nur 2 verschiedene Ebenen an Sicherheit. Kein normaler Mensch würde auf die Idee kommen auch nur eine dieser beiden Ebenen zu vernachlässigen. Sicherheit entsteht auch immer zu einem guten Anteil durch Redundanz!
Also bei meiner Heap-Verwaltung würde ich schon sagen das, unter gewissen Einschränkungen wie Objekt-Größe im Rahmen 1Byte bis 1MByte und es muss nicht das OS gebeten werden mehr Speicher zur Verfügung zu stellen, mein malloc und free mit O(1) arbeiten. Aber wenn ich das Gesamtsystem betrachte (und das muss man einfach tun) dann dürfte es wohl absolut unmöglich sein eine Heap-Verwaltung mit O(1) zu bauen.Unzulässige Vereinfachung: Dein malloc() fragt beim VMM nach und es hängt von dem - also genau dem OS - ab, ob du nun konstante Laufzeit hast oder nicht. Du kannst gern sagen, dass ein Teil deiner malloc()-Implementation (und zwar genau der systemunabhängige Teil) von der Komplexität O(1) ist, aber für das gesamte malloc() von Aufruf bis Return kannst du nicht sprechen.Zitat von: svenskaEin malloc(1) dauert exakt genausolange wie ein malloc(1024*1024*1024) und ist unabhängig vom derzeitigen Zustand des physischen Speichers?Was das malloc() betrifft ist dem so. Ich kann bei so einer Betrachtung nicht noch das OS mit einbeziehen. Denn es kann ja sein das ich gar nicht weiß wie das OS es macht oder auf welchen OS mein Code läuft. Trotzdem kann malloc() O(1) sein.
Ich will irgendwie nicht wissen, wie groß das Array sein muss, damit Quicksort 1 MB an Rekursions-Stack braucht...Auf jeden Fall ziemlich Groß, aber es hängt auch davon ab wie groß der Stackframe pro Funktionsaufruf ist und da kann der Compiler sicher auch etwas zu beitragen.
In meiner Welt, und offensichtlich auch in eriks, sind malloc() und VMM aber sehr eng miteinander verzahnt, sodaß eine getrennte Betrachtung nur wenig bringt.Exakt.
Für mich sollte ein naher malloc-Verwandter bereits eine Funktion des VMM sein, die man in der libc nur noch weitergeben muss. Damit können Kernelthreads (mal abgesehen vom VMM) es auch benutzen, ohne auf eine libc-Implementation, welche eventuell Kernelthreads erfordert, angewiesen zu sein. Sonst hast du nämlich wieder eine zyklische Abhängigkeit...Das würde aber bedeuten das malloc fast immer einen Syscall machen muss und das würde ich persönlich nicht wollen, trotzdem ist Dein Gedanke durchaus nachvollziehbar richtig.
Das kann ich allerdings im Voraus ändern, indem ich die Pages vorher benutze und davon ausgehe, dass genug RAM da ist.Wobei Deine letzten 8 Worte auch wieder eine Annahme sind die nicht zwangsläufig zutreffen muss.

Grüße
Erik

Übersicht
Wiki
Hilfe
Suche
Einloggen
Registrieren
Drucken

Gespeichert
Denn wenn du sowieso eine KernelSpace-libc und eine UserSpace-libc hast, wo ist da die Abhängigkeit?
Ich hab den Faden verloren.
