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 - DDR-RAM

Seiten: 1 ... 7 8 [9] 10
161
Lowlevel-Coding / multitasking verständnis
« am: 09. May 2005, 09:49 »

jmp far taskgate:0x12345678


das geht zwar so nicht, da vom asm nicht assembled, aber so muss es gehen.


db 0xEA
dd 0x12345678
dw taskgate


Kann jetzt gerade falsch sein, also der Opcode.
Kann zu Hause nochmal nachgucken.

MfG
DDR-RAM
162
tyndur / C vs. C++ bzw. wo ist was sinnvoll?
« am: 08. May 2005, 20:03 »
Zitat von: PorkChicken
C++ hat auf jedenfall einige Nachteile:

- Overhead mit new/delete, Exceptions, etc ... (ok ist relativ gering)

der Overhead von new/delete geht ganz stark gegen 0.
EH hingegen ist zugegebener Maßen groß, ich würde auch nicht drauf bestehen. Aber was passiert eigentlich, wenn ein Treiber (also anderes Modul) eine Zugriffsverletzung "macht" ?

Zitat

- Treiberprogrammierer werden dann auch dazu gezwungen ihre Treiber in C++ zu schreiben. Ein Interface von C++ nach C ist wesentlich komplizierter als von C nach C++.

Es ist schon klar, das man nem C++-Treiber ein C-Interface anbieten kann, aber nicht umgekehrt. Aber das es sehr kompliziert ist, ein C-Interface zu bauen, das intern auf C++ setzt, halte ich für naja sehr übertrieben. ;-)

Zitat

- Bei der Treiberprogrammierung kommen dazu noch üble Probleme bei der Kompatibilität (C-Funktionen können einheitlich exportiert/importiert werden, bei Klassen kocht hingegen jeder Compiler sein eigenes Süppchen). Die Treiberprogrammierer werden also auf den GCC festgenagelt.


Verstehe ich nicht recht, die Treiber gehören doch nicht zum Mircokernel?
Werden also auch nicht mit denen zusammen kompiliert, bzw. gelinkt.
Wie wird überhaupt realisiert, das andere Module/Treiber auf den Microkernel zugreifen können? Sie müssen ja die Adressen kennen, also braucht man ne Art .LIB-Datei? Vielleicht hast du ja recht, aber ich will es erstnoch mal genau wissen. :roll:
Aber festgenagelt werden sie aber auf jedenfall nicht, wenn sie kein C verwenden, denn das C-Interface wird mit extern "C" deklariert.

Zitat

- C++ bringt keinen Vorteil bei der Programmierung von Hardware. Hardware ist darauf ausgelegt von einem Assembler- oder C-Programm (oder einer anderen Prozeduralen Programmiersprache) bearbeitet zu werden. Also nicht Objektorientiert oder ähnliches. Große Teile der Kernels werden einfach aussehen wie C-Code.


Der Kernel selber, befasst sich gar nicht so viel mit Hardware, das machen doch eher die Treiber, der Kernel befasst sich mit Abstrakten Typen, wie Prozessen, die sehr wohl als Objekt darstellbar sind.

MfG
DDR-RAM

edit:
da war einer bisschen schneller als ich  :oops:
163
tyndur / C vs. C++ bzw. wo ist was sinnvoll?
« am: 08. May 2005, 19:08 »
Zitat von: mastermesh
Der Kernel wird in C geschrieben werden. Die Leute, mit denen ich gesprochen habe, waren alle dafür, einen Microkernel zu schreiben. C++ im Microkernel ist IMHO Unsinn.


Meines Erachtens ist C++ im Microkernel überhaupt kein Unsinn.
Eventuell könnte man sich in der Mitte treffen und einige Sprachmittel von C++ nicht im Microkernel verwenden.
Ich sehe keine Vorteile von C gegenüber C++ (bin ich blind?).

MfG
DDR-RAM
164
tyndur / CommFS?
« am: 08. May 2005, 16:08 »
Ich würd möglichst für alle bekannte entsprechende Treiber bauen, allerdings wird FAT12 für FDD und FAT32 für HDD wohl fürs erste reichen.

MfG
DDR-RAM
165
tyndur / C vs. C++ bzw. wo ist was sinnvoll?
« am: 08. May 2005, 16:06 »
Zitat von: TeeJay
C finde ich beste Wahl.

Um C++ komplett nutzen zu können ist einiges an Vorarbeit notwendig was unnötig wäre das extra in den Kernel zu packen.

C alleine produziert zudem auch kleineren und schnelleren Code was für den Kernel ja sehr sinnvoll ist.


new/delete ist schnell gebastelt ;-), ist ja nicht viel anders, wie malloc/free, wenn es ans exception-handling geht, dann ist tatsächlich Vorarbeit nötig. Man könnte es aber weglassen, wenn man es nicht will, allerdings hab ich es bis jetzt immer mit reingenommen, da damit leicht Möglichkeit, Fehler zu korrigieren oder Fehlermeldungen auszugeben.
RTTI würde ich im Kernel nicht verwenden, weil ich den Code net kenne. Mehrfachvererbung auch nicht, vor allem nicht von Interfaces.
Templates sind wahrscheinlich auch unnütz.
Operatorüberladung auch, aber ich würde sie nicht ausschließen wollen,
z.B. new/delete-Opeartor, evtl. Vergleichsoperatoren.

Wenn man auch Exception-Handling rauslässt,
hat man nen recht schlankes C++, das mit nem gutem Compiler garantiert nicht langsamer bzw. größer als entsprechendes C ist!
virtuelle Memberfunktionen würde ich Übrigens auch nicht ausschließen,
sie können enorm zur Abstraktion beitragen, was für den Kernel ja sehr sinnvoll ist ;-)

Wie berät sich eigentlich das Coreteam? Über PN's oder wohnt ihr zusammen? :D

MfG
DDR-RAM
166
tyndur / C vs. C++ bzw. wo ist was sinnvoll?
« am: 08. May 2005, 13:09 »
Hi,

damit ihr gleich meine Meinung kennt, ich wäre dafür alles in C++ zu machen. Es gibt nur sehr wenige Funktionen, die C kann, aber C++ nicht.
C++ verfügt aber über Sprachmittel, die C nicht kennt, wichtigste ist wohl Klassen und das diese Funktionen usw. haben, na ihr kannt das ja ;)

MfG
DDR-RAM
167
Lowlevel-Coding / C++: Bestimmten String aus Datei lesen
« am: 08. May 2005, 13:02 »
Natürlich auch die Logik ;-)

Hier der Code:

/////////////////
// main.cpp

#include <iostream>
#include <fstream>

int main()
{
const char strAbc[] = "abc ";
const int nMaxStrAlloc = 100;

std::ifstream FileIn;
std::ofstream FileOut;

FileIn.open("in.txt");
FileOut.open("out.txt");

char ch;
char tmp[sizeof(strAbc)];
char *str = new char[nMaxStrAlloc + 1];

while(!FileIn.eof())
{
// Zeichen lesen
FileIn.get(ch);
       
// Wenn Zeichen kein # ist, einfach speichern
if(ch != '#')
{
FileOut.put(ch);
} else {
// Zeichen ist ein #
// Nächsten 4 Zeichen lesen
FileIn.read(&tmp[0], sizeof(tmp) - 1);
tmp[sizeof(tmp) - 1] = '\0';
// Wurde abc erkannt
if(strcmp(tmp, strAbc) == 0)
{
// String dahinter ermitteln
int i;
for (i = 0; ch != '.' && i < nMaxStrAlloc; i++)
{
FileIn.get(ch);
str[i] = ch;
}
str[i] = '\0';
// Zum Debuggen String anzeigen
std::cout << str << std::endl;
} else {
// Nein, also alles bisher gelesene speichern...
FileOut.put('#');
FileOut.write(tmp, 4);
// ...und weitermachen
continue;
}
}
}

FileOut.close();
FileIn.close();

delete [] str;

return 0;
}


Bei mir sind FileIn und FileOut übrigens keine Zeiger, deshalb nicht verwundern.

MfG
DDR-RAM
168
Lowlevel-Coding / C++: Bestimmten String aus Datei lesen
« am: 08. May 2005, 01:21 »
Also ich hab deinen Code umgeschrieben und bei mir klappts ;-)

MfG
DDR-RAM
169
tyndur / Namens-Abstimmung zum CommOS
« am: 08. May 2005, 01:19 »
Ich bin eher für LLOST, auch wenn keiner weiß, wie man das ausspricht (oder vorallem gerade wegen, das macht die Sache spannender :D )

MfG
DDR-RAM
170
Lowlevel-Coding / C++: Bestimmten String aus Datei lesen
« am: 07. May 2005, 16:06 »

    ch = FileIn->get();


Wenn du auf Fehlermeldungen achten würdest, hättest du bemerkt, das hier etwas nicht stimmt. FileIn->get() gibt kein char zurück ;-)

es muss so heißen:

FileIn->get(ch);


Außerdem, wenn du str ausgibst gibst du nur dein letztes null-terminierungs zeichen aus. das willst du glaube ich nicht sehen ;-)

MfG
DDR-RAM
171
Lowlevel-Coding / C++: Bestimmten String aus Datei lesen
« am: 07. May 2005, 14:08 »
Wie ist denn jetzt kein Problem?
Und was ist file?


// Zum Debuggen String anzeigen
cout << file << endl;
172
tyndur / Device-Filesystem
« am: 07. May 2005, 00:23 »
Für Linux und Windows?
gcc? Also wirklich kein C++?
Sollte dafür nicht besser noch ausführlich diskutiert werden oder hatte ich das verpasst?
Wird gerade sehr OT :D

MdG
DDR-RAM
173
tyndur / Device-Filesystem
« am: 06. May 2005, 22:40 »
Zitat von: mastermesh
Ich würd mir an euerer Stelle noch keine nähreren Überlegungen machen.

Wir versuchen gerade, einen GRUB-basierten Bootstrap durchzuführen. Wenn alles klappt, werden alle "lebenswichtigen" Module zusammen mit der Kernel per GRUB geladen. Wie es dann weitergeht... tja, das werden wir dann sehen.


Wer seid ihr?
Wo kann man das nachlesen das ihr das tut?

:D

Aber zum Thema kann ich nicht allzu viel sagen.
Bin da bisschen hin und hergerissen.

MfG
DDR-RAM
174
tyndur / Projektname für das Comm-OS
« am: 05. May 2005, 21:36 »
sollte kein eingetragene Handelsmarke oder so sein.
Am besten nicht mit der Endung ix,
Sollte bei google möglichst wenige Treffer geben.
Mehr Tipps fallen mir nicht ein.
Und nen guter Name erstrecht nicht.

MfG
DDR-RAM
175
tyndur / Codestil
« am: 05. May 2005, 21:09 »
80 sind find ich zu wenig, ich bearbeite kein Quelltext im 25*80 Zeilenmodus. ;)
120 ist Courier New, Schriftgröße 10 auf 1024*768.
Find ich eigentlich ok.
Nur wenn man noch irgendwelche anderen Fenster damit drin hat wird es knapp.

MfG
DDR-RAM
176
tyndur / Codestil
« am: 05. May 2005, 19:47 »
aber der Quellcode bläht sich ganz schön auf. Also bei if-Statements, würde ich trotzdem noch selbe Zeile nehmen.

Was ist eigentlich mit max. Zeichen pro Zeile? 120?

MfG
DDR-RAM
177
tyndur / Re: Kernel
« am: 05. May 2005, 17:21 »
Zitat von: T0ast3r
Ich möcht meinen Senf auch noch dazugeben:
Ich würde nicht eine Microkernel (also wo alles in einer Datei ist) machen, sondern je nach Kategorie das ganze aus Dateien laden.


Entweder ich hab jetzt was falsch verstanden oder du, Microkernel enthält nur das nötigste und der Rest kommt in ausgelagerte Module.
Du meintest wohl, das du keinen monolithischen Kernel willst.

aber trotzdem ACK ;)

MfG
DDR-RAM
178
tyndur / Kernel-Entwurf
« am: 05. May 2005, 15:17 »
Ich sag einfach mal paar Sachen, womit ich mich in letzter Zeit beschäftigt habe.

KernelTyp:
MicroKernel mit MemoryManager, ProzessManager, UserManager, Abstraktionsschicht, evtl. Treiber für Laufwerke.
Der Rest kommt in einzelne Module.

Treiber:
So wie joachim_neu :D

Speicherverwaltung:
Der Kernel sollte im logischen Speicher, nen Addressraum für nen Heap haben, z.B. von 0xD0000000 bis 0xE0000000.
Den MemoryManager würde ich so machen, er besteht aus Knoten, der erste ist z.B. bei 0xD0000000 und geht am Anfang bis 0xE0000000, der Speicher muss ja nur im Page Dir reserviert sein. Bei Zugriff mit malloc wird nen Freier Block gesucht, über nen Avl-Baum, falls der Block zu groß ist, wird er gesplittet. Vielleicht bisschen kurz die Erklärung, hab das bis jetzt aber nur mit C++ implementiert, funktioniert auch einwandfrei, habe da noch paar weitere Sachen drinne für kleine Blöcke und so.
Für Usermode-Programme sollte das so ablaufen, das es sone Art VirtualAlloc gibt, und der Speicher dann bei Bedarf alloziert wird. Außerdem malloc/free/realloc in ne Dll rein und ähnlich implementieren, wie für den Kernel.

Prozessverwaltung:
Da wäre ich z.B. dafür, dass man zwischen mehreren Scheduler-Typen wählen kann, außerdem Multithreading.
Jeder Prozess hätte dann mindestens einen Thread.
Die Threads sollten auf TSS-Basis sein, im TSS könnte man auch floating-point Unit speichern und weitere Informationen.

IPC:
ReadProcessMemory, WriteProcessMemory mit entsprechender Rechtevergabe, gemeinsame Speicherbereiche, Messaging, Events, Mutexes, Semaphores, halt alles was dazu gehört.
Den Kernel würde ich möglichst pre-emptiv halten.

Allgemein:
Also ich würde nach außen hin, alle Möglichkeiten, die ein Unix oder Winprogramm braucht diesem auch native zur Verfügung stellen.
Man muss nur gut Abstrahieren.

evtl. kommt noch was.

MfG
DDR-RAM
179
tyndur / Lagebesprechung
« am: 04. May 2005, 20:41 »
DDR-RAM
C/C++, Assembler
Erfahrung vorhanden
Zeit vorhanden
Microkernel, Multitasking, evtl. Multiprocessing, virtuelle Speicherverwaltung, gutes Treiberinterface, native Unix und Win32 Emulation (evtl. auch Win16), also auch GUI und Festplatteninstallation, DLL's/SO's, Registry. Am geilsten wäre, wenn man den Treibern nen Win32 bzw. Unix emulieren könnte, dann könnte man für GraKa's z.B. win treiber nehmen.
Allerdings sollte man wohl erst bisschen kleinere Brötchen backen.
Ich würde Kernel mitmachen auf jeden. Wenn das gut designed ist. Allerdings habe ich bei meinem OS auf C++ und MS VC++ Compiler gesetzt, da C++ Abstraktion besser ermöglicht. Ne C-Schnittstelle kan man ja trotzdem reintun. Aber ihr scheint euch schon auf C festgelegt zu haben :(
Ist irgendwann, irgendwo Treff im IRC?

MfG
DDR-RAM
180
tyndur / Codestil
« am: 04. May 2005, 20:11 »
hab mich zwar (noch) nicht zum coden angemeldet, aber ich würde nach for, if, while immer ein Leerzeichen zwischen der öffnenden Klammer machen. Das mit den Pointern und dem Stern find ich andersherum schöner (wie gesagt gehört zum Typ und wer schreibt denn schon mehrere Pointer deklarationen auf eine Zeile?).

zu asm:
ich mach zwischen befehl und operanden entweder ein oder zwei tabs, damit's gleiche zeile ist, weiß nicht, ob du es erwähnt hast, sieht schöner aus.

MfG
DDR-RAM
Seiten: 1 ... 7 8 [9] 10

Einloggen