Come una porta "ascolta", tira o spinge?

8

Quando scrivi un codice per ascoltare da una porta, ad esempio 80, cosa succede sotto il cofano? Il metodo utilizzato dall'OS per ascoltare è pull o push? In altre parole, il sistema operativo controlla la porta ogni x millisecondi, ad esempio?

Solo che non capisco. Più ci penso, più mi sembra che non possa essere altro che tirare.

Voglio dire, anche se il SO imposta una funzione di callback, comunque qualcosa dovrebbe capire che sono arrivate nuove informazioni per chiamare quella funzione di callback. Quel qualcosa dovrebbe ancora usare pull per comprendere l'arrivo dei nuovi dati.

Come ascolta una porta?

    
posta Saeed Neamati 12.09.2011 - 09:24
fonte

4 risposte

13

In teoria, ciò dipende dalle specifiche del sistema operativo e dall'hardware di rete. In pratica, i sistemi operativi e hardware mainstream utilizzano un modello push basato su interrupt per l'interazione tra l'hardware e il sistema operativo (e tutti i software controllato dal sistema operativo).

Fondamentalmente, un interrupt è un meccanismo molto, molto di basso livello attraverso il quale l'hardware periferico può segnalare alla CPU che c'è un evento che deve essere gestito (come un pacchetto di rete che è arrivato, una chiave che è stata premuta, ecc. ). La CPU reagisce a ciò sospendendo qualsiasi cosa stia facendo in quel momento ed eseguendo invece un gestore di interrupt.

La gestione degli interrupt viene in genere eseguita dal sistema operativo o almeno avviata dal sistema operativo e passata a un codice dell'applicazione più specifico che è stato registrato come interessato a un particolare tipo di evento.

    
risposta data 12.09.2011 - 09:32
fonte
8

OK, non sono un ingegnere hardware Ethernet, ma penso di poter dare una risposta alla tua domanda. Quando scrivi codice per ascoltare da una porta, succede quanto segue:

  • Il codice dell'applicazione blocca / dorme / "seleziona" / poll fino a quando il sistema operativo segnala che un pacchetto è arrivato (con alcuni bit nell'intestazione IP che indica che il pacchetto è associato a quella particolare "porta" e quindi all'applicazione che sta ascoltando su quella porta)
  • Il sistema operativo in genere non esegue il polling (nelle architetture x86 / PC) per i nuovi pacchetti, funziona allegramente finché non riceve un'interruzione dall'hardware della rete Ethernet (trasmessa dal driver di rete Ethernet, dall'interfaccia OS / hardware ).
  • L'hardware di rete Ethernet stesso sotto i coperchi contiene in genere un controller Ethernet e alcuni "buffer di ricezione" noti come "buffer di pacchetti". Il driver di rete Ethernet gestirà i dettagli di notare che un buffer è pieno e che il sistema operativo deve essere informato; Non sono completamente chiaro se questo sia tipicamente push o pull all'interno dell'hardware Ethernet, ma sospetto che sia gestito da interrupt, o che qualche registro sul chip venga impostato quando un buffer è pronto. Ma cosa imposta i buffer?
  • Una parte ancora più bassa dell'hardware Ethernet riempie i buffer (o i pacchetti DMA direttamente nella memoria principale). Una logica di livello molto basso in realtà riconosce gli oscillazioni in tensione (o segnalazione ottica) e li traduce come "bit" e colloca i risultati nel buffer di ricezione del pacchetto (e forse imposta i valori di registro all'interno dell'hardware Ethernet). (Nota a margine: prima delle schede di interfaccia di rete, quando le persone utilizzavano connessioni seriali / parallele, un singolo byte in arrivo poteva generare un IRQ (Hardware Interrupt) sul sistema operativo, vedere il paragrafo 4 di link )
  • In che modo quell'hardware di livello più basso sa cosa costituisce un "bit"? Bene, Ethernet , almeno la maggior parte dei più vecchi / comuni, usa Manchester Coding per decodificare i picchi di tensione come bit. Cosa implica questo? Bene, come menziona quella pagina, c'è un'ipotesi di fondo che ogni bit è trasmesso in un tempo fisso, un segnale di clock implicito. (Questo è il motivo per cui le velocità Ethernet negli standard sono fissate a 10Mb / s, 100Mb / s, 1000Mb / s ecc. E non completamente variabili; entrambi i lati della connessione Ethernet devono accettare la velocità di trasmissione tramite configurazione o qualche meccanismo iniziale di handshake quando il cavo Ethernet è collegato. C'è un circuito di clock effettivo nell'hardware su entrambi i lati del filo che supporta quelle o una di quelle frequenze.A volte il tasso di questo orologio è chiamato frequenza o velocità di segnalazione.) Mentre vorrei chiamalo campionamento, non polling / pull, mi sembra corretto dire che il livello di tensione è campionato ad ogni X di tempo e che la decisione è presa indipendentemente dal fatto che un bit sia 1 o 0.

Quindi la tua intuizione che "tirare" si verifica è, a livello di hardware più basso, forse corretta ... il circuito Ethernet "tira" quale sia il livello di tensione a determinati intervalli. (Ma il termine "pull" può essere decisamente scorretto se si parla a livello di OS.) Naturalmente, se si inizia a parlare di livelli di tensione e di come vengono attivate le cose, né la fisica né quella ottica useranno i termini "push" "o" tirare "per descrivere campi elettrici e potenziali, ma supponiamo che siamo tutti programmatori, non fisici qui. : -)

    
risposta data 12.09.2011 - 16:24
fonte
3

Il codice che ascolta una porta attende solo un messaggio dalla rete.

Ogni volta che il chip Ethernet riceve un messaggio, viene sollevata un'interruzione. Il kernel gestisce questa interruzione e inoltra il messaggio al driver di rete. Questo messaggio passa attraverso lo stack TCP / IP e viene filtrato o passato al codice che ascolta la porta.

    
risposta data 12.09.2011 - 09:31
fonte
3

L'hardware Ethernet sarà quello che esegue il polling del cavo fisico (o wireless). Quando ha una ragione 'abbastanza buona', interromperà il processore. Il processore calcolerà il nostro driver corretto che gestirà l'interruzione. Il gestore di interrupt gestirà l'evento (dati di lettura / scrittura). anche l'autista lo dirà gli Os per svegliare eventuali thread in attesa ..

    
risposta data 12.09.2011 - 09:32
fonte

Leggi altre domande sui tag