TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

Jantar filósofos

Por:   •  2/11/2015  •  Relatório de pesquisa  •  947 Palavras (4 Páginas)  •  383 Visualizações

Página 1 de 4

Relatório de Atividades de Laboratório

Sistemas de Computação

Lab01 – CRIAÇÃO DE PROCESSOS

Daniel Teixeira de Farias                                        matrícula: 0321025        

17/12/2012

Sumário

Objetivos        

Metodologia        

Resultados        

Analise        

Conclusão        

Referências.....................................................................................................................................5

Objetivos

O principal objetivo da prática consistiu da análise e familiarização das chamadas de sistema do LINUX para criação de processos e sub-processos.  O comportamento e a forma como eles interagem com outras chamadas de sistema também foi analisada de forma a compreender melhor o comportamento do processo pai e filho.

Metodologia

Para a simulação foi utilizada a linguagem de programação C, onde os comandos analisados foram o fork() , execv() e a função system(). A prática abordou a criação de processos em quatro estágios, divididos em questões. A primeira questão trata da criação dos processos pai e filho, verificando seus id’s através da função getpid() e do comando ps aux no terminal.

A segunda questão era similar a primeira, verificando agora que o processo pai e o filho possuem o mesmo mapa de memória, sendo feita através de uma variável declarada antes do comando fork() . A terceira questão trata da ação conjunta das funções fork()  e execv(), onde espera-se que a função sobrescreva o processo que a chamou.

Ao final, é utilizada a função system() para executar algum dos três programas feitos anteriormente e observar que ela não sobrescreve o processo que a chamou, diferentemente da função execv().

Resultados

Segue abaixo os códigos utilizados na prática. Observe pelos comentários quais comandos foram utilizados nas respectivas questões.

#include

#include

#include

int main(void){

        int i, ret;

        char c;

        pid_t pid;

        char *cmd[] = {"kill", "-9", (char*)pid};

        if ((pid = fork()) < 0) {

          perror("fork");

          exit(1);

        }

        if (pid == 0) {

           while(1){

             printf("FILHO - PID: %d\n", pid); //comando utilizado na 1q

         ret = execv("/bin/kill", cmd); //comando utilizado na 3q

           }

        }

        else {

        while(1){

              printf ("PAI - PID: %d\n", pid);

              system("ps aux | grep fork2"); // comando utilizado na 4q

        }

        }

                write(1, "\n", 1);

                exit(0);

}

Analise

Observou-se ainda que, embora os dois processos possuam um mapa de memória idêntico após a chamada a fork() , eles evoluem de forma independente, o que significa que o filho possui uma própria cópia das variáveis do processo pai.

...

Baixar como (para membros premium)  txt (5 Kb)   pdf (116.4 Kb)   docx (13.7 Kb)  
Continuar por mais 3 páginas »
Disponível apenas no TrabalhosGratuitos.com