Skip navigation

Tag Archives: Processos

Objetivos:

 

  • Apresentar a estrutura de processos no Unix
  • Descrever as principais funções associadas à gerência de processos
  • Discutir questões sobre estruturas de dados relacionadas e comunicação entre processos

Unix: Um pouco de História

  • Bell Labs, Ken Thompson, Dennis Ritchie
  • 1971: PDP-7, assembly
  • 1972: PDP 11: C — código fonte disponível
  • 197?: Univ. de Berkeley? Mem. Virtual, TCP/IP
  • 1980: AT&T – System V
  • POSIX: Padrão de portabilidade

Versões Atuais

  • Sun Solaris (Open Solaris): Um dos mais estáveis
  • SCO Unix: Um dos mais antigos
  • Linux: Um dos mais populares
  • freeBSD: Um dos mais eficientes
  • netBSD: o com mais plataformas
  • IBM AIX: um dos mais controversos
  • Apple Mac OS X: um dos mais diferentes

Unix: Estrutura geral do sistema

Captura de Tela 2014-09-16 às 22.36.21

 

Unix: O Processo de Boot

Captura de Tela 2014-09-16 às 22.36.52

 

Unix: O processo de boot (Bootloader)

Captura de Tela 2014-09-16 às 22.37.21

 

Unix: O processo de Boot no Kernel

Captura de Tela 2014-09-16 às 22.37.36

Unix: O processo de boot (Init)

  • Primeiro a executar
  • Nunca termina (Causa Shutdown se morrer)
  • Lê arquivos de configuração
  • Dispara demais processos

 

Unix: Processos

  • Hierarquia de processos pais e filhos
    • fork(): Cria uma cópia do processo pai
    • exec(): Substitui o processo corrente por um novo programa
  • Várias formas de comunicação entre processos: Memória, Semáforos, Pipes, Msgs
  • Processos, Threads de aplicação (pthreads)
  • Alguns tem Threads de núcleo (Solaris, Linux)

 

Criação de Processos no Unix

  • fork()
    • S.O. cria um novo PCB
    • Cria-se uma cópia na memória do processo pai, mas com novo PID
    • Recursos de E/S são compartilhados
  • exec()
    • Mantém o PID
    • SO busca um programa do disco, o carrega na memória e sobre a área do programa que fez a chamada
    • Execução passa para o início do programa principal

Criação de processos no Unix: Exemplo

if((child_pid=fork())>0) {

/*Aqui é o processo pai*/

} else

if(child_pid==0) {

//Estamos no processo filho

if(execl(programfile,/*…*/)<0){

perror(“Erro no Execl“);

exit(1);

}

fprintf(stderr,”Não chega aqui“);

} else {

perror(“Erro no Fork“);

exit(2);

}

 

Unix: Processos (A partir do Init) 1

Captura de Tela 2014-09-16 às 22.57.32

 

Unix: Processos (A partir do Init) 2

Captura de Tela 2014-09-16 às 22.57.36

 

Unix: Processos (A partir do Init) 3

Captura de Tela 2014-09-16 às 22.57.41

 

Unix: Processos (A partir do Init) 4

Captura de Tela 2014-09-16 às 22.57.53