Resumo de Prova: Processos no Linux

0

Componente gerenciador de processos:
-Tratamento de sinais;
-Criação e encerramento de processos/threads;
-Escalonamento de CPU;

Cada processo executa um único programa e inicialmente tem um único thread de controle (possui um único contador de programa, que guarda o caminho da próxima instrução a ser executada).
Um daemon (processo em background) típico no sistema Linux é o cron, ele acorda uma vez por minuto para verificar se existe alguma tarefa para fazer.
Mas, o cron é realmente necessário? Sim, pois ele permite que o Linux agende tarefas para serem executadas em minutos, horas, dias ou meses depois.

Chamadas de sistemas relacionadas a processos:
• Fork: Cria uma cópia exata do processo original. O processo criador é chamado de processo pai e o novo processo é chamado de processo filho. Cada um tem sua própria imagem da memória e as alterações são invisíveis entre eles. Filho = Pid = 0.
• Getpid: Fornece o pid do processo atual.
• Waitpid: O processo espera até que um processo com o pid passado por parâmetro termine sua execução.
• Exec: Substitui toda a imagem na memória de um processo por um arquivo especificado.
• Sigaction: Efetua o tratamento dos sinais recebidos pelo processo.
• Alarm: Um processo pode ter um sinal de alarme que gera um SIGALRM após um intervalo de tempo especificado.

Comunicação entre processos:
Os processos podem comunicar entre si utilizando um tipo de câmbio de mensagens criando um canal entre dois processos no qual um deles pode escrever um fluxo de bytes para o outro ler. Este método é chamado pipe, que não gera condição de corrida, pois ao tentar ler uma entrada do pipe, o processo é bloqueado até que o dado esteja disponível.
A comunicação também pode ser feita através de interrupções de software. Um processo pode enviar um sinal para outro processo. Os processos podem dizer ao sistema o que eles querem que ocorra quando um sinal é recebido (ignorar, capturar, deixar o sinal matar o processo).
Implementação de um processo:
Para representar um processo é utilizado um descritor do tipo task_struct, o qual contém todas as informações do processo. Para manter a compatibilidade com outros sistemas UNIX, o Linux identifica os processos por meio do PID. O núcleo organiza todos os processos em uma lista duplamente encadeada de estruturas de tarefas.
Obs: Quando um processo é criado através do fork, o processo filho somente aponta para a imagem na memória do processo pai, e ao tentar fazer quaisquer modificação o núcleo aloca um cópia da página para então ser modificada e deixa o pai intacto. (copy on write).

Chamada de sistema Clone:
Semelhante a chamada fork, cria um novo processo. Porém clone permite que o processo filho partilhe partes do seu contexto com o processo pai, por exemplo, descritores de arquivos e espaço da memória. O seu principal uso é na implementação de múltiplos threads de controle em um mesmo processo que executam concorrentemente. Através desta chamada é possível aproveitar funções poderosas como: processos pai e filho executando no mesmo espaço de memória, pai e filho compartilham informação de sistema de arquivos, pai e filho compartilham o mesmo pid.

Escalonamento:
Em escalonamento o Linux aborda:
• FIFO em tempo real: Não preemptível exceto por outra thread de FIFO de tempo real.
• Chaveamento circular em tempo real: Semelhantes aos anteriores, porém preemptíveis e associados ao quantum de tempo.
• Tempo compartilha: Prioridade mais baixa.

Fila de execução (runqueue) que mantém dois vetores:
Ativo: Threads na fila de execução
Expirado: Threads que já foram executadas e tiveram seu quantum de tempo expirado antes de concluírem suas tarefas.
Quando o vetor de ativos está vazio, uma varredura é feita no vetor de expirados para que as threads passem a fazer parte do vetor de ativos e vice-versa.
Exceto quando threads FIFO de tempo real tomem todo o tempo da CPU.

Share.

About Author

Leave A Reply