Wo programmiert es sich am komfortabelsten?
-
"KernelDev" ... "Treiberentwicklung" ... ?
-
Ethon schrieb:
"KernelDev" ... "Treiberentwicklung" ... ?
Treiber können nicht im User-Space sein?
-
Zeus schrieb:
Ethon schrieb:
"KernelDev" ... "Treiberentwicklung" ... ?
Treiber können nicht im User-Space sein?
Korrigiere mich, wenn ich etwas falsch verstanden hab; Treiber sind doch in mikro-kerneln im User-Space?
-
Was war jetzt eigentlich die Frage?
Ob man unter Windows bzw. MacOS genauso komfortabel Treiber entwickeln kann wie unter Linux?
Ich würde mal behaupten das dir das nur jemand sagen der schon für alle 3 Plattformen einen Treiber entwickelt hat.
-
Hacker schrieb:
Korrigiere mich, wenn ich etwas falsch verstanden hab; Treiber sind doch in mikro-kerneln im User-Space?
Jein, bei jeden System muss man zwischen Kernel-Space- und User-Space-Treiber differenzeren, während Mirkokernel bestrebt sogut wie alles in den User-Space zu verlagern, exestieren dennoch auch Kernel-Space-Treiber. Linux beispielweise will monolitsch während aber der Grafikkarten-Treiber doch im User-Space lief - heute dunno vielleicht hat sich das geändert. Außerdem gibst noch Hybrid-System wie MacOSX, Windows (NT-based) und Beos (aka Haiku).
-
Mechanics schrieb:
Man kann im Kernel nichts forken. Ein Treiber ist kein Prozess. Da gibts ganz andere Konzepte, wie Tasklets und work queues. Ganz andere Speichverwaltung etc. Eben eine komplett eigenständige API. Die userspace Api kann man da nicht benutzen.
jede Menge POSIX-Schnittstellen sind aber im Kernel-Space.
-
Steffo schrieb:
Mechanics schrieb:
Man kann im Kernel nichts forken. Ein Treiber ist kein Prozess. Da gibts ganz andere Konzepte, wie Tasklets und work queues. Ganz andere Speichverwaltung etc. Eben eine komplett eigenständige API. Die userspace Api kann man da nicht benutzen.
jede Menge POSIX-Schnittstellen sind aber im Kernel-Space.
Und geben Garantien an Userspace-Code ... wieso nicht einfach die darunterliegenden Funktionen direkt nutzen?
-
Ethon schrieb:
Und geben Garantien an Userspace-Code ...
Wie meinst du das mit den Garantien?
wieso nicht einfach die darunterliegenden Funktionen direkt nutzen?
Weil die manchmal etwas komplexer sind und sich auch häufiger ändern und außerdem weniger portabel sind.
-
mit einer Tasse Kaffe, und einer Packung Kekse, schlechtem Wetter draußen, guten greifbaren Dokumentationen, einem Buch zum Nachschlagen, dem Gefühl etwas wirklich brauchbares zu programmieren, dem entsprechendem Know How im Hinterkopf, Magen != 0 , praktischem Editor, schönem Interpreter, Schmierblättern, -
Und ich würde jetzt auch nicht sagen, dass die Visual Studio Umgebung und die Stabilität des Desktops von Windows das Programmieren behindert.
Debugger und Disassemblerangebot ist für Windows auch irgendwie besser. Wer will, kann ja grundlegende Sachen immer noch auf Windows 95 + Softice programmieren.
Mit Java Tools (u.a. ME) habe ich unter Windows auch weniger Probleme als unter Linux.
Eine gute Zukunftsrichtung wäre sicherlich, FPGAs oder neuere Hardware intern beschleunigt mit Haskell programmieren zu können.
-
crunch crunch schrieb:
Eine gute Zukunftsrichtung wäre sicherlich, FPGAs oder neuere Hardware intern beschleunigt mit Haskell programmieren zu können.
Lol.
-
Steffo schrieb:
Mechanics schrieb:
Man kann im Kernel nichts forken. Ein Treiber ist kein Prozess. Da gibts ganz andere Konzepte, wie Tasklets und work queues. Ganz andere Speichverwaltung etc. Eben eine komplett eigenständige API. Die userspace Api kann man da nicht benutzen.
jede Menge POSIX-Schnittstellen sind aber im Kernel-Space.
Welche POSIX Schnittstellen sind im Kernel Space? Die sind vielleicht (teilweise) im Kernel implementiert, aber da kannst du sie sicher nicht benutzen. Kernel Module funktionieren einfach ganz anders (ja, es gibt auch User Space Treiber, und die Aussage von Zeus wegen Grafikkartentreibern ist immer noch richtig, aber 99% der Treiber laufen im Kernel Space). Du kannst da nichts wegabstrahieren oder "bequem" programmieren. Du musst einfach ganz genau wissen, was du tust. Und da gehört auch oft dazu, dass man irgendwelche Datenstrukturen direkt manipuliert, die sich tatsächlich öfters mal ändern können. Es gibt für Linux nicht mal einen wirklich brauchbaren/offiziellen Kerneldebugger. Es gibt auch eine Aussage von Linus Torvalds zu dem Thema. Läuft in etwa darauf hinaus, dass er nichts von irgendwelchen Kernel Debuggern hören will und Leute die sowas brauchen sie eh Trottel, die keine Ahnung haben, was sie tun, und die sollen nicht in seinem Kernel rumpfuschen. Und da willst du eine Posix API, die dir was abstrahiert und portabel macht ^^ Träum weiter.
-
knivil schrieb:
crunch crunch schrieb:
Eine gute Zukunftsrichtung wäre sicherlich, FPGAs oder neuere Hardware intern beschleunigt mit Haskell programmieren zu können.
Lol.
-> hardware beschleunigte Java-Arms
-> http://www.drdobbs.com/jvm/232901227auch Lol aber eher *hysterisch-maniacally*
Ständig unter latenter Patentklagenandrohung u.ä. zu programmieren ist nämlich alles andere als komfortabel
-
Steffo schrieb:
Mich würde mal interessieren, wie komfortabel es sich unter anderen OS wie Windows, Mac OS X, aber auch BeOS programmiert.
Dank Visual Studio programmiert es sich unter Windows imo mit großem Abstand am komfortabelsten.
Steffo schrieb:
Wenn ich mir anschaue, wie einfach es unter Linux ist einen neuen Prozess mittels fork() zu erstellen und das dann mit Windows vergleiche, bin ich froh, dass ich nichts mit der WinAPI machen muss.
Also ich weiß ja nicht was du gegen CreateProcess() hast, aber wenn du mich fragst, dann ist fork() schon rein vom Konzept her völlig kaputt...
-
dot schrieb:
Steffo schrieb:
Mich würde mal interessieren, wie komfortabel es sich unter anderen OS wie Windows, Mac OS X, aber auch BeOS programmiert.
Dank Visual Studio programmiert es sich unter Windows imo mit großem Abstand am komfortabelsten.
Betonung auf imo .
dot schrieb:
Steffo schrieb:
Wenn ich mir anschaue, wie einfach es unter Linux ist einen neuen Prozess mittels fork() zu erstellen und das dann mit Windows vergleiche, bin ich froh, dass ich nichts mit der WinAPI machen muss.
Also ich weiß ja nicht was du gegen CreateProcess() hast, aber wenn du mich fragst, dann ist fork() schon rein vom Konzept her völlig kaputt...
Wieso?
-
dot schrieb:
wenn du mich fragst, dann ist fork() schon rein vom Konzept her völlig kaputt...
10 Parameter vs. 0 Parameter. Ich finde fork() sehr schoen. Aber vielleicht magst du etwas ausfuehrlicher antworten.
-
Allein die Tatsache dass so etwas wie exec() existiert, spricht imo schon ziemlich für sich. Man will eben in der Regel nicht forken, sondern sowas wie CreateProcess(). Aber anstatt einer ordentlichen Lösung für das tatsächliche Problem, gibts eben einen Hack wie exec()...
-
Naja, Hack ... finde es eigentlich ziemlich elegant gelöst.
-
dot schrieb:
Man will eben in der Regel nicht forken, sondern sowas wie CreateProcess().
dude qtf, so obv wrong
-
314159265358979 schrieb:
dot schrieb:
Man will eben in der Regel nicht forken, sondern sowas wie CreateProcess().
dude qtf, so obv wrong
Ich sag nicht dass
fork()
rein prinzipiell schlecht ist. Vor allem in Zeiten da es noch keine Threads gab sicherlich eine praktische und elegante Lösung für viele Dinge. Aber sag mir doch mal bitte, wie oft du bisherfork()
aufgerufen hast ohne gleich darauf einexec()
zu machen?
-
dot schrieb:
Aber sag mir doch mal bitte, wie oft du bisher
fork()
aufgerufen hast ohne gleich darauf einexec()
zu machen?Immer wenn man dazwischen noch irgendwelche Pipes verkabeln will beispielsweise. Das Unix-Konzept basiert halt darauf, elementare Operationen zu identifizieren und zu komponieren; während das Windows-Konzept darin besteht, die häufigsten Fälle bequem zu machen und den Rest irgendwie ... nicht so bequem. Das zieht sich durch jede MS-API, die ich bisher gesehen habe.