PCS2042 Sistemas Operacionais. Visão geral de processos no Minix

Tamanho: px
Começar a partir da página:

Download "PCS2042 Sistemas Operacionais. Visão geral de processos no Minix"

Transcrição

1 PCS2042 Sistemas Operacionais Projeto2 Visão geral de processos no Minix Grupo: 8 Os sinais e o Minix. Professor: Jorge Kinoshita Equipe: Oduvaldo Vick Pedro d'aquino F. F. de Sá Barbuda Pedro Monteiro Kayatt

2 Os Objetivos O objetivo desta segunda fase do projeto é obter uma visão geral de como os processos interagem com o sistema operacional Minix. Neste relatório estão descritos os passos tomados pelo grupo oito para um esclarecimento no processo de chamada de Sinais, demonstrando como podemos capturá-los e tratá-los. Enunciado: onde está o código do minix que trata dos sinais (signals)? Caso um processo não tenha decladrado o signal handler para tratar SIGINT (control C) qual é o código executado pelo minix? dica: signal.c, SIG_DFL.

3 O que são sinais? Sinais podem ser descritos como um mecanismo para transmitir informações para um processo que não está necessariamente esperando por uma entrada de dados. Desta forma podemos fazer um paralelo destes com as interrupções de hardware; pois eles interrompem um processo que estava rodando (funcionando, então, de forma assíncrona); exigem o desvio para uma área de código especial; e o processo que foi interrompido continua sua operação normal, através da persistência do seu estado anterior à chamada do sinal. A geração dos sinais se origina de diversas maneiras, entre estas podemos citar: Pelo sistema: através de combinações de teclas (ex. Ctrl+C) Por outros processos: através de códigos de manipulação de sinais de chamadas de sistema (ex. system call kill ) Através de funções de sistema qualquer processo pode escolher efetuar três tipos de operações com os sinais: ignorar, capturar ou executar a chamada default. Outra grande aplicação dos sinais são nas funções de temporizadores, sendo utilizados então para o desenvolvimento de alarmes, extremamente úteis para a administração do sistema operacional.

4 A Metodologia Para o desenvolvimento desse projeto estudamos o capitulo e do livro Sistemas Operacionais Projeto e Implementação 1 do Tanenbaum. Nessa seção do livro é descrito passo a passo o que são sinais e como é feita a abordagem destes pelo código do Minix. Para confirmar o que é dito neste capítulo elaboramos um pequeno programa, que capturava um sinal e percorria a pilha, procurando pelas estruturas que o livro dizia estarem lá. O código do programa segue na seção Do ponto de vista do Sistema. O objetivo deste teste é verificar se o Minix realmente aloca 100 bytes de estruturas (sigcontext + sigframe) na pilha. 1 SISTEMAS OPERACIONAIS, PROJETO E IMPLEMENTAÇÃO - 3ª EDIÇÃO TANENBAUM & WOODHULL

5 Como os sinais funcionam? Para entender o funcionamento dos sinais resolvemos dividir esta abordagem em duas: O ponto de vista do Usuário O ponto de vista do Sistema Ambas as abordagens são descritas a seguir: O ponto de vista do Usuário: Do ponto de vista do usuário os sinais são extremamente simples, um fato bom, porém preocupante, pois muitos dos desenvolvedores não sabem ao certo como estes estão funcionando no sistema. Para o programador utilizar da manipulação de sinais ele pode simplesmente capturá-lo, e para tal basta utilizar de uma chamada definida no sistema chamada sigaction. Outra estrutura importante é a sigprocmask que auxilia no bloqueio de sinais. A seguir vemos como é definida a chamada da sigaction: sigaction(int numerosinal, struct sigaction* psaction, struct sigaction* pvelhosaction) Como argumentos desta chamada temos: int numerosinal: corresponde a um tipo de sinal que queira ser gerenciado. Estas declarações são feitas em signal.h que pode ser visto a seguir: /* Regular signals. */ #define SIGHUP 1 /* hangup */ #define SIGINT 2 /* interrupt (DEL) */ #define SIGQUIT 3 /* quit (ASCII FS) */ #define SIGILL 4 /* illegal instruction */ #define SIGTRAP 5 /* trace trap (not reset when caught) */ #define SIGABRT 6 /* IOT instruction */ #define SIGBUS 7 /* bus error */ #define SIGFPE 8 /* floating point exception */ #define SIGKILL 9 /* kill (cannot be caught or ignored) */ #define SIGUSR1 10 /* user defined signal # 1 */ #define SIGSEGV 11 /* segmentation violation */ #define SIGUSR2 12 /* user defined signal # 2 */ #define SIGPIPE 13 /* write on a pipe with no one to read it */ #define SIGALRM 14 /* alarm clock */ #define SIGTERM 15 /* software termination signal from kill */ #define SIGEMT 16 /* EMT instruction */ #define SIGCHLD 17 /* child process terminated or stopped */ #define SIGWINCH 21 /* window size has changed */

6 /* POSIX requires the following signals to be defined, even if they are * not supported. Here are the definitions, but they are not supported. */ #define SIGCONT 18 /* continue if stopped */ #define SIGSTOP 19 /* stop signal */ #define SIGTSTP 20 /* interactive stop signal */ #define SIGTTIN 22 /* background process wants to read */ #define SIGTTOU 23 /* background process wants to write */ #define _NSIG 23 /* number of signals used */ struct sigaction* psaction: corresponde a um ponteiro para uma estrutura que irá definir a função de tratamento do sinal. (define que a nova ação do sinal será copiada no espaço de PM). struct sigaction* pvelhosaction: corresponde a um ponteiro para uma estrutura que armazena atributos de sinais antigos. Notoriamente ambas as estruturas pode apontar pra valores pré-definidos; estes são: SIG_DFL aponta para o tratamento default (padrão), do sinal. Se este o tem. SIG_IGN faz com que o sinal seja ignorado pelo processo. Definidos, junto com outras macros, signal.h: /* Macros used as function pointers. */ #define SIG_ERR (( sighandler_t) -1) /* error return */ #define SIG_DFL (( sighandler_t) 0) /* default signal handling */ #define SIG_IGN (( sighandler_t) 1) /* ignore signal */ #define SIG_HOLD (( sighandler_t) 2) /* block signal */ #define SIG_CATCH (( sighandler_t) 3) /* catch signal */ #define SIG_MESS (( sighandler_t) 4) /* pass as message (MINIX) */ OBS: sigkill não pode ser ignorado nem capturado E agora podemos ver como é declarada a chamada do sigprocmask: sigprocmask(int how, sigset_t *set, sigset_* oset) E temos como argumentos: o inteiro how, que utiliza os valores pré-definidos em signal.h exibidos a seguir; e os ponteiros para as estruturas set e oset, que de forma semelhante a sigaction definem atributos atuais e antigos. /* POSIX requires these values for use with sigprocmask(2). */ #define SIG_BLOCK 0 /* for blocking signals */ #define SIG_UNBLOCK 1 /* for unblocking signals */ #define SIG_SETMASK 2 /* for setting the signal mask */ #define SIG_INQUIRE 4 /* for internal use only */

7 E então podemos ver como é a montagem de uma estrutura do tipo sigaction: struct sigaction{ void (*sa_handler)(int sig); /*SIG_DFL, SIG_IGN, SIG_MESS, ou o ponteiro para função */ sigset_t sa_mask; /*sinais a serem bloqueados durante a execução da rotina de tratamento*/ int sa_flags; /*flags especiais*/ } Assim podemos entender o quanto é simplista a elaboração de uma rotina e a definição para que esta possa manipular o recebimento de um sinal para o processo. A seguir exemplificamos um pseudo-código que efetua a manipulação do SIGINT (sinal gerado pelo sistema ao pressionar Ctrl+C no Shell). void rotinatratamento(int qualsinal) { /*Declaração da rotina para tratar o sinal*/ printf( Rotina de tratamento do SIGINT ); } int main(){ struct sigaction saction; /*cria-se a estrutura para manipular o sinal*/ saction.handler = rotinatratamento; /*fazemos com que esta aponte para a função rotinatratamento */ sigaction(sigint, &saction, NULL); /*Especificamos que o sinal SIGINT deve ser tratado pela nossa estrutura saction*/ pause(); } printf( Rotina de tratamento terminou );

8 O ponto de vista do sistema Para o usuário, a utilização dos sinais é bastante simples. Para o sistema operacional, entretanto, há alguma complicação no processo especialmente no caso em que o sinal é capturado (quando é ignorado ou quando a ação padrão deve ser executada, a implementação é trivial). De agora em diante, vamos nos referir a sinais capturados simplesmente como sinais. Do ponto de vista do sistema, os sinais são como uma interrupção de alto nível. Há diversas semelhanças: Um processo estava rodando e foi interrompido Há uma rotina que deve chamada para tratar da interrupção O processo que estava executando não deve perceber que a sua execução foi interrompida (o que implica na exigência de que o contexto se mantenha igual) Há, porém, uma restrição a mais no caso dos sinais: a rotina de tratamento pode ser escrita como uma função normal em C já rotinas de tratamento de interrupção necessariamente envolvem componentes de baixo nível, como instruções especiais etc. Isso é um retrato da diferença fundamental entre sinais e interrupções: enquanto interrupções são lidadas pelo processador e pelo núcleo (até em sistemas de microkernel), os sinais são definidos num nível muito mais abstrato. Isso permite que a sofisticação do sistema seja maior: o tratamento de interrupções vai ser sempre difícil e cru, pois estamos muito perto do hardware; os sinais, contudo, são um conceito muito mais distante do processador. Porém, isso não significa que a implementação dos sinais não seja desafiadora. Além de salvar o contexto do processo, ainda precisamos criar uma pilha adequada para que a rotina de tratamento possa rodar e, depois disso, precisamos restaurar o estado dos registradores. E, finalmente, isso tudo deve ser feito de maneira transparente para o programador tanto do processo, quanto da rotina de interrupção. Salvando o contexto Assim que o Process Manager percebe que um sinal deve ser enviado para um processo, e que o sinal foi capturado, ele inova a chamada de núcleo sys_sigsend. É nela, definida no arquivo /kernel/system/do_sigsend.c, que a parte suja do trabalho está concentrada. O primeiro passo é salvar o contexto do processo interrompido. Isso é feito nas seguintes linhas: /* Compute the user stack pointer where sigcontext will be stored. */ scp = (struct sigcontext *) smsg.sm_stkptr - 1; /* Copy the registers to the sigcontext structure. */ memcpy(&sc.sc_regs, (char *) &rp->p_reg, sizeof(struct sigregs)); /* Finish the sigcontext initialization. */ sc.sc_flags = SC_SIGCONTEXT;

9 sc.sc_mask = smsg.sm_mask; /* Copy the sigcontext structure to the user's stack. */ dst_phys = umap_local(rp, D, (vir_bytes) scp, (vir_bytes) sizeof(struct sigcontext)); if (dst_phys == 0) return(efault); phys_copy(vir2phys(&sc), dst_phys, (phys_bytes) sizeof(struct sigcontext)); O que o código acima faz é copiar os registradores do processo, que estão armazenados na tabela do núcleo, na pilha do processo. Essa é, aliás, uma diferença importante entre o tratamento de interrupção e de sinais. No primeiro caso, o contexto do processo interrompido é guardado na tabela de processos. Isso elimina a possibilidade de interrupções aninhadas (o contexto salvo seria reescrito) de fato, o núcleo do Minix não é reentrante. Por outro lado, quando um sinal é recebido por um processo, seu contexto é salvo na sua própria pilha e isso permite sinais aninhados. A estrutura sigcontext contém os seguintes valores: struct sigcontext { int sc_flags; /* sigstack state to restore */ long sc_mask; /* signal mask to restore */ struct sigregs sc_regs; /* register set to restore */ }; A estrutura sigregs contém os registradores do processador, e algumas informações a mais. Para a arquitetura x86, ela é como segue: struct sigregs { short sr_es; short sr_ds; int sr_di; int sr_si; int sr_bp; int sr_st; /* stack top -- used in kernel */ int sr_bx; int sr_dx; int sr_cx; int sr_retreg; int sr_retadr; int sr_pc; int sr_cs; int sr_psw; int sr_sp; int sr_ss; }; /* return address to caller of save -- used * in kernel */

10 Criando a pilha Agora que o contexto do processo já foi salvo na sua própria pilha, o sistema operacional deve cuidar de criar uma pilha adequada para a rotina de tratamento do sinal. Isso é necessário pois a rotina de tratamento é escrita em C, e, portanto, o compilador espera que uma pilha adequada aos padrões da linguagem esteja formada quando a função for invocada. Mas o que significa uma pilha adequada? Basicamente, uma pilha que respeite as convenções de chamada da linguagem e do processador (no nosso caso, x86 e C, respectivamente). A convenção de chamada da arquitetura x86 é colocar o endereço de retorno na pilha do processo. Isso é feito automaticamente pelo processador, quando ele encontra uma instrução call e a instrução ret assume que o endereço de retorno também esta na pilha. A convenção da linguagem diz respeito à passagem dos parâmetros e à forma de retornar valores. No caso da linguagem C (chamada cdecl), a passagem dos parâmetros é feita na pilha, da direita para a esquerda; e o valor retornado por uma função está sempre no registrador EAX. Um curto exemplo: Figura 1 - Exemplo da convenção de chamada do C/x86 No Minix, todas as rotinas de tratamento de sinal precisam ser do mesmo tipo, sighandler_t. Esse tipo está definido no arquivo de cabeçalho signal.h: /* The sighandler_t type is not allowed unless _POSIX_SOURCE is defined. */ typedef void _PROTOTYPE( (* sighandler_t), (int) ); Isso quer dizer que todas as funções devem ser do tipo: void nomerotina(int qualsinal). Realmente, não faz sentido uma rotina de tratamento retornar algum valor (para quem ela retornaria?). O

11 Minix só precisa se preocupar, portanto, com o endereço de retorno e com a passagem do parâmetro inteiro, que diz qual foi o sinal interrompido. Para conseguir criar esse ambiente, o Minix usa uma outra estrutura, chamada sigframe: struct sigframe { /* stack frame created for signalled process */ void (*sf_retadr) (void); int sf_signo; int sf_code; struct sigcontext *sf_scp; int sf_fp; void (*sf_retadr2)(void); struct sigcontext *sf_scpcopy; }; Essa estrutura é colocada na pilha do usuário, logo acima de sigcontext. Ela é empilhada de tal forma que o primeiro campo, sf_retadr (um ponteiro para uma função) fique no topo da pilha. Esse ponteiro é na verdade o endereço de retorno da função de tratamento. Logo abaixo vem o campo signo, que contém o número do sinal que está sendo tratado. Como esse valor está logo acima do endereço de retorno, a pilha já está formada: o compilador vai conseguir acessar o parâmetro qualsinal, e o processador vai conseguir efetuar a instrução ret. O trecho de código a seguir, da função do_sigsend do kernel, inicia e copia a estrutura sigframe na pilha do processo: /* Initialize the sigframe structure. */ frp = (struct sigframe *) scp - 1; fr.sf_scpcopy = scp; fr.sf_retadr2= (void (*)()) rp->p_reg.pc; fr.sf_fp = rp->p_reg.fp; rp->p_reg.fp = (reg_t) &frp->sf_fp; fr.sf_scp = scp; fr.sf_code = 0; /* XXX - should be used for type of FP exception */ fr.sf_signo = smsg.sm_signo; fr.sf_retadr = (void (*)()) smsg.sm_sigreturn; /* Copy the sigframe structure to the user's stack. */ dst_phys = umap_local(rp, D, (vir_bytes) frp, (vir_bytes) sizeof(struct sigframe)); if (dst_phys == 0) return(efault); phys_copy(vir2phys(&fr), dst_phys, (phys_bytes) sizeof(struct sigframe)); Após essas duas estruturas terem sido copiadas pelo kernel, o estado da pilha é o seguinte:

12 Figura 2 - Pilha do processo interrompido por um sinal Figura 3 - Estrutura sigframe; sf_scp e sf_scpcopy apontam para sigcontext

13 Desviando a execução Agora que a pilha já está preparada e o contexto, salvo, é só desviar o fluxo para a rotina de tratamento. Isso é feito da seguinte forma: /* Reset user registers to execute the signal handler. */ rp->p_reg.sp = (reg_t) frp; rp->p_reg.pc = (reg_t) smsg.sm_sighandler; A primeira linha muda o registrador de pilha para apontar para a nova pilha, e a segunda modifica o PC (registrador EIP na arquitetura x86) para que ele execute a rotina de tratamento especificada pelo usuário. Desse modo, na próxima vez que o processo for escalonado, o kernel irá copiar esses registradores da tabela de processos (onde eles foram salvos), e a execução continuará na rotina de tratamento. Retornando da rotina Após a rotina de tratamento executar, ela efetuará a instrução ret, que faz o processador executar o código apontado pelo endereço de retorno, que estava na pilha. A rotina não pode voltar para o ponto em que o processo estava quando foi interrompido, pois o contexto ainda não foi restaurado (e a pilha está distorcida). Nós precisamos efetuar um trabalho de limpeza antes de voltarmos à execução normal do processo. Esse trabalho de limpeza é feito por uma função chamada do_sigreturn, do kernel. Para que o processo chegue até ela, o Minix primeiro coloca como endereço de retorno uma função em modo usuário chamada sigreturn: fr.sf_retadr = (void(*())smsg.sm_sigreturn;/* sm_sigreturn aponta sigreturn */ Ela é uma curta função escrita em assembly, de apenas duas linhas (note que ela está declarada com três underlines ao invés de 2; isso acontece porque a convenção do compilador é de que funções em C tenham um _ antes do nome quando referenciadas no código assembly; por esse mesmo motivo _sigreturn() aparece no código abaixo com dois underlines): sigreturn: add esp, 16 jmp sigreturn Quando sigreturn é executada, o processador já desempilhou o endereço de retorno, e o registrador de pilha, esp, agora aponta para o parâmetro da rotina (o número do sinal). A primeira coisa que sigreturn faz é somar 16 à pilha, o que faz esp apontar para sf_retadr2. Isso significa que boa parte da estrutura sigframe é completamente inútil não é usada em instante algum pelo Minix. Logo depois, sigreturn pula para a rotina _sigreturn(), escrita em C. Seu protótipo é: int _sigreturn(struct sigcontext* scp)

14 Note que _sigreturn recebe um parâmetro o ponteiro para a estrutura sigcontext, que contém os registradores. Para que o compilador consiga acessar esse endereço, ele deve estar duas posições acima na pilha (a posição superior é do endereço de retorno) e é exatamente essa a situação que temos: Figura 4 - A pilha quando _sigreturn é chamada A variável sf_retadr2 tem, portanto, o único efeito de enganar o compilador - _sigreturn() nunca retornará normalmente, através de uma instrução ret, porque ela irá restaurar os registradores salvos do processo e, portanto, o endereço de retorno que está na pilha é completamente indiferente. Com a adição dela, porém, o compilador consegue acessar a variável sf_scpcopy, que é passada como parâmetro para _sigreturn(). A função _sigreturn(), que ainda está em modo usuário, nada mais faz além da chamada de núcleo sys_sigreturn. Porém, ela contém uma particularidade interessante: como ela está executando numa pilha que será alterada muito em breve pelo núcleo, ela não pode ter variáveis locais (que sempre ficam na pilha: /* The message can't be on the stack, because the stack will vanish out * from under us. The send part of sendrec will succeed, but when * a message is sent to restart the current process, who knows what will * be in the place formerly occupied by the message? */ static message m; Fazendo a variável m ser static, o Minix garante que ela será alocada numa região diferente da memória (o bss).

15 A rotina que realmente restaura o contexto é a do_sigreturn, definida num arquivo de mesmo nome na pasta /kernel/system. Sua única particularidade é o seguinte trecho: /* Don't panic kernel if user gave bad selectors. */ sc.sc_cs = rp->p_reg.cs; sc.sc_ds = rp->p_reg.ds; sc.sc_es = rp->p_reg.es; Aqui, o Minix está se protegendo contra seletores de segmentos adulterados, o que poderia causar uma falha no kernel o que derrubaria o sistema. Isso é uma medida interessante de robustez os dados que vem do modo usuário nunca podem ser confiados cegamente. Por fim, a linha em que o Minix de fato restaura os registradores (isto é, restaura a sua cópia dos registradores que está na tabela de processos; eles só serão de fato restaurados quando o processo for escalonado para rodar): /* Restore the registers. */ memcpy(&rp->p_reg, &sc.sc_regs, sizeof(struct sigregs)); Verificando a pilha Para confirmar nosso entendimento de como o Minix fabrica a pilha para que a rotina de tratamento rode, o grupo elaborou um pequeno programa que tenta atravessá-la, andando um número fixo de bytes, para encontrar uma variável local na função que foi interrompida. O código segue abaixo: #define _POSIX_SOURCE 1 #include <stdlib.h> #include <stdio.h> #include <signal.h> void callback(int); void espera(void); int main(void){ struct sigaction sa; /* declara a estrutura de ação */ sa.sa_handler = callback; /* define a função que será chamada */ sigaction(sigint, &sa, NULL); /* registra */ espera(); /* espera indefinidamente */ } /* Esta é a função que será interrompida pelo SIGINT */ void espera(void){ int magico = 0x ; /* "magico" é a única variável local desta função, e, portanto, estará logo acima do sigcontext na pilha */ while(1){ ; /* espera eternamente pelo sinal */ }

16 } /* callback é a função de tratamento do sinal SIGINT */ void callback(int which){ int magico; /* o numero magico; deve ser 0x */ char* ptr = (char*) &which; /* começamos apontando para o parâmetro */ ptr += 96; /* subimos 96 bytes na pilha... */ magico = *((int*)ptr); /*... o que nos faz chegar até o número mágico */ printf("o numero magico e' %x\n", magico); exit(0); } Nós precisamos avançar 96 bytes na pilha pois as duas estruturas, sigcontext e sigframe, têm somadas 100 bytes. Contudo, nós começamos a percorrer a partir do parâmetro which, que já está acima do endereço de retorno que ocupa 4 bytes. De fato, o programa funcionou, imprimindo a seguinte mensagem: Figura 5 - Resultado do programa de teste

17 Alarmes e Temporizadores Usaremos os sinais de alarme para exemplificar o uso de sinais no Minix 3, visto que é um dos usos mais comuns de sinais em um sistema operacional. O que são? Alarme é um sinal utilizado para despertar um processo após um período de tempo pré-definido. Pode ser usado, por exemplo, para fechar um processo que está há muito tempo esperando por um evento que não acontece. No Minix 3 o sinal de alarme recebe o nome de SIGALRM, e seu tratamento default é matar o processo que recebe o sinal. Alarmes no Minix 3 x Alarmes em sistemas monolíticos Em um sistema monolítico convencional os alarmes são gerenciados inteiramente pelo núcleo, enquanto no Minix 3 (sistema microkernel) os alarmes de processos de sistema são gerenciados pelo núcleo e os alarmes de processos de usuário são gerenciados pelo Gerenciador de Processos. O objetivo dessa separação do tratamento de alarmes no Minix 3 é diminuir a carga de código do núcleo visando obter o microkernel, dessa maneira diminui-se a quantidade de erros em espaço de núcleo, que são considerados mais sérios do que erros em espaço de usuário. No entanto, não é possível gerenciar os alarmes de processos de usuário sem usar código em espaço de núcleo, porque primeiramente os alarmes precisam ser gerenciados também pela Tarefa de Relógio (presente no núcleo), que mantém uma lista encadeada de temporizadores. Toda vez que ocorre uma interrupção de relógio compara-se o tempo corrente com o tempo de expiração do temporizador no início da fila, e caso o tempo já tenha expirado é iniciado o processo de emissão do sinal de Alarme e notificações são feitas pela Tarefa de Relógio para o processo que solicitou o alarme. Em sistemas monolíticos a Tarefa de Relógio é responsável pelo controles dos temporizadores de todos os processos, ou seja, a única fila de temporizadores existente no núcleo que é utilizada pela Tarefa de Relógio. Já no Minix 3 existem duas filas de temporizadores, uma no núcleo que possui temporizadores de processos de sistema e temporizadores do Gerenciador de Processos (único processo rodando em modo usuário que possui temporizadores na fila do núcleo), e outra no próprio Gerenciador de Processos, que mantém temporizadores dos processos de usuário.

18 Funcionamento de Alarmes no Minix 3 Nessa seção mostraremos a seqüência de eventos de um sinal SIGALRM, que utiliza as duas filas de temporizadores citadas, em um processo que possui uma rotina de tratamento para esse sinal. Figura mostrando seqüência de eventos: Passos : 1: Um processo de usuário faz uma chamada de alarme para o Gerenciador de Processos (PM)

19 2: O Gerenciador de Processos configura um novo temporizador (função set_alarm) para o processo que chamou o alarme em sua fila e faz uma confirmação para o mesmo. O temporizador configurado possui um ponteiro para uma função cão de guarda chamada cause_sigalarm, essa função será chamada no momento em que o temporizador expirar, para iniciar o processo de envio de alarme. Nada acontece enquanto esse temporizador não chegar ao início da fila do Gerenciador de Processos (os outros temporizadores que estão na frente saem por expiração ou por cancelamento). 3: Quando o temporizador configurado chegar ao início da fila, o Gerenciador de Processos enviará uma mensagem à Tarefa de Sistema (System) no núcleo para que essa configure um novo temporizador para ele (Gerenciador de Processos) na fila do núcleo (usada pela Tarefa de Relógio). O temporizador configurado para o Gerenciador de Processos também possui um ponteiro para uma função cão de guarda chamada cause_alarm, essa função será chamada no momento em que o temporizador expirar, para iniciar o processo de envio de alarme. 4: A Tarefa de Sistema confirma para o Gerenciador de Processos que um temporizdor foi configurado para ele. Novamente, nada acontece enquanto esse temporizador não chegar ao início da fila do núcleo. 5: Quando o temporizador configurado chegar ao início da fila do núcleo, a rotina de tratamento de relógio passará a comparar o tempo de expiração do temporizador com o tempo corrente a cada interrupção de relógio, quando for verificado que o tempo expirou a rotina de tratamento de relógio enviará uma mensagem para a Tarefa de Relógio (Clock). 6: Nesse momento a função cão de guarda cause_alarm (criada para o temporizador do Gerenciador de Processos) é acionada e notifica o Gerenciador de Processos que seu temporizador expirou (lembrando que em sistema monolíticos essa mensagem seria enviada diretamente para o processo de usuário que solicitou o alarme). 7: No Gerenciador de Processos a função cão de guarda cause_sigalarm (criada para o processo de usuário que solicitou o alarme) é acionada. Cause_sigalarm resulta na chamada de sig_proc, que verifica na estrutura sigaction do processo que irá receber o alarme se ele possui uma rotina de tratamento ou se será executado o tratamento default (matar o processo). No caso do exemplo o processo possui uma rotina de tratamento para SIGALRM, então o Gerenciador de Processos envia uma mensagem à Tarefa de Sistema.

20 8: Ela então realizará toda a manipulação de pilha (descrita nas seções anteriores) para o envio do sinal de alarme para o processo usuário. Logo em seguida a Tarefa de Sistema envia uma confirmação para o Gerenciador de Processos. 9: A Rotina de Tratamento (Handler) é executada, após isso sigreturn é chamado para iniciar a recuperação do contexto que o processo possuía antes da chegada do alarme (para explicação mais aprofundada ver seções anteriores). 10: Chamada de sigreturn chega ao Gerenciador de Processos e esse informa a Tarefa de Sistema. 11: Tarefa de Sistema faz a limpeza da pilha (recuperação de contexto) e confirma enviando uma mensagem ao Gerenciador de Processos. Vantagens e Desvantagens Essa seção citará as principais vantagens de desvantagens de parte do gerenciamento de alarmes pertencer ao Gerenciador de Processos e não ao núcleo. Desvantagem: Como pôde ser obervado no diagrama que mostra a seqüência de eventos do processo de envio de SIGALRM existe muita transição entre a região de usuário e a região de núcleo do Sistema Operacional, principalmente se levarmos em conta que para trocar um processo em execução é necessária uma passagem pelo núcleo (por exemplo quando deixamos de executar o processo de usuário que requisita o alarme para começar a executar o Gerenciador de Processos). E essa transição constante pode ser um problema para o Sistema Operacional. Vantagens: Apesar de não parecer existir uma economia muito grande de execução por parte do núcleo no Minix 3 em relação aos sistemas monolíticos, existem algumas situações onde essa economia fica evidente: 1: Caso onde mais de um temporizador expira no mesmo tique de relógio. É improvável 2 processos requisitem alarmes ao mesmo tempo, no entanto a situação 1 ocorre no caso de interrupções serem desabilitadas por um determinado tempo (por exemplo, na chamada para a BIOS), porque os tiques de relógio desse período ficarão acumulados, e quando as interrupções forem novamente habilitadas mais de um temporizador pode expirar ao mesmo tempo. O núcleo então terá menos trabalho, pois só precisará notificar uma vez o Gerenciador de Processos, e esse que terá todo o

21 trabalho de percorrer sua lista, limpando-a e gerando notificações para os processos de usuário (em um sistema monolítico esse seria trabalho do núcleo). 2: Caso onde o temporizador é cancelado antes de chegar ao início da fila do Gerenciado de Processos. Um processo que solicitou alarme pode cancelar o mesmo antes desse expirar. Isso ocorre, por exemplo, no caso de um processo que precisa esperar um certo evento ocorrer, mas que não quer esperar esse evento para sempre e por isso cria o alarme. No entanto, no caso desse evento ocorrer antes do tempo de expiração o alarme não é mais necessário, e então é cancelado. Caso o temporizador não tenha chegado ao início da fila do Gerenciador de Processos o núcleo nem chegou a ser notificado da existência desse alarme (ele só armazena dados do processo que está no início da fila do Gerenciador de Processos), então para fazer o cancelamento basta excluir o temporizador da fila do Gerenciador de Processos, sem nenhum trabalho para o núcleo. Em sistemas monolíticos como o gerenciamento de alarmes é todo do núcleo, este teria o trabalho de fazer o cancelamento.

Programação de sistema UNIX

Programação de sistema UNIX Programação de sistema UNIX Sinais Sinais 1 Definição e tipos Sinais Espécie de interrupções enviadas aos processos, na ocorrência de certos eventos Cada processo pode definir uma função para responder

Leia mais

Comunicação entre Processos 9/21/17 1

Comunicação entre Processos 9/21/17 1 Comunicação entre Processos 9/21/17 1 Introdução l Um sinal é uma notificação assíncrona transmitida entre processos através do Sistema Operacional Fluxo normal do programa l l Quando um processo termina,

Leia mais

5. Comunicação entre processos - Sinais

5. Comunicação entre processos - Sinais 5. Comunicação entre processos - Sinais 5.1 Definição dos sinais Os sinais são uma espécie de interrupção ao processo corrente. Podem ter diversas origens e são uma forma de tratar certos acontecimentos

Leia mais

Eventos. Rotinas Assíncronas

Eventos. Rotinas Assíncronas Eventos Rotinas Assíncronas para Tratamento de acontecimentos assíncronos e excepções Rotinas Assíncronas Certos acontecimentos devem ser tratados pelas aplicações, embora não seja possível prever a sua

Leia mais

Nível da Arquitetura do Conjunto das Instruções

Nível da Arquitetura do Conjunto das Instruções Fluxo Seqüencial de Controle e Desvios (1) Nível da Arquitetura do Conjunto das Instruções (Aula 13) Fluxo de Controle Roberta Lima Gomes - LPRM/DI/UFES Sistemas de Programação I Eng. Elétrica 2007/2 Fluxo

Leia mais

Interacção por sinais no Unix. José C. Cunha, DI-FCT-UNL

Interacção por sinais no Unix. José C. Cunha, DI-FCT-UNL Interacção por sinais no Unix José C. Cunha, DI-FCT-UNL Notificações assíncronas (sinais) Informar de situações imprevisíveis: podem ou não ocorrer durante a execução se ocorrerem, não se sabe quando Exemplos:

Leia mais

Tratamento de Sinais

Tratamento de Sinais Tratamento de Sinais Luiz Affonso Guedes 1 Ivanovitch Silva 1 affonso@dca.ufrn.br ivan@dca.ufrn.br 1 Universidade Federal do Rio Grande do Norte 25 de setembro de 2009 Sinais DCA0109 - Prática de programação

Leia mais

MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018

MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018 MICROPROCESSADORES II (EMA911915) SUB-ROTINAS E PILHA 2 O SEMESTRE / 2018 MATERIAL DIDÁTICO Harris & Harris 6.4.6 Procedure Calls Patterson & Hennessy (4a edição) 2.8 Supporting Procedures in Computer

Leia mais

Programação de Sistemas

Programação de Sistemas Programação de Sistemas Sinais Programação de Sistemas Sinais : 1/30 Modelo de eventos (1) Os processos de nível utilizador interagem com o núcleo através de chamadas de sistema. Nos sistemas computacionais,

Leia mais

IP I C P n o n U N U IX I Sinais

IP I C P n o n U N U IX I Sinais IPC no UNIX Sinais Introdução Sinais (1) Uma forma de comunicar a ocorrência de eventos para os processos são os sinais. Os sinais são gerados quando o evento ocorre pela primeira vez e são considerados

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 7: Implementação de Processos e Threads Diego Passos Revisão Programação Concorrente e Multiprogramação SOs modernos permitem diversos processos em memória. Cada

Leia mais

Compiladores Ambiente de Execução

Compiladores Ambiente de Execução Compiladores Ambiente de Execução Fabio Mascarenhas 2015.1 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

Arquitetura de Sistemas Operativos

Arquitetura de Sistemas Operativos Arquitetura de Sistemas Operativos Sistemas Operativos 2011/2012 1 Um processo é uma instância em execução de um programa. No sistema operativo Unix a única forma de se criar um novo processo (processo-filho)

Leia mais

Processos. Conceitos Básicos

Processos. Conceitos Básicos Processos Conceitos Básicos Processo Abstração usada pelo S.O. para designar a execução de um programa. (1) É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos

Leia mais

Tratamento de sinais em sistemas UNIX

Tratamento de sinais em sistemas UNIX 1997-2017 Volnys Bernal 1 Tratamento de sinais em sistemas UNIX Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Laboratório de Sistemas Integráveis http://www.lsi.usp.br/ 1997-2017

Leia mais

1 System Calls no Linux

1 System Calls no Linux Sistemas Operacionais Laboratorio - System Calls Adaptação do Laboratório 1 - Prof. Eduardo Zambon 1 System Calls no Linux Vamos mencionar aqui alguns pontos já discutidos em aula e introduzir novos conceitos

Leia mais

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos

Processos. Processo (1) Processo (2) Processo (3) Conceitos Básicos Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos

Leia mais

Processos. Conceitos Básicos

Processos. Conceitos Básicos Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos

Leia mais

Sistemas Operacionais Processos. Carlos Ferraz Jorge Cavalcanti Fonsêca

Sistemas Operacionais Processos. Carlos Ferraz Jorge Cavalcanti Fonsêca Sistemas Operacionais Processos Carlos Ferraz (cagf@cin.ufpe.br) Jorge Cavalcanti Fonsêca (jcbf@cin.ufpe.br) Copyright Carlos Ferraz Processo Conceito: Um programa em execução 1. Ao digitar hello, os caracteres

Leia mais

SOP - TADS Processos. Revisão Ultima aula

SOP - TADS Processos. Revisão Ultima aula SOP - TADS Processos Prof. Ricardo José Pfitscher dcc2rjp@joinville.udesc.br Material cedido por: Prof. Rafael Rodrigues Obelheiro Prof. Maurício Aronne Pillon Revisão Ultima aula Revisão de hardware Processador

Leia mais

Linguagem de Montagem Assembly

Linguagem de Montagem Assembly Linguagem de Montagem Assembly Especificações O programa em Assembly Fica sobre a camada do Sistema Operacional Efetua chamadas ao Sistema Operacional O montador Chama-se Assembler Traduz a linguagem de

Leia mais

Algoritmos e Estruturas de dados

Algoritmos e Estruturas de dados Algoritmos e Estruturas de dados Listas Encadeadas Prof. Dr. Fábio Rodrigues de la Rocha (Listas Encadeadas) 1 / 21 Definição: Anteriormente estudamos listas encadeadas que foram implementadas como vetores

Leia mais

Processos. Conceitos Básicos

Processos. Conceitos Básicos Processos Conceitos Básicos Processo (1) Abstração usada pelo S.O. para designar a execução de um programa. É caracterizado por uma thread de execução, um estado corrente e um conjunto associado de recursos

Leia mais

Sistemas Operacionais. Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@fgp.com.br. www.fgp.com.br

Sistemas Operacionais. Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@fgp.com.br. www.fgp.com.br Sistemas Operacionais Rodrigo Rubira Branco rodrigo@kernelhacking.com rodrigo@fgp.com.br Tipos de Sistemas Operacionais De Sistemas Embarcados (PalmOS,WinCE,WinXPEmbbeded,Linux) Hardware simples, especifico

Leia mais

Tipos Abstratos de Dados. Estrutura de Dados

Tipos Abstratos de Dados. Estrutura de Dados Tipos Abstratos de Dados Tipo Abstrato de Dados ou TAD Idéia principal: desvincular o tipo de dado (valores e operações) de sua implementação: O que o tipo faz e não como ele faz! Vantagens da desvinculação:

Leia mais

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C

Estruturas de Dados. Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Estruturas de Dados Revisão de Ponteiros Prof. Ricardo J. G. B. Campello Sumário Introdução Definição de Ponteiros Declaração de Ponteiros em C Manipulação de Ponteiros em C Operações Ponteiros e Arranjos

Leia mais

SEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES

SEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES SEL 0415 Aula 11 Microcontrolador 8051 Parte 3 SEL 0415 INTROD. À ORGANIZAÇÃO DE COMPUTADORES Prof. Dr. Marcelo A. C. Vieira SEL 415 INTERRUPÇÃO Estrutura de Interrupção do 8051 n 5 Fontes [ 2 Externas

Leia mais

Registradores. Registradores e Instruções Especiais. Link Register. Stack Pointer. Registradores Especiais. Contador de Programa 29/03/2018

Registradores. Registradores e Instruções Especiais. Link Register. Stack Pointer. Registradores Especiais. Contador de Programa 29/03/2018 Registradores Registradores e Instruções Especiais Prof. Hugo Vieira Neto Nível de acesso privilegiado MSP = main SP Kernel do S.O. Exceções PSP = process SP Aplicações (threads) PRIMASK Desabilita interrupções

Leia mais

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara

FUNÇÕES EM C Material adaptado da profa Silvana Maria Affonso de Lara Universidade do Estado de Minas Gerais - UEMG Curso de Engenharia da Computação FUNÇÕES EM C 1 Material adaptado da profa Silvana Maria Affonso de Lara ROTEIRO DA AULA Definição de Função Argumentos, retornos

Leia mais

Chamadas de Sistema (SYSCALL)

Chamadas de Sistema (SYSCALL) Chamadas de Sistema (SYSCALL) Eduardo Ferreira dos Santos Engenharia de Computação Centro Universitário de Brasília UniCEUB Abril, 2016 1 / 26 Sumário 1 Estrutura dos Sistemas Operacionais 2 System Calls

Leia mais

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS

AULA 05: LINGUAGEM DE MONTAGEM: SUPORTE A PROCEDIMENTOS ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES I AULA 05: Prof. Max Santana Rolemberg Farias max.santana@univasf.edu.br Colegiado de Engenharia de Computação O QUE SÃO PROCEDIMENTOS? Procedimentos são um conjunto

Leia mais

Registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores.

Registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores. Os processadores possuem espaços específicos onde são guardados valores, os chamados registradores. Esses espaços são parecidos com variáveis de uma linguagem de programação de alto nível, onde se guarda

Leia mais

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011

Estruturas de Dados Aulas 3 e 4: Uso da. 14/03/2011 e 16/03/2011 Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores 14/03/2011 e 16/03/2011 Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto

Leia mais

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012

Threads. Agenda. Threads. Processo. Processo. Processo. Processo. (c) Volnys B. Bernal Versão de 22/3/2012 1 2005-2009 Volnys Bernal 1 2005-2009 Volnys Bernal 2 Agenda Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Interface de threads Interfaces de threads de usuário x threads de núcleo

Leia mais

Sistemas de Informação. Sistemas Operacionais

Sistemas de Informação. Sistemas Operacionais Sistemas de Informação Sistemas Operacionais PROCESSOS E THREADS PARTE I SUMÁRIO 2. PROCESSO: 2.1 Introdução; 2.2 Estrutura do Processo; 2.3 Estados do Processo; 2.4 Mudanças de Estado do Processo; 2.5

Leia mais

Sistemas Distribuídos Aula 2

Sistemas Distribuídos Aula 2 Sistemas Distribuídos Aula 2 Aula passada Logísitica Regras do jogo Definição e características Exemplos Aula de hoje Processos IPC Características Ex. sinais, pipes, sockets Objetivos Processos O que

Leia mais

MC514 Sistemas Operacionais: Teoria e Prática 1s2010. Processos e sinais

MC514 Sistemas Operacionais: Teoria e Prática 1s2010. Processos e sinais MC514 Sistemas Operacionais: Teoria e Prática 1s2010 Processos e sinais Processos e threads Process 1 Process 1 Process 1 Process User space Thread Thread Kernel space Kernel (a) Kernel (b) fork() Cria

Leia mais

SO: Introdução e Estrutura. Sistemas Operacionais Flavio Figueiredo (http://flaviovdf.github.io)

SO: Introdução e Estrutura. Sistemas Operacionais Flavio Figueiredo (http://flaviovdf.github.io) SO: Introdução e Estrutura Sistemas Operacionais 2017-1 Flavio Figueiredo (http://flaviovdf.github.io) 1 O que é um Sistema Operacional? 2 Simplificando Uma interface entre o usuário e o hardware 3 Detalhando

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.2. Estrutura de Programas e Representação

Leia mais

Programação Estruturada Prof. Rodrigo Hausen Organização e Gerenciamento de Memória

Programação Estruturada Prof. Rodrigo Hausen  Organização e Gerenciamento de Memória Programação Estruturada Prof. Rodrigo Hausen http://progest.compscinet.org Organização e Gerenciamento de Memória 1 AULA PASSADA - vetores ou arrays Declaração de um vetor (array) em C: tipo nome[tamanho];

Leia mais

Fundamentos de Sistemas Operacionais

Fundamentos de Sistemas Operacionais Fundamentos de Sistemas Operacionais Aula 5 Gerenciamento de Processos Prof. Belarmino Execução de Processos Já vimos que o processador executa os processos entregando uma fatia de tempo (time slice) para

Leia mais

Sistemas Operacionais. Processos e Threads

Sistemas Operacionais. Processos e Threads Sistemas Operacionais Processos e Threads Sumário 1. Introdução 2. Estrutura do Processo 1. Contexto de Hardware 2. Contexto de Software 3. Espaço de Endereçamento 3. Estados 1. Mudanças de Estado 2. Criação

Leia mais

Compiladores Geração de Código

Compiladores Geração de Código Compiladores Geração de Código Fabio Mascarenhas - 2013.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

LABORATÓRIO SISTEMAS DE TEMPO REAL

LABORATÓRIO SISTEMAS DE TEMPO REAL FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: ENGENHARIA DE COMPUTAÇÃO DISCIPLINA: SISTEMAS DE TEMPO REAL E TOLERANTES À FALHA CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2016/01 PROFESSOR: EDUARDO

Leia mais

Conjunto de Instruções MIPS Parte III

Conjunto de Instruções MIPS Parte III Faculdade de Ciências Aplicadas e Sociais de Petrolina FACAPE Conjunto de Parte III Transferência de Dados Lógicas Controle Prof. Sérgio Adaptado dos slides de Sistemas Processadores do Prof. Frank Torres

Leia mais

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores

Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores Estruturas de Dados Aulas 3 e 4: Uso da memória e Vetores Uso da memória Existem 3 maneiras de reservar o espaço da memória: Variáveis globais (estáticas) Espaço existe enquanto programa estiver executando

Leia mais

SSC510 Arquitetura de Computadores 1ª AULA

SSC510 Arquitetura de Computadores 1ª AULA SSC510 Arquitetura de Computadores 1ª AULA REVISÃO DE ORGANIZAÇÃO DE COMPUTADORES Arquitetura X Organização Arquitetura - Atributos de um Sistema Computacional como visto pelo programador, isto é a estrutura

Leia mais

Processos e Threads. Ciclo 2 AT3. Prof. Hermes Senger

Processos e Threads. Ciclo 2 AT3. Prof. Hermes Senger Processos e Threads Ciclo 2 AT3 Prof. Hermes Senger Nota O presente material foi elaborado com base no material didático do livro Sistemas Operacionais, 3ª edição, de H.M.Deitel, P.J. Deitel, D.R. Choffnes,

Leia mais

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período

Redes de Computadores. INF201 - Fundamentos de Sistemas Operacionais - 2º Período Redes de Computadores INF201 - Fundamentos de Sistemas Operacionais - 2º Período PARTE II: PROCESSOS E THREADS SUMÁRIO 5. PROCESSO: 5.1 Introdução; 5.2 Estrutura do Processo; 5.3 Estados do Processo; 5.4

Leia mais

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software Processo Um programa em execução Gerência de Processos Contexto de Processo Conjunto de Informações para gerenciamento de processo CPU: Registradores Memória: Posições em uso E/S: Estado das requisições

Leia mais

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software

Processo. Gerência de Processos. Um programa em execução. Centro de Informática/UFPE :: Infraestrutura de Software Processo Um programa em execução Gerência de Processos Contexto de Processo Conjunto de Informações para gerenciamento de processo CPU: Registradores Memória: Posições em uso E/S: Estado das requisições

Leia mais

Sistemas Operacionais. Estrutura do Sistema Operacional: Modos de Acesso

Sistemas Operacionais. Estrutura do Sistema Operacional: Modos de Acesso Sistemas Operacionais Estrutura do Sistema Operacional: Modos de Acesso Modos de Acesso Existem certas instruções que não podem ser colocadas diretamente à disposição das aplicações, pois a sua utilização

Leia mais

Notas da Aula 7 - Fundamentos de Sistemas Operacionais

Notas da Aula 7 - Fundamentos de Sistemas Operacionais Notas da Aula 7 - Fundamentos de Sistemas Operacionais 1. Organização de um Processo em Memória Quando um processo é criado, o SO aloca uma porção da memória física da máquina para a criação do espaço

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais 04 Processos Introdução Um sistema de computação quase sempre tem mais atividades a executar que o número de processadores disponíveis. Diferentes tarefas têm necessidades distintas

Leia mais

LABORATÓRIO SISTEMAS OPERACIONAIS

LABORATÓRIO SISTEMAS OPERACIONAIS FACULDADE: CENTRO UNIVERSITÁRIO DE BRASÍLIA UniCEUB CURSO: CIÊNCIA DA COMPUTAÇÃO DISCIPLINA: SISTEMAS OPERACIONAIS CARGA HORÁRIA: 75 H. A. ANO/SEMESTRE: 2016/02 PROFESSOR: EDUARDO FERREIRA DOS SANTOS HORÁRIOS:

Leia mais

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional

Sistemas Operacionais. Prof. Pedro Luís Antonelli Anhanguera Educacional Sistemas Operacionais Prof. Pedro Luís Antonelli Anhanguera Educacional Processador INTRODUÇÃO Projetado apenas para executar instruções Não é capaz de distinguir qual programa está em execução Processo

Leia mais

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio

SSC304 Introdução à Programação Para Engenharias. Ponteiros. GE4 Bio Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias s GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.

Leia mais

Processos. processos UNIX e Linux threads em Linux. Taisy Weber

Processos. processos UNIX e Linux threads em Linux. Taisy Weber Processos processos UNIX e Linux threads em Linux Taisy Weber Ambiente UNIX Processos: revisão de conceitos básicos processos no SO UNIX programação criação (exec, fork, etc), sincronização (wait), eliminação,

Leia mais

Linguagem C Princípios Básicos (parte 1)

Linguagem C Princípios Básicos (parte 1) Linguagem C Princípios Básicos (parte 1) Objetivos O principal objetivo deste artigo é explicar alguns conceitos fundamentais de programação em C. No final será implementado um programa envolvendo todos

Leia mais

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória

ALGORITMOS E ESRUTRA DE DADOS I. Ponteiros Passagem por Valor e Referência Alocação de Memória ALGORITMOS E ESRUTRA DE DADOS I Ponteiros Passagem por Valor e Referência Alocação de Memória 2 Agenda Ponteiros Conceitos gerais O que é Ponteiro? Declaração de Ponteiros Operadores para Ponteiros Exemplos

Leia mais

Algoritmos e Programação

Algoritmos e Programação Algoritmos e Programação Aula 3 Introdução a Linguagem C Profa. Marina Gomes marinagomes@unipampa.edu.br 1 Aula de Hoje - Criar programas simples em C utilizando a estrutura básica; - Declarar variáveis;

Leia mais

Compiladores Ambiente de Execução

Compiladores Ambiente de Execução Compiladores Ambiente de Execução Fabio Mascarenhas 2015.2 http://www.dcc.ufrj.br/~fabiom/comp O Back-end Até agora vimos as fases do front-end do compilador: Análise Léxica Análise Sintática Análise Semântica

Leia mais

PCS-2042 Sistemas Operacionais. Projeto 3: Drivers

PCS-2042 Sistemas Operacionais. Projeto 3: Drivers PCS-2042 Sistemas Operacionais Projeto 3: Drivers Mark Hodgkin Pedro d Aquino Rafael da Silva 13/07/2008 CONTEÚDO Objetivo... 3 Drivers no Minix... 4 Criando um Driver... 4 Proposta do Projeto... 5 Bibliografia...

Leia mais

NOTAS DE AULA 09 Estruturas e Ponteiros

NOTAS DE AULA 09 Estruturas e Ponteiros Estrutura de Dados 1 NOTAS DE AULA 09 Estruturas e Ponteiros 1. Estruturas de Dados A linguagem C/C++ fornece uma porção de tipos de variáveis: int, float, long, double, boolean, char... dentre outros.

Leia mais

Processos. Volnys Borges Bernal. Edson Toshimi Midorikawa

Processos. Volnys Borges Bernal.  Edson Toshimi Midorikawa Volnys & Midorikawa (c) 1 Processos Volnys Borges Bernal volnys@lsi.usp.br http://www.lsi.usp.br/~volnys Edson Toshimi Midorikawa emidorik@lsi.usp.br http://www.lsi.usp.br/~emidorik Laboratório de Sistemas

Leia mais

16. Compilação no Linux

16. Compilação no Linux 16. Compilação no Linux 16.1 Compilador X Interpretador Um código fonte pode ser compilado ou interpretado. Compiladores e interpretadores tratam o código de maneira diferente. Interpretador: Lê o código

Leia mais

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas

Tipos Básicos. Operadores de Incremento e Decremento. Operador Sizeof. Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas 03/03/2010 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais

Curso de Programação C em Ambientes Linux Aula 05

Curso de Programação C em Ambientes Linux Aula 05 Curso de Programação C em Ambientes Linux Aula 05 Centro de Engenharias da Mobilidade - UFSC Professores Gian Berkenbrock e Giovani Gracioli http://www.lisha.ufsc.br/c+language+course+resources Conteúdo

Leia mais

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend

Processos O conceito de processos é fundamental para a implementação de um sistema multiprogramável. De uma maneira geral, um processo pode ser entend Concorrência Nos sistemas Monoprogramáveis somente um programa pode estar em execução por vez, permanecendo o processador dedicado a esta única tarefa. Os recursos como memória, processador e dispositivos

Leia mais

Organização de Computadores 1

Organização de Computadores 1 Organização de Computadores 1 3.1 CPU: Unidade de Processamento Central Prof. Luiz Gustavo A. Martins Arquitetura de von Newmann Unidade de Processamento Central (CPU): Memória Principal Unidade de Processamento

Leia mais

Processos e Sinais - Linux

Processos e Sinais - Linux Processos e Sinais - Linux MCTA026-13 - Sistemas Operacionais Emilio Francesquini e Fernando Teubl Ferreira e.francesquini@ufabc.edu.br / fernando.teubl@ufabc.edu.br 2019.Q1 Centro de Matemática, Computação

Leia mais

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char?

Estruturas de Dados Aula 2: Estruturas Estáticas. Tipos Básicos. Quantos valores distintos podemos representar com o tipo char? Estruturas de Dados Aula 2: Estruturas Estáticas Tipos Básicos Quantos valores distintos podemos representar com o tipo char? 1 Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa o

Leia mais

1 Exercícios com ponteiros

1 Exercícios com ponteiros Computação para Informática Funções e Ponteiros1 EXERCÍCIOS COM PONTEIROS Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Aula Prática - Funções e ponteiros O objetivo desta aula prática

Leia mais

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011

Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Estruturas de Dados Aula 2: Estruturas Estáticas 02/03/2011 Tipos Básicos Quantos valores distintos podemos representar com o tipo char? Operadores de Incremento e Decremento ++ e -- Incrementa ou decrementa

Leia mais

Processos. Prof. Gustavo Leitão

Processos. Prof. Gustavo Leitão Processos Prof. Gustavo Leitão Campus Natal Central Disciplina Programação para Ambiente de Redes Baseada na Aula do Prof. Ricardo Valentim 5/3/2010 Objetivo da Aula 5/3/2010 PLANO DE AULA Processos Processos:

Leia mais

Alocação Dinâmica de Memória

Alocação Dinâmica de Memória Alocação Dinâmica de Memória Elerson R. S. Santos elerson@dcc.ufmg.br Algoritmos e Estruturas de DCC UFMG Variáveis Uma variável representa um nome simbólico para uma posição de memória. Cada posição de

Leia mais

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória

Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP. Alocação Dinâmica de Memória Bruno Hott Algoritmos e Estruturas de Dados I DECSI UFOP Alocação Dinâmica de Memória Alocação Estática x Dinâmica C: dois tipos de alocação de memória: Estática e Dinâmica Na alocação estática, o espaço

Leia mais

3. Linguagem de Programação C

3. Linguagem de Programação C Introdução à Computação I IBM1006 3. Linguagem de Programação C Prof. Renato Tinós Departamento de Computação e Matemática (FFCLRP/USP) 1 Principais Tópicos 3.7. Funções 3.7.1. Introdução 3.7.2. Uso de

Leia mais

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios. Aula 06.

Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios. Aula 06. Sistemas Operacionais Prof. Esp. André Luís Belini Bacharel em Sistemas de Informações MBA em Gestão Estratégica de Negócios Aula 06 Processos 2 1 Processos A gerência de um ambiente multiprogramável é

Leia mais

EEL770 Sistemas Operacionais

EEL770 Sistemas Operacionais EEL770 Sistemas Operacionais Parte 2: Concorrência Conceitos básicos e ciclo de vida de threads Prof. Rodrigo de Souza Couto Concorrência Múltiplas atividades que podem ocorrer ao mesmo tempo Exemplos

Leia mais

Processos. Pedro Cruz. EEL770 Sistemas Operacionais

Processos. Pedro Cruz. EEL770 Sistemas Operacionais Processos Pedro Cruz EEL770 Sistemas Operacionais Datas importantes 02 de Abril Proposta de trabalho 09 de Abril Confirmação de proposta 07 de Maio Primeira apresentação do trabalho 09 de Maio Entrega

Leia mais

Sinais: eventos assíncronos

Sinais: eventos assíncronos Sinais: eventos assíncronos Um sinal é um evento assíncrono que pode ser enviado a um processo, avisando-o de que algo de inesperado ou anormal aconteceu. Evento Assíncrono significa que pode ocorrer a

Leia mais

Exceções no Fluxo de Execução: Interrupções e Traps

Exceções no Fluxo de Execução: Interrupções e Traps Exceções no Fluxo de Execução: Interrupções e Traps 1 Fluxo de Controle Fluxo de controle de um programa: a 0 a 1 a 2 a n sequência de endereços I 0 I 1 I 2 I n sequência de instruções O fluxo mais simples

Leia mais

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal

Exercício. Alocação Dinâmica. Alocação dinâmica de memória. Alocação de memória. Alocação da Memória Principal. Alocação da Memória Principal Exercício Crie uma função que recebe o número de dias até um determinado evento e calcula e retorna o equivalente em meses, semanas e dias, sem usar vetor ou o conceito de vetor. Considerar que todos os

Leia mais

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios.

5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios. 3636363636363636363636363636363636363636363636363636 5 - COMANDOS DE CONTROLE DE PROGRAMA Em C existem os comandos de decisões, os comandos de iteração (ou de laços) e os comandos de desvios. 5.1 - Comandos

Leia mais

Pilha de execução Volnys Borges Bernal Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP

Pilha de execução Volnys Borges Bernal Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP 2005-2015 Volnys Bernal 1 Pilha de execução Volnys Borges Bernal volnys@lsi.usp.br Departamento de Sistemas Eletrônicos (PSI) Escola Politécnica da USP 2005-2015 Volnys Bernal 2 Agenda Os desafios da execução

Leia mais

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo

Nível da Arquitetura do Conjunto de Instruções. Ronaldo de Freitas Zampolo Nível da Arquitetura do Conjunto de Instruções Ronaldo de Freitas Zampolo Tópicos Introdução Visão geral do nível ISA Tipos de dados Formatos de instruções Endereçamento Tipos de instruções Fluxo de controle

Leia mais

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 1 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS

DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 1 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO BACHARELADO EM INFORMÁTICA SISTEMAS OPERACIONAIS I 1 0 SEM/05 Teste 1 Unidade I DURAÇÃO: 50 MINUTOS Aluno: GABARITO Escore: 1 a Questão (30) Assinale a(s) resposta(s)

Leia mais

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02

Programação 1. Atribuição, operadores aritméticos, entrada de dados. Técnico em Eletrônica Semestre 5 02 Programação 1 Atribuição, operadores aritméticos, entrada de dados Técnico em Eletrônica Semestre 5 02 Armazenando na memória tipo de variável #include #include main() { int ano; Declaração

Leia mais

1 Exercícios com ponteiros

1 Exercícios com ponteiros Computação para Informática - Prof. Adriano Joaquim de Oliveira Cruz Oitava Aula Prática - 29 de outubro de 2010 O objetivo desta aula prática é exercitar ponteiros e funções. 1 Exercícios com ponteiros

Leia mais

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio

SSC304 Introdução à Programação Para Engenharias. Alocação Dinâmica. GE4 Bio Universidade de São Paulo Instituto de Ciências Matemáticas e de Computação Departamento de Sistemas de Computação Introdução à Para Engenharias GE4 Bio GE4Bio Grupo de Estudos em Sinais Biológicos Prof.Dr.

Leia mais

A Linguagem C. A forma de um programa em C

A Linguagem C. A forma de um programa em C A Linguagem C Criada em 1972 por D. M. Ritchie e K. Thompson. Tornou-se uma das mais importantes e populares, principalmente pela portabilidade e flexibilidade. Foi projetada para o desenvolvimento de

Leia mais

Sistemas Operacionais

Sistemas Operacionais Sistemas Operacionais Programação Concorrente Introdução Edson Moreno edson.moreno@pucrs.br http://www.inf.pucrs.br/~emoreno Introdução Programa Seqüencial Representado por apenas um processo Existe apenas

Leia mais

Nível do Conjunto de Instruções Prof. Edson Pedro Ferlin

Nível do Conjunto de Instruções Prof. Edson Pedro Ferlin 1 Definições Nível ISA (Instruction Set Architecture). Está posicionado entre o nível da microarquitetura e o nível do sistema operacional. É a interface entre o software e o hardware. Nesse nível está

Leia mais

Sistemas Operacionais. Processos IC - UFF

Sistemas Operacionais. Processos IC - UFF Sistemas Operacionais Processos O conceito de processos No capítulo 1, fizemos as seguintes afirmativas quanto aos processos: Mais geral que programa Consiste em um código executável e seus dados associados,

Leia mais

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

LINGUAGEM C: FUNÇÕES FUNÇÃO 08/01/2018. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. LINGUAGEM C: FUNÇÕES Prof. André Backes FUNÇÃO Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa. printf(): função que escreve na tela scanf(): função que lê o teclado

Leia mais

Sistemas Operacionais. Sistema de entrada e Saída

Sistemas Operacionais. Sistema de entrada e Saída Sistemas Operacionais Sistema de entrada e Saída Sistema de Entrada e Saída I/O É uma das principais tarefas de um sistema computacional Como máquina abstrata o S.O. deve oferecer uma visão padronizada

Leia mais

Introdução. Ponteiros

Introdução. Ponteiros Introdução O correto entendimento e uso de ponteiros é crítico para um programador C. Há três razões para isso: 1. Ponteiros fornecem os meios pelos quais as funções podem modificar seus argumentos; 2.

Leia mais

Alocação Dinâmica em C

Alocação Dinâmica em C Universidade de São Paulo São Carlos Instituto de Ciências Matemáticas e de Computação Alocação Dinâmica em C Profa Rosana Braga Adaptado de material preparado pela profa Silvana Maria Affonso de Lara

Leia mais