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 2 / 26 Estrutura dos Sistemas Operacionais 1 Estrutura dos Sistemas Operacionais 2 System Calls 3 / 26 Estrutura dos Sistemas Operacionais História Quase todos os sistemas operacionais vêm da mesma raiz. Evolução dos Sistemas Operacionais 4 / 26 Estrutura dos Sistemas Operacionais Sistemas Monolíticos São os mais comuns; O SO inteiro é executado como um único programa no modo núcleo; Escrito como uma coleção de procedimentos com parâmetros e resultados; Elas podem chamar umas as outras; Principal vantagem: tempo de resposta das tarefas; Desvio de controle (trap): chaveamento entre modo usuário e modo núcleo. 5 / 26 Estrutura dos Sistemas Operacionais Estrutura básica [Tanenbaum and Machado Filho, 1995] 1 Um programa principal invoca a rotina do serviço; 2 Um conjunto de rotinas de serviço executam as chamadas de sistema; 3 Um conjunto de rotinas utilitárias que auxiliam as rotinas de serviço. Figura 1.1: Modelo de estruturação para um kernel monolítico 6 / 26 Estrutura dos Sistemas Operacionais Sistemas Operacionais Unix Figura 1.2: Organização dos sistemas Unix [Galvin et al., 2013] 7 / 26 Estrutura dos Sistemas Operacionais MS-DOS Não é dividido em módulos; Não tem uma separação muito clara entre as interfaces e a funcionalidade. Figura 1.3: Estrutura do MS-DOS [Galvin et al., 2013] 8 / 26 Estrutura dos Sistemas Operacionais Sistemas em Camadas Hierarquia entre as camadas; Os níveis superiores prestam serviço aos inferiores, odecendo a níveis de complexidade; Camadas do sistema são dependentes. Figura 1.4: Funções das camadas [Tanenbaum and Machado Filho, 1995] 9 / 26 Estrutura dos Sistemas Operacionais Organização em camadas do SO Figura 1.5: Organização das camadas [Galvin et al., 2013] 10 / 26 Estrutura dos Sistemas Operacionais Microkernel Ideia: mover parte dos serviços do kernel para o espaço do usuário; Implementação: separar o sistema operacional em partes, sendo cada uma responsável por um tipo de serviço; Comunicação acontece por meio de troca de mensagem entre os programas e os serviços; Vantagens [Galvin et al., 2013]: Mais fácil de estender; Mais conável, pois possui menos programas rodando em modo kernel; Mais seguro. Desvantagens: Perde performance na comunicação constante entre os programas em mdo usuário e modo kernel. 11 / 26 Estrutura dos Sistemas Operacionais Estrutura do microkernel Figura 1.6: Estrutura de um sistema operacional com microkernel [Galvin et al., 2013] 12 / 26 Estrutura dos Sistemas Operacionais Linus x Tanenbaum Figura 1.7: Fonte: https: //groups.google.com/forum/#!topic/comp.os.minix/wlhw16QWltI[1-25] 13 / 26 System Calls 1 Estrutura dos Sistemas Operacionais 2 System Calls 14 / 26 System Calls Denição Interface de programação para os serviços do Sistema Operacional. Um SO tem duas funções principais: 1 2 Fornecer abstrações para os programas de usuário; Administrar os recursos do computador. O usuário não precisa administrar manualmente todos os recursos do computador; Absração de alto nível: API - Application Programmable Interface. Exemplos: POSIX (Unix, Linux e Mac OS X); Java API. 15 / 26 System Calls Exemplo de uma SYSCALL Lembre-se: o processador só pode rodar um programa de cada vez! Figura 2.1: Copiando o conteúdo para um arquivo [Galvin et al., 2013] 16 / 26 System Calls Implementação de SYSCALL Índice de números de chamadas armazenados numa interface de chamadas de sistema implementada no Sistema Operacional; A interface executa a chamada e retorna os valores de resultado; O programa não precisa saber como a SYSCALL é implementada; Contudo, é necessário entender o que faz o SO e o que a chamada retorna; Normalmente os detalhes das chamadas são suportados pelas bibliotecas e/ou compiladores. 17 / 26 System Calls Exemplo de API Padrão Figura 2.2: Exemplo de uma chamada de API padrão POSIX [Galvin et al., 2013] 18 / 26 System Calls Envio de parâmetros Normalmente é necessário fornecer mais informações do que o nome da chamada de sistema. Existem três métodos de enviar parâmetros para uma SYSCALL [Galvin et al., 2013]: 1 2 3 Parâmetros enviados através dos registradores (mais simples); Os parâmetros são armazenados em tabelas ou blocos e seu endereço enviado como um parâmetro ao registrador (Linux e Solaris); Utilização de pilha (stack): os parâmetros são empilhados pelo programa (push) e removidos pelo SO (pop) Os métodos 2 e 3 não possuem limite em relação à quantidade de parâmetros que são enviados à chamada. 19 / 26 System Calls Utilização de pilhas (read) 1 Armazena os bytes; 2 Carrega no buer; 3 Gera o descritor de arquivo (fd); 4 Chama a rotina da biblioteca (call); 5 Executa a instrução TRAP. Nesse momento a chamada é promovida ao modo kernel; 6 Passa a instrução para um endereço especíco do kernel; 7 Ativa o endereço especíco para a chamada (registradores); 8 Rotina de tratamento das chamadas de sistema; 9 Retorna para a instrução TRAP. Podem também bloquear o programa que a chamou; 10 Retorna ao programa do usuário; 11 Limpa a pilha. 20 / 26 System Calls Execução da API Figura 2.3: Fluxo de execução da chamada read [Tanenbaum and Machado Filho, 1995] 21 / 26 System Calls Utilização de tabelas Figura 2.4: Exemplo de envio de parâmetros por utilização de tabelas [Galvin et al., 2013] 22 / 26 System Calls Programa no MS-DOS Uma única tarefa singletasking ( ); O shell é carregado junto com o sistema; Espaço de memória único; Saída do programa -> shell recarregado. Figura 2.5: [Galvin et al., 2013] 23 / 26 System Calls Programa no FreeBSD Variante do Unix; Multitasking ; Login carrega o O shell shell do usuário; executa a chamada fork() para executar um programa: exec() carrega um programa no processo; shell espera o m e retorna o resultado. Resultados: code=0 Sem erros; Figura 2.6: [Galvin et al., 2013] code>0 Algum erro. 24 / 26 System Calls Galvin, P. B., Gagne, G., and Silberschatz, A. (2013). Operating system concepts . John Wiley & Sons, Inc. Tanenbaum, A. S. and Machado Filho, N. (1995). Sistemas operacionais modernos , volume 3. Prentice-Hall. 25 / 26 System Calls OBRIGADO!!! PERGUNTAS??? 26 / 26