Problemas de Programação com Processos
Por: p23456 • 4/6/2016 • Exam • 1.463 Palavras (6 Páginas) • 339 Visualizações
LIC_COMP: SISTEMAS OPERACIONAIS
LISTA DE PROGRAMAÇÃO - PROCESSOS
DATA DE ENTREGA: 17/05/2015 DATA DE DEFESA: 18/05/15
VALOR: 10; PESO: 4; DECREMENTO DE 0,5 pt POR DIA DE ATRASO.
Prof. Fábio Cristiano
Problemas de Programação com Processos – Parte I
Objetivo
Com esta lista espera-se que os alunos possam assimilar conceitos relacionados com processos de um SO. Dentre os conceitos estão:
Sincronização e operações sobre processos.
Pretende-se com isso
Fornecer experiência neste importante tópico de sistemas Operacionais.
Problemas
1. Como vimos em aula, à estrutura básica de um SO é composta de: (1) Kernel; (2) Shell; e (3) aplicativos de usuário. Especificamente, O Shell é possibilita a execução de comandos. Basicamente, o Shell recebe o comando interpreta e executa o comando, que na verdade é um programa. Para verificar os processos em execução execute o comando “ps” pressione “ENTER”. O comando “ps” mostra várias
propriedades do processo. Por exemplo, usuário e PID (process ID). A maior parte dos comandos executados são programas. O comando “ls” corresponde ao programa “/bin/ls”. Quando executamos o comando executamos um programa. Dessa forma, ao executar um comando o Shell lança um novo processo no SO. A execução do “ps” mostra pelo menos dois processos: (1)o shell e o próprio “ps” que está em execução. O “ps” possui muitas variantes, como:
• ps -u user;
• ps -l t2;
• Veja mais opções para uso do “ps” com “man ps” no terminal.
2. Abra duas seções de terminal. No segundo terminal, veja o número dos processos de Shell em uso. Capture a tela do resultado e descreva o que ocorreu.
Na segunda captura da tela é possível perceber que o números de processos (PID) variam mesmo sendo a mesma ferramenta, juntamente com a identificação do shell a qual foi requisitado demonstrado no TTY sendo cada Terminal com seu próprio nº.
3. Em um terminal execute o comando “cat /etc/services |more”, e em outra seção verifique com o “ps” o número do PID. Quais parâmetros você usou para obter o resultado?
No terminal da esquerda estão sendo mostrados as portas de cada serviços que podem ser utilizados e por qual porta e tipo entre UTP e TPC, enquanto o PID do bash continuou o mesmo de antes de executar o comando “cat /etc/services |more” e o PID do ps -C cat continuou o mesmo após a execução do comando “cat /etc/services |more”.
Em outras palavras: apesar do shell estar executando o processo cat, seu Pid não foi alterado mesmo saindo do estado de pronto (sem execução de processos) para executando.
4. O processo init é o principal processo em operação no sistema GNU/Linux. O init é o processo pai de todos os processos, pois é o primeiro a ser executado, logo após o carregamento do Kernel na memória. Sua função é controlar todos os outros processos que são executados no SO. Digite o comando “ps -C init” e capture o resultado. Comente o resultado. Qual a função “-C”? PS.O GNU/Linux diferencia letras maiúsculas de minúsculas.
Professor para a distribuição Debian 8.4 instalada na minha máquina virtual percebi dentro de minhas pesquisas que ao executar o comando top, exibindo a lista de processos gerenciados pela CPU, essa distro não utiliza o “init” como o primeiro processo (Pid 1), mas, sim com a denominação de systemd (Pid 1) como processo pai de todos os outros processos, executados logo após o carregamento do kernel.
5. Programando um Shell em C. O Shell é um programa relativamente simples. Basicamente é composto por um momento de recepção do comando, dessa forma, recebe e executa comandos conhecidos, caso contrário uma mensagem de erro é emitida para o usuário que interage com o terminal e
assim corrigir a entrada. Escreva um interpretador de comandos que receba comandos e retorne o resultado da execução do comando. Para isso, se aceita dois tipos de implementação:
(1) O usuário digita um comando e o interpretador executa o comando quando conhecido. Em caso de comando não conhecido uma mensagem de erro deve ser enviada ao usuário. O interpretador de comandos deve ser encerrado com “exit”.
nano 5_1.c
main(){system(“bin/sh”);}/*Com essa linha de comando foi possível através desse programa em C utilizar todos os processos e programas do shell através do meu código utilizado na distro Debian 8.4.*/
(2) A segunda alternativa considera os mesmos requisitos apresentados na anteriormente, porém considera o uso da chamada de sistema system() para a execução dos comandos presentes no GNU/Linux, especificamente, em “/bin/” e “/sbin”.
5. Incluindo o processo pai inicial, quantos processos são criados
pelo programa mostrado a seguir:
#include<stdio.h>
#include<unistd.h>
int main(){
/*gera um processo filho*/
fork();
/*gera um processo filho*/
fork();
/*gera um processo filho*/
fork();
/*gera um processo filho*/
fork();
/*gera mais um processo filho*/
fork();
return 0; }
32 processos são criados no total. Sendo que 1º é criado o processo do programa em c,
no primeiro fork são realizadas duplicações da quantidade de subprocessos para 2,
no segundo fork são realizadas duplicações da
...