Autor Thema: Streamids  (Gelesen 15030 mal)

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« am: 11. October 2015, 22:32 »
Hallo zusammen,
mir ist aufgefallen, das in allen mir bekannten Systemen (Windows, Mac und Linux) die Stream IDs von jedem Prozess immer von vorne vergeben werden. D.h. wenn ein Prozess eine Datei öffnet, dann bekommt er die ID 3 für den Filedescriptor. Wenn nun ein 2. Prozess eine andere (oder die selbe) Datei öffnet, bekommt er für diese auch wieder die ID 3 zurück.
Ist das irgendwo definiert, dass das so sein soll/muss oder machen diese Systeme das einfach?
Ich gebe nämlich jedem Stream eine andere ID, so dass die IDs eines Prozesses nicht immer mit der 3 anfangen. Ist das ein Sicherheitsrisiko?
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 12. October 2015, 09:54 »
Ein Sicherheitsrisiko sollte das nicht sein, wo siehst du da ein Problem?

Aber es ist halt in der Regel so, dass die ID nur innerhalb eines Prozesses eindeutig sein muss und wenn man einfach die erste freie nimmt, kommt genau das dabei raus. Wenn deine Interfaces dafür geeignet sind, spricht natürlich nichts dagegen, wesentlich höhere IDs zu benutzen, aber bei den klassischen Interfaces gibt es manche (z.B. select() mit seinen fd_sets), die eine obere Begrenzung haben, an die man systemweit in der Praxis leicht rankommen dürfte.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 14. October 2015, 12:53 »
Der POSIX-Standard verlangt, dass open() den niedrigsten freien File-Descriptor zurückgibt (Quelle).

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #3 am: 14. October 2015, 14:53 »
Was natürlich nur dann relevant ist, wenn man POSIX implementieren will.
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #4 am: 15. October 2015, 03:23 »
Die Frage war, ob das irgendwo definiert ist, dass das so sein müsse, weil alle hinreichend relevanten Betriebssysteme das tun. Die Antwort ist "ja, in POSIX".

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #5 am: 15. October 2015, 09:45 »
Für Linux und OSX ja, aber bist du dir sicher, dass das der Grund ist, warum Windows das macht? Ich hätte gedacht, dass das eher zufällig so passiert ist (und ich wusste bis zu diesem Thread nicht einmal, dass sich Windows so verhält).
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

Svenska

  • Beiträge: 1 792
    • Profil anzeigen
Gespeichert
« Antwort #6 am: 15. October 2015, 14:05 »
Windows NT ist ein POSIX-Betriebssystem. ;-)

Im Gegensatz zu Linux sind Windows NT 3.5, NT 3.51 und NT 4.0 selbst POSIX-zertifiziert. Spätere Versionen sind das meines Wissens dann, wenn die "Services For UNIX" (Interix) installiert sind. In den 80ern hat die US-Regierung POSIX in die IT-Anforderungsliste geschrieben, also wurde Windows dafür zertifiziert (Wikipedia).

Neben Win32 und POSIX implementiert Windows NT auch eine dritte Personality, nämlich OS/2 1.x (allerdings ohne den Presentation Manager, d.h. nur Text).

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #7 am: 15. October 2015, 15:06 »
Ich gehe davon aus, dass OsDevNewbie sich auf die Win32-API bezogen hat und nicht auf das POSIX-Subsystem. Aber kann natürlich sein, dass man die Daeideskriptoren schon in gemeinsamen Kernelcode so vergeben hat, dass das POSIX-Subsystem leichteres Spiel hat. Keine Ahnung.

In tyndur sind die POSIX-FDs jedenfalls was anderes als die LIO-Stream-IDs, die der Kernel rausgibt. ;)
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

OsDevNewbie

  • Beiträge: 282
    • Profil anzeigen
    • YourOS Kernel
Gespeichert
« Antwort #8 am: 18. October 2015, 17:04 »
Ich danke euch für die Antwort und für die interressante Diskussion. Ich habe eigentlich schon vor irgendwann mal den POSIX-Standard zu übernehmen, also werde ich das von Anfang an die FD immer von vorne vergeben obwohl ich ehrlich gesagt noch nicht genau weiss wie ich das implementiere.
Viele Grüsse
OsDevNewbie

Ein Computer ohne Betriebsystem ist nicht mehr wert als ein Haufen Schrott.
Ein Computer ist eine Maschine, die einem Lebewesen das kostbarste klaut, was sie selber nicht hat:
DIE ZEIT DES LEBENS

 

Einloggen