Você está na página 1de 27

ARA0363 – PROGRAMAÇÃO

DE SOFTWARE BÁSICO EM C
Aula 6 – PROCESSOS E THREADS

Universidade Estácio de Sá
Prof. Simone Gama
simone.gama@estacio.br
Processos – Definição
O que são processos?
Processo é um programa em execução.

Quando você abre seu navegador para


entrar em algum site, um processo se
iniciou. E a medida que se abrem outras
páginas, vários outros processos são
iniciados.

Prof. Simone PROG SOFTWARE BÁSICO EM C 2


Gama
Processos – Definição
Processos
Digite no terminal do Linux ps aux ou tasklist no prompt de
comando, caso esteja no Windows.

Você verá uma longa lista, onde cada linha é um processo


que está executando em seu computador.

Prof. Simone PROG SOFTWARE BÁSICO EM C 3


Gama
Processos – Material
Processos
Definição de Processos: Processos, Espaços de Endereçamento e
Arquivos em Sistemas Operacionais | Programação Progressiva
(programacaoprogressiva.net)

Prof. Simone PROG SOFTWARE BÁSICO EM C 4


Gama
Threads – Definição
Threads
Processos possuem poder e flexibilidade, permitindo que
programadores façam uso da CPU de modo que pareça que
existe a execução paralela de vários processos ao mesmo
tempo, quando na verdade ocorre um chaveamento de
processos de modo que CPU execute apenas um por vez.

Prof. Simone PROG SOFTWARE BÁSICO EM C 5


Gama
Threads – Definição
Threads
Podemos ver as threads como pequenos processos.

A grande diferença das threads é que elas compartilham os


mesmos recursos e endereçamento de memória.

Prof. Simone PROG SOFTWARE BÁSICO EM C 6


Gama
Threads – Definição
Threads
Ou seja, é como se tivéssemos um processo que dividido em processos
menores, onde há um chaveamento entre eles, cada um executando um
pouco (como ocorria nos processos), mas agora eles compartilham os
mesmos dados e recursos, e tem um mesmo objetivo, trabalham juntos.

Diferente dos processos, que são mais usados para executar coisas
diferentes, programas diferentes, as threads são 'programinhas' que são
executados de forma pseudo-paralela, de modo que o trabalho dessas
threads formem o trabalho maior, de rodar um programa.

Prof. Simone PROG SOFTWARE BÁSICO EM C 7


Gama
ARA0363 – PROGRAMAÇÃO
DE SOFTWARE BÁSICO EM C
6.1 – Processos: Função Fork()
Universidade Estácio de Sá
Prof. Simone Gama
simone.gama@estacio.br
Processos em Linguagem C – Fork()
Processos com fork()
A função fork() é uma função que duplica o processo atual
dentro do sistema operacional.
• O processo que inicialmente chamou a função fork() é
chamado de processo pai.
• O novo processo criado pela função fork() é chamado
de processo filho. Todas as áreas do processo são
duplicadas dentro do sistema operacional (código, dados,
pilha, memória dinâmica).
Prof. Simone PROG SOFTWARE BÁSICO EM C 9
Gama
Processos em Linguagem C – Fork()
fork
Um processo pai usa fork para criar um novo
processo filho. O processo filho é uma cópia do pai.
Após o fork, pai e filho executam o mesmo
programa, mas em processos separados.
exec()
Substitui o programa executado por um processo. O
filho pode usar exec() após um fork para
substituir o espaço de memória do processo por um
novo programa executável, fazendo com que o filho
execute um programa diferente do pai.
Prof. Simone PROG SOFTWARE BÁSICO EM C 10
Gama
Processos em Linguagem C – Fork()

exit()
Finaliza o processo com um status de saída.

wait()
O pai pode usar wait() para suspender a execução
até que um filho termine. Usando wait() , o pai
pode obter o status de saída de um filho encerrado.

Prof. Simone PROG SOFTWARE BÁSICO EM C 11


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo:

Prof. Simone PROG SOFTWARE BÁSICO EM C 12


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo:
Resultado:
Hello World
Hello World
Hello World filho pai
Hello World
Hello World
Hello World

Prof. Simone PROG SOFTWARE BÁSICO EM C 13


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo:
Resultado:
Hello World
Hello World
Hello World filho pai
Hello World
Hello World
Hello World

Prof. Simone PROG SOFTWARE BÁSICO EM C 14


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo:
Resultado:
Hello World
Hello World
Hello World filho pai
Hello World
Hello World
Hello World

2𝑛 processos ou
2𝑛 − 1 processos filhos
Prof. Simone PROG SOFTWARE BÁSICO EM C 15
Gama
Processos x Threads
• Se implementadas corretamente, as threads tem vantagens
sobre os processos, uma vez que os fork() tem mais
overhead do que threads.

• Ao utilizar um fork(), é criada uma segunda cópia do


processo pai e tanto o processo pai quanto o processo filho
são independentes, cada um com seu endereço e suas
cópias de variáveis.

Prof. Simone PROG SOFTWARE BÁSICO EM C 16


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 1:

Prof. Simone PROG SOFTWARE BÁSICO EM C 17


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 1:
Processo filho quando fork()
retorna valor zero.

Prof. Simone PROG SOFTWARE BÁSICO EM C 18


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 1:
Processo pai quando fork()
retorna valor diferente de zero.

Prof. Simone PROG SOFTWARE BÁSICO EM C 19


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 1:

Resultado:
1.Hello from Child!
Hello from Parent!

(ou)

2. Hello from Parent!


Hello from Child!

Prof. Simone PROG SOFTWARE BÁSICO EM C 20


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 1:
• Nesse código, um processo filho é criado.
fork() retorna 0 no processo filho e um
Resultado:
inteiro positivo no processo pai.
1.Hello from Child!
Hello from Parent!
• Aqui, duas saídas são possíveis porque o
processo pai e o processo filho estão sendo (ou)
executados simultaneamente. Portanto, não
sabemos se o sistema operacional dará 2. Hello from Parent!
primeiro controle ao processo pai ou ao Hello from Child!
processo filho.
Prof. Simone PROG SOFTWARE BÁSICO EM C 21
Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 2:
1. Quantos processos
são executados no
código?

2. Quantos processos
filhos são executados
no código?
Prof. Simone PROG SOFTWARE BÁSICO EM C 22
Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 3:

Prof. Simone PROG SOFTWARE BÁSICO EM C 23


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 3:
Resultado:
Parent has x = 0
Child has x = 2

(ou)

Child has x = 2
Parent has x = 0

Prof. Simone PROG SOFTWARE BÁSICO EM C 24


Gama
Processos em Linguagem C – Fork()
Processos com fork() – Exemplo 3:

Aqui, a mudança de variável global em Resultado:


um processo não afeta dois outros Parent has x = 0
processos porque os dados/estado de Child has x = 2
dois processos são diferentes.
E também pai e filho são executados (ou)
simultaneamente para que duas saídas
Child has x = 2
sejam possíveis. Parent has x = 0

Prof. Simone PROG SOFTWARE BÁSICO EM C 25


Gama
Dúvidas?

Prof. Simone PROG SOFTWARE BÁSICO EM C 26


Gama
Bibliografia
• Manzano, José Augusto N. G. Programação de Computadores com
C/C++. Disponível em: Minha Biblioteca, Editora Saraiva,
2014.(https://integrada.minhabiblioteca.com.br/reader/books/978853
6519487/pageid/65)

Bibliografia Auxiliar
• Tutorial completo em C (em inglês): C Programming Tutorial
(markburgess.org)
• Processos e Threads:
• Aula 10.3 Programacao de Software Basico.mp4 - Google Drive
• fork() in C - GeeksforGeeks

Prof. Simone PROG SOFTWARE BÁSICO EM C 27


Gama

Você também pode gostar