Newsgroup: it.comp.programmare.win32
Titolo: due quesiti abbastanza complessi (real time e livelli di rete)

1- Qualcuno ha mai realizzato con un sistema operativo NT (o altri
    altri sistemi Windows, ma non sistemi embedded)
    applicazioni real-time con deadline di 10 ms ? (in pratica dovrei
    avere un processo, o un thread o qualcosa di simile che ogni 10 ms
    legge dalla seriale). In altre parole qualcuno ha qualche idea su
    come si potrebbe fare in modo che che operazioni eseguite dal S.O. in
    modo  trasparente all'applicazione (tipo swap di pagine) siano
    "preemptate" da un eventuale task che deve andare in esecuzione
    rispettando una certa deadline (10 ms, appunto) ?
2- Qualcuno ha mai realizzato con un sistema operativo NT (o altri
    altri sistemi Windows, ma non sistemi embedded) delle primitive di
    spedizione in rete   che by-passano uno o piu' dei livelli
    architetturali ?
    In pratica, quello che dovrei fare e' aprire un socket e implementare
    una funzione di spedizione (e forse una di ricezione)
    che mi consentono  di spedire e ricevere un pacchetto, aggiungendo 
ai   dati tutte le informazioni del livello IP.
    Cioe' ho dei dati, la mia send (mysend) aggiunge
    le informazioni del livello IP e poi queste informazioni me le trovo
    nei dati che ricevo (se mi dite che esiste una qualche opzione di
    setsockopt che consente di fare questo mi rendete felice :-) ).
Grazie in anticipo,
Marco Guidi.

ai   dati tutte le informazioni del livello IP.
Cioe' devi scriverti un protocollo ?
Anche su questo c'era un articolo, diverso tempo fa, sulla
rivista succitata.
--
CyberWalkie - walkietalkie(at)
libero.it

     legge dalla seriale).
NT non è un sistema operativo Real Time.
Il massimo che puoi fare è impostare la Class Priority (SetPriorityClass)
del processo ad un livello REALTIME_PRIORITY_CLASS, il che dovrebbe
garantirti la priorità rispetto ad altri processi.
E' ovvio che questa chiamata va usata con estrema cautela ... anche perchè
funziona anche per processi esterni ...
Il massimo che puoi fare è creare un Thread ad alta priorità (se
l'applicazione è multi-threaded) in questo "processo Realtime" e abbassare
la priorità degli altri processi.
Ciao
--
- Carlo -
c.b...@libero.it

 CyberWalkie - walkietalkie(at)
libero.it

Carlo Bertuccini wrote:

Sai per caso se con le impostazioni che ai detto tu ci si protegge
in modo safe anche contro operazioni normalmente trasparenti all'utente
(tipo swap di pagine) o invece, come temo, se il sistema decide
di swappare non ci sono santi.. ?
Grazie,
Marco Guidi

di swappare non ci sono santi.. ?
Come gia' detto negli altri messaggi, NT non e' un sistema
operativo real-time, quindi non puoi uilizzarlo per i tuoi
scopi.  Tieni anche presente che lo swap di pagine e'
un'operazione di interruzione piuttosto evidente, ma ci sono
meccanismi meno lampanti, che possono invalidare il
comportamento di un sistema operativo real-time.
Persino le interruzioni per il caricamento di diversi
moduli, da parte dei sistemi a micro-kernel (come NT)
possono generare casini.
--
CyberWalkie - walkietalkie(at)
libero.it

trasmette dati sulla  seriale con questo rate. 
Hmmm... Windows non compete minimamente con VxWorks (che e'
un vero real-time o.s. UNIX-oriented).  
A parte il fatto che il target delle piattaforme su cui
girano e' completamente diverso, poi, per come e'
strutturato l'o.s. di casa Microsoft, non credo proprio sia
possibile raggiungere le prestazioni desiderate.
In ogni caso, appena trovo quel vecchio numero di DrDobb's,
ti faccio un fischio per e-mail.
--
CyberWalkie - walkietalkie(at)
libero.it

 ti faccio un fischio per e-mail.
Grazie,


 di swappare non ci sono santi.. ?
Temo che se il sistema decida di swappare ci sia_un'effettiva_necessita di
cambiare il contenuto della memoria, per cui temo che "non ci siano santi".
traggo dal messaggio in risposta a CyberWalkie la seguente frase:
"Tra l'altro si dovrebbe costruire una interfaccia grafica per l'utente che
visualizza una parte dei dati che vengono ricevuti in questo modo."
Spero non si tratti di un'interfaccia che visualizza i risultati in
"real-time" ... il ridisegno/modifica di alcuni componenti/controlli può
risultare dispendioso in termini di risorse a danno di altre operazioni (nel
tuo caso la lettura da seriale). Se decidessi di implementare la strada
della priority class ti consiglio di effettuare periodicamente un controllo
sulla priorità del tuo processo (GetPriorityClass) poichè questo valore
potrebbe essere modificato da altre applicazioni che, come la tua,
richiedono molte risorse dal SO.
Buon lavoro.


Buon lavoro.
Suggerisco un po' di link, che possono rivelarsi utili
sull'argomento:
Real-Time Systems With Microsoft Windows NT
http://www.theragens.com/misc/MR%20-%20Windows%20NT%20Real-Time.htm
Can Windows NT be RTOS?
http://www.cise.ufl.edu/~dkim/seminar/sld006.htm
Windows NT and Real-Time Operating Systems 
[articolo Q94265 di MSDN]
http://support.microsoft.com/support/kb/articles/Q94/2/65.asp
Using Windows NT in Real-Time Systems
http://www.computer.org/proceedings/rtas/0194/01940132abs.htm
Windows NT as Real-Time OS? 
http://www.realtime-info.be/magazine/97q2/winntasrtos.htm
--
CyberWalkie - walkietalkie(at)
libero.it

 
Per quanto riguarda l'iterfaccia, ancora si deve decidere esattamente 
cosa mostrare e come mostrarlo. Credo che il consiglio sulla priority 
class potrebbe essere molto utilie.
Ringrazio molto anche te.
Marco Guidi


Credo che il consiglio sulla priority class potrebbe essere molto utilie.
In realta', NT non va troppo bene da questo punto di vista.
Un normale RTOS possiede normalmente almeno 256 livelli di
priorita', contro i 7 (credo) di NT.
--
CyberWalkie - walkietalkie(at)
libero.it

di swappare non ci sono santi.. ?
 
non in user mode. Il kernel, al contrario, non viene mai swappato (o così mi pare di ricordare)

class potrebbe essere molto utilie.
 
per l'interfaccia ti consiglio di implementare un performance counter nell'applicazione vera e propria, magari in un secondo thread a bassa priorità, e mostrare i dati nell'interfaccia usando le funzioni della PDH (Performance Data Helper) API. In questo modo, tra le altre cose, puoi anche monitorare l'attività da un computer remoto. Se vuoi un'idea di cosa si può ottenere, dai un'occhiata al Perfmon di Windows NT

per l'interfaccia ti consiglio di implementare un performance counter nell'applicazione vera e propria, magari in un secondo thread a bassa priorità, e mostrare i dati nell'interfaccia usando le funzioni della PDH (Performance Data Helper) API. In questo modo, tra le altre cose, puoi anche monitorare l'attività da un computer remoto. Se vuoi un'idea di cosa si può ottenere, dai un'occhiata al Perfmon di Windows NT
Per cortesia, limita il tuo newsreader a non piu' di 72 righe.
--
CyberWalkie - walkietalkie(at)
libero.it

per l'interfaccia ti consiglio di implementare un performance counter nell'applicazione vera e propria, magari in un secondo thread a bassa priorità, e mostrare i dati nell'interfaccia usando le funzioni della PDH (Performance Data Helper) API. In questo modo, tra le altre cose, puoi anche monitorare l'attività da un computer remoto. Se vuoi un'idea di cosa si può ottenere, dai un'occhiata al Perfmon di Windows NT
Per cortesia, limita il tuo newsreader a non piu' di 72 colonne.
                                                        ^^^^^^^^
--
CyberWalkie - walkietalkie(at)
libero.it

>Per cortesia, limita il tuo newsreader a non piu' di 72 righe.
chiedo perdono, mi sono sfuggiti un paio di messaggi in MIME
-- 
Posted from 
mx1.aruba.it
 [62.149.128.130] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

    o piu' dei livelli architetturali ?
In Win2000 dovrebbero funzionare decemente i socket raw, che sono
quello di cui tu hai bisogno. 
Invece non funzionano un gran che. Potresti provare la beta di XP, e
vedere se lo stack TCP e' migliorato.
Sempre che non ti scrivi un kernel driver.
-- 
Tieni per te il Papero giusto se vuoi la mia email
Sito Papero 1 -> 
http://utenti.tripod.it/papero
Sito Papero 2 -> 
http://user.7host.com/papero/

accedere direttamente al livello IP, "impadronendosi" delle informazioni 
Fantasia alla stato puro con un "normale" S.O. . Chi ti ha chiesto di
fare cose simili sarą anche un buon commerciale, ma di sicuro e' un
pessimo tecnico.
Tra l'altro ho lavorato per molti anni con dispositivi seriali (e
relativi protocolli) e non ho MAI sentito il bisogno di avere
tempistiche cosģ strette dal lato PC. Anche quando "pilotavo" macchine
a controllo numerico.
Per di piu' tutto cio' mi sembra inutilmente complicato. Gia' che
c'erano potevano chiederti di fare una applicazione Web-Based real
time.
Perche' non pensate di comprarvi uno di quei computer onboard su
scheda PCI? Per disegnare a video usate il computer ospite, mentre per
il controllo vero e proprio usate la scheda su PCI.
