PROCESSOS Prof. Maicon A. Sartin mapsartin@gmail.com
Cenários em Sistemas Multitarefas Um usuário pode executar diversas atividades simultâneas Música Editoração de texto Navegar na Internet Servidor pode ter vários usuários conectados Acesso remoto Servidor de e-mails
Introdução Processo Entidade Ativa, ao contrário do programa, que é uma entidade passiva Um ambiente onde se executa um programa O SO gerencia os processos por SC que podem realizar diversas operações: Criar, eliminar, sincronizar, suspender, Um algoritmo/sistema operacional é preemptivo quando: Um processo entra e pode ser retirado da CPU, antes do término da sua execução
Introdução Criar um Processo #include <stdio.h> int main() { int i, pid; printf("processo Principal (main)!! ID = : %d \n",getpid() ); pid = fork() ; if (pid > 0) { printf("eu sou o pai!! ID = : %d \n",getppid()) ; } else if (pid == 0) { printf("eu sou o filho!! ID = : %d \n",getpid() ); } }
Introdução Cada processo tem sua própria CPU virtual Trazendo a visão de exclusividade ao usuário A CPU física é compartilhada por vários processos Multiprogramação Tempo Compartilhado O Escalonador seleciona qual processo deve usar a CPU a cada momento e por quanto tempo
Estrutura dos Processos O processo constitui-se de três elementos para manter as informações básicas à execução de um programa Contexto de hardware Contexto de software Espaço de endereçamento C o n t e x t o d e S o f t w a r e C o n t e x t o d e H a r d w a r e P r o g r a m a E s p a ç o d e E n d e r e ç a m e n t o
Estrutura dos Processos Contexto de hardware Conteúdo de registradores P r o c e s s o A S i s t e m a O p e r a c i o n a l P r o c e s s o B e x e c u t a n d o Fundamental na implementação de sistemas time-sharing O processo em execução na CPU pode ser interrompido e restaurado Posteriormente Quando isso ocorre há a necessidade de mudança de contexto C C S a l v a r e g i s t r a d o r e s d o P r o c e s s o A a r r e g a r e g i s t r a d o r e s d o P r o c e s s o B S a l v a r e g i s t r a d o r e s d o P r o c e s s o B a r r e g a r e g i s t r a d o r e s d o P r o c e s s o A e x e c u t a n d o e x e c u t a n d o
Estrutura dos Processos Contexto de Software Define-se caracterísitcas na criação do processo: Nº máx. de arquivos abertos simultaneamente Possui três grupos de informações: identificação, Quotas e privilégios Identificação Processo com identificação única - PID (Process Identification) Processo com identificação do usuário (UID)
Estrutura dos Processos Contexto de Software Quotas Limites de cada recurso no qual o processo pode alocar Ex.: Se ultrapassado o limite o processo fica lento ou não executa Número máximo de arquivos abertos simultaneamente Número máximo de operações de E/S pendentes Número máximo de processos e subprocessos a serem criados Tamanho máximo do buffer para operações de E/S Tamanho máximo da memória a ser alocada Privilégios Define o que o processo pode fazer em relação ao sistema e a outros processos
Estrutura dos Processos Espaço de endereçamento É a área da memória do processo onde o programa será executado e deve ser protegido dos demais processos o w n e r ( U I D ) P I D n o m e r e g i s t r a d o r e s g e r a i s p r i o r i d a d e d e e x e c u ç ã o r e g i s t r a d o r P C d a t a / h o r a d e c r i a ç ã o C o n t e x t o d e S o f t w a r e C o n t e x t o d e H a r d w a r e t e m p o d e p r o c e s s a d o r r e g i s t r a d o r S P q u o t a s p r i v i l é g i o s P r o g r a m E s p a ç o d e E n d e r e ç a m e n t o a r e g i s t r a d o r d e s t a t u s e n d e r e ç o s d e m e m ó r i a p r i n c i p a l a l o c a d o s
Estados do Processo Em sistemas multiprogramáveis um processo não é executado todo tempo pela CPU Desde a criação do processo até o seu término ele passa por uma série de estados Existem três tipos de estados: Execução, Pronto e Espera
Estados do Processo Execução (running) O processo está sendo executado pela CPU Com um processador, quantos processos em execução? E quando há vários processadores? O SO determina a utilização do processador pelas políticas de escalonamento Pronto (ready) Aguarda uma oportunidade para executar, dependendo do SO para a alocação da CPU
Estados do Processo Espera (wait) Aguarda um evento externo ou algum recurso para poder prosseguir seu processamento Ex.: Término de Operação de E/S Bloqueado(Blocked) Em alguns sistemas Espera x Bloqueado Um processo em estado de bloqueado espera ser autorizado para utilizar o recurso Um processo em estado de espera Agurada pela conclusão de uma operação em um recurso que já foi garantido
Estados do Processo Um processo muda de estado diversas vezes, durante seu processamento Em função de eventos originados por ele próprio 1 ou pelo SO 2 1. Eventos voluntários 2. Eventos involuntários
Estados do Processo Existem quatro mudanças de estado: Pronto Execução Na criação do processo ele é colocado em uma lista de processos no estado pronto, onde aguarda uma oportunidade para ser executado Execução Espera Por eventos gerados pelo próprio processo. Ex.: Operação de E/S Espera Pronto Quando a operação solicitada é atendida ou o recurso esperado é concedido Execução Pronto Por eventos gerados pelo sistema Ex. Fim da fatia de tempo que o processo possui para sua execução
Mudanças de Estados do Processo E s t a d o d e E x e c u ç ã o b d a c E s t a d o d e E s p e r a E s t a d o d e P r o n t o
Mudanças de Estados do Processo
Controle do Processo O SO materializa o processo através de uma estrutura chamada bloco de controle do processo (PCB) Através do PCB o SO mantém todas as informações sobre o processo p o n t e i r o s E s t a d o d o p r o c e s s o N o m e d o p r o c e s s o P r i o r i d a d e d o p r o c e s s o R e g i s t r a d o r e s L i m i t e s d e m e m ó r i a L i s t a d e a r q u i v o s a b e r t o s.
Controle do Processo Pode haver vários processos em estados de pronto ou de espera O SO gerencia os processos pelas listas encadeadas, onde cada PCB tem um ponteiro para seu sucessor L i s t a d e p r o c e s s o s e m e s t a d o d e p r o n t o P C B # 5.. P C B # 1 L i s t a d e p r o c e s s o s e m e s t a d o d e e s p e r a P C B # 9... P C B # 2 P C B # 4
Hierarquia de Processos Um processo pode criar outros processos de maneira hierárquica Um processo pai cria seu(s) processo(s) filho(s), um processo filho pode criar seus próprios processos O Unix chama esta hierarquia de grupo de P r o c e s s o A processos O Windows não tem esse conceito, ficam no mesmo nível P r o c e s s o B P r o c e s s o C P r o c e s s o D P r o c e s s o E
Hierarquia de Processos #include <stdio.h> #include <unistd.h> int main(){ int pid; pid = fork(); /* Cria outro processo */ if (pid < 0) {/* houve erro -- não foi possível criar o processo*/ fprintf(stderr, "falha na execução do Fork"); exit(-1); } else if(pid == 0) {/* processo filho foi criado*/ execlp(/bin/ls","ls",null); } else {/* processo pai */ wait(null); /* pai esperará até que o filho termine */ printf("filho já terminou!"); exit(0); } }
Hierarquia de Processos Na criação de processos existem duas possibilidades: Em termos de execução: 1. O pai continua a ser executado simultaneamente com seus filhos; 2. O pai espera até que algum ou todos os seus filhos tenham terminado. Em termos do espaço de endereços: 1. O processo filho é uma duplicata do pai (mesmo programa e dados); 2. o processo filho tem um novo programa carregado nele.
Tipos de Processos Os processos podem ser classificados quanto ao tipo de processamento que realizam em: CPU-Bound Passam a maior parte do tempo no estado de execução Realiza poucas operações de E/S e muitos cálculos Ex.: Aplicações matemáticas e científicas I/O-Bound Passam a maior parte do tempo no estado de espera Realiza um elevado número de E/S Ex.: Aplicações comercias e processos interativos
Tipos de Processos Processos CPU-bound x I/O-bound E / S E / S U C P U C P ( a ) C P U - b o u n d t e m p o t e m p o ( b ) I / O - b o u n d
Thread (Processo leve) Unidade básica de utilização da CPU ID de Thread Um contador de programa Um conjunto de registradores Uma pilha Thread = subconjuntp das informações pertinentes a um processo É possível ter várias threads independentes dentro de um mesmo processo
Thread (Processo leve) Processo agrupamento de recursos + fluxo de execução Thread fluxo de execução Thread = subconjunto das informações pertinentes a um processo É possível ter várias threads independentes dentro de um mesmo processo
C o n t e x t o d e s o f t w a r e Threads Processo Multithread Monothread e Multithread C o n t e x t o d e h a r d w a r e C o n t e x t o d e h a r d w a r e C o n t e x t o d e h a r d w a r e T h r e a d 1 T h r e a d 2 E s p a ç o d e e n d e r e ç a m e n t o T h r e a d 3
Threads (a) Três processos, cada um com a sua thread (b) Um processo com três threads
Threads Uso de Threads Um processador de texto com três Threads
Threads Uso de Threads Servidor Web multithread
PThreads #include <stdio.h> #include <stdlib.h> #include <pthread.h> void *message_thread1(); int main() { pthread_t tid; //identificador do fluxo pthread_attr_t attr; //conjunto de atributos p/ o fluxo pthread_attr_init(&attr);//define os atributos pthread_create(&tid, &attr, message_thread1, NULL); //Cria Thread pthread_join(tid, NULL); //espera que a thread termine } void *message_thread1() // o fluxo começará a controlar nesta função { char *message1 = "Thread 1"; printf("%s \n", message1); pthread_exit(0); }
Threads em Java class Trabalhadora extends Thread { public void run(){ System.out.println("Eu sou uma Thread Trabalhadora"); } } public class primeira { public static void main (String args[]){ Thread runner = new Trabalhadora(); runner.start(); } System.out.println("Eu sou a thread principal"); }
Ciclo de vida da Thread
Referências MACHADO, F. B. "Arquitetura de sistemas operacionais". LTC, 1997. LAUREANO, Marcos. Sistemas Operacionais. Curitiba: Universidade Federal Paraná, 2009. GUALEVE, J. A. F. Sistemas Operacionais. Brasília: Universidade Católica de Brasília, 2006.