Gutes Multitasking fähiges OS



  • Original erstellt von kingruedi:
    **
    was es ist, weiß ich nicht.
    könnte man vielleicht mit nörgeln oder rummoppern bezeichnen
    **

    Nö, eher mit lustig machen 😉 😃



  • @mastamind
    so ist das hier nunmal im forum, wenn jemand es dann wirklich ernst meint, dann wird er 1. auf die flames besonnen reagieren und 2. auch kompetent wirken. wenn jemand allerdings anfängt zu beleidigen oder dumm zu wirken ohne sich informiert zu haben, dann wird noch mehr eingehackt .... das leben ist nicht anders.

    ich finde es auch interresant über soetwas zu lesen und vielleicht mit zu diskutieren obwohl man mit jeder meinung natürlich flame auf sich ziehen kann...

    ich finde die idee ein OS zu coden, weil man neugierig ist wie das wird und weil man lernen möchte eigentlich genauso ok wie wenn jemand eine 3d-engine, einen http server, eine firewall oder sonst was codet, alles hat sicherlich mehr schwierigkeiten als man sich am anfang bewust ist und darauf wollen sicherlich alle immer zurückweisen und so den träumer darauf besinnen dass er doch lieber ein sortierprogramm macht. aber wenn jemand so schnell aufgeben würde, dann haben die anderen auch etwas gutes gemacht, denn dann hätte derjenige auch keine probleme überwunden die es sicherlich gibt...
    ... ein OS zu debuggen ist wohl mit das schwerste was ich mir vorstellen kann, wenn da mal ein pointer falsch zeigt, dann fliegt das ganze ding dauernt auseinander, dann muss man eventuell jedesmal den kernel neu erstellen ne neue bootdiskette machen den testrechner starten und merken wie er wieder abstürtzt aber dann an einer gaaaanz anderen stelle... *horrorvorstellung*

    ich frage mich aber auch momentan mit welchem compiler man das machen will, ich schätze ja auch gcc, doch wenn man eigene moduldefinitionen haben möchte und sowas, muss man sich dann einen eigenen compiler und linker coden oder lässt sich gcc anpassen soweit?

    rapso->greets();

    ... jaja, ich laber zuviel... 😃



  • Original erstellt von rapso:
    ich finde die idee ein OS zu coden, weil man neugierig ist wie das wird und weil man lernen möchte eigentlich genauso ok wie wenn jemand eine 3d-engine, einen http server, eine firewall oder sonst was codet

    Richtig! Wir haben doch auch alle mal "Hello World" geschrieben.

    @Bashar: Hast recht! 😃



  • das problem ist, dass ihr uns nicht kennt. oder weißt du genau, was ich alles kann und was nicht? genau das ist mein kritikpunkt. ich brauch mich nicht zu rechtfertigen, was ich alles geleistet hab und was nicht. es gibt auch leute in dem forum, die wenig posten und trotzdem gute programmiere sind.
    und übrgens: ich hab auch ein hallo welt programmiert. und es ist komplett bugfree 🙂

    zu den flames:
    ist es in unserer kultur denn schon erlaubt einfach so drauflos zu flamen und das halt mit einem "so ist das (internet)leben" hinzunehmen? können wir denn nicht mehr sachlich bleiben? ich glaub einfach, dass rationales und vernüftiges handeln hier das beste wäre und dass das nicht so schwer ist.

    björn



  • Das ist leider in den Meisten Foren das Problem, besonders, wenn man nichtmal eine Pflichtanmeldung hat. Durch viele Flames kommt meist keine vernünftige Disukusion zu stande. Die Leute lassen sich ablenken, und reagieren auf den Flame. Auf einmal ist der Grund der Diskusion schon vergessen.

    Das mit dem Persönlich kennen ist auch ein Problem. Besonders, da sich das Verhalten der Noobs oder Neulinge sehr Verschlechtert hat - viele sind nicht fähig einfach mal selbst nach Infos zu Googlen oder ähnliches. "Ich will einen fertigen Source, der Funktioniert haben, und nicht Nachdenken" - denken sich doch viele oder? Und dann ist es nicht verwunderlich, daß es zu solchen Kommentaren kommt - wir kennen auch diese - "Ich mach seit 2 Wochen C++ - wie lang brauch ich für Doom XXVI?"



  • Da hast du wohl Recht jedoch gibt es auch Ausnahmen und man sollte es nicht zu sehr verallgemeinern...auch Bill Gates hat mal klein angefangen



  • genauso wie es dumme leute in real gibt, gibt es flamor im forum, manchmal macht auch jemand nen joke und der andere reagiert total ernst drauf und fühlt sich beleidigt, zu sowas gehören ja beide seiten und wie will man entscheiden ob das bössartig ist oder nicht? wenn ich irgend ein argument lese, was eigentlich keine argument für mich ist schreib ich auch dinge wie "muss mich das jucken" und könnte "wieso sollte mir das wichtig sein" oder "was an der artikulation invalidiert die entscheidung die bisher von meiner position aus vertretten wurde" und sonst was, bloss dann wird man mehr regeln zum kommunizieren haben als gedanken zum mitteilen.

    wenn es jemanden stört, dann sollte man einfach ignorieren wenn ein anderer einem zu dumm kommt, immerhin ist es auch niveaulos leuten die "gib mir alles fertig zum compilen" schreiben noch 'ne antwort zu geben.

    um beim thema noch weiter zu labern.
    soweit ich weiß hatte BeOS eine datenbank als dateisystem... sowas fände ich ziemlich cool für ein OS, datenbanken sind ziemlich fix und durch join kann man doch ne art chierarchy aufbauen... oder?

    wenn ich ein OS coden würde, dann könnte ich mir vorstellen dass man da erstmal extrem lange daran konzeptionieren würde

    und wenn man ein OS codet, dann wäre es doch ziemlich gut, wenn man sich auf etwas spezialisieren würde, weil an sonsten könnte man auch linux nehmen dass man für alles mögliche konfigurieren kann, aber wenn man ein OS machen würde, was etwas speziell kann, wäre man anderen wohl überlegen.

    was ich mir gut vorstellen könnte wäre ein OS dass mehrere systeme absolut getrennt voneinander simuliert, also so als hätte man, um einen neuen prozess zu starten, einen bootvorgang ausgelöst, darin läuft dann ein programm ohne zu wissen dass auf dem selben system 100 andere getrennte system existieren. damit könnte man z.B. mehrere server umgebungen haben und wenn mal ein subsystem abkackt, dann würde alles andere noch laufen ohne auch nur einen kratzer, man könnte sogar mit heftigen fehlern im code die normalerweise sogar ne linuxconsole blockieren dann weiter arbeiten... oder denkt ihr sowat ist unnütz oder gibt es schon?

    rapso->greets();



  • Billyboy Gates - der alte Pariser hat den DOS Code gekauft, und erweitert! Er hat ihn nicht komplett selbst geschrieben.

    Zum Thema - konzipieren ja - allerdings würde ich erstmal den Grundlegenden Stuff schreiben - also Bootloader, und dann Protected Mode, und dann ne kleine Nachricht - "Hi - I´m your system... - Press the >Anykey< Key to reboot..." 😉

    Wenn das Funktioniert würde ich mit dem richtigen Konzept anfangen. Gut - vorher sollte man schon wissen, was man machen will. Nur, wenn man bei dem Loader usw. schon versagt, hat man sich die Tagelange Konzeptionierung gespart

    So long... Snorre



  • ein datei system in einer datenbank? muss ich dann sql verwenden um eine datei zu finden? *gg* es gibt schon viele coole dateisysteme zb xfs. bin sehr zufrieden damit beim linux. so was ist aber total komplex zb. xfs verwendet btrees so weit ich weiss (sorry, kein scharfes s auf der tastatur).

    surkevin hat einen bootenden kernel. noch sehr klein, aber immerhin. eine wichtig frage ist jetz, wie man das speichermanagment machen sollte. der vorschlag ist, segmentierung mit paging zu kombinieren. was meinst ihr?

    linux verwendet für alles einen selector, deshalb hat der stack auch ausführrechte. wenn man nun den durch paging erzeugten virtuellen adressraum genau in cs und ss einteilt, könnte man doch bufferoverflows, durch die eingespeisster programmcode ausgeführt werden kann, komplett verhindern indem man dem ss einfach keine ausführrechte und dem cs keine schreibrechte gibt. oder nicht?

    björn



  • irgendwie findet man immer einen weg für nen bufferoverflow, da war doch letztens einer im linuxkernel und auf ring 0 hat man doch alle rechte oder kann man da auch bereiche sperren?

    ja das dinge hatte ne SQL database, das war mit einer der gründe weshalb das ding so fix war. (das ganze os meine ich)

    ich würde das paging mit der aufteilung der platte zusammenlegen. es ist ja gewissermassen bewiesen dass 4KB blöcke für pages das optimale sind, genauso gross dann die segmentierung auf der platte. sowas fände ich cool... und es wäre optimal, denk ich mir, fürs paging weil das einlesen von pages immer ein read auf der platte wäre von hintereinadner liegenden segmenten.

    das mit dem stack wie du es vorschlägst würde ich auch machen, code sollte meiner meinung nach bei einem OS das auf sicherheit aus ist immer von daten getrennt sein, nie modifiziert werden können (im ram) und daten dürfte man nicht als code ausführen.

    vielleicht müßte man dann auf OS ebene irgendwas mit Stringverwaltung machen, sodass es schon vom OS heraus nicht möglich sein sollte drüberzubügeln... aber ich wüste nicht wie man das realisieren könnte.

    ach ja, ein bootloader wäre sicher ok, aber alles was danach kommt muss supergut durchplannt sein denk ich mir, sonst kommt man nicht weit. alleine schon die aufteilung in welcher ebene was läuft (z.B. ob dateisystem mit memorymanagment auf selber ebene oder was höcher liegt) kann ein OS zu dreck werden lassen.

    rapso->greets();



  • mastamind: Theoretisch kein Problem, es gibt aber leider Programme, die sog. Trampoline benutzen. Füttere mal Google-Groups mit Message-ID: W5Scnc1GdODTUOajXTWcoA@dls.net



  • Original erstellt von rapso:
    das mit dem stack wie du es vorschlägst würde ich auch machen, code sollte meiner meinung nach bei einem OS das auf sicherheit aus ist immer von daten getrennt sein, nie modifiziert werden können (im ram) und daten dürfte man nicht als code ausführen.

    Währe ich dagegen, weil sonst mein Scriptcompiler nicht mehr funktioniert 😉
    Der legt das compilierte Programm im einem Array ab, und springt per

    __asm call _compiledProgram
    

    rein, und beendet wird durch ein ret 😉



  • Nur wie sollte die Speicherverwaltung gesamt aussehen? Es sollen ja auch eigen gecodete ASM Prozesse laufen und nicht nur mit unserem eigenen Compiler erstellte Programme...das OS braucht ja zur Verwaltung Daten des Prozesses damit es das Multitasking umsetzen kann..jedes Programm denkt dann es wäre direkt an 0x00000000 und durch das Paging wird das dann umgesetzt, ich denke das wäre gut! Jedoch muss bei Seitenfehlern das OS wissen welcher Prozess ihn ausgelöst hat um es dann richtig zu verwalten...um die Prozesse in eine Prozessliste einzusetzen bräuchte man dann am besten die Adresse der LDT die man eigens für den Prozess erstellt und schreibt diese dann mit Infos in die Liste oder was meint ihr? Aber wie ist es machbar dass der Prozess beim OS ansagt dass er da ist auch bei ganz fremden ASM Anwendungen die nicht mit dem eigenen Compiler gemacht wurden damit dieser dann eien LDT anlegen kann und ihn einreihen kann?

    Kevin



  • @rapso
    ich versteh nicht ganz, woher das db-fs dann die daten bekommt. die müssen ja auch auf der hd stehen; oder halt auf einem geeigneten medium. wahrscheinlich wird einfach die hd als große datei angesehen und die dateien, ordner und deren attribute dann als datensätze...

    interessant wäre eine swap partition, wie bei linux und co. dort könnte man einfach dann die partition in 4 kb teile aufteilen. das hat den vorteil, dass man nicht über das dateisystem gehen muss. wenn auch noch so schnell es ist.

    ich denk, dass die string-verwaltung nicht unbedingt teil des os sein muss. eigentlich gar nicht. das os ist im prinzip nur für die teilung der prozesse voneinander und der teilung von code und daten innerhalb der prozesse wichtig. was dann die programme mit ihren strings im speicher anfangen ist schon einmal weniger gefährlich, als wenn sie code von sich oder anderen prozessen überschreiben.

    speicher sollte wie folgend aufgeteilt sein:
    jedes programm bekommt eine bestimmte anzahl an segmenten. mindestens 3: ldt, cs, ss. ss ist read/write, cs execute only. ldt read-only.
    im gdt sitzt der deskriptor für das ldt segment. im ldt register wird ja nur ein selector auf das gdt gespeichert. in der ldt sind dann die deskriptoren für cs und ss und weiter lokale segmente. dynamischer speicher wird im ds verwaltet. auch read/write.
    man könnte dann die restlichen segmente zb für shared memory verwenden. ich möchte verhindern, dass die segmente oft während dem ausführen des programm verändert werden, da man dadurch immer den descriptor cache im segmentregister verliert.

    die idee zum allgemeinen aufbau ist: mircrokernel in ring 0, dateisystem in ring 1, netzwerk, console,... in ring 2. und user space is nur ring 3. was denkt ihr? so können zb fehler im netzwerk-stack des os keine katastrophen im prozess- und speichermanagment oder im dateisystem anstellen.

    @bashar
    hab leider bei google nichts gefunden zu dieser message id. würd mich aber dafür interessieren.

    [ Dieser Beitrag wurde am 03.04.2003 um 19:23 Uhr von mastamind editiert. ]



  • Original erstellt von Surkevin:
    Nur wie sollte die Speicherverwaltung gesamt aussehen? Es sollen ja auch eigen gecodete ASM Prozesse laufen und nicht nur mit unserem eigenen Compiler erstellte Programme...das OS braucht ja zur Verwaltung Daten des Prozesses damit es das Multitasking umsetzen kann..jedes Programm denkt dann es wäre direkt an 0x00000000 und durch das Paging wird das dann umgesetzt, ich denke das wäre gut! Jedoch muss bei Seitenfehlern das OS wissen welcher Prozess ihn ausgelöst hat um es dann richtig zu verwalten...um die Prozesse in eine Prozessliste einzusetzen bräuchte man dann am besten die Adresse der LDT die man eigens für den Prozess erstellt und schreibt diese dann mit Infos in die Liste oder was meint ihr? Aber wie ist es machbar dass der Prozess beim OS ansagt dass er da ist auch bei ganz fremden ASM Anwendungen die nicht mit dem eigenen Compiler gemacht wurden damit dieser dann eien LDT anlegen kann und ihn einreihen kann?

    Das LDT-anlegen etc. muss über einen System-Call geregelt werden, in der Art wie fork() bei Unix und createProcess bei Windows. Die Aufrufe dazu kann man ja in einer Library legen, die jeder Compiler fressen kann.
    Ich persönlich bin bim Speichermanagement ja Feind von Segmenten, die Dinger verwursten alles nur. Ich denke selbst mit Segmenten kriegt man Exploits auf dem Stack etc. noch irgendwie hin, Sicherheitslücken gibst immer, sie sehen nur immer anders aus. Ein Problem wa sihc mit Segmente sehe ist das Kompilieren von Anwendungsprogrammen. Ich weiß nicht, was für Erfahrungen andere gemacht haben, aber ich habe extreme Probleme damit gehabt, dem GCC z.B. auch nur meine Speicherverwaltung vernünftig aufzuwzwängen (ich benutze Paging, Flat-Mode, Kernel ab 0x80000000), ich weiß nicht welcher Compiler so mit Segmenten jonglieren kann, vielelicht schaffts ja wer den DJGPP zu dressieren, da man für so ein Segmentmodell ja evtl. mit FAR Pointern standardmäßig arbeiten müsste. Aber das ist sicherlich irgendwo Geschmackssache 🙂
    Die Idee mit den verschiedenen Ringen und verschiedneen Stacks klignt allerdings Interessant. Kann man ja genauso problemlos im Flat-Mode realisieren 🙂 Die Frage ist nur, wie das OS darauf reagieren soll, wenn sagen wir mal der Dateisystemtreiber wegbrezelt 🙂

    @mastamind: http://www.google.de/groups?ie=UTF-8&oe=UTF-8&as_umsgid=W5Scnc1GdODTUOajXTWcoA@dls.net&lr=&hl=de (Google Groups-->Erweiterte Suche ;))

    [ Dieser Beitrag wurde am 04.04.2003 um 00:14 Uhr von TriPhoenix editiert. ]



  • ich denk, dass man dann einfach den treiber neu läd. dadurch, dass ich auch kernelthreads verwenden würd, brezelt im prinzip ja nur ein thread weg. vielleicht schafft man es, dass die behandlungsroutine des os für eine segfault einfach nur den thread beendet und mit einem anderen fortfährt, ohne, dass gleich der ganze prozess abstürzt. jeder thread hat ja einen eigenen stack, auf dem erfehler produzieren kann.

    zum compiler: das wird allgemein ein großes problem, da ich kein posix einbauen will. das ist, denk ich, komplizierter als sich für die einfachen dinge selbst etwas einfallne zulassen. ich würd lieber eine vollständig objektorientierte api verwenden. das wäre wirklich etwas neues. hat aber auch nachteile.

    björn



  • noch was:
    man könnte sich mit der segmentierung eine art working-set algorithmus überlegen, der zb den code nicht auf pageebene einlagert, sondern auf segmenteben. wäre eine idee.

    zum compiler: ich trau es mich gar nicht zu sagen, aber ich denke, ein eigener compiler wird die einzige option sein. das würde vielleicht auch die möglichkeit geben eine stringverwaltung direkt in die sprache zu integrieren. so ist diese dann zwar relativ sicher, aber doch nicht teil des os.
    somit wäre eine gute sicherheit durch os, compiler und sprache gegeben. sowas ist natürlich das schwerste, was man sich vorstellen kann. ohne diese 3er-kombination, würden, denk ich, mehr sicherheitslücken offen blleiben.

    björn



  • ich hab ja auch von einem sicherem OS gesprochen, sobald man irgendwo ne ausnahme macht, dann wird es nicht möglich sein die bufferoverflows 100%ig zu stoppen.
    wenn man code und daten immer trennen würde, dann könnte nur ein hardware bug die sicherheit behindern.

    und mit der datenbank meinte ich das schon so dass die ganze HD wie eine einzige datei gehändelt wird. die HD würde dann mit memorymapping aufs ram gelegt (ja dann bräuchte man heutzutage eventuell 64BIT als OS basis.

    aber eigentlich muss man am anfang das einsatzgebiet für ein OS wissen, damit man weiß worauf man achten muss, weil wenn sicherheit egal ist und nur performance wichtig ist, dann kann man so ziemlich alles anders machen.

    rapso->greets();



  • ich denk auch, dass durch das verwenden von verschiedenen segmenten mit angepassten rechten nur ein hardware bug solche fehler produzieren kann. vielleicht sieht aber jemand einen anderen grund.

    den artikel bei google hab ich gefunden. mir kommt vor, dass das beschriebene dort nicht als möglichkeit zum aushebeln der sicherheit ist, sondern einfach ein feature, das der gcc hat. mit der segmentierung wird er allerdings das feature verlieren.

    das dateisystem von beos ist ein 64 bit system. hab ich irgendwo einmal gelesen. mir kommt vor, dass hier viele paralellen zu xfs existieren zb.

    zum einsatzgebiet:
    zuerst nur einfach vieles auszuprobieren, was der pentium und seine kinder und enkelkinder so zu bieten haben. genau die kombination von segmentierung und paging zusammen find ich sehr interessant.
    um das os dann wirklich einsetzen zu können, könnte man sich auf netzwerktechniken konzentrieren. ip, tcp, udp, routing, paketfilter. so dinge.

    björn



  • Original erstellt von mastamind:
    ich denk, dass man dann einfach den treiber neu läd. dadurch, dass ich auch kernelthreads verwenden würd, brezelt im prinzip ja nur ein thread weg. vielleicht schafft man es, dass die behandlungsroutine des os für eine segfault einfach nur den thread beendet und mit einem anderen fortfährt, ohne, dass gleich der ganze prozess abstürzt. jeder thread hat ja einen eigenen stack, auf dem erfehler produzieren kann.

    Hmm....wenn mir der Dateisystemtreiber wegbrezelt, dann stimmt denke ich soviel schon nicht, dass das System durchaus ein Argument hat, zu verrecken. Und ob da einfach Neustarten die Idee ist, ich meine da stimmt doch was gewaltig nicht. 🙄 Zumindest soltle der Admin eine Riesenbox in rot aufn Screen bekommen oder so 🙂

    [ Dieser Beitrag wurde am 05.04.2003 um 12:52 Uhr von TriPhoenix editiert. ]


Anmelden zum Antworten