Lowlevel

Lowlevel => OS-Design => Thema gestartet von: OsDevNewbie am 11. October 2015, 22:32

Titel: Streamids
Beitrag von: OsDevNewbie 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?
Titel: Re: Streamids
Beitrag von: kevin 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.
Titel: Re: Streamids
Beitrag von: Svenska am 14. October 2015, 12:53
Der POSIX-Standard verlangt, dass open() den niedrigsten freien File-Descriptor zurückgibt (Quelle (http://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html)).
Titel: Re: Streamids
Beitrag von: kevin am 14. October 2015, 14:53
Was natürlich nur dann relevant ist, wenn man POSIX implementieren will.
Titel: Re: Streamids
Beitrag von: Svenska 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".
Titel: Re: Streamids
Beitrag von: kevin 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).
Titel: Re: Streamids
Beitrag von: Svenska 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 (https://en.wikipedia.org/wiki/Microsoft_POSIX_subsystem)).

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).
Titel: Re: Streamids
Beitrag von: kevin 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. ;)
Titel: Re: Streamids
Beitrag von: OsDevNewbie 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.