Processos em Linux
Aluno: Raphael Franklin
Professor: Hugo Vieira L. de Souza
Disciplina: Sistemas Operacionais
Relembrando...
O que são processos?
• A seguinte definição de processo foi apresentada
por Tanenbaum em "Sistemas Operacionais Projeto e Implementação":
A ideia-chave aqui é que um processo é um tipo
de atividade. Ele tem um programa, entrada,
saída e um estado. Um único processador pode
ser compartilhado entre vários processos, com
algum algoritmo de agendamento sendo utilizado
para determinar quando parar de trabalhar em
um processo e servir a um diferente.
Estados de um processo
• executando - o processo está utilizando a CPU;
• pronto - o processo está temporariamente
parado para permitir que outro processo execute;
• bloqueado - o processo é incapaz de executar até
que um evento aconteça.
Estados de um processo
 Observações: um processo pode criar outro
processo, dizemos então que é o pai dos
processos que ele criou. Mas apesar disso
processos-filhos podem também criar novos
processos, formando então uma árvore
hierárquica de processos.
Processamento em Linux
Processamento em Linux
• Na etapa de inicialização do Linux é iniciada uma
função chamada start_kernel, sendo ela
responsável por criar uma thread, o processo de
número zero, o primeiro e o ascendente de todos
os outro processos.
• Assim que são carregadas toda estrutura de
dados, está mesma função é responsável por
chamar a função init que através da chamada
execve, cria o processos número de número 1 ,
mais conhecido como init.
Processamento em Linux
• O init é o primeiro processo inicializado no Linux
e é o pai de todos os outros processos. Se um
processo termina e deixa processos-filho ainda
executando, o processo init assume a
paternidade destes processos.
PID e PPID
• Um PID (Process Identifier) é um número de
identificação que o sistema dá a cada processo.
Para cada novo processo, um novo número deve
ser atribuído, não podendo desta forma existir
dois números iguais com mesma identificação.
• O PPID (Parent Process Identifier) é utilizado por
que sistemas baseados em Unix que precisam
duplicar um processo para realização de uma
nova tarefa, sendo assim o processo “copiado”
recebe o nome de “processo pai” e o novo recebe
o nome de “processo filho”. Sendo assim o PPID
de um processo nada mais é do que o PID de seu
processo pai.
PID e PPID
Background e Foreground
• No Linux, um processo pode estar em foreground
ou em background, ou seja, em primeiro plano
ou em segundo plano.
• Ao digitar o comando “ls -R /etc > teste”, o
sistema criará o arquivo teste com conteúdo de
todos os diretórios e arquivos que se encontram
abaixo do diretório /etc. Durante a execução
nenhum outro comando poderá ser digitado,
significando estar em primeiro plano ou em
foreground.
Background e Foreground
• Para coloca-lo em background é necessário a
utilização do comando : “ls -R /etc > teste &”.
• O símbolo & indica que o comando deve ser
executado em background;
Modelo Cliente-Servidor
• O Linux implementa muitas das suas funções
usando o modelo cliente-servidor. Isto significa
que existem processos que são criados
especificamente para executar determinadas
tarefas. Estas tarefas especiais são oferecidas aos
outros processos do sistema na forma de
serviços.
• O processo responsável pela execução de
determinado serviço no sistema é chamado
servidor, é o que solicita e chamado cliente.
Modelo Cliente-Servidor
• Normalmente,
as
aplicações
servidoras
(daemons) são executadas em background,
enquanto as aplicações clientes são executadas
em foreground.
• A grande vantagem de implementar funções
dessa forma é tornar o Kernel mais leve, pois seu
trabalho e só gerenciar a comunicação entre
clientes e servidores.
Modelo Cliente-Servidor
• São exemplos de daemons no Linux:
 at daemon - servidor que executa serviços
agendados pelo comando at.
 cron daemon - servidor que executa serviços
agendados pelo comando crontab.
 lpd (printer daemon) - servidor de impressão de
arquivos.
Estados
• O Linux trabalha, essencialmente, com cinco tipos
de situação, isto é, estados:
 Executável – o processo está em execução ou
aguardando para ser executado: TASK_RUNNING;
 Dormente - o processo está suspenso até que
determinada condição se torne verdadeira:
TASK_INTERRUPTIBLE;
 Ininterrupto - como o estado anterior, exceto pelo
fato de que o seu estado não será modificado
quando receber um sinal: TASK_UNINTERRUPTIBLE;
Estados
• Zumbi - o processo é considerado “morto”, mas, por
alguma razão, ainda existe: TASK_ZOMBIE ;
• Parado - o processo está “congelado”, ou seja, não
pode ser executado: TASK_STOPPED.
Limite de Recursos
• Por padrão o Linux limita os recursos que cada
processo deve ter. Isso acontece para proteger e
manter a estabilidade do sistema caso o usuário
faça algo de errado. Esse limites são:
 RLIMIT_AS: o tamanho máximo que um processo
pode ter em bytes.
 RLIMIT_CORE: quando um processo é abortado,
o kernel pode gerar um arquivo core contendo as
informações desse aborto.
Limite de Recursos
 RLIMIT_CPU: o tempo máximo em segundos que
um processo pode ser executado.
 RLIMIT_DATA: o tamanho máximo do heap ou
memória de dados em bytes.
 RLIMIT_FSIZE: o tamanho máximo em bytes
permitido para um arquivo.
 RLIMIT_LOCKS: o número máximo de arquivos
que um processo pode dar lock.
 RLIMIT_MEMLOCK: o tamanho máximo em bytes
de memória que não permite swap.
Limite de Recursos
 RLIMIT_NOFILE: o número máximo de
descritores de arquivos abertos.
 RLIMIT_NPROC: o número máximo de processos
que um usuário pode ter.
 RLIMIT_RSS: a quantidade máxima de memória
física que um processo pode ter.
 RLIMIT_STACK o tamanho máximo em bytes da
stack.
Processo Preemptivos
• Os processos do Linux são preemptivos, isso que
dizer que quando um processo entra no estado
TASK_RUNNING o kernel vai checar se existe
alguma prioridade maior do que o processo
corrente. Caso exista, o processo corrente é
interrompido e o que tem a prioridade maior
começa a executar.
Política de Escalonamento
• A prioridade de um processo em Linux está em
constante mudança, por isso o escalonador
permanece em constante atualização sobre o
andamento desses processos, para que assim
possa ajustar as suas prioridade. Dessa forma os
processos que ficarem proibidos de utilizar a CPU
por um longo tempo, tem sua prioridade
incrementada, enquanto os que passaram um
longo período dentro dela tem sua prioridade
decrementada.
Política de Escalonamento
• Quando falamos no assunto escalonamento é
importante notar que os processos são
classificados de duas formas: E/S e CPU. O
primeiro faz uso extenso dos recursos de entrada
e saída, isso significa que grande parte do seu
tempo é utilizado no aguardo da conclusão das
operações de Entrada e Saída, já o segundo são
processos que necessitam permanecer um longo
tempo dentro da CPU.
Política de Escalonamento
• Uma classificação alternativa define três classes
de processos:
 Processos Interativos: os processos que estão em
constante interação com o usuário, sendo assim
eles perdem grande parte do tempo esperando
uma atividade do usuário, como um clique do
mouse ou o aperto de uma tecla.
Política de Escalonamento
 Processos em Lote: não necessitam de nenhuma
interação do usuário e por isso muitas vezes
rodam em background. Como são processos de
baixa
prioridade,
são
frequentemente
penalizados pelo escalonador.
 Processos em Tempo Real: esses processos
nunca devem ser bloqueados por processos de
baixa prioridade, precisam de um tempo de
resposta super rápido e com uma variação
bastante baixa.
Algoritmo de Escalonamento
• O algoritmo de escalonamento do Linux funciona
dividindo o tempo do CPU em fatias. Em uma
única fatia cada processo possui um tempo
especifico de duração que é computada assim
que a fatia é iniciada. Geralmente processos
diferentes tem tempos de execuções diferentes.
Quando o tempo de execução de um processo
termina na CPU é retirado e outro processo que
está rodando é colocado no seu lugar .
Algoritmo de Escalonamento
• Uma fatia termina quando todos os processos
esgotaram seu tempo reservado de execução,
dessa forma o escalonador é responsável por
calcular o tempo de execução de cada processo
assim que uma nova fatia é iniciada.
• Para o Linux escolher qual processo deve rodar
ele precisar escolher qual tem a prioridade maior,
existem dois tipos de prioridade:
Algoritmo de Escalonamento
• Prioridade Estática: definido pelo usuário para
processos que necessitam de tempo real, os
valores variam de 1 até 99 que nunca são
modificados pelo escalonador.
• Prioridade Dinâmica Esta é aplicada para os
processos convencionais. A prioridade dinâmica
dos processos convencionais é sempre inferior
aos processos com prioridade estática.
Referências
• Ubuntu.
Disponível
em:
<http://www.uniriotec.br/~morganna/guia/proce
sso.html> Acessado: 16 de novembro de 2013.
• PASSE,
Fernando.
Disponível
em:
<http://www.ebah.com.br/content/ABAAAe7o0A
H/historia-linux?part=2> Acessado: 16 de
novembro de 2013.
• TOLEDO,
Marcelo.
Disponível
em
<
http://marcelotoledo.com/stuff/artigos/processo
s_no_linux/gerenciamento_de_processos_no_lin
ux.html > Acessado: 16 de novembro de 2013.
• ALECRIM,
Emerson.
Disponível
em
<http://www.infowester.com/linprocessos.ph
p>Acessado: 16 de novembro de 2013.
Download

Processos em Linux