Condivisione della tecnologia

Comunicazione tra processi - pipe

2024-07-11

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Inserisci qui la descrizione dell'immagine

1. Introduzione alla comunicazione di processo

1.1 Perché è necessaria la comunicazione tra i processi

È necessaria la collaborazione tra i processi. Ad esempio, tutti i livelli gestionali di una scuola sono interconnessi e non possono essere gestiti verticalmente. È proprio perché i processi devono collaborare. Il prerequisito per la collaborazione è che i processi debbano comunicare. Alcuni dati sono pronti per la notifica, alcuni dati sono semplicemente dati trasmessi e altri sono dati relativi al controllo.

Fatto: i processi sono indipendenti, processo = struttura dei dati del kernel, codice e dati del processo

Lo scopo della comunicazione del processo:

  • Trasferimento dati: un processo deve inviare i propri dati a un altro processo
  • Condivisione delle risorse: condivisione delle stesse risorse tra più processi.
  • Evento di notifica: un processo deve inviare un messaggio a un altro processo o a un gruppo di processi per notificargli che si è verificato un determinato evento (come notificare al processo genitore quando il processo termina).
  • Controllo del processo: alcuni processi sperano di controllare completamente l'esecuzione di un altro processo (come il processo di debug). In questo momento, il processo di controllo spera di intercettare tutte le trappole e le eccezioni di un altro processo ed essere in grado di conoscere i suoi cambiamenti di stato nel tempo.

1.2 Come comunicano i processi

Il costo della comunicazione tra processi può essere leggermente più alto: i processi sono indipendenti e qualsiasi risorsa aperta da un processo non è visibile a un altro processo. Quando abbiamo parlato prima del processo genitore-figlio, i dati del processo genitore sono stati ereditati dal processo figlio. Questo non appartiene alla comunicazione. Può essere ereditato ma non sempre ereditato. C'è una differenza tra l'essere in grado di trasmettere informazioni ed essere sempre in grado di trasmettere informazioni.

La premessa della comunicazione tra processi: prima lasciare che processi diversi vedano la stessa risorsa (sistema operativo) ("un pezzo di memoria"). I due processi sono indipendenti. Per realizzare la comunicazione è necessario uno strumento, vale a dire il sistema operativo, che consenta ai due processi di avere la stessa memoria. Il motivo per cui il sistema operativo fa ciò è determinato dall'utente.
Come dire al sistema operativo di creare risorse:

  1. Deve essere che un determinato processo debba prima comunicare e consentire al sistema operativo di creare una risorsa condivisa.
  2. Il sistema operativo deve fornire molte chiamate di sistema per consentire ai processi di richiedere risorse di sistema tramite chiamate di sistema.
    Diverse risorse condivise create dal sistema operativo e diverse interfacce di chiamata di sistema determinano i diversi tipi di comunicazione tra processi.

Inserisci qui la descrizione dell'immagine

2. Conduttura

2.1 Pipeline anonima

2.1.1 Pipeline di comprensione del descrittore di file

Inserisci qui la descrizione dell'immagine

Una pipeline è essenzialmente un file a livello di memoria che non necessita di essere scaricato su disco.
Innanzitutto, il processo genitore apre un file due volte in modalità lettura e scrittura. Il motivo per aprire il file due volte è ottenere due oggetti struct file, in modo che ci siano due puntatori di lettura e scrittura per un file, in modo che le operazioni di lettura e scrittura. utilizzare puntatori indipendenti In questo modo, la lettura e la scrittura non si influenzeranno a vicenda.Il puntatore di lettura-scrittura registra la posizione di lettura o scrittura del file corrente, astruct file C'è solo un puntatore di lettura-scrittura nel file. Durante la scrittura (o la lettura) del file, il puntatore di lettura-scrittura si sposterà, quindi leggerà (scriverà) di nuovo. In questo momento, il puntatore di lettura-scrittura non è più nella posizione originale e non riesce a leggere il contenuto appena scritto, quindi è necessario aprire lo stesso file due volte in modi diversi. Quindi crea un processo figlio. Il processo figlio erediterà il file aperto nel processo genitore, ovvero erediterà la tabella descrittore di file del processo genitore. In questo momento, i processi genitore e figlio condivideranno la stessa risorsa file il processo può passare il descrittore di file n. 4 al file Quando scrive sul file, il processo genitore può leggere dal file attraverso il descrittore di file n. 3. In questo momento, i processi genitore e figlio realizzano la trasmissione dei dati, cioè la comunicazione. . I processi genitore e figlio vedono lo stesso buffer di memoria, che qui chiameremo file pipe. Le pipe consentono solo la comunicazione unidirezionale per semplicità.

Perché genitore-figlio elabora i dati di stampa sullo stesso terminale del monitor?
Poiché il processo figlio corrispondente erediterà la tabella dei descrittori di file corrispondente al processo genitore e quindi punterà allo stesso file, il che significa che il processo genitore digiterà un file, e anche il processo figlio digiterà un file, e il processo figlio lo stesso verrà scritto in un buffer, il sistema operativo verrà scaricato sullo stesso monitor.


Il processo aprirà tre input e output standard per impostazione predefinita: 0, 1, 2... Come aprire 0, 1, 2 per impostazione predefinita?
Tutti i comandi lo sonobashprocesso figlio, purchébashQuando è attivato, tutti i processi secondari sono attivati ​​per impostazione predefinita.


Perché il processo figlio si chiude attivamente (0/1/2) senza influire sull'uso continuato del file di monitoraggio da parte del processo padre?
conteggio dei riferimenti a livello di memoria--, quando il conteggio dei riferimenti a livello di memoria scende a 0, le risorse file vengono rilasciate.


Il processo genitore-figlio chiude i descrittori di file non necessari, perché dovevano essere aperti prima?
Per consentire al processo figlio di ereditare. Non è necessario chiuderlo, ma si consiglia di chiuderlo per evitare scritture accidentali.


Perché i tubi hanno una comunicazione unidirezionale?
Il metodo è semplice, riduce i costi di sviluppo e consente solo la comunicazione unidirezionale. Qualsiasi file viene aggiornato nel buffer, quindi i dati vengono aggiornati nel file. Questo processo stesso è unidirezionale.
I tubi semplici che vediamo nella vita sono tutti a senso unico, come i tubi dell'acqua, con un'entrata e un'uscita, che si conforma alle caratteristiche delle condutture.

2.1.2 Utilizzo dell'interfaccia

poter usarepipePer creare una pipe senza nome, i parametri non richiedono il percorso e il nome del file

int pipe(int pipefd[2]);