Transcrição do áudio
Pegou o momento de falar sobre comunicação entre processos. Bom, por quê? Deixa eu abaixar um pouco o som aqui. Todo processo, ele precisa naturalmente se comunicar com outros processos. Afinal, tudo em sua máquina trabalha naturalmente em paralelo para alcançar os objetivos do usuário, certo? Então, a comunicação entre processos é algo muito importante. Nós vimos, então, que nós temos várias formas de nos comunicar. Naturalmente, se fosse um processo, eu falaria assim. Mas os processos se comunicam por, por exemplo, um arquivo. O que você acha que é aquele seu docx que você guarda? Algo que um processo escreveu para que um outro processo, no futuro, possa ler e fazer alguma coisa. Para você, um txt é um arquivo criado por um processo para que outro processo leia no futuro, naturalmente. Existem também aqueles arquivos que são chamados de pipe. São arquivos especiais de troca de dados entre processos. Onde o output de um processo é guardado como uma stream momentaneamente para input no in de outro processo. Assim como nós também temos os arquivos de comunicação socket, que é uma outra forma de comunicação inter-processos, certo? Então, eu coloquei aqui algumas possibilidades de comunicação entre processos. As comunicações entre os processos, então, o mais bacana que você vai ver aqui, deixa eu pegar aqui um terminal aqui. Ao longo desse curso... O curso é esse cara aqui, né? Até o momento. Você não foi ainda além do capítulo 15. Quando você chegar... Opa! Ops! Ops! Deu algum pipoco de job aqui. Foi mal, galera. Foi mal! Apareceu os jobs aqui estranhos, hein? É o robô meu que está trabalhando. Eu tenho alguns robôs que trabalham para mim. Então, vamos lá. Aqui. Então... Eu chego aqui e faço, por exemplo, PS. Espera aí. PS, A, O, X. E aí ele me traz essa lista. Daqui eu quero, naturalmente, passar para outro processo. Então, eu quero criar um arquivo, um pip temporário. Esse arquivo, desculpe, é pipe temporário. Esse arquivo pipe temporário vai entrar, então, no input de um outro processo. Então, como seria? Clear. Então, você chegaria aqui. PS, A, O, X. Aí você cria um pipe para a entrada no outro processo que se chama grep. Onde ele filtra tudo que é pipe. Certo? E aí, então, ele lista. Aconteceu que, momentaneamente, o output desse processo acabou sendo injetado nesse outro processo. Por meio de um arquivo. E, via terminal, nós conhecemos como esse caractere que chamamos, inclusive, de pipe. Beleza? É apenas uma das formas de troca de dados. Ok? Entre os processos. Mas isso local, no mesmo núcleo. Nem sempre no mesmo núcleo, né? Nem... Se você ler o capítulo de multiprocessamento do livro do Turnbull, sendo processos modernos, você vai ver que... Ele fala sobre multiprocessamento em múltiplos núcleos. E você vai ver que, naturalmente, você tem uma memória compartilhada. E ele tem duas formas de jumpear as memórias. Os módulos de memória. Cave ômega. Não é isso? Crossbar, por exemplo. São as duas. É, por exemplo, são as duas, né? E que, então, eu tenho dois núcleos trabalhando na mesma máquina. Sem nenhum problema. Beleza? Show! Lá vamos nós. Olha que interessante. Se você pegar aqui, coleguinha. Tá? Essa máquina é essa máquina. Se eu puxo uma outra máquina... Deixa eu pegar uma outra máquina aqui. Essa aqui é uma outra máquina. A gente chama máquina amarela, máquina verde. Legal? São duas máquinas completamente diferentes. São dois sistemas operacionais diferentes. Tá? Uma é a máquina aula, a outra é a máquina pessoal. Então, eu não tenho como pegar um PS aqui... E jogar para essa outra máquina. Porque o pipe, ele é, então, um mecanismo de comunicação. Uma forma de me comunicar internamente ali na própria máquina. Peraí, deixa eu fazer aqui uma mudança aqui nas minhas máquinas. Uma máquina que me chamou atenção aqui. Legal. Peraí. Deixa eu... Legal. Beleza. Então, não tem como eu pegar aqui e jogar o grep para cá. Certo? Não tem como fazer isso. Com um pipe. Mas, com socket tem. Então, socket é uma forma de você, então... Eu fechei? Fechei. É uma forma de você fazer com que um processo de uma máquina se comunique com outra máquina. Bem na ideia de cliente-servidor. E você tem uma comunicação na rede. Assim como você tem uma comunicação local. É por isso que toda máquina... Acabei fechando, né? Que eu fui um vacilão do caramba. É por isso que toda máquina, inclusive... Você vai encontrar isso aqui, ó. Tá? E pedras... Inclusive, galera, é papo para o próximo capítulo, tá? Próximo capítulo. Você vai encontrar esse loopback aqui. Para que serviços dessa máquina se comuniquem com serviços dessa máquina. Assim como serviços dessa máquina se comuniquem com serviços de outras máquinas. Teoricamente, socket, quando foi projetado, foi projetado para sistemas operacionais de serviços. Bom, você viu sobre zoológico de processador... Desculpe, sistemas operacionais. Desculpe, sistemas operacionais. E vocês viram também por ali, mais ou menos no capítulo, tá? Que a... Nós temos... Sistemas operacionais antes era uma grande sopa de função. Depois passou a ser organizado em camadas, não é isso? Que é praticamente um sistema operacional como Linux ou Unix. E você tem também a possibilidade de um sistema operacional de serviços. Aonde serviço chama serviço. Só que... Se isso chamasse serviço em todo o sistema operacional, seria muito burocrático. Seria muito difícil isso. Então é melhor você ter um misto. Um sistema operacional em núcleos. Com núcleo e camadas. E você ter alguns serviços na história. Tá? Entre camadas muito distantes. Isso ficou muito bom, tá? Memória compartilhada forte. Nós vimos variáveis. Vimos threads, pipe. Vimos fila de mensagens tipo MQ. De mensagens tipo... Eu subo uma mensagem. Um signal. O que seria uma mensagem? O signal seria uma mensagem, tá? E socket. Legal? Próxima aula eu vou falar sobre top e htop. E até mais. Tchau. Agora é só achar minha máquina aqui. Qual é qual? Achei.