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 - Dimension

Seiten: 1 ... 6 7 [8]
141
Offtopic / Re: Smartphonezugriff
« am: 12. December 2011, 22:33 »
Also mit Bluetooth ginge das. WLAN AdHoc muss meines Wissens von der Hardware / dem Treiber unterstützt werden. Oder hat er etwa eine beidseitige Verbindung zu einem entfernten Server via Internet aufgebaut? Wenns ein iPhone war, stellt sich die Frage erst gar nicht, denn das funktioniert bekanntlich mit Magie.
142
Du meinst, du benutzt 4-MB-Pages, nehme ich an.
korrekt.
143
Ich werde mich morgen ausführlicher auf die Posts eingehen. Zuerst muss ich leider feststellen, dass ich immer wieder merke, dass bestimmte Sätze, welche ich schrieb wenig bis gar keinen Sinn machen, bzw. einzelne Bezeichnungen ungeschickt gewählt sind. Möglicherweise kann ich besser programmieren als formulieren??? Abgesehen davon bin ich heute nicht sehr konzentrationsfähig.

(Page Tables nutze ich erstmal nicht). Da meine Speicherverwaltung nur Virtuelle Adressen zurückgibt
Äh, das ist ein Widerspruch in sich.
nein, ich meinte page directory entries (PDE), sagt Wikipedia.

144
Lowlevel-Coding / Re: Speicherzugriffe
« am: 12. December 2011, 20:54 »
die Assembler-Referenz GE-PACKT
Das ist aber wirklich nur eine Referenz für jemanden der weiß was er tut und nur noch mal die exakten Details nachschlagen möchte. Für Einsteiger ist dieses Werk nicht wirklich geeignet.
Damals konnte ich grade mal etwas C und PHP. Und ich habs durchgelesen. 8-)
145
@taljeth:
"Fahrplan": Java-Emulator -> x86 Mikrokernel -> HW-Design
Ziel ist eine Architektur in Silizium/FPGA, in welcher ein Teil des Kernels in Hardware implementiert ist. Bis es soweit ist, wird noch einige Zeit vergehen. Um Dinge besser zu verstehen, versuche ich x86 an meine Vorstellungen anzupassen. Ich mache keine VM. Der Emulator in Java is nur der erste Schritt um die Funktionalität zu implementieren. Ich hoffe das Prinzip:
Java-> Import -> Semantic Code -> Export -> Bootbares Image
ist nachvollziehbar.

Ich kenne RISC bisher nur aus Dokumenten/Spezifikationen (IBM Power, Sun SPARC, HP PA-RISC), fühle mich jedoch definitiv von den Eigenschaften überzeugt. Speziell die Many-Core-Varianten (60+) haben es mir angetan.

@erik:
Danke für die Antworten. Bitte entschuldige meine Art Gedanken festzuhalten. Abgesehen davon vermute ich, dass es nicht unbedingt notwendig ist, alle Aspekte des Projekts zu kennen. Für uns sind in erster Linie Details zur Implementierung interessant, die im Dokument "Überblick der Architektur" sowieso nicht angesprochen werden. Wobei ich mich natürlich über jegliches Interesse freue und jede Frage gerne beantworten werde.

@erik 2:
Zitat
Kann ich komplett auf den Stack verzichten? Auch mit interrupts?
Nein.
Ich habe es geahnt. Ich werde einen kleinen Stack anlegen müssen um den Status vor der Unterbrechung wiederherzustellen. Interrupts kommen bei mir generell nur in eine Art Event-Queue, die vom root-Prozess regelmäßig bearbeitet wird. Deshalb leite ich die Einträge der IVT zu einem Interrupt-Handler-Proxy (Bezeichnung adäquat?)

Zitat
Call-Gates gefallen mir nicht. Kann man die auch weg lassen?
Ja, dann musst Du INT oder SYSCALL oder SYSENTER nutzen um vom Ring 3 in Ring 0 zu kommen. Ich persönlich würde eines der letzten 2 empfehlen aber die sind noch nicht so lange verfügbar was wieder die potentiellen CPUs reduziert.
Der Hypervisor führt immer nur kleine Prozeduren aus und springt dann wieder zurück. Diese Prozeduren kommen aus einem Code-Cache mit x86-Bytecode. Dieser wird aus Semantic Code exportiert (hypervised Export). Diese Prozeduren sollen im Ring 3 laufen, der Hypervisor in Ring 0. Die Prozedur in Ring 3 beinhaltet keine Sprünge (zumindest nicht nach außerhalb der Prozedur).

Wann treten Call-Gates sonst noch auf?

Zitat
Auch ohne CALLs nur mit JMP?
Diese Frage verstehe ich nicht. Wieso sollte man auf CALL verzichten? Das ergibt für mich persönlich nicht wirklich Sinn.
Da ich keinen Stack über SP verwende (Und damit auch kein CALL, RET, PUSH, POP und alle anderen Instruktionen für den Stack), springe ich vom Hypervisor in die Prozedur und am Ende dieser an eine feste Adresse zurück in den Hypervisor. Die Frage ist: kann ich während diesen JMPs den Ring ändern? So wie ich das verstanden habe, wird der Ring im Segment festgelegt.

Zitat
Gehen mit (ebx) auch physikalische Adressen?
Solange das Paging aktiv ist kannst Du überhaupt nicht direkt auf physische Adressen zugreifen sondern Du musst immer erst ein passendes Mapping erstellen und mit einer äquivalenten virtuellen Adresse arbeiten.
Andersrum gefragt: kann ich nur mit der Seitennummer aus dem Page Directory und dem Offset direkt auf physikalischen Speicher zugreifen? (Page Tables nutze ich erstmal nicht). Da meine Speicherverwaltung nur Virtuelle Adressen zurückgibt, brauche ich wohl kein LEA?

Es sind noch ein paar Dinge offen, ich schreibe sie hier noch mal hin, damit sie nicht untergehen. Nicht gedrängt fühlen.
Wofür kann ich Tasks noch brauchen, eigentlich habe ich ja den Hypervisor?
falls nicht, dann brauche ich wohl auch kein TSS / TSR
Was haben Tasks mit Multi-Core zu tun? Was bedeutet mehrere Threads per Core?
146
Offtopic / Re: Auf Android entwickeln
« am: 12. December 2011, 15:52 »
Gibt es denn die Option auf einem Android Device beliebigen ARM-Bytecode auszuführen und evtl auf das ABI zuzugreifen? Dann könnte man u.U. ja ein richtiges Linux darauf portieren.
Wollte iich schon immer mal fragen.
147
Softwareentwicklung / Re: Welche Compiler
« am: 12. December 2011, 15:45 »
Ich will ja ncht unhöflich sein, aber ich habe gute Erfahrungen gemacht mit den inline-Assemblern von GCC (leider AT&T-Syntax) bzw. von MS Visual CPP. Irgendwie kann man beim neuen GCC auch auf Intel-Syntax stellen, aber das muss am Ende des ASM-Abschnitts wieder rückgängig gemacht werden.
148
Lowlevel-Coding / Re: Speicherzugriffe
« am: 12. December 2011, 15:37 »
Wenn ich mich hier auch mal kurz einschalten darf. Ich habe einst die Assembler-Referenz GE-PACKT für 18 euros ersteigert. Diese ist mir heute immernoch eine große Hilfe, im Gegensatz zu diversen anderen Referenzen, die sich auf DOS-Entwicklung konzentrierten. Was mir allerdings fehlt ist eine vollständige Referenz aller Mechanismen, die x86 auszeichnen, sprich Booten, Paging, Interrupts, Speichermappings etc. Gruß Aaron.
149
Dämliches Android, blendet mir die letzte Zeile im Textfeld aus.
150
Ich habe mich gestern abend mal hingesetzt um den Opcode-Assembler zu schreiben.
Dazu habe ich meiner Assembler-Referenz einfach die Opcodes entnommen. Operationen laufen nur über ax, cx (bzw. dx für DIV/IDIV). RAM lese/schreibe ich über (bx).

Btw: Ich schreibe ax, bc, cx meine aber ausschliesslich 32 bit.

Für binäre Logik brauche ich verhältnismässig viele Bytes, da ich mit CMP(0)/SETx arbeite. Ich überlege doch lieber CMOVx zu verwenden. Wie sieht es mit der Verfügbarkeit aus? Ich möchte nur eine einzige Version schreiben, und CPUID höchstens beim Booten zum Abbrechen verwenden.

Den Code kann ich erst demnächst hoch laden. Vorher lasse ich mir mal alle Bytecodes raus und deassembliere sie, nur um sicherzugehen.

Dazu sind einige Fragen aufgetaucht:
Kann ich komplett auf den Stack verzichten? Auch mit interrupts?
Ich mache meinen eigenen fixed call stack mit return pointern und current index.
Ich brauche keine CALLs. Brauche ich IRET für Interrupts?
Wofür kann ich Tasks noch brauchen, eigentlich habe ich ja den Hypervisor.
Call-Gates gefallen mir nicht. Kann man die auch weg lassen?
Kann ich den Hypervisor in level 0, aber die Prozesse in level 3 laufen lassen? Auch ohne CALLs nur mit JMP?

Denke mal das reicht für den Anfang. Zu bootstrap code, diversen vector/descriptor tabellen, paging, nx und privileges werde ich aber wohl noch die eine oder andere Frage stellen.
Brauche ich LEA im Protected Mode? Gehen mit (ebx) auch physikalishe Adressen?
151
text:
Architektur Überblick: http://pastebin.com/euyT0Ddh
Brainstorm zu Semantic Code: http://pastebin.com/dZ72sg8n

relevant:
Operation.java http://pastebin.com/wMi2f0M4
Hypervisor.java http://pastebin.com/SzHXnjS6
Import.java http://pastebin.com/U0ynp8N1
Export.java http://pastebin.com/svHNmynB [update1]
ExportOpcode.java http://pastebin.com/snjPxG69 [update1]
ExportStructure.java http://pastebin.com/gXMVMhB7 [update1]
CodeOut.java http://pastebin.com/7gVa6aRp

weiter:
BuiltinType.java http://pastebin.com/JqMAjR2U
Structure.java http://pastebin.com/VdrYUdGd

listings:
operator http://pastebin.com/x0Mf4Hsq [update1]
special http://pastebin.com/BA2fT4R7 [update1]
misc http://pastebin.com/dte8xeKE [update1]

Generell  enthalten die Codes keine Dokumentation, jedoch viele Notizen. Konfuses einfach ignorieren.
Btw: Tabs sind auf 4 Zeichen ausgerichtet, pastebin nimmt jedoch 8. Sehe keine Möglichkeit das auf pastebin.com zu konfigurieren. Im Zweifelsfall den Original-Text unten in einen Editor kopieren.
CodeOut: habe die DisplayScripts für den Editor entfernt.
Export: enthält außer Notizen und einem groben Layout noch keine Implementierung. Die Ziele sind:
  • Image erzeugen, das einen Hypervisor mit Komponenten (Scheduler, Speicherverwaltung, Hash Maps, Interrupt-handler) bootet
  • Bootstrap-Code aus C/ASM zu Bytecode übersetzen und diesen in Layout aufnehmen (Edit: nehme GRUB)
  • Hypervisor soll Operationen nicht emulieren, sondern Prozeduren anspringen (Folgen von Befehlen mit JMP zurück zum Hypervisor)
  • Wir brauchen quasi eine Art Opcode-Assembler. Neben ein paar administrativen Instruktionen nur (bedingte) Sprünge, Integer, etwas Floating Point. SIMD lassen wir vorerst weg.
  • Mikrokernel-Code greift auf feste Speicheradressen zu und unterliegt bestimmten Einschränkungen (zB. nicht-reentrant, flacher callstack)
  • Erster Prozess bekommt dann alle wichtigen Aufgaben eines kernels
  • Timing interrupts werden im Scheduler nur verwendet um Timeouts zu entdecken

Grundsatz soll sein "so einfach wie möglich". Ausgrund der Ausrichtung der Architektur müsste nur der Bootstrap-Code in C/ASM geschrieben werden. Der rest vom Hypervisor geht dann in Java, welches wir importieren. Der Export nach x86 wird unterschieden nach hypervised und fixed.
152
@chris12: in der Tat kann auf jede Information, die NICHT im Hypervisor Management bereich liegt sowohl lesend als auch schreibend zugegriffen werden. Das betrifft sowohl Threads, Prozesse als auch Computer im Netzwerk. Notwendige Bedingung für den Zugriff ist allerdings ein entsprechender Eintrag in der White-List des Prozesses. Der Hypervisor überprüft und verwaltet Berechtigungen auf Prozess-Basis.

@erik: meines wissens geht der link unabhängig davon, ob du eingeloggt bist oder nicht. Allerdings habe ich massive Probleme mit google docs, so dass ich nach einer Alternative ausschau halten werde.

Mir ist vorhin im Auto auf dem Weg zur Schule noch eingefallen, dass ich in dem Text noch was vergessen habe: Persistenz soll allein durch Swapping von Pages realisiert werden. Sowas wie FAT kommt erst später.

Ich kann leider erst morgen abend was hochladen, da mein System aus ist und ich wenig Zeit habe, da wir dieses Wochenende sehr viele Arbeiten schreiben. Gruss Aaron
153
Architektur Überblick: neuer link siehe unten
Brainstorm zu semantic code: neuer link siehe unten

Weiss jemand, wo ich Code hochladen kann?
154
Also erstmal vielen Dank für die vielen Antworten. Die formalen Aspekte bitte ich zu entschuldigen.

Ich benutze mein Android Phone zum posten, da ist die Tastatur nicht so komfortabel. Den ursprünglichen Text hatte ich in der Tat per mail verschickt, deshalb die Anrede. Das haettich noch entfernen sollen, das haette die Sache vermutlich weniger auffaellig gemacht. Mein problem ist vermutlich, dass ich mich schwer tue die wichtigen Aspekte kompakt zu formulieren, da mein Projekt sehr Umfangreich werden wird. Die Struktur ist allerdings dafuer ausgelegt, ich behaupte mal selbstsicher, dass ich weiss was ich tue...  :-D

Der Part mit den Nano-Strukturen gehört hier natürlich nicht rein.

Edit: ich lade am besten noch dokumente mit weiteren details hoch (auf englisch), wenn sich jemand die muehe macht diese zu lesen, waere das nett.
155
Hallo Lowlevel - Entwickler

Ist mein erster Beitrag hier im Forum, ich hoffe dass ihr mit meinem Anliegen etwas anfangen koennt. Ich suche speziell Kernel-Entwickler, die mein Projekt fuer interessant halten und auch etwas Zeit haben. Ich habe bereits ~30K code in Java, haenge jedoch gerade beim Export von Code mit bootbarem Hypervisor (speicher layout fuer paging etc.). Spaeter will ich die Plattform komplett importieren und eine bootbare Version exportieren. Subsysteme fuer Java etc. und Treiber kommen spaeter. Ich ueberarbeite Code haufig, habe meistens Ueberblick und bin etwas perfektionistisch.

Ich arbeite seit ein paar Monaten an einer neuen Mikroarchitektur. Die neue Architektur implementiere ich vorläufig als Emulator in Java. Ich schreibe gerade ein Export-Modul, welches einen bootbaren Mikrokernel erzeugt. Die Prozess-Strukturen werden in Pages organisiert. (genauer: Jede Variable bekommt einen eigenen Stack, mit dem rekursive Aufrufe von Code-Zweigen und Wiederherstellung von gespeicherten Zuständen möglich werden.) Die Speicherverwaltung und andere Dinge will ich in Hardware gießen.

Eigentliche Motivation für den Aufwand ist ein semantischer Editor, der gegenwärtige Probleme der Software-Entwicklung elegant zu lösen versucht. So wird der Code in einem Baum direkt bei der Eingabe geparst und Symbole doppelt verlinkt. Dies vereinfacht statische Analyse und ermöglicht beispielsweise die massiv parallele Ausführung. Weitere Anforderungen, wie die sichere Ausführung, werden durch "Sandboxes" implementiert. (genauer: in die Hardware verlagert). Grundsatz der Architektur soll eine strikte Trennung von Aufgabenbereichen sein.

Java-Code kann importiert werden. Bei Interesse habe ich noch ein beschreibendes Skript von November 2010 (leider auf Englisch)
Seiten: 1 ... 6 7 [8]

Einloggen