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
Unix: O Processo de Boot
Unix: O processo de boot (Bootloader)
Unix: O processo de Boot no Kernel
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
Unix: Processos (A partir do Init) 2
Unix: Processos (A partir do Init) 3
Unix: Processos (A partir do Init) 4







