Beiträge anzeigen

Diese Sektion erlaubt es dir alle Beiträge dieses Mitglieds zu sehen. Beachte, dass du nur solche Beiträge sehen kannst, zu denen du auch Zugriffsrechte hast.


Nachrichten - FlashBurn

Seiten: 1 ... 27 28 [29] 30 31 ... 43
561
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 25. October 2010, 21:53 »
Zitat von: svenska
Ich weiß nicht, ob sich das durch eine so simple Policy lösen lässt. (Besonders nicht, wenn die Policy als Workaround für ein schlechtes Design eingeführt wurde.)
Also erstmal lässt sich diese Policy nicht wirklich umsetzen, da man immer irgendwo mind. 2 Locks zur gleichen Zeit hat/braucht.

Und mein "schlechtes" Design hatte halt "nur" das Problem das ich nicht wusste wie man IPI-Nachrichten an CPUs sendet die die Ints aus haben (was ja inzwischen gelöst ist).
Mich würde aber auch mal interessieren wie andere OSe das lösen.
562
Lowlevel-Coding / Re:App-/GUI-Server
« am: 25. October 2010, 17:28 »
Zitat von: taljeth
Hm, wenn ich jetzt sage, der Aufrufer soll halt seine Deskriptoren vererben, mache ich mich unbeliebt, oder?
Nope. Mit der Vererbung habe ich mich inzwischen abgefunden ;) Problem wird nur noch sein, wie ich das mit dem Vererben der Pipes mache, weil ja immer nur einer lesen und nur einer schreiben kann/darf.

Zitat von: taljeth
Dann muss der aber nichts weiterleiten, sondern Programme verbinden entweder zum App-Server oder zur GUI, aber nicht beides.
Und genau letzteres soll halt nicht passieren, weil die App soll nicht wissen müssen ob der GUI-Server läuft oder nicht und wie würdest du es denn machen wenn du auf einer Konsole nen Programm laufen hast (meinet wegen nen Skript was gerade tyndur kompiliert) und auf ner anderen startes du den GUI-Server? Problem wäre ja dass alles was vom Skript gestartet wird, über die Konsole läuft, aber diese soll ja deiner Meinung nach die Daten nicht zum GUI-Server schicken.

Zitat von: taljeth
vt100-Escapesequenzen?
Noch nie von gehört, muss ich doch direkt mal googlen.
563
Lowlevel-Coding / Re:App-/GUI-Server
« am: 25. October 2010, 17:07 »
Zitat von: taljeth
Standardein-/ausgabe sind ja wahrscheinlich sowieso nur zwei Pipes, bei denen es dem Programm egal sein kann, wer das andere Ende hat.
Alle Dateien die per Libc geöffnet werden, werden bei mir wahrscheinlich über Pipes laufen.

Zitat von: taljeth
Warum wendet sich das Programm nicht direkt an den richtigen Server statt dass die Anfragen erst weitergeleitet werden müssen?
Das Programm soll sich darum im Endeffekt nicht kümmern müssen bzw. soll die Daten immer an die gleiche Stelle schicken.

Es geht ja auch nur um die Initialisierung danach läuft alles über Pipes und wie du schon sagtest ist es dann egal wo die ankommen.
Es muss sich halt nur jemand finden der die Ausgabe übernimmt und am einfachsten ist es halt einen "Server" (weil der ja nicht wirklich viel macht) für die Konsole zu nutzen und einen für die GUI. Sprich intern würde ne Standardausgabe über den App-Server (Konsole) laufen und alles was etwas mit GUI zu tun hat würde über den GUI-Server laufen.

Ich dachte dann daran, das sich der GUI-Server, wenn er gestartet wurde, beim App-Server meldet und dieser dann die Daten nicht mehr ausgibt (Textmodus) sondern sie an den GUI-Server weiterreicht.
Die Performance sollte darunter nicht leiden.

Edit::

Laut dem C-Standard kann man ja eh nicht viel auf der Konsole machen, aber wie sollte man Funktionen zur Verfügung stellen um z.B. die Vorder- und Hintergrundfarbe zu ändern oder solche Sachen wie Midnight Commander zu ermöglichen?
564
Lowlevel-Coding / Re:App-/GUI-Server
« am: 25. October 2010, 12:52 »
Zitat von: taljeth
Hm, was soll denn ein App-Server überhaupt sein?
Naja, es war geplant das der das ganze GUI-Zeugs übernimmt (eventuell sowas wie nen WindowManager?), aber bei der jetzigen Planung brauche ich ja etwas was die Ausgabe auf dem Bildschirm übernimmt (Textmodus), aber so aufgebaut ist, dass das ganze auch unter einer GUI funktioniert.
Unter ner GUI würde ich das dann praktisch an den GUI-Server weiterleiten bzw. der App-Server übernimmt die Darstellung und Verwaltung der Konsolen in einem Fenster.
565
Lowlevel-Coding / App-/GUI-Server
« am: 25. October 2010, 11:55 »
Um endlich mal wieder voran zu kommen wollte ich mein OS jetzt so gestalten das entweder nur eine Konsole (im Textmodus) oder ne richtige GUI geladen wird.

Ansich war es map geplant, das mein App-Server sich um die ganze GUI Geschichte kümmert, aber so würde ich jetzt nen App-Server und nen GUI-Server machen.

Problem ist mir will kein Grund einfallen wozu ich noch nen App-Server brauche ;)

Das einzige wäre vielleicht, wenn ich den App-Server die Konsolen verwalten lasse, so dass die Programme dann später (in 10 Jahren ;) ) auch problemlos auf der GUI laufen.

Was würde euch noch einfallen, was der App-Server machen müsste/sollte?
566
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 23. October 2010, 22:37 »
Zitat von: taljeth
Wenn ich es richtig verstanden habe, will FlashBurn aber nur dem eigenen Thread verbieten, einen zweiten Lock zu nehmen
Wenigstens einer der mich verstanden hat ;)

Ich meine wirklich das man halt in einer Funktion nur einen Lock haben darf und dann auch keine andere Funktion aufrufen darf (ohne den Lock freizugeben), die wieder nen Lock haben will.

Zitat von: svenska
Ein böswilliger Angreifer könnte somit durch einen Treiber dein System in ein Deadlock bringen (oder wenn du es irgendwann vergisst und selbst Deadlocks produzierst).
Zu monolithisch gedacht. Wenn mein Kernel sich an meine Regeln hält läuft das erstmal alles. Was dann in den Treibern passiert ist ne ganz andere Sache. Da kannst du im Prinzip Deadlocks nicht verhindern (wenn man davon ausgeht, das man den Treiber nicht selbst geschrieben hat). Zumal der Vorteil eines Mikrokernels dann genau das ist, das während einer Lock die Ints nicht deaktiviert werden können (ja, ich weiß könnte man auch im Kernel machen, aber wozu?).

Zitat von: svenska
Oder ich versteh deinen Gedankengang nicht.
Ich hoffe du verstehst es jetzt ;)

Ich will diesen Ansatz (nur ein Lock zur gleichen Zeit) ja auch nicht per Gewalt durchsetzen, sondern das sollte halt einfach ne Programmierregel sein, dass das schwer bis eventuell sogar gar nicht durchzusetzen ist, steht auf einem anderen Blatt.

Zitat von: bluecode
aber ich kann natürlich auch gerne mehr dazu sagen, falls Interesse besteht
Ich denke wir alle wären an mehr Informationen oder Hinweise in der Richtung Algos ohne Locks sehr interessiert.
567
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 22. October 2010, 21:58 »
Zitat von: svenska
Damit schützt du dann die vielen kleinen Locks selbst durch ein gigantisches Locking-Lock. Ist also ein GIANT_LOCK.
Häh?! Ich will die Locks nicht durch einen großen Lock schützen (wäre auch totaler unfug), sondern ich müsste halt meine Datenstrukturen und Algorithmen so auslegen, das du immer nur einen Lock zur gleichen Zeit haben darfst/kannst. Es gibt trotzdem viele verschiedene Locks.

Zitat von: erik
Wenn Du jemals zum Ziel (SMP fähiges OS) kommen willst sollte Dir aber eines ohne Deadlocks gefallen/zusagen!
Meine Deadlocks bin ich ja losgeworden (bis wieder eins auftritt ;) ). Ich finde mein Design gar nicht so schlecht, aber ihr könnt halt gerne andere Vorschlagen. Mein "Problem" ist im Endeffekt ja "nur" der VMM bzw. habe ich das ja jetzt im Griff.
568
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 22. October 2010, 15:23 »
Zitat von: svenska
Schlug ich bereits vor, nennt man GIANT_LOCK.
Dann hast du mich nicht richtig verstanden, ich meinte nicht einen GIANT_LOCK, sondern viele kleine Locks, aber man darf immer nur eine dieser Locks zur gleichen Zeit haben!

Zitat von: svenska
Wenn du weißt, dass dein Design kaputt ist, warum machst du dann keins, welches weniger kaputt ist?
Weil mir kein besseres einfällt ;) (was mir gefällt/zusagt)

Ihr könnt mir aber gerne eins vorschlagen und ich sage dann was mir nicht gefällt ;)
569
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 22. October 2010, 13:36 »
Zitat von: erik
Dein Problem ist das es Code gibt der erst Lock 1 und dann Lock 2 will und das es ebenfalls Code gibt der erst Lock 2 und dann Lock 1 will. Genau das ist ein Bug! Sowas führt zu Deadlocks und muss 100%-tig vermieden werden!
Richtig.

Das Problem was ich mit meiner sporadischen Deadlock hatte, war ein wenig komplexer und ließ sich im Endeffekt nur dadurch lösen das ich jetzt IPI-Nachrichten per NMI schicke.

Da hatte eine CPU (A) den Lock 1 und wollte Lock 2 haben. Lock 2 hatte habe ne andere CPU (B) und diese hat ne IPI-Nachricht gesendet und darauf gewartet das CPU A die Nachricht abarbeitet, das konnte aber nie passieren, weil CPU A noch Lock 1 hatte und damit die Ints auswaren. Ich weiß nicht ob das nen klassischer Deadlock ist, weil die Locks ansich haben erstmal nichts mit einander zu tun, nur die Tatsache der ausgeschalteten Ints war ein Problem.

Zitat von: erik
(ich hab das auch nur selten gemacht und auch ein paar mal deswegen ne schlechtere Note bekommen obwohl das Ergebnis richtig war)
Wenn ich es nicht besser wüsste, würde ich sagen wir hatten die gleichen Lehrer ;)

Zitat von: erik
Mach das. Vielleicht lernst Du dabei sogar das gut strukturierte Arbeit viel effizienter geht.
Das kann ich dir ja dann erzählen.

Aber auch ne Dokumentation hilft nicht, wenn man Fehler an der falschen Stelle sucht ;) (War mein Problem, habe alles auf ne Deadlock geschoben, aber der Code hatte nen Fehler)
570
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 21. October 2010, 22:06 »
Zitat von: erik
Na scheinbar ist das doch Dein Probem, wie Du ja selber schreibst.
Wo? Ich meine es geht darum das man Lock 1 bekommt, dann Lock 2 und nicht erst Lock 1 sondern Lock 2 freigibt, oder? Man gibt die Locks nach dem LIFO-Prinzip wieder frei.

Daran halte ich mich!

Zitat von: erik
Du bekommt dadurch einen viel besseren Überblick, probiere es doch mal aus.
Dokumentation, ist für mich das selbe wie Zwischenergebnisse in der Schule ;) Die habe ich meistens auch nicht aufgeschrieben.

Ich hatte mal mit ner Dokumentation angefangen, wo ich beschrieben habe was die Parameter machen/beinhalten, aber ich habe irgendwann festgestellt, das ich einfach nur aus nem alles sagenden Namen nen Satz gemacht habe, also zwecklos.
Was ich machen müsste, ist die Funktionalität einer Funktion zu beschreiben, aber auch das kann man bei mir aus dem Namen ableiten, bleibt nur noch das ich aufschreiben sollte, welche Locks benutzt werden.
Dann müsste ich mind. einmal (zu Dokumentationszwecken) alle meine Funktionen mit allen Funktionsaufrufen durchgehen um herauszufinden welche das sind.
Vielleicht mache ich das sogar, habe ich wenigstens was zu tun ;)
571
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 21. October 2010, 20:54 »
Zitat von: erik
Du versuchst da Äpfel mit Birnen zu vergleichen.
Möglich.

Zitat von: erik
Aber wenn Du in einem Stück Software einen Fehler findest dann kannst Du den beheben und neu compilieren und gut is.
Ich vermute mal das es schon soetwas gibt, dass man um irgendwelche Fehler in irgendeiner Software drumrumprogrammiert.

Zitat von: erik
Wenn Du doch mehrere Locks benötigst dann musst Du 100%-tig darauf achten dass das wirklich immer in der selben Reihenfolge passiert (es wäre eigentlich schön wenn es für sowas ein Tool gäbe).
Logisch und nicht mein Problem.

Wenn man nur den BKL (wie ich übrigens vorhin lesen durfte, gibt es den ja immernoch) nutzt hat man natürlich ein leichtes Leben.

Ich habe aber halt viele Locks und da kommt dann durchaus mal die Situation auf das Thread A den Lock 1 hat und Lock 2 versucht zu bekommen. Thread B hat Lock 2 und will Lock 1 und solche Situationen sind ab einer gewissen Größe schlecht zu überschauen (jetzt komm mir ja nicht mit Dokumentation ;) ).
Das ist so "meine" Quelle für Deadlocks, vorallem welche die sich schlecht bis gar nicht finden lassen (da sie nie auftreten oder so selten das man sie nicht reproduzieren kann).
572
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 21. October 2010, 17:18 »
Zitat von: svenska
Dir geht es darum, Locks ohne Schaden entziehen zu dürfen.
Auch, aber die ReadWrite-Sache könnte unter Umständen der Performance helfen.

Zitat von: svenska
Du darfst dir aber gerne sogenannte lock-free data-structures anschauen, sowas gibt es inzwischen auch.
Ich weiß, die eine Sache dazu die ich mir angesehen habe, war aber (meiner Meinung nach) Unfug bzw. auch nur nen Lock nur halt anders implementiert.

Zitat von: svenska
Deadlocks geschehen entweder reproduzierbar aus Logikfehlern
Naja, einige Deadlocks die ich schon hatte, waren leider nicht so wirklich reproduzierbar, weil nämlich die Zeit (gerade auf SMP Systemen) auch nen Faktor spielt und das kann man immer so schlecht reproduzieren.

Zitat von: svenska
Ersteres kann nur durch Nachdenken behoben werden
Das ist mir auch durch den Kopf gegangen, dass Deadlocks ja eigentlich ganz "einfach" zu lösen sind. Das beste gegen Deadlocks ist keine Locks zu benötigen, ansonsten sollte man versuchen das man immer nur einen Lock zur gleichen Zeit haben darf, dann können (eigentlich) auch keine Deadlocks auftreten.

Zitat von: svenska
Das ist Symptombehebung und damit Blödsinn.
Dem muss ich mal wiedersprechen. Ich bin mir jetzt nicht sicher ob man das als Symptom bezeichnen kann, aber z.B. CPU-Bugs die fixed du ja auch nicht (wie auch ;) ), sondern du versuchst das Problem zu umgehen (weiß nicht wie ich es anders sagen soll) und das ist auch kein Blödsinn, sondern einfach nötig.
573
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 21. October 2010, 12:45 »
Zitat von: erik
aber um die Notwendigkeit der Atomizität wirst Du an vielen Stellen trotzdem nicht rum kommen.
Dann hast du die Idee nicht richtig verstanden. Du schützt, wie bisher auch, deine Datenstrukturen durch einen Lock, bekommst du den, arbeitest du auf ner Kopie der Daten und erst wenn du den Lock wieder freigeben willst, werden die Daten auf denen du gearbeitet hast (die Kopie) zu den dann verwendeten Daten und der Lock wird erst danach freigegeben. Die Atomizität ist damit gegeben. Es ging ja nur darum, das du dann in der Lage bist, jemanden nen Lock zu entziehen ohne das es Probleme gibt.

Du könntest sogar soweit gehen, das du ne ReadWrite-Lock so implementierst, das du das Write erstmal immer Copy-On-Write machst und erst wenn du fertig bist mit deiner Arbeit und den Lock wieder freigibst, werden die originalen Daten auch für die Reader gelockt und die Daten werden kopiert (was auf das austauschen einer bzw. mehrerer Pages hinaus läuft) und dann können wieder die Reader lesen.

Sowas würde ich aber erst unter 64bit umsetzen wollen, weil da unter Umständen doch ganz schön virtueller Speicher verbraten wird.

Einziger Nachteil, der mir so spontan einfällt, ist dass du entweder alle Daten (die zusammengehören) in einen "Bereich" (virtueller Adressbereich) packen musst, oder den ganzen Kernel in dem Moment für den einen Thread Copy-On-Write machst (wie man das machen kann, ist mir gerade auch nicht ganz klar, obwohl es kein Problem sein sollte, da immer nur ein Writer vorhanden sein darf).

Ich denke die Idee kommt auf meine Liste für nen 64bit OS (was irgendwann in 10Jahren oder so mal in Angriff genommen wird ;) ).
574
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 20. October 2010, 19:33 »
Zitat von: porkchicken
Transaktionen kann man aber sicherlich auch im Kernel machen.
Da kommt mir die Idee (die sehr speicherverschwenderisch ist) das man halt wie bei DBs immer Transaktionen hat und die laufen entweder vollständig ab oder gar nicht.

Wenn man dann immer erstmal in einer Kopie der Daten (deswegen speicherverschwenderisch) arbeitet und erst wenn die Transaktion vollständig war, wird die Kopie die eigentlichen Daten, sollte man Deadlocks und das entziehen von Locks doch auch irgendwie hinbekommen.

Auf ner 64bit Architektur und Copy-On-Write sollte das mit der Kopie der Daten auch gehen.
575
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 20. October 2010, 15:08 »
Zitat von: erik
Ich vermute mal das Du einen recht einfachen Assembler (also nicht was besseres als Two-Pass) ohne die Unterstützung für linkbare Object-File-Formate programmiert hast.
Richtig. Ich war gerade dabei nen mathematischen Parser hinzuzufügen, aber da ist mir dann meine HDD abgeraucht und ich habe das Projekt begraben, es gibt sogar noch alte Sources auf Sourceforge.net, aber die sind wirklich alt. Denn ich hatte dann nen größeren rewrite begonnen und habe das nicht mehr hochgeladen (leider, im Nachhinein). Das ganze habe ich sogar unter DOS (also der Assembler lief unter DOS) gemacht, was nicht gerade sehr hilfreich war ;)

Ich würde mich sogar wieder daran wagen, aber da ich kein großer Fan (eventuell nur noch nicht) von C++ bin, würde ich das in C machen.

Wäre direkt was womit ich mich jetzt beschäftigen könnte ;)

Zitat von: erik
aber man sollte auch ehrlich sagen können was man nicht kann.
Wenn dir andere aber sagen was du nicht kannst benutzen sie meist ein Wort was ich da nicht haben möchte und das lautet "nie"!

Zitat von: erik
Wenn Du wirklich erst lesen lernen willst (es also nicht vorher kannst) nimmst Du dann ein Buch von z.B. Friedrich Nietzsche oder lieber eines speziell für Leseanfänger (Kinder)?
Ja und nein. Ich werde mir bestimmt nicht erst Kinderbücher auf Englisch durchlesen nur weil ich nen Roman lesen möchte (wie gesagt ich würde das nicht machen). Ich setze mich dann halt mit nem Wörterbuch hin und die ersten (vielen) Seiten dauert es halt länger, aber es wird halt immer besser und besser und du wirst so Dinge lernen (vorallem schneller lernen) die du durch Kinderbücher nie gelernt hätttest.

Zitat von: erik
Der FPGA der mir momentan vorschwebt hat fast 2000 Pins
Ich habe da keine Ahnung von, aber wieso hat der soviele Pins? Soll das nur die CPU repräsentieren oder mehr?

Zitat von: erik
Und wie soll bestimmt werden welcher der beteiligten der Verlierer ist?
Ne Münze werfen ;) Ich weiß es auch nicht, nur das ich sowas mal irgendwo gelesen habe (könnte auch im Zusammenhang mit Datenbanken gewesen sein).

Zitat von: erik
Also wenn Du unsere Politiker zum Vorbild nimmst
Dann würde ich ja kein neues OS programmieren sondern die Nachteile der vorhanden umgehen (und neue schaffen) ;)
576
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 20. October 2010, 11:59 »
Zitat von: erik
Dann hast Du wohl wirklich noch nicht vieles gemacht das über Hello-World deutlich hinaus geht.
In dem Sinne genau 2 Projekte, nen Assembler in Assembler und nen OS (nennen wir es bisher Kernel) in Asm (komplett) und in C.

Zitat von: erik
Auf die Gefahr hin das Du mich jetzt nicht mehr magst aber das ist ein sehr guter Hinweis.
Ich bin jemand der Kritik sehr gerne austeilt, aber (und genau deswegen mögen mich soviele Leute nicht) ich kann auch viel Kritik einstecken und nehme mir die oft sogar zu Herzen.

Zitat von: erik
Ein echter Anfänger sollte wirklich nicht gleich ganz oben einsteigen, die Wahrscheinlichkeit das er auf seiner blutigen Nase landet ist einfach zu hoch. Natürlich muss man nicht erst 100 Projekte mit langsam ansteigendem Schwierigkeitsgrad erfolgreich absolviert haben um dann irgendwann mal oben anzukommen, das darf auch in größeren Schritten passieren, aber von 0 auf 100 in nur einem Schritt geht zu mehr als 99% nicht gut.
Naja, meine Erfahrung ist halt das man immer gesagt bekommt was man alles nicht kann und jeder Pädagoge wird dir sagen wie schlecht und falsch das ist.

Auch ein OS kann man auf sinnvolle kleine "Projekte" runterbrechen. Ich sage mal mir hat das Programmieren in Asm sehr gut geholfen, weil ich so weiß wie ein Stack und eine Hochsprache funktioniert und so viele Seiteneffekte verstehe, wo andere dran scheitern. Obowhl ich gerade auch eine Sache gelernt habe, die mir vorher nicht bekannt war (Rückgabe von lokal erzeugter struct).

Zitat von: erik
Ich kann das nicht wirklich beurteilen aber mein Bauch sagt mir dass das nicht gut ist.
Warum nicht? Wäre ungefähr so, als wenn du Programmieren gelernt hast, weil du (irgendwann) ein Spiel schreiben willst.
Das ist wie lesen lernen um ein interessantes Buch lesen zu können. Sehe ich jetzt nichts falsches/schlechtes dran.

Du hast halt ein Ziel und musst halt einiges dafür lernen, in dem Fall ist halt das Programmieren "nur" etwas was man braucht um sein Ziel zu erreichen.

Zitat von: erik
Die Ziele sollten ruhig fordernd sein aber nicht überfordernd. Wo man da die Grenze zieht ist natürlich sehr individuell.
Das hat was damit zu tun wie man mit Niederlagen umgehen kann. Ich bin eigentlich ganz gut darin Niederlagen in Siege zu verwandeln ;)

Um mal ein Bsp. zu bringen, du nimmst dir halt vor nen 10km Lauf in einer bestimmten Zeit zu schaffen, trainierst wie blöde dafür und verfehlst dann dein Ziel, bist aber deutlich besser als noch das Jahr davor und ich behaupte jetzt wenn du dir ne wesentlich schlechtere Zeit vorgenommen hättest, wo du denkst ach das schaff ich schon, dann hättest du viel weniger erreicht, weil du nicht so hart trainiert hättest.

Aber wie du schon sagtest das ist sehr individuell.

Zitat von: erik
Einen Deadlock kann man überhaupt gar nicht beheben.
Das ist so nicht richtig. Man muss halt nur einer der beiden Parteien den Lock entziehen (was auch heißen kann das der Prozess terminiert wird).

Es gibt da jedenfalls Überlegungen wie man solche Probleme zufriedenstellend lösen kann.

Zitat von: svenska
Das ist aber Symptombehebung, nicht Ursachenbehebung.
Also das was von der Politik in Dtl gemacht wird, kann doch so schlecht nicht sein ;)
577
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 19. October 2010, 20:44 »
Zitat von: erik
Mit einer guten Planung wärst Du jetzt vielleicht schon etwas weiter.
Mein Problem/Vorteil ist das ich bisher keine richtige Planung (im klassischem Sinne) gebraucht habe und damit bisher ganz gut gefahren bin.
Und die Planung ist ja nicht mein Problem, sondern die Motivation (ich langweile mich schnell ;) ).

Zitat von: erik
Das ist aber nicht immer zielführend, ich würde auch gerne heute schon am ALR oder anderen tollen Dingen rumprogrammieren aber es geht einfach noch nicht weil die nötige Basis dafür noch fehlt.
Genau das ist auch mein Problem, die Basis. Ich müsste halt ne C-Library portieren bzw. zum Großteil neuschreiben, habe aber einfach keine Lust dazu. Deswegen werkle ich oft am Kernel rum und versuche noch mehr zu verbessern/verschlimmbessern ;)

Zitat von: erik
Stattdessen schreibe ich meine Ideen auf und setze sie später um, auf diese Weise vergesse ich auch nichts und wenn eine Idee dran ist kann ich noch mal schnell prüfen ob sie sich noch mit dem aktuellen Design verträgt.
Nennt man das Planung und Design, weil dann mach ich das doch ;) Ich habe auch ne Liste wo Ideen drinstehen, die mir mal eingefallen sind und ab und zu guck ich rein und die Liste wird halt aktualisiert.

Zitat von: erik
Warum? Das musst Du mir mal erklären. Bist Du wirklich immer der Meinung das man im Hobby gleich ganz oben einsteigen sollte?
Nein das nicht, aber mich nervt diese Einstellung derjenigen die schon was auf dem Kasten haben (meine Erfahrung ist dass das weltweit, also in den Foren in denen ich so verkehre) zu den Anfängern immern sagen, kannst du eh nicht schreib erstmal nen HelloWorld.

Ich habe das Programmieren nur für das Ziel gelernt ein OS schreiben zu wollen.

Zitat von: erik
Natürlich soll man sich auch ruhig hohe Ziele stecken aber man sollte dabei im Rahmen bleiben.
Meine Erfahrung ist halt das zu hohe (ja ich meine das man sie wahrscheinlich nie erreicht) Ziele durchaus gut sind. Es motiviert oft wesentlich mehr und man freut sich über jedes kleine Zwischenziel mehr als wenn man sagt, versuch ich halt was kleines.
Das ist aber ne Einstellungssache, für mich ist durchaus sinnvoll ein Ziel zu haben was man nicht unbedingt erreichen kann. Denn daraufhin muss man viel härter hinarbeiten als wenn man sich kleinere Ziele setzt und so kommt man öfter schneller zu einem Erfolg und meistens sogar zu einem Erfolg der besser/höher ist als kleinere Ziele.

Zitat von: erik
Hä, wovon schreibst Du da? Ein NMI ist doch kein Heilmittel.
Richtig. Mir ging es darum, dass du eine Deadlock gar nicht (selbst wenn du wüsstest wie) beheben kannst wenn die Ints aus sind, weil du die CPU ja nicht unterbrechen kannst, aber mit nem NMI wird das möglich. So kannst du jeder "festgefahrenen" CPU anderen Code "aufzwingen".

Man könnte eine Art Watchdogtimer in Software implementieren und wenn eine CPU innerhalb einer bestimmten Zeitspanne nicht reagiert wird sie per NMI "neugestartet".
578
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 19. October 2010, 18:18 »
Zitat von: erik
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.

Zitat von: erik
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 ;) ).

Zitat von: erik
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 ;)

Zitat von: erik
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

Zitat von: erik
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.

Zitat von: erik
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.

Zitat von: erik
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!

Zitat von: erik
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?).
579
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 19. October 2010, 16:59 »
Also die NMI Variante hat sogar noch den Vorteil, das dadurch mein CPU anhalten Code erst richtig funktioniert. Denn vorher ist immer mind. 1 CPU (B) in einer "endlos" Schleife hängen geblieben, da eine CPU (A) ne Exception ausgelöst hat und genau diese CPU (A) hat den Lock den die andere CPU (B) versucht zu bekommen und da die CPU (B) meistens die Ints aus hat, hat sie halt die IPI Nachricht nie bekommen, aber jetzt mit dem NMI klappt das wunderbar.

Jetzt kann ich auch endlich mal nen Bug fixen, der sonst so selten aufgetreten ist, das ich ihn nie reproduzieren konnte, jetzt klappt es öfter :D

Was noch gar nicht diskutiert wurde, hat denn die NMI Variante irgendwelche Nachteile?
580
Lowlevel-Coding / Re:SMP und die damit verbundenen Probleme
« am: 19. October 2010, 16:06 »
Zitat von: erik
Das Problem das Du Pages bereits im Frei-Pool hast die aber eventuell noch in TLBs einiger/anderer CPUs drin sind muss aber gelöst werden indem Du alle TLBs löscht bevor die Pages in den Frei-Pool kommen. Das senden der IPIs und warten auf alle Antworten muss also in der Mitte von vmmUnmap() passieren und nicht erst hinterher.
So wie du dir das denkst funktioniert das bei mir nicht. Ich hatte doch mal ne vereinfachte Variante von meiner vmmUnmap/vmmMap geschrieben.
Die Pages landen ziemlich "spät" bis gar nicht im Frei-Pool. Die sind auch gar nicht das Problem, sondern das eine andere CPU auf Page A zugreift, da es so im TLB steht, aber inzwischen Page B an der virtuellen Adresse steht.
Diese Situation tritt natürlich sehr sehr selten auf.
Solange ich aus der vmmMap/vmmUnmap Funktion noch nicht rausbin, sind die Pages praktisch noch nicht in Verwendung. Also kann ich das TLB Löschen auch hinterher machen (aber ich gebe den Lock erst frei, wenn die Nachricht versendet ist).
Es ist halt wieder ne Performance-Frage, ich meine stell dir vor, es sollen 20 Pages geunmappt werden, da wäre es sehr schlecht wenn du auch 20 IPIs versendest und dann auch noch wartet müsstest bis die anderen CPUs ihr IPIs abgearbeitet haben!

Zitat von: erik
Ich bestreite nicht das Du Dir Mühe gibst aber aus Deinen vergangenen Problembeschreibungen habe ich den subjektiven  Eindruck gewonnen das Dir da etwas an Erfahrung fehlt und Du deswegen verschiedene Probleme nicht so deutlich/frühzeitig erkennst.
Richtig, an Erfahrung mangelt es mir, besonders was das Programmieren von Anwendungen betrifft. Meine Programmiererfahrung beschränkt sich leider nur auf das OS Programmieren.

Zitat von: erik
Du solltest mal ganz klar definieren was ein Bug ist und dann Code schreiben der zur Laufzeit (in der Debug-Version) nach genau dieser Bedingung prüft. Mit diesem Weg kommst Du zu recht präzisen Debug-Meldungen, zumindest bin ich bis her damit recht gut gefahren.
Am Bsp. einer Deadlock wüsste ich nicht wie ich zur Laufzeit prüfen könnte das einer vorliegt. Das gemeine am Deadlock ist doch, du kannst ja nicht wissen ob der Lock halt gerade in Benutzung ist und bald wieder freigegeben wird oder ob der Besitzer des Lock gerade versucht den Lock zu bekommen den man selber inne hat!

Zitat von: erik
Jedes mal wenn Du einen Deadlock hast musst Du die Ursache heraus finden und dann wird Dein Code mit jedem beobachteten Deadlock besser.
Und genau hier ist doch das Problem. Ich kann nur Bugs fixen die ich "nachstellen" kann (das ist das größte Problem von Bugs eines OSs). Ein Deadlock der nur sporadisch auftritt und nach keinem Muster zu "fangen" ist, wie willst du da raus bekommen, in welcher Lock jemand war und welche Lock er bekommen wollte.

Was ich damit sagen will, stell dir vor du hast ein tolles OS geschrieben und das wird halt ausgeführt (ohne Debug-Msgs) und das bleibt halt von Zeit zur Zeit an immer einer anderen Stelle hängen und du als Entwickler kannst die Situation nicht nachstellen. Das kann alles sein, von Hardware-Problem bis irgendein Lockingfehler der schwer zu finden ist.

Zitat von: erik
Klar gibt es ein paar zusätzliche Schwierigkeiten aber die sind IMHO nicht unlösbar.
Von unlösbar redet ja auch keiner, nur schwierig zu lösen ;)

Zitat von: erik
Das stimmt doch gar nicht, man muss in der Design-Phase nur das nötige Maß an Umsicht walten lassen dann bringt Multithreading fast keine zusätzliche Komplexität mit sich.
Fairerweise muss man schon mal sagen, wer macht denn ne wirkliche Design-Phase (mal von dir und deiner Hardware abgesehen)?
Ich behaupte mal das selbst bei größeren Softwareprojekten nicht so viel vorher designt wird, sondern das dann alle drauflos programmieren und deswegen kommt es oft zu Problemen.
Und ich als Hobbyprogrammieren/Anfänger werde mich bestimmt nicht vorher hinsetzen und ein Design anfertigen. Denn dann würde ich heute noch immer keinen Kernel haben, weil ich mich mit Dingen beschäftigen würde, von denen ich keine Ahnung habe und ohne Praxis auch nie haben werde.

Zitat von: erik
Wofür willst Du alle CPUs anhalten? Planst du noch andere Dinge für IPI?
Anhalten will ich sie nur im Falle einer Kernel-Exception (damit die nicht alle ne for(;;); Schleife abarbeiten) und wenn der PC runtergefahren wird. Ansonsten könnte man noch die Möglichkeit geben, CPUs zur Laufzeit "abzuschalten", aber wozu das gut sein soll weiß ich nicht.
Ich habe halt z.B. mit der Rendevouz-Funktion versucht mein IPI System möglichst nutzbar zu machen, keine Ahnung ob ich das später noch für was anderes als TSC synchronisieren nutzen werde.
Auch weiß ich nicht ob man je die Möglichkeit braucht das man eine IPI Nachricht an genau eine CPU (und eine bestimme) schicken können muss.

Zitat von: erik
Mal von den TLB-Flushs abgesehen benötigt man IMHO auch bei x86 keinen unterbrechbaren Micro-Kernel.
Wenn du den Kernel mit einem GIANT_LOCK schützt brauchst du nichtmal dafür nen unterbrechbaren MikroKernel.
Seiten: 1 ... 27 28 [29] 30 31 ... 43

Einloggen