• ver processos no sistema: ps aux.
  • ver processos em arvore: ps -efH.
  • ver processos em arvore, somente os filhos da shell corrente: ps T -fH.
  • A parte em espaco de usuario deve usar apenas open, read, e write, em um programa em C. Nada de fgets, "cat" no terminal, etc
  • Dica: As estruturas que definem um processo são definidas no arquivo linux/sched.h
  • Dica: É muito útil olhar o arquivo include/asm/current.h
  • A maquina virtual como configurada atualmente, mapeia a maquina hospedeira no IP 10.0.2.2. Então, para copiar arquivos do seu homedir para dentro da maquina virtual, faça scp raxxxxxx@10.0.2.2:/home/yyy/raxxxxx/arquivo .
  • Você pode usar a chamada do_fork() para criar os novos processos
  • Muitos alunos têm me perguntado sobre a pilha de execução dos novos processos. Então aqui está uma explicação geral:

    Como vocês viram na teoria, cada thread tem uma pilha de execução separada, sendo essa uma das características que a diferenciam de um processo convencional.

    Alguns alunos que olharam as chamadas do_fork() e sys_clone() perceberam que são passados nos registradores da chamada de sistema, ponteiros para a pilha de execução.

    Perceberam também que apenas escrevendo "thread" no arquivo ifs_fork, não há como passar a pilha de execução para o kernel. (Na verdade há, mas é preciso supor algumas coisa).

    A resposta é que, como todos os processos criados vão simplesmente rodar em um loop infinito, não há a necessidade de criação de uma nova pilha de execução. Isso quer dizer que vocês podem usar regs.esp para a obtenção da pilha.