Consejos de aprendizaje sobre la comunicación entre procesos

  
 

Proceso: Proceso se refiere a la secuencia de instrucciones del espacio de direcciones independiente

Los cinco estados del proceso: Nuevo, Listo, Ejecutar, Suspender, Zombi

Comunicación entre procesos: es entre procesos diferentes Haga algún " Contacto ", este tipo de contacto es simple y complicado. El mecanismo es diferente y la complejidad es diferente. La comunicación es un sentido amplio, no solo se refiere a la transmisión de grandes cantidades de datos, sino también a la transmisión de información de control, pero el método de uso es básicamente el mismo.

Mecanismos básicos de comunicación de procesos

1. Mecanismos tradicionales de UNIX-IPC: Señales y canalizaciones

2. Mecanismo de IPC de SystemV: Memoria compartida, semáforos y colas de mensajes < Br>

3. Sockets de las versiones BSD de Unix

4. Llamada a procedimiento remoto (RPC)

Señal: El proceso más antiguo utilizado en los sistemas Unix Uno de los métodos de intercomunicación, que se utiliza para enviar una señal de un evento asíncrono a uno o más procesos. Las señales pueden analizarse a INT en DOS o a eventos en Windows
. Cuando se produce una señal, la señal correspondiente se envía al proceso correspondiente.

Implementación de mecanismos de señal

1. Las señales incluyen señales para procesar y señales bloqueadas

2. Si se genera una señal bloqueada, queda pendiente, Hasta que se desbloquee.

3. El sistema guarda cómo cada proceso maneja cada señal posible.

4. El sistema juzga si el proceso quiere ignorar esta señal o dejar que el kernel la procese. El proceso cambia el procesamiento de señal predeterminado al ejecutar una llamada del sistema.

Procesando la señal

1. Inicializando el conjunto de señales, solo se considerará la señal en el conjunto de señales

2. Instale el procesador de señales. El llamado procesador de señales debe especificar algunos métodos para procesar la señal. Al instalar, asegúrese de asignar la función de procesamiento de señal correcta a una señal específica.

Funciones relacionadas con la señal

int sigaction (int signo, const struct sigaction * act, struct sigaction * oact); Instalar el procesador de señales para el proceso, la estructura de datos struct sigaction se utiliza para guardar el procesamiento de señales Información sobre el dispositivo.

int sigemptyset (sigset_t * set); Borrar el conjunto de señales.

int sigfillset (sigset_t * set); establezca el conjunto de señales para que contenga todas las señales y debe inicializar el conjunto de señales antes de operar la señal.

int sigaddset (sigset_t * set, int signo); Agregue una nueva señal correspondiente al signo al conjunto de señales.

int sigdelset (sigset_t * set, int signo); elimina la señal correspondiente al signo del conjunto de señales.

int sigismember (const sigset_t * set, int signo); Determine si hay una señal en el conjunto de señales.

int sigprocmask (int how, const sigset_t * set, sigset_t * oset); Establezca la máscara de señal del proceso. La máscara de señal se puede utilizar para bloquear señales en algunos conjuntos de señales durante un cierto período de tiempo.

Pipeline Communication: es la herramienta más antigua de Unix IPC. Un proceso escribe datos desde un extremo de la tubería y otro proceso lee datos del otro extremo de la tubería para implementar el intercambio de comunicación entre ellos, también conocido como archivo de tubería. Dado que tanto la transmisión como la recepción se comunican mediante tuberías, se denominan comunicación de tuberías. El método de comunicación es unidireccional. Los tipos de tuberías se dividen en: tuberías sin nombre, tuberías con nombre

ideas de comunicación de tuberías

1. El proceso de envío puede escribir continuamente flujos de datos desde el extremo de la tubería, la longitud máxima del archivo de tubería especificado Dentro del rango (por ejemplo, 4096 bytes), la longitud de la información escrita por escritura es variable.

2. El proceso de recepción puede leer datos del otro extremo de la tubería cuando sea necesario, y la longitud de la unidad de lectura también es variable.

Función de llamada de tubería básica

int do_pipe (int * fd); Crear tubería

static int pipe_release (struct inode * inode, int decr, int decw); versión de pipe

Unknown Pipeline II

muestra que cada estructura de datos de archivos contiene punteros a la tabla de vectores de diferentes rutinas de manipulación de archivos: una para escribir y otra para leer desde la tubería. Esto enmascara la diferencia de la llamada general del sistema para leer y escribir archivos ordinarios. Cuando el proceso de escritura se escribe en la canalización, los bytes se copian en la página de datos compartidos y, cuando se leen desde la canalización, los bytes se copian desde la página compartida.

Canalización con nombre: también conocida como FIFO, no es un objeto temporal, sino una entidad en el sistema de archivos, que se puede crear con el comando mkfifo. El sistema debe procesar el proceso de abrir la lectura FIFO antes de que el proceso de escritura abra la FIFO, y el proceso que se lea antes de que el proceso de escritura escriba los datos. Utiliza las mismas estructuras de datos y operaciones que una canalización anónima.


(lado de escritura) [Fd1]
→ pipe (fd) → [Fd0] (lectura)

Semáforo : El semáforo y la señal son cosas diferentes, la señal es un valor fijo que implementa la convención y el semáforo es una variable que registra cierta información. Su uso se utiliza principalmente para proteger recursos compartidos, de modo que el recurso es Sólo un proceso es propiedad de un proceso a la vez.

Estructura de datos de semáforos: use la estructura de datos semid_ds para expresar semáforos. Todas las estructuras de datos de semid_ds en el sistema están apuntadas a la tabla de vectores de punteros semarios. Cada conjunto de semáforos tiene sem_nsems, que se describen mediante una estructura de datos sem apuntada por sem_base.

Implementación del mecanismo de semáforos

1. Solo hay dos operaciones en semáforos: P, V .

2. Para organizar lógicamente los semáforos, un concepto en el mecanismo del semáforo es el grupo de semáforos. Creamos semáforos relacionados en un grupo de semáforos para que sean lógicamente claros y fáciles de administrar.

3. También deben inicializarse antes de su uso: generar o abrir un grupo de semáforos para generar o eliminar el semáforo especificado.

4. Un semáforo debe pertenecer a un grupo de semáforos, de lo contrario no puede ser utilizado por el sistema.

5. El sistema no limpia automáticamente los grupos de semáforos y semáforos, por lo que es necesario limpiar los semáforos generados a tiempo antes de que finalice el proceso.

Funciones relacionadas con semáforos

int semget (key_t key, int nsems, int semflg); Cree un nuevo grupo de semáforos u obtenga un grupo de semáforos existente.

int semop (int semid, struct sembuf * sop, int nsops); opera en uno o más semáforos a la vez para operaciones P y V.

Int semctl (int sem_id, int semnum, int cmd, union semun arg); se usa para obtener información sobre el uso del semáforo o para controlar el semáforo.

Common Memory

La memoria compartida es un método importante de comunicación de procesos, que proporciona un medio de comunicación directa para los procesos. Sistema operativo

Uno o más procesos se comunican a través de la memoria en su espacio de direcciones virtuales, al que hace referencia la tabla de páginas de cada proceso compartido, sus direcciones No hay necesidad de ser el mismo. El acceso al proceso a la memoria compartida está controlado, los semáforos y otros mecanismos implementan la sincronización del acceso a la memoria compartida.

Principio simple de la memoria compartida.

Cada área de memoria recién creada usa un shmid_ds Estructura de datos a expresar. Estas estructuras de datos se almacenan en la tabla de vectores shm_segs. La estructura de datos de Shmid_ds describe qué tan grande, cuántos procesos la están utilizando y cómo se asigna la memoria compartida a su espacio de direcciones. El creador de la memoria compartida controla el acceso a esta memoria y sus claves son públicas o privadas. También puede bloquear la memoria compartida en la memoria física si tiene permisos suficientes. Todo proceso que quiera compartir esta memoria debe adjuntarse a la memoria virtual a través de una llamada al sistema. Esto crea una nueva estructura de datos vm_area_struct para el proceso que describe esta memoria compartida. El proceso puede elegir compartir la ubicación de la memoria en su espacio de direcciones virtuales o seleccionar un área libre suficiente para Linux. Esta nueva estructura vm_area_struct se coloca en la lista de vm_area_struct apuntada por shmid_ds. Conéctelos juntos a través de vm_next_shared y vm_prev_shared.

Copyright © Conocimiento de Windows All Rights Reserved