300 likes | 454 Views
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" :
E N D
Processos em Linux Aluno: Raphael Franklin Professor: Hugo Vieira L. de Souza Disciplina: Sistemas Operacionais
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 • 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 initque 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 (ProcessIdentifier) é 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 (ParentProcessIdentifier) é 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.
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: • atdaemon - servidor que executa serviços agendados pelo comando at. • crondaemon - servidor que executa serviços agendados pelo comando crontab. • lpd (printerdaemon) - 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 - oprocesso 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:otempo máximo em segundos que um processo pode ser executado. • RLIMIT_DATA:otamanho máximo do heap ou memória de dados em bytes. • RLIMIT_FSIZE:otamanho máximo em bytes permitido para um arquivo. • RLIMIT_LOCKS: onú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: onúmero máximo de descritores de arquivos abertos. • RLIMIT_NPROC:onúmero máximo de processos que um usuário pode ter. • RLIMIT_RSS:aquantidade máxima de memória física que um processo pode ter. • RLIMIT_STACKo 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/processo.html> Acessado: 16 de novembro de 2013. • PASSE, Fernando. Disponível em: <http://www.ebah.com.br/content/ABAAAe7o0AH/historia-linux?part=2> Acessado: 16 de novembro de 2013. • TOLEDO, Marcelo. Disponível em < http://marcelotoledo.com/stuff/artigos/processos_no_linux/gerenciamento_de_processos_no_linux.html> Acessado: 16 de novembro de 2013.
ALECRIM, Emerson. Disponível em <http://www.infowester.com/linprocessos.php>Acessado: 16 de novembro de 2013.