Forum: PC-Programmierung PC Programmierung anfänger Frage


von Pepe (Gast)


Lesenswert?

Hallo,
ich komme eigentlich aus der embedded Welt und habe kein PC programmier 
Erfahrung.

Wir haben einen Speicher bereich (256 x 64KByte) wo bisher von einer HW 
Einheit automatisch die Daten abgeholt werden, sobald jemand in den 
Speicher schreibt.
Nun soll das ganze als Host Test laufen und es soll so wenig Code wie 
möglich verändert werden. D.h. ich suche nach einem Weg, wenn ein x 
beliebiger Prozess in einen der 256 Slots schreibt, ein bestimmter 
Prozess automatisch über den beschriebenen Slot informiert wird und dort 
die Daten abholen und weiter verarbeiten kann. Der Code sollte unter 
Linux wie Windows laufen. Ich dachte vielleicht könnte man dies auch als 
Exception ausführen ????? Vielleicht weiss auch jemand wie ich den 
Segment Pointer und die Adresse auslesen könnte, wenn die Exception 
auftritt.
Ich hoffe Ihr könnt mir helfen.
Und kennt jemand von Euch gute Literatur zum einlesen in die PC 
Programmierung.
/Peter

von Peter II (Gast)


Lesenswert?

irgenewie ist es nicht verständlich was du machen willst.

Wo ist denn der Speicher auf den Geschrieben werden soll.

von Pepe (Gast)


Lesenswert?

Halt nur ein Stück allozierter Specher. Kurz gesagt soll ein Prozess in 
einen Speicherbereich schreiben (allozieirt oder geshared) und ein 
anderer automatisch raus lesen. Ich weiss  nicht wie man das am 
schönsten auf dem PC macht. Kann ich dafür eine exception nutzen? Wenn 
ja wie. Am liebsten hätte ich automatisch den Pointer auf die 
geschriebenen Daten.
Und kennt jemand von Euch gute Literatur zum einlesen in die PC
Programmierung.
/Peter

von Dummy (Gast)


Lesenswert?


von Daniel F. (df311)


Lesenswert?

ich habe mal (probehalber) ein embedded system per kernel-parameter um 
ein oder zwei megabyte RAM "betrogen" und dann einfach einen fixen 
pointer auf den speicherbreich verwendet um zwischen prozessen daten 
auszutauschen - hässlich aber funktioniert ;-)

von mir gibts mal ein paar stichwörter:
- shared memory: 
http://www.cs.cf.ac.uk/Dave/C/node27.html#SECTION002700000000000000000
- semaphores: 
http://www.cs.cf.ac.uk/Dave/C/node26.html#SECTION002600000000000000000
- signals: 
http://www.cs.cf.ac.uk/Dave/C/node24.html#SECTION002400000000000000000
- queues: 
http://www.cs.cf.ac.uk/Dave/C/node25.html#SECTION002500000000000000000
- sockets: 
http://www.cs.cf.ac.uk/Dave/C/node28.html#SECTION002800000000000000000

je nach genauer architektur kann man damit eine schöne shared-memory 
anwendung aufbauen. C-kenntnisse setze ich mal voraus ("...komme aus der 
embedded welt...").

von Pepe (Gast)


Lesenswert?

Hi Daniel,
danke für die Links. Eigentlich ist mir shared Memory nicht so lieb. 
Exceptions wären mir lieber. So nach dem Motto Der Server schreibt in 
den Speicher, der client bekommt eine exception und kann lesen, da er 
die genaue Adresse des Speicherbereichs kennt. Lauffähig unter Linux und 
Windows. Ich weiss allerdings sehr wenig über die PC Architektur und 
Exception Handling auf dem PC. Das ganze soll im Endeffekt Datenraten 
>100Mbit/S zulassen.
Hast Du da auch nen Tip?

/Peter

von Arc N. (arc)


Lesenswert?

Pepe schrieb:
> Hi Daniel,
> danke für die Links. Eigentlich ist mir shared Memory nicht so lieb.
> Exceptions wären mir lieber. So nach dem Motto Der Server schreibt in
> den Speicher, der client bekommt eine exception und kann lesen, da er
> die genaue Adresse des Speicherbereichs kennt.

http://www.boost.org/doc/libs/1_47_0/doc/html/interprocess.html

> Lauffähig unter Linux und
> Windows. Ich weiss allerdings sehr wenig über die PC Architektur und
> Exception Handling auf dem PC. Das ganze soll im Endeffekt Datenraten
>>100Mbit/S zulassen.
> Hast Du da auch nen Tip?

IPC mit Context-Wechsel hat bei Linux/Windows einen Overhead von 
2500/3000 Taktzyklen. Angaben aus 1) (da dort Round Trip Zeiten 
angegeben sind, hier durch zwei geteilt.) bzw. aus 2)
Wenn da nicht jedes Byte einzeln signalisiert/übertragen wird, sollte 
das funktionieren.

1) 
http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.109.1184&rep=rep1&type=pdf
2) http://www.cs.virginia.edu/~kc5dm/projects/osperf.pdf

> /Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.