2.5 Processos no Minix 1. gerenciamento de processos: interrupçoes e traps. 2. tarefas de E/S: disco, tty, relógio, sistema, ethernet. 3. gerenciador de memória, arquivos, rede 4. init, processos de usuários.
1. gerenciar processos - capturar traps e interrupções: salvar e recuperar estado agendar - tratar as mensagens: destinos são legais? localizar buffers de envio e recebimento na memória. copiar bytes do remetente para o destinatário.
2. tarefas (drivers) de E/S - fornece serviços: (open, read, write ...). obs: camada 1 e 2 em um bloco binário chamado “kernel”. Camada 1 possui mais privilégios que a 2.
3. gerenciadores FM e MM - fornece serviços para os processos de usuário. - executam com menos privilégio que o kernel não acessa portas de I/O, nem memória for a do seu segmento - MM: fork, exec. - FS: read, mount, chdir. - agendador dá prioridade mais alta que a processos de usuário (mesmo para processador).
4. Processos de usuário - init, shell, editores, compiladores, - deamon – espera algum evento como a chegada de um pacote de rede.
2.5.2 – minix x processos - árvore de processos: init é raiz.
Inicialização (fig. 2.31) disco rígido - MBR + tabela de partições programa em MBR (lilo): - lê a tabela de partição - seleciona partição ativa. -- programa de inicialização no setor 1 da partição ativa = disquete.
Boot - carrega e dispara kernel, MM, FM, init. (diferentes prioridades).
init - lê: /etc/ttytab # Device Type Program Init console minix getty ttyc1 minix getty ttyc2 minix getty - dispara getty ->exec login -> exec shell (/etc/passwd) - shell fica como filho de init.
fork e exec - fork: cria um novo processo - exec: faz o processo executar um programa. - recebe memória : cabeçalho do prog. - tabela de processos :: kernel, FM, MM.
Comunicação interprocesso - send(dest, &message); - receive(source, &message) - send_rec(src_dst, &message) não vai para rede, trabalha com ponteiros. o processo que envia fica bloqueado até que a mensagem seja recebida conversa com mesma camada ou uma abaixo.
Agendamento de processos Ativado quando: - interrupção de I/O - relógio - término do processo Utiliza 3 filas – camadas 2,3,4. 2,3: executa até bloquear. 4: round robin.
Interrupção I/O dispositivo => controlador de interrupção. controlador (hw) 1. interrompe CPU. 2. envia identificação da origem da interrupção kernel (sw): 1. salva registradores 2. sw. de driver, faz I/O (ex: teclado leu tecla, pega dados e prepara msg). 3. envia mensagem. 4. reinicia um processo
System call Procedimento que faz system call (ex: fork na lib posix). 1. coloca o ponteiro de mensagem e o destino em registradores da CPU. 2. executa trap. kernel: 1. salva registradores 2. envia e/ou recebe mensagem 3. reinicia um processo
Perguntas: - localize o código da system call fork (até syscall.c _sendrec.c) - localize o código do agendador (2.6.9); proc.c - localize o código do init.