Re: Port table?

  • From: Friedrich Gräter <webmaster@xxxxxxxxxxx>
  • To: hydrixos@xxxxxxxxxxxxx
  • Date: Thu, 29 Nov 2001 18:15:28 +0100



Dennis Schwerdel wrote:

>Ich glaub selbst 16bit sind viel zu viel, 32bit ist die Größe eines 
>herkömmlichen Pointers und kann also nicht geändert werden.
>
>Am 29.11.2001 17:06:16 Uhr, schrieb "HW" <hendrikwilhelm@xxxxxx>:
>
>>Könnten wir nicht auf ne Portliste mit 16 Bit gehen? Da kommen wir immernoch
>>hoch genug, oder?
>>

Nur weils mehrfach fragen gab:

Ein Message-Port wird ähnlich verwendet wie die Ports bei TCP/IP. Wir 
senden Daten von einem Port zu einem anderen. Wobei die Struktur
Port hierbei eher gedacht ist. Über die Nummer des Ports kann der Kernel 
prüfen, ob der Sender tatsächlich mit dem Empfänger verbunden ist und
ob er zu einem Kontakt berechtigt ist. Die Daten werden dann bei einem 
Server-Seitigen port in einem Puffer zwischengespeichert, so dass der
Server dann bei bereitschaft die Botschaft von dieser Message-Queue 
runterladen und verarbeiten kann.
Der Pointer auf das Port ist nicht ganz so wichtig. Es ist nicht die 
Adresse des Portdeskriptors, sondern die Nummer des Ports. Ich nehme 32-bit,
damit es ein halwegs zukunftsträchtiger Wert ist. Insofern ist das 
weniger ein Problem. Die Frage ist aber, wieviele Ports soll ein Prozess in
HydrixOS haben. Ich hab vorhin versehentlich was falsches kopiert. Das 
ist ein Portdeskriptor:

typedef struct {
    tid_t            worker;              /* Worker threat processing 
the message (=0 create new thread) */
    pid_t            connected;        /* Connected with this process 
(server or client) */
    msgport_t      msgport;          /* Connected with this port */
    vaddress_t        lastmsg;        /* Last stored message in queue 
(=0 queue empty) */
    dword            settings;          /* Settings of port */
}porttableent;


Nun das Problem ist die Größe dieser Tabelle, denn jeder Prozess hat 
eine. Also hat man pro Prozess PORTZAHL * sizeof(porttableent) , wobei
sizeof(porttableent) 24 Bytes ist. Ich hab hier einmal die Aspekte des 
Problems:

a) Bei einer zu großen Portzahl wird viel Speicher verbraucht
b) Bei einer zu kleinen Portzahl würde jedoch nicht jeder Thread im 
System bedient werden können (besonders kritisch bei API-Servern)

Eine zur laufzeit variable Portzahl ist nicht möglich, denn dann würde 
die Speicherreservierung nicht klappen bzw. man müsste mit wilden Pointern
durch die gegend schießen :-). Die Inizialisierungszeit ist auch nicht 
ideal, denn wir müssen mit Programmen unterschiedlicher Plattformen 
kämpfen, die
zumindest teilweise in die HydrixOS-Standarts gezwängt werden müssen.

Ich tippe auf 8192 - 16384 Ports (192 / 384 K je Tabelle) das dürfte 
genügen. Aber ich habe gemerkt, dass oft in der Computergeschichte einzelne
Personen schlechte Grundsteine bei solchen Zahlenbereichen gelegt haben, 
und das sollte bei HydrixOS nicht passieren.

cu

FG



---
This is not SPAM! You can unsubscribe sending an e-mail to 
hydrixos-request@xxxxxxxxxxxx with subject "unsubscribe". If
you've got questions contact webmaster@xxxxxxxxxxx .

Other related posts: