Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Sistemas operacionais Cap 2. Introdução II Jadilson Paiva Objetivos – Multitarefa – Interrupções – Estrutura do S.O – Tipos de Kernel 1 – Monoprogramáveis x multiprogramáveis Mono x multiprogramáveis • Os sistemas multiprogramáveis surgiram da necessidade de utilizar os recursos da máquina de forma mais eficiente; • O throughput em (a) é 33% menor que em (b); Exemplo estatístico CPU x mono x multitarefa Existem vários algoritmos de escalonamento; Interrupções de relógio geradas pelo hardware podem definir o tempo do escalonamento; Interrupções no multitarefa Quantum de tempo para cada processo em função da quantidade de ticks Tick =~ 1 ms Quantum/ time slice = 1 a 100 ms Interrupções no multitarefa Após expirado o quantum de tempo, o sistema operacional muda o processo em execução; 2 – Interrupções Interrupções • São mecanismos de hardware ou software que tem a finalidade de interromper a execução corrente da CPU; • Através da interrupção, a CPU é desviada para o tratamento da interrupção que a chamou; • É através deste mecanismo que é possível sincronizar o funcionamento de um sistema computacional assim como os sistemas multitarefas; • Interrupções de hardware (IRQ´s) • Interrupções de software (INT´s) • Exceções Geração das interrupções • Podem ser geradas pelo programa: Implementadas com o uso de instruções especiais (INT, TRAP); • Geradas por um erro (exceção): divisão por zero, referência a memória fora do espaço permitido e etc; • Geradas pelo relógio (temporizador da placa mãe); • Geradas pelos dispositivos de E/S (IRQ´s); 2.1 – Interrupções de hardware Controlador de interrupções de HW PIC O controlador PIC e a CPU possuem um protocolo próprio de negociação quanto ao pedido e atendimento das interrupções de hardware; Geração das interrupções de HW • As interrupções de hardware são mascaráveis, ou seja, podem ser desabilitadas pelo sistema operacional, de forma que não interrompam a CPU durante a execução; Tratamento das interrupções Tratamento das interrupções Execução atômica PIC avalia os pedidos de IRQ quanto a prioridade bem como a pendencia da CPU ao tratamento de uma IRQ anterior Caso a INT de HW esteja habilitada Lista de interrupções de HW APIC Medindo as interrupções de HW #vmstat 1 #watch –d –n 1 cat /proc/interrupts #watch –d –n 1 grep LOC /proc/interrupts 2.2 – Interrupções de software Como seria uma procedure de vídeo Pixel 6 x 5 ASCII Chip funções + Uso das interrupções de software Uso da procedure do teclado INT09 (IRQ 1) Teclado Buffer do teclado (INT hardware) INT09 (IRQ 1) Teclado Excesso de caracteres na pilha (overflow) Segurar a tecla!!!!!! Acoplamento das INTs Acoplamento.asm Uso das interrupções de software Uso da procedure do disco Uso das interrupções de software Uso da procedure hora Uso das interrupções de software Uso da procedure ticks Uso da pilha no tratamento da INT Exceção Evento previsível decorrente de um erro de programação É uma interrupção não mascarável Interrupções 2.3 – Tabela do vetor de interrupções IVT Vetor de interrupções – IVT • São endereços indexados para procedimentos de tratamento de interrupções (hardware e software); • O vetor de interrupções está localizado no início da memória principal, formado por 256 posições de 4 Bytes cada um (IP:CS), totalizando 1kB; • Este vetor de interrupções é copiado pela firmware durante o boot da máquina e serve para funcionamento das funções de E/S no setup e de uso por sistemas operacionais legados que utilizam o MS-DOS (16 bits); • O que acontece se a IVT for manipulada???? Vetor de interrupções – IVT Endereço de memória / INT Registrador IP Registrador CS 0000 / 0 9E 0F C9 00 0004 / 1 65 04 70 16 0008 / 2 16 00 D7 03 000C / 3 65 04 70 00 ..... .... .... ..... .... .... 0399 / 100 xx yy zz ww Vetor de interrupções x86 - BIOS Execução da INT0 (ponteiros) Vetor de interrupções x86 - BIOS Vetor de interrupções x86 - BIOS Mapeamento de memória PC x86 2.4 – Tratamento das múltiplas interrupções Tratamento das múltiplas interrupções Protocolo de comunicação entre a CPU e o PIC está em questão neste momento!!! 2.5 – Descritor de interrupção - IDT Tabela de descritores de interrupção - IDT • É utilizada pelos sistemas operacionais a partir de 32 bits, uma vez que o processador de 16 bits só trabalha com IVT; • A tabela IDT é gerada pelo próprio sistema operacional durante o seu carregamento em memória, de forma que o S.O é responsável pelas suas próprias procedures de E/S evitando o legado; • Os processadores de 32 e 64 bits possuem um registrador especial (IDTR) para indicar o posicionamento da tabela IDT em memória; Tabela de descritores de interrupção - IDT • Trabalha de forma similar a IVT com endereços indexados, só que de 8 bytes e também possuem 256 entradas; • Inicialmente quando o PC é inicializado, a IVT é funcional pela firmware até que o S.O coloque a sua IDT em uma posição diferente de memória ou sobrescreva a antiga IVT; • A IDT trabalha juntamente com o controlador de interrupções avançado (APIC) que permite o um maior gerenciamento de interrupções de hardware (IRQ´s); • Já a antiga IVT só dava suporte até 16 IRQ´s; PIC (IVT) e APIC (IDT) Tabela de descritores de interrupção - IDT 3 – Estrutura do S.O Estrutura do S.O Funções do kernel • É formado por um conjunto de rotinas que tem a finalidade de prover uma abstração do hardware para o usuário; • Fornece mecanismos de segurança e proteção através da gestão dos dispositivos do hardware de forma concorrente entre os programas (multitarefa); • Protege o sistema do usuário e do programador em acessos indevidos a regiões e eventos não privilegiados no sistema; • Os usuários e programas que estão em execução ficam protegidos uns dos outros; 3.1 – Modos de acesso ao kernel Modos de acesso • Os processadores a partir do IA-32 apresentam quatro modos de funcionamento implementados em hardware; • Cada “ring” possui um nível de privilégio de funcionamento; Modos de acesso • Os processadores de 16 bits não possuem modo de acesso, no entanto, toda aplicação e o usuário tem acesso a toda a memória da máquina; • Os sistemas operacionais atuais utilizam apenas dois dos quatro modo disponíveis pelos processadores, conhecidos como modo kernel e modo usuário ou ring 0 e ring 3; • A memória do sistema é dividida logicamente e protegida através destes modos; Modos de acesso • Os Conhecidos como modo usuário e modo kernel, o processador delimita a segurança do sistema pela quantidade de instruções que podem ser executadas nestes modos; • O modo usuário possui acesso a um conjunto de instruções limitados e de poucos privilégios; • O modo núcleo tem acesso a todo o conjunto de instruções do processador, ou seja, privilégio máximoao sistema; Modos de acesso • Os modos de acesso podem ser mudados através instruções especiais em hardware syscall e sysret (TRAP); • A mudança de modos caso seja necessária é realizada através das chamadas do sistema operacional (system calls); Modos de acesso em memória principal • O kernel é protegido das ações diretas dos usuários, uma vez que as aplicações alto nível funcionam em uma parte separada da memória e acopladas pelas chamadas de sistema ao núcleo; Modos de acesso Linux e Windows Modo Kernel (1GB) Modo usuário (3GB) Linux 32 bits Modo Kernel (2GB) *** Modo usuário (2GB) Windows 32 bits ** Segundo documentação da Microsoft, este espaço pode ser reduzido! Inicialização do sistema A máquina inicia em modo real (sem proteção x86) para depois mudar para o modo protegido x32 (kernel e user mode) e/ou modo longo x64 (kernel e user mode) 3.2 – System calls System calls • É uma API de serviços disponibilizada pelo S.O, e que pode ser usado pelos programas para requisitar serviços do sistema operacional; • Estas chamadas são procedimentos que se relacionam diretamente com o hardware, como forma de abstrair os detalhes de comunicação; • As system calls possuem instruções privilegiadas, e servem como um encapsulamento de proteção ao kernel e ao sistema como um todo; • As implementações de system calls são complexas; Algumas funcionalidades das system calls • Gerenciamento de processos; • Gerenciamento de sistema de arquivos; • Gerenciamento e tratamento de sinais; • Gerenciamento do tempo do sistema; Procedimento system call Procedimento system call As mudanças entre os modos usuário e kernel consomem muitos ciclos de CPU Dependendo da situação, mudanças em excesso geram overhead e inviabilizam a velocidade de aplicações e do sistema como um todo; Atuação das system calls 3.3 – Padrão POSIX Padronização POSIX • Portable Operating System Interface objetiva garantir a portabilidade do código-fonte de um programa a partir de sistemas operacionais que atendam as normas POSIX; • Muito utilizado em sistemas UNIX e seu derivados, as system-calls obedecem ao padrão POSIX; • Não pode se garantir que todos os sistemas operacionais, inclusive entre proprietários e abertos, possuam a mesma API (Interface de programação de aplicativos) a utilizarem o POSIX; • O Windows utiliza a sua API própria conhecia como Win32; Syscall POSIX – Consultar !!! Uso de system calls no shell #chmod 777 teste #time teste #mkdir teste Criar scripts!!!!!! System calls em C • Este código deve ser portável em sistemas operacionais que utilizam as system calls POSIX; • System call fork() é utilizada para a criação de subprocessos; • A chamada kill() mata os processos; #include <stdio.h> #include <sys/types.h> #include <signal.h> int main() { int id ; id = fork (); >> SYSTEM CALL if (id != 0) { printf(“Eu sou o pai\n”); sleep(5) ; kill (id, SIGKILL); >>SYS CALL } else{ printf(“Eu sou o filho\n”); while(1); } } libc6-dev (bilbioteca) #cc –o teste teste.c 3.4 – Bibliotecas Bibliotecas • São procedimentos que possuem códigos auxiliares ao programador e aplicações; • Com maior vantagem de portabilidade em relação a uma system call, o seu uso torna o desenvolvimento de softwares mais simples, uma vez que se abstrai mais que uma chamada de sistema; • As bibliotecas podem ser criadas e compartilhadas entre sistemas operacionais; • As bibliotecas intermediam o acesso do usuário a system call; Bibliotecas Testando a portabilidade Linux e Windows #include <stdio.h> >> biblioteca int main (void) { FILE *file; file = fopen("teste.txt","w"); Função >> return 0; } Testar no Windows e Linux!!!!! Writedisk.c Rastreando chamadas de sistema e sinais #strace <program> #strace -c <program> #ltrace <program> Rastreando syscall e sinais Rastreando bibliotecas #ltrace -c <program> #strace –c ls -la #ltrace -c ls -la Verificando o uso dos recursos #perf stat <program> #time <program> #top System calls em Assembly 32 bits Rastreando as syscalls #nasm –f elf helloworld.asm #ld helloworld.o –o helloworld #strace ./helloworld Fazer o comparativo entre C e Assembly #strace -c ./helloworld 4 – Tipos de kernel Implementação do kernel • Idealmente, o kernel deveria ser independente da ISA do processador; • Na prática, mais de 90% do kernel é escrito em uma linguagem de alto nível como C, e posteriormente compilado para a ISA do processador; • O restante do código é escrito diretamente na ISA (assembly) que é adaptada para cada tipo de ISA de processadores; Handbook codes s.o 4.1 – Kernel monolítico Kernel monolítico • Primeiro conceito de kernel; • Todas as funções estão em modo kernel; • Todas as funções são linkadas em um único bloco; • Simples e de bom desempenho pelo menor quantitativo de mudança de modos; • Difícil de isolar fontes de problema; • Aplicado no MS-DOS, Jadilson 1.3 e primeiros UNIX e Linux Kernel monolítico 4.2 – Kernel em camadas Kernel em camadas • Com o aumento da complexidade dos S.Os e técnicas de programação estruturada e modular, o S.O foi dividido em camadas hierárquicas; • Possui a vantagem de isolar as camadas em níveis de privilégios diferentes, e fazendo com que as camadas inferiores provejam serviços as camadas superiores; • Possui a desvantagem de menor desempenho gerado pelo overhead de mudança de privilégios entre as camadas; • Aproveita os rings de privilégios do processador; Kernel em camadas • Baseado nos 4 modos de funcionamentos dos processadores a partir do IA- 32; 4.3 – Microkernel Microkernel • Funções do núcleo reduzidas ao extremo (leve e simples); • Os serviços do sistema operacional estão disponíveis em modo usuário e chamadas de servidores; • As aplicações são chamadas de clientes, e comunicam-se umas com as outras através de troca de mensagens através do núcleo; • O núcleo tem apenas as funções de gerenciar, interrupções, IPC, escalonamento e E/S; • Na prática é combinada com a arquitetura em camadas devido ao seu baixo desempenho pela troca dos modos; Microkernel Kernel Linux híbrido-monolítico
Compartilhar