Duda en cuanto a los conceptos de IPC y Thread

Duda en cuanto a los conceptos de IPC y Thread

de Octavio Perez Kempner -
Número de respuestas: 1

Quisiera confirmar que entiendo la diferencia entre ambos conceptos al decir que:

"El IPC es la funcionalidad del sistema operativo que permite la comunicación entre procesos básicamente según dos enfoques (memoria compartida y pasaje de mensajes). Dentro de las posibilidades que ofrece el IPC de un SO se encuentra el soporte para Threads (que se presenta bajo un servicio del IPC según el enfoque de memoria compartida) que permite a distintos procesos compartir recursos en forma concurrente."

También me gusataría asegurarme de que lo siguiente en cuanto a concurrencia es correcto:

"La concurrencia mediante procesos tiene 2 desventajas en relación a la concurrencia entre threads (conlleva un mayor overhead ya que involucra una mayor cantidad de operaciones en el cambio de contexto y requiere una mayor cantidad de llamadas al sistema) mientras que presenta la ventaja de que las áreas de memoria de los procesos quedan más protegidas (en el caso de threads, uno podría escribir en el área de código o datos del otro)."

Entendí bien o hay algún error en lo dicho anterioremente? (creo que le podría estar errando con el tema del direccionamiento de memoria, no me quedó claro en las diapositivas)

Gracias de antemano.

Saludos,

Octavio

En respuesta a Octavio Perez Kempner

Re: Duda en cuanto a los conceptos de IPC y Thread

de Hernan Esteves Rosano -

Hola. En cuanto a lo del IPC, no es que soporte threads como decis. En un sistema singlethreaded lo que se comunican son los procesos pero en un sistema multithreaded lo que se comunican son los kernel threads porque lo que el sistema ve son los kernel threads; en los SO que lo soportan son los kernel threads los que se schedulean, no procesos. Por ejemplo imaginate un sistema con microkernel que admite multithreading a nivel del kernel. Para utilizar un servicio, por ejemplo, para acceder a un archivo (servicio que estaria corriendo como usuario por ser microkernel) el programa cliente tiene que comunicarse con el servicio via pasaje de mensajes (o sea son kernel threads lo que se pasan los mensajes); no usan IPC de memoria compartida en ese caso. Por otro lado, el SO ni siquiera ve los user threads entonces es imposible que utilicen algun metodo de IPC. Los user threads ya comparten la memoria (mediante el PCB) y son desconocidos por el SO.

En cuanto a lo segundo, las 2 desventajas que mencionas estan bien yo creo pero lo ultimo no tanto porque la concurrencia en general presenta esos problemas ya que los procesos pueden compartir memoria tambien.

De todas formas espero que algun profesor pueda verificar lo que dije o corregir si estoy errado en algo.