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

Seiten: [1] 2 3 4
1
Lowlevel-Coding / Re: Einen PC neustarten
« am: 24. February 2010, 20:08 »
Man kann einen Neustart auch mit einem provozierten Tripe Fault erzwingen.
2
OS-Design / Re: Speicherverwaltung mit Stack
« am: 02. February 2010, 20:16 »
und warum bin i da net selbst draufgekommen?  :-D Danke schön!
3
OS-Design / Speicherverwaltung mit Stack
« am: 01. February 2010, 19:22 »
Hallo!

Seit kurzen komme ich wieder etwas dazu an meinen OS weiterzuarbeiten. Die physische Speicherverwaltung war bisher mit einer Bitmap realisiert, aber das ist relativ langsam nach einer Zeit. Eine Implementierung mit Stack gefällt mir eigentlich recht gut, aber ein Problem sehe ich: Wenn irrtümlicherweise eine bereits freigegebene Page auf den Stack gepusht wird, dann ist die da zweimal drauf, und wird beim zweiten Mal fälschlicherweise als neue und freie Speicherseite hergegeben.
Gibts da Lösungen dafür? Oder ist das ein NAchteil den ich in Kauf nehmen muss? Prinzipiell würde mir nur einfallen den Stack bei jedem free - Aufruf zu durchsuchen, aber das ist ja dann wieder eine recht langwierige Sache.

lg,

Blitzmaster
4
Offtopic / Re: Visual Studio 2008
« am: 17. October 2009, 15:25 »
Für IntelliSense muss man die Include-Paths einstellen, die man für die OS-Entwicklung verwendet etc...

Und der Code der eingegeben wird, muss soweiso vom Compiler/Assembler akzeptiert werden, net von Visual Studio. Obs eine Definitionsdatei für Syntax Highlighting gibt weiß ich nicht, aba das kann man ja im Internet suchen...
5
Offtopic / Re: Visual Studio 2008
« am: 15. October 2009, 18:53 »
Recht viel muss man eh net machen. Man muss halt den gcc und die ganzen tool installiert haben (make, ld,...) damit das ganze einen Sinn macht. Dann brauchst nur noch in den Einstellungen deines Visual Studio Projekts bei den Einträgen für die beim Buildvorgang auszuführende Programme eintragen, dass gcc etc. gestartet wird. Wenn du alles über makefiles machst, dann steht da nur "make all" oder wie auch immer du das dann genannt hast...
Aja: Projektart sollte "Makefile Projekt" sein. Dann kannst die ganzen Sachen auch einstellen... Ev. sind noch ein paar andere Einstellungen gefragt um einen komfortablen Betrieb zu erlauben (IntelliSense Einstellungen vor allem), aber notwendig sind eigentlich nur die Einträge für die Buildvorgänge. Leider weiß ich net genau wie die heißen, aba du solltest das eigentlich im Optionen Dialog deines Projekts finden...
6
OS-Design / Re: Fragen zum Bootloader und kernelübersetzung
« am: 13. April 2009, 13:52 »
3. Du kannst zwar die IDE Visual Studio C++ verwenden, aber den Compiler nur schwer. Ich kenne mich nicht so gut mit dessen Kommandozeilenparametern aus, also kann ich dir auch nicht sagen, was du da hinschreiben musst. Auf jeden Fall erzeugt der Microsoft Compiler PE Dateien (also .exe).
Ich verwende zwar Visual Studio C++ als Editor (weil er einfach immens praktisch ist), aber zum kompilieren verwende ich einen selbst gebastelten crosscompiler. Den musst du wohl auch machen, wenn du von Windows aus z.B. elf Dateien erzeugen möchtest... Aber da gibt es in der Wiki einen sehr guten Eintrag. (such einfach nach crosscompiler)
Im Internet bin ich vor langer Zeit mal auf etwas gestoßen, wo ein C Kernel mit MSVC erstellt wird, such einfach mal in google nach C Kernel MSVC oder so.
7
OS-Design / Re: Software Multitasking
« am: 19. March 2009, 16:45 »
Du musst darauf achten, dass du beim Laden der Daten vom Stack des 2. Tasks zuletzt die Rücksprungadresse (+ segment glaub ich) auf den Stack legst, damit iret funktioniert
8
Offtopic / Frohe Weihnachten
« am: 24. December 2008, 14:32 »
Hallo!

Ich wünsche allen ein frohes und besinnliches Weihnachtsfest und einen guten Rutsch ins neue Jahr!

lg,

blitzmaster
9
Offtopic / Re: Webhoster
« am: 05. November 2008, 13:18 »
Also ich kann dir all-inkl.de sehr empfehlen.
Wir haben da auch unsere Homepage...
Inwiefern die Programme da laufen weiß ich nicht, aber so viel ich weiß gibt es keine Probleme mit Wikis und Blogs.
10
Offtopic / Re: Einfach hereingeschneit
« am: 14. September 2008, 12:40 »
Willkommen bei uns am/an Bo(a)rd!  :-D
11
Lowlevel-Coding / Re: Problem mit GDT - Kernel stürtzt ab
« am: 21. July 2008, 14:24 »
[...] und in deinem Fall DS =0316 f053f000 0000ff53 f000ff53, was irgendwie anders als die anderen Segmentregister und irgendwie kaputt aussieht. ;) Das 0316 ist der Wert des Registers (vergleiche mit EAX, wo es herkommt), dahinter kommen Basis, Limit und irgendwas. Flags und so. [...]
Nein, das 0x10 ist dein datendeskriptor in der GDT.
Und ich würde dir empfehlen die Tabellen wirklich erst im C-Kernel zu laden, da du dann leichter was dran ändern kannst. (also ich weiß ja net wie dein Design aussieht, aber mein Design sieht es vor, dass ich später noch weitere Segmente in die GDT einbaue..., das geht mit C dann einfach leichter)
12
OS-Design / Re: Was macht eigentlich (m)ein kernel?
« am: 18. April 2008, 18:10 »
Die meisten deiner Fragen laufen wohl auf das Thema IPC (Inter process communication) also der Interprozesskommunikation. Wie gesagt und von dir gefragt müssen die Programme eben mit den Treibern kommunizieren. Das könnte z.B. so ähnlich sein wie E-Mails: es gibt z.b. eine funktion SendMessage(). Dort wird die Nachricht (pointer zur Nachricht) übergeben und die Prozess-Nummer (PID, eindeutige Nummer die jeden Prozess identifiziert). Die funktione SendMessage() springt dann in den Kernel der dann die Nachricht an den richtigen Prozess weiterleitet.
Nützliche Links hierzu:
So.
Zitat
Meinst du damit die, die du als Grundaufgaben deklariert hast oder was für Funktionen?
Ja. Hier wird z.B. die IDT, die GDT initialisiert, hier werden die Treiber geladen (oder auch nur der Init-Prozess),...

Zitat
Inwiefern müssen sich treiber registrieren? Sie fangen doch lediglich interrupts auf und weisen den kernel darauf hin. oder wie, oder was?
Naja ich habe es so gemeint: Mit der HW kommuniziert man über die Ports. Die sollten aber nicht für jedes Programm frei zugänglich sein, sondern nur für Treiber. Und ein Treiber braucht auch nicht Zugriff auf jeden Port. Beispiel:
Ein Treiber braucht zugriff auf den Port 0x34. Also fordert er dies vom Kernel: ReservePort(0x34);
// Dann kann er darauf zugreifen
data = ReadPort(0x34); // heißt üblicherweise InB();
WritePort(0x34, data); // heißt üblicherweise OutB();
Der Kernel kann so dafür sorgen dass immer nur ein Treiber auf einen Port zugreift und dass nicht jedes Programm auf alles Zugreifen kann.

Zitat
selbst für die ausgabe eines einfachen Strings, von mir aus lademessage brauch ich nen grafik-Treiber? Na holla. Also ich habs bisher zwar immer im kernel gelassen, aber kann mir schon vorstellen das sich das besser anbietet über nen treiber zu machen.
Aber da tuen sich bei mir schon wieder ein schwall von fragen auf. in welchem dateiformat muss ich treiber abspeichern.? wie lad ich sie? was muss drin stehen? wie funzt die kommunikation zwischen kernel und treiber? (Jetzt auf alles ne antwort zu verlangen wäre ein wenig dreist, aber das sind fragen die mir dann kommen.
Kommunikation: IPC, wie oben beschrieben. Dateiformat: Egal, wie du willst. Drinnen muss sein was der Treiber halt mahct, also meistens verschiedene Funktionen.

Aber für den Anfang empfehle ich dir noch nicht Sorgen zu machen wie du z.B. deine Treiber lädst. Ich würde die ersten Schritte so angehen(Reihenfolge)
  • Startroutine des Kernels (also grundlegende HW initalisieren)
  • Speicherverwaltung Kernel
  • Speicherverwaltung User bzw. Multitasking
  • IPC

Natürlich ist das ganze komplex, aber ich glaube jeder weiß, dass OS-Programmierung halt nicht was ist, was man an einem Nachmittag erlernt sonder ein andauernder Prozess vieler Jahre und viel Erfahrungssammeln ist.  :wink:
13
OS-Design / Re: Was macht eigentlich (m)ein kernel?
« am: 18. April 2008, 15:35 »
Der Kernel hat nach meinem Verständnis die Aufgabe:

a. in den PM zu schalten (ja. Stichwort Grub. aber nein.)
Ich würde das eher in den Bootloader geben. Denn solltest du deinen Kernel einmal Multiboot-fähig machen (um z.B. Grub zu verwenden  :-D) dann wird im Bootloader schon in den PM geschalten.
b. GDT, IDT zu erstellen und zu laden
c. Treiber zu laden (in meinem Fall lediglich für die Tastatur)
Das ist die Startroutine des Kernels. Hier werden die Kernelfunktionen initialisiert.
d. Tasks zu verwalten (hab noch keine ahnung wie das geht, aber tutorial ist schon gefunden)
Und da wären wir schon bei den (meiner Meinung nach) Grundaufgaben eines Kernels:
  • Multitasking
  • Speicherverwaltung: Jeder Prozess möchte seinen eigenen Speicherbereich haben, wo nur er zugriff hat. Ich empfehle auch den Kernelspeicher dynamisch zu verwalten. Das Stichwort hier ist Paging.
  • Hardware verwalten: Nicht jedes Programm braucht vollen Zugriff auf die ganze Hardware, den soll es auch nicht haben. Also hat nur der Kernel absolute Herrschaft über die HW und die Treiber müssen sich halt um Zugriff zu erlangen i-wie beim Kernel registrieren.
  • IPC: Interprozesskommunikation: Die Programme wollen untereinander reden, das tun sie über Kernel-Funktionen. (siehe weiter unten, Shell)
e. printk()
Das gehört nicht in den Kernel. Die direkte Grafikausgabe gehört in einen Grafik-Treiber.
f. Fehlerroutinen bereitstellen auf die die diskriptoren Zeigen (ich hoffe das ich das nun richtig kapiert habe)
Du meinst exceptions? Ja, das gehört auf jeden Fall auch in den Kernel.
g. mein programm shell laden und damit den Benutzer mit einbinden.
Am Anfang muss der Kenel natürlich ein Programm laden. Ob das jetzt direkt die Shell ist oder ein Init-Prozess der vl. noch weitere aufgaben hat ist denke ich Design-Sache. Auf jeden Fall soll die Shell nur durch IPC mit dem Tastatur- und Grafiktreiber kommunizieren, also nicht direkt auf die HW zugreiffen. (darf sie, wenn alles richtig geht auch nicht)
14
Offtopic / Re: Kleine Vorstellung
« am: 17. April 2008, 20:23 »
Herzlich Wilkommen!  :-)
Es freut mich, wenn unsere Community hin und wieder doch mal neue Mitglieder bekommt, die auch ernsthaft was machen wollen  :-)
15
jetzt nicht mehr :-D :roll:
16
Offtopic / Re: Das Lowlevel-Wiki bekommt eine Lizenz
« am: 23. March 2008, 14:11 »
Wie sieht es mit dem Code aus? Muss man da immer hinzuschreiben, unter welcher Lizenz der is, oder gibts da was einheitliches?
17
Offtopic / Re: gcc will nur über direktaufruf
« am: 19. March 2008, 17:50 »
Pfade während der Konfiguration? Das kann auswirkungen haben? Aber wieso kann ich ihn dann ganz normal per Kommandozeile aufrufen, nur wenn er von Make aufgerufen wird nicht?!
18
Offtopic / Re: gcc will nur über direktaufruf
« am: 19. March 2008, 11:55 »
Das könnte sein, aber wieso sollte er sie nicht finden? Sie is genauso in der Path-Variable und ich kann sie ja auch direkt aufrufen...
Außerdem ist die ja im gleichen Verzeichnis wie gcc...
[edit] Vl. hilft es wenn ich sage, dass ld ohne Probleme funktioniert[/edit]
[edit2] Und wenn ich per cmd in das Verzeichnis des Quellcodes navigiere und dort gcc manuel aufrufe funktioniert es auch. Nur über make nicht...[/edit2]
19
Offtopic / Re: gcc will nur über direktaufruf
« am: 18. March 2008, 18:05 »
Danke mal für die Antwort.
gcc steht in der Pfadliste für ausführbare Dateien. (unter windows geht das mit dem Kommando "set path=C:\blabla;%path%")
Könnte es sein, dass make da einen eigenen "index" hat wo es nachsieht? Das glaube ich zwar eher nciht, könnte aber gut sein.
Aber mit absoluten pfaden in der Makefile habe ich es auch schon probiert.
20
Offtopic / gcc will nur über direktaufruf
« am: 18. March 2008, 17:32 »
Hi!

Ich habe den Crosscompiler von Jidder (wiki) und er funktioniert auch ganz gut. Jetzt bin ich aber auf einen windows port von make umgestiegen und wenn der Compiler da aufgerufen wird sagt er nur
Zitat
gcc: CreateProcess: No such file or directory
Wenn ich ihn direkt aufrufe funktioniert er einwandfrei. Weiß jemand was da los ist / los sein könnte?

lg,

Blitzmaster
Seiten: [1] 2 3 4

Einloggen