Background! Os primeiros computadores permitiam a execução de apenas um programa de cada vez, com acesso completo aos recursos do sistema! Os sistemas actuais suportam o carregamento de múltiplos programas em memória e a sua execução concorrente 1 Conceitos básicos sobre sistemas operativos - Processos 2 1
Processo! Um processo é uma instância de um programa em execução, constituído pelo: Código executável, Dados, Pilha de execução, Valor do contador de programa (registo PC), etc.! Também os S.O. multiprogramados, desde os sistemas mono utilizador até aos sistemas que suportam centenas de utilizadores, são construídos à volta do conceito de processo. 3 Chamadas ao sistema! Os programas do utilizador solicitam serviços do sistema operacional através da execução de chamadas ao sistema.! Os programadores ao solicitarem estes serviços estão a estender as capacidades das linguagens de programação sequenciais.! As chamadas ao sistema criam, apagam e usam processos que são geridos pelo S.O. 4 2
Estados de um processo! Ao longo da sua vida, um processo percorre vários estados: Novo o processo está a ser criado Pronto o processo aguarda atribuição de CPU Em execução as instruções do processo estão a ser executadas Bloqueado o processo espera por acontecimentos Concluído o processo terminou e os seus recursos foram libertados! Cada processo é representado no S.O por um bloco de controlo do processo (PCB Process Control Block) que contém informação associada a um processo específico 5 Diagrama de transição de estados fim de instruções novo processo criado seleccionado para execução pronto em execução fatia de tempo expirou bloqueado concluído operação de E/S 6 3
Escalonamento de processos! Filas de escalonamento - Fila de jobs Fila de dispositivo Fila de processos prontos! A selecção de um processo de uma fila é feita por um escalonador (sheduler) Tipos de escalonadores: escalonador de longo prazo (ou escalonador de jobs), escalonador de cuto prazo (ou escalonador de CPU) 7 Filas de escalonamento fila de jobs fila de prontos CPU fila de E/S 8 4
Expedidor (dispatcher) de processos! Processo que permuta o processo corrente 9 Operações realizadas por processos! Criação de outros processos Um processo pai cria um ou mais filhos que, por sua vez, poderão criar novos processos Pai e filhos executam concorrentemente! Execução de programas diversos durante o seu tempo de vida! Terminação de processos 10 5
Primitivas em Unix 11 Primitiva fork e primitivas exec! Através da utilização da primitiva fork, um processo pai (processo invocador) cria um filho, que prossegue a execução do mesmo programa O filho herda do pai: uma cópia do segmento de dados e de código (nalguns sistemas este último é partilhado), etc. Após fork, o filho difere do pai: no PID (Process ID), o segmento de dados não é partilhado, etc.! Através da utilização das primitivas exec, qualquer processo pode substituir o programa actual por outro Após exec, o processo conserva: o PID, etc. 12 6
Exemplo #include <stdio.h> # include <unistd.h> main() int x; x=0; fork(); x=1; printf( X=%d\n,x); } 13 Primitivas! fork #include <unistd.h> pid_t fork (void);! getpid e getppid #include <unistd.h> pid_t getpid(void); pid_t getppid(void); 14 7
Primitivas! exit void exit (int status);! exec #include <unistd.h> Int execl(const char *path, const char * arg,...); Int execlp(const char *file, const char * arg,...);...! wait e waitpid #include<sys/types.h> #include <sys/wait.h> pid_t wait (int *status); pid_t waitpid(pid_t pid, int *status, int options); 15 8