Warum Windows?
-
Ich mag Windows 7.
-
Als Programmierer finde ich Linux & Co. wesentlich besser. Zum Beispiel die Erzeugung eines neuen Prozesses: fork() vs. CreateProcess mit seinen tausend Parametern. Auch bei der Benutzung der Systemtools kann Windows nicht mit Linux mithalten. Ein kleines Tool wie dd sucht man vergeblich. Auch kann man ueber das loopback device Images aller Art mounten, was erst durch DAEMON Tools unter Windows moeglich wird. Zum Spielen nehme ich aber immer noch Windows.
-
knivil schrieb:
Zum Beispiel die Erzeugung eines neuen Prozesses: fork() vs. CreateProcess mit seinen tausend Parametern.
nimm exec(), WinExec(), system() oder sowas, wenn du weniger parameter willst.
fork erzeugt eine kopie von sich selbst, wie erzeugt man unter linux prozesse, die keine kopien sind?
-
In einem zweiten Schritt ...
-
knivil schrieb:
In einem zweiten Schritt ...
und warum dieser umweg? gibts dafür 'nen grund?
-
;fricky schrieb:
rüdiger schrieb:
Das ganze ist ja oft eine Frage der Gewohnheit. Wenn ich vor einem Windowssystem sitze, dann ärgere ich mich regelmäßig über Dinge die anders sind (zB das Fehlen einer gewohnten und komfortablen Shell). Aber ich nehme mal an, dass es jemandem der sehr viel Windows benutzt hat, bei Linux ähnlich geht.
exakt. windows-user benutzen eine kommandozeilen-shell äusserst selten, nicht etwa, weil cmd.exe so schlecht ist, sondern weil es für alles mögliche grafische tools gibt.
:p Ich benutze die Kommandozeile auch nie, weil es für Linux für alles ein grafisches Tool gibt.
Ok, ich benutze die Kommandozeile für a) git und b) ssh.
-
;fricky schrieb:
hustbaer schrieb:
Ich hab Java erwähnt, weil Java IMO die einzige Sprache, mit der man wirklich gut plattformübergreifend programmieren kann. Ohne viele Fallstricke, ohne viele kleine Unterschiede auf die man achten muss etc.
womit du völlig richtig liegst. wenn ich nur in Java programmieren würde und ausschliesslich Java-basierte software nutzen würde, dann wär's total egal, ob windows oder linux. aber (leider?) gibts zu viel zeug, wofür windows ein muss ist. ich wette, selbst der grösste linux-fan und m$-hasser hat irgendwo heimlich eine windows-installation am laufen. und sei es nur, um die neuesten ballerspiele zu zocken, die es für linux nicht gibt.
Ich denke mann kann auch unter C++ gut Systemunabhängig programmieren. Man muss nur Qt, boost oder andere Bibliotheken benutzen.
Das einzige "muss" sind eben die Programme, die nicht für Linux programmiert werden. Da kann Linux nichts dagegen machen.
-
ich muss gestehen, dass ich eine Windows Installation (winpx per MSDNAA bekommen, um mal bisschen zu zocken) auf der zweiten Festplatte habe. Dieses Windows habe ich aber seit 2007 nicht mehr gebootet und werd wahrscheinlich auch nie wieder booten
-
;fricky schrieb:
und warum dieser umweg? gibts dafür 'nen grund?
Ja, ich will vielleicht nicht mehr als eine Kopie. Wenn ich mehr will, dann muss ich halt mehr machen. Meist will ich aber nicht mehr machen. Berechnung etc. auf mehrere Prozesse verteilt, ein weing IPC etc. ... Da brauche ich mir keine Gedanken ueber Pfade machen, auch (globale) Variablen und so werden einfach mitgenommen und koennen weiter benutzt werden.
-
knivil schrieb:
;fricky schrieb:
und warum dieser umweg? gibts dafür 'nen grund?
Ja, ich will vielleicht nicht mehr als eine Kopie. Wenn ich mehr will, dann muss ich halt mehr machen. Meist will ich aber nicht mehr machen. Berechnung etc. auf mehrere Prozesse verteilt, ein weing IPC etc. ... Da brauche ich mir keine Gedanken ueber Pfade machen, auch (globale) Variablen und so werden einfach mitgenommen und koennen weiter benutzt werden.
naja, mag sein dass prozesskopien manchmal genau richtig sind, aber eigentlich ist sowas doch ein sonderfall. was macht eine linux-shell, wenn ich über sie ein anderes programm starten will? erstmal eine kopie von sich selbst? das glaub' ich nicht, sowas wäre ja ziemlich albern. es gibt bestimmt eine möglichkeit, beliebige prozesse ohne selbstkopiererei zu starten.
-
das glaub' ich nicht, sowas wäre ja ziemlich albern.
Warum ist das albern? Es kostet sehr, sehr, sehr ... wenig. Ich habe vor geraumer Zeit selbst im Source nachgeschlagen, die bash macht es so. Auch sagt man nicht umsonst, dass init der Vater aller Prozesse ist.
aber eigentlich ist sowas doch ein sonderfall.
Nein, z.B. Server werden so programmiert ... nimm Verbindung entgegen, forke, Child verarbeitet eingehende Daten vom socket und stirbt. Wichtig: kein Umweg ueber das Dateisystem, Prozessinformationen sind schneller kopiert als neu erstellt. Das Hauptprogramm kann die Dateideskriptoren fuer die naechste eingehende Verbindung neu belegen. Finde ich recht einfach.
-
knivil schrieb:
Warum ist das albern? Es kostet sehr, sehr, sehr ... wenig.
weil's nicht einsehbar ist, dass ein programm erst sich selbst duplizieren muss, um dann ein völlig anderes programm zu starten. wenn du ein leeres blatt papier brauchst, schiebstes ja auch nicht erst durch einen kopierer und machst auf die rückseite was drauf. wahrscheinlich gabs irgendwann mal, in der unix-urzeit, tatsächlich einen grund dafür, dass es nicht besser ging, aber den kennt heute wohl niemand mehr.
aber eigentlich ist sowas doch ein sonderfall.
Nein, z.B. Server werden so programmiert ... nimm Verbindung entgegen, forke, Child verarbeitet eingehende Daten vom socket und stirbt.
[/quote]
naja, server sind spezialfälle von programmen und multithreaded-server sind spezialfälle von servern, jetzt wird mir jedenfalls klar, warum viele sagen, dass linux ein tolles server-OS ist, wegen 'fork' *fg*
-
weil's nicht einsehbar ist, dass ein programm erst sich selbst duplizieren muss, um dann ein völlig anderes programm zu starten. wenn du ein leeres blatt papier brauchst, schiebstes ja auch nicht erst durch einen kopierer und machst auf die rückseite was drauf.
- Das passiert ja auch gar nicht.
- Es passiert vergleichsweise selten, das neue Programme gestartet werden (jedenfalls nicht im Sekundentakt).
- Fuer Windows programmiert man anders als fuer Unix.
Auch hinkt dein Beispiel sehr. Normalerweise nimmt man ein beschriebenes Blatt, radiert alles weg und schreibt neu drauf. Aber auch das ist ein schlechter Vergleich. Warum: Radieren ist sehr zeitaufwendig. Nicht aber so bei Speicher. Falls ein neuer Prozess gestartet wird, so brauchen auch nur einige kleine Felder ausradiert werden. Zugriffsrechte, Benutzer, offene Dateien etc. bleibt ja alles gleich.
linux ein tolles server-OS ist
Zeig mir ein besseres. Und komm mir bloss nicht mit Windows, das nicht mal mit mehreren Benutzern klar kommt.
-
knivil schrieb:
Das passiert ja auch gar nicht.
doch, da stehts: --> http://en.wikipedia.org/wiki/Fork_(Unix)
When a fork() system call is issued, a copy of all the pages corresponding to the parent process is created, loaded into a separate memory location by the OS for the child process. But this is not needed in certain cases.
...
In such cases, a technique called copy-on-write (COW) is used. With this technique, when a fork occurs, the parent process's pages are not copied for the child process. Instead, the pages are shared between the child and the parent process.btw, wenn unter windows ein prozess gestartet wird, von dem schon ein oder mehrere exemplare laufen, geschieht dies auch per 'copy on write'. allerdings ist das unter win trotzdem kein 'forken' (wie unter linux).
knivil schrieb:
linux ein tolles server-OS ist
Zeig mir ein besseres. Und komm mir bloss nicht mit Windows, das nicht mal mit mehreren Benutzern klar kommt.
ich sag ja nix dagegen. hab' noch nichts negatives mit unixoiden servern erlebt, aber windosen kommen sehr wohl mit mehreren benutzern klar. wie kommste darauf, dass sie's nicht können?
-
allerdings ist das unter win trotzdem kein 'forken' (wie unter linux)
Sag ja auch niemand. Forken ist der Unixweg. Einheitlich fuer alle und deswegen konsistent. Dabei ist copy-on-write nur eine Optimierung. Wobei fork mittlerweile auch nur ein Wrapper fuer clone ist (dem auch einige Flags mitgegeben werden koennen).
wie kommste darauf, dass sie's nicht können?
Mein XP kann es nicht von Haus aus. Hier eine Frickelloesung: Windows XP Multiuser Remote Desktop.
Tja ich koennte auch die Servervariante kaufen. Auch das stoert mich, man muss es kaufen. Und man muss noch viel mehr bezahlen, wenn man was Vernuenftiges machen will.
-
fork oder nicht, ist doch vollkommen egal. was bedeutet das schon? nur daß einige dinge (bei wind00f heißts PEB, bei linux kA) kopiert werden und die pagetable einträge und so. dank copy on write muss ja sonst nix kopiert werden. ist also echt sehr billig, so ein fork. seid ihr euch sicher daß der wind00f kernel das nicht auch so macht? ich weiss daß wind00f sehr wohl forken kann, weil das posix subsystem es so macht. beim wind00f subsystem bin ich mir ned ganz sicher, müsste ich sonst mal nachschauen, aber hab ich grad keine lust.
-
weil das posix subsystem es so macht
Windows hat ein POSIX-Subsystem?
-
ja, wind00f hatte sogar mal nen OS/2 subsystem. allerdings musst du das posix subsystem mittlerweile gesondert installieren, im default install ist es nicht mehr enthalten.
-
hack0r schrieb:
ja, wind00f hatte sogar mal nen OS/2 subsystem.
aber richtig brauchbar waren diese subsysteme nie. das hat ms damals als zusätzliches verkaufsargument in win-NT reingebastelt. die dos-emulation (ntvdm.exe + dos-programme wie command.com, debug.com usw.), war wohl noch das beste davon.
-
ya das stimmt, aber die idee der subsysteme war eigentlich ganz cool. genauso wie die verfügbarkeit für verschiedene plattformen, das hat m$ ja leider so ziemlich alles eingestampft