Dissertação De Mestrado
Total Page:16
File Type:pdf, Size:1020Kb
Uma plataforma para ensino e treinamento em desenvolvimento de sistemas operacionais Renê de Souza Pinto SERVIÇO DE PÓS-GRADUAÇÃO DO ICMC-USP Data de Depósito: 27 de agosto de 2012 Assinatura: Uma plataforma para ensino e treinamento em desenvolvimento de sistemas operacionais Renê de Souza Pinto Orientador: Prof. Dr. Francisco José Monaco Dissertação apresentada ao Instituto de Ciências Matemáticas e de Computação – ICMC-USP, como parte dos requisitos para obtenção do título de Mestre em Ciências – Ciências de Computação e Matemática Computacional. VERSÃO REVISADA USP - São Carlos Agosto/2012 Ficha catalográfica elaborada pela Biblioteca Prof. Achille Bassi e Seção Técnica de Informática, ICMC/USP, com os dados fornecidos pelo(a) autor(a) Souza Pinto, Renê S659p Uma plataforma para ensino e treinamento em desenvolvimento de sistemas operacionais / Renê Souza Pinto; orientador Francisco Jose Monaco. -- São Carlos, 2012. 103 p. Dissertação (Mestrado - Programa de Pós-Graduação em Ciências de Computação e Matemática Computacional) -- Instituto de Ciências Matemáticas e de Computação, Universidade de São Paulo, 2012. 1. Sistemas Operacionais. 2. Arquitetura e Organização de Computadores. 3. Ensino e Aprendizagem. I. Jose Monaco, Francisco, orient. II. Título. Feliz aquele que transfere o que sabe e aprende o que ensina. Cora Coralina A minha namorada Juliana, pela companhia em todos os momentos, e aos meus pais Walkmar e Lurdinha, por brindar-me os mais valiosos presentes: a vida e a educação. Agradecimentos Aos meus pais Walkmar e Lurdinha, e meus irmãos Mirela, Walker e Eneida, pelo eterno apoio e por serem a minha família. Ao prof. Dr. Francisco José Monaco, pela orientação e pela incalculável ajuda antes e durante a execução deste trabalho, como orientador e como amigo. A minha namorada Juliana, pelo carinho, amor, e principalmente por me acompanhar com paciência e compreensão nessa longa jornada. Ao meu inseparável amigo canino Astolfo, sempre ao meu lado durante muitas noites de es- crita e programação. Aos amigos da República Eskória, pelo convívio e pelos momentos felizes. A todos os amigos, alunos ou professores, do Laboratório de Sistemas Distribuídos e Progra- mação Concorrente (LaSDPC), pelas preciosas sugestões e críticas, sempre construtivas. A todas as pessoas que nobremente colaboram direta ou indiretamente em projetos livres. Ao Instituto de Ciências Matemáticas e de Computação (ICMC) e todos seus funcionários, e a Universidade de São Paulo, por sua excelência em ensino e pesquisa. A Coordenação de Aperfeiçoamento de Pessoal de Nível Superior (CAPES) pelo apoio finan- ceiro. E a todos que colaboraram direta ou indiretamente para a realização deste projeto. Resumo Ste trabalho tem como objetivo propor e desenvolver uma plataforma para ensino e treinamento em técnicas de projeto e implementação E de sistemas operacionais. Após mais de uma década de hegemonia de alguns poucos produtos comerciais, o estabelecimento do paradigma do software livre e a proliferação de arquiteturas embarcadas capazes de exe- cutar um sistema operacional (SO) implicam em demanda de especialistas para atuarem diretamente no desenvolvimento de novos SOs, adequados a novos requisitos das aplicações emergentes. Assim, para além de disciplina de formação teórica, o conhecimento em sistemas operacionais tem refor- çado seu caráter prático como competência técnica — perspectiva que este trabalho atende mediante uma abordagem de aprendizado baseado em pro- jetos. A principal contribuição para o estado da arte nesse domínio é um roteiro de instrução que associa teoria e prática por meio do processo de desenvolvimento integral de um sistema operacional funcional. i Abstract His work aims at proposing and developing a learning and training platform on design and implementation of operating systems. After T more than a decade of hegemony of a few commercial products, the establishment of free software paradigm and the proliferation of embedded architectures capable of running an operating system (OS) increase the de- mand for specialists to work directly on the development of new operating systems suited to the new requirements of novel applications. Therefore, beyond its function as theoretical background discipline, the area of opera- ting systems has its practical importance highlighted as a technical compe- tence — a perspective which this work meets by means of a project-based learning approach. The main contribution to the state of the art in this do- main is an instruction program which associates theory and practice through the process of developing integrally a functional operating system. iii Sumário Resumo i Abstract iii Lista de Siglas xi 1 Introdução1 1.1 Contextualização e Motivação............................1 1.2 Objetivo........................................4 1.3 Organização da Monografia..............................4 2 Revisão 5 2.1 Trabalhos Relacionados................................6 2.2 Abordagens Baseadas em Projetos..........................6 3 Metodologia9 3.1 Resultados esperados e forma de avaliação...................... 11 3.2 Material Didático................................... 13 4 Desenvolvimento 15 4.1 Sistemas Operacionais................................ 15 4.2 A Plataforma de Ensino................................ 19 4.2.1 Visão geral do Sistema Operacional..................... 20 4.2.2 Arquitetura do Kernel............................ 24 4.3 Arquitetura PC.................................... 45 4.4 Arquitetura Intel x86 (IA-32)............................. 50 4.4.1 Visão geral.................................. 50 4.4.2 Ambiente Básico............................... 55 4.4.3 Organização da Memória........................... 55 4.4.4 Registradores................................. 57 4.4.5 Tabelas GDT, LDT e IDT.......................... 59 4.4.6 Sistema de Paginamento de Memória.................... 62 4.5 Roteiro passo a passo................................. 64 4.5.1 Preparação das ferramentas.......................... 64 4.5.2 Sistema de boot................................ 65 v 4.5.3 Funções internas do kernel .......................... 69 4.5.4 Controle e configuração de interrupções................... 71 4.5.5 Gerenciamento de memória......................... 74 4.5.6 Threads de kernel e o escalonador...................... 78 4.5.7 Drivers de dispositivos............................ 80 4.5.8 Cache de blocos............................... 82 4.5.9 Camada VFS e driver para sistema de arquivo................ 83 4.5.10 Chamadas ao sistema............................. 85 4.5.11 Execução de aplicativos do usuário..................... 86 4.5.12 Notas finais.................................. 88 5 Resultados 89 6 Conclusões 99 Referências 101 Anexos 105 vi Lista de Figuras 3.1 Alta interdependência na implementação dos conceitos teóricos........... 10 3.2 Relação direta do código implementado com os conceitos teóricos (baixa interde- pendência)....................................... 10 4.1 Arquitetura Microkernel. Fonte (Machado e Maia, 2007)............... 16 4.2 Sistema Operacional: Arquitetura Monolítica..................... 17 4.3 Visão geral do SO, mostrando as camadas envolvidas desde o usuário até o kernel.. 20 4.4 Organização em árvore do sistema de arquivo. Fonte: (Tanenbaum, 2000) ..... 21 4.5 Código exemplo para criação de um novo processo.................. 24 4.6 Arquitetura do kernel da plataforma TempOS. Figura adaptada de (Bach, 1986)... 25 4.7 Código assembly (IA-32) para execução de chamadas ao sistema no Linux..... 27 4.8 Código C usando as chamadas ao sistema open() e close().............. 28 4.9 Aplicativo efetuando chamada ao sistema open()................... 28 4.10 Tabela HASH para os blocos em cache no TempOS.................. 31 4.11 Ilustração de um i-node apontando para blocos de dados e de endereços (que apon- tam para blocos de dados) e seus respectivos encadeamentos............. 33 4.12 TempOS VFS: Estrutura do Superbloco........................ 35 4.13 TempOS VFS: Estrutura do i-node........................... 36 4.14 TempOS VFS: Estrutura da tabela de montagem................... 37 4.15 Mecanismo de montagem feito pelo VFS....................... 38 4.16 Tabelas utilizadas pelo SO para gerenciamento de arquivos e i-nodes........ 40 4.17 Abstração do acesso aos dispositivos de entrada e saídas padrão do processo.... 40 4.18 Modelos de gerenciamento de memória: Mapa de bits e pilha............ 42 4.19 Filas de processos bloqueados............................. 44 4.20 Uso das rotinas sleep() e wakeup()........................... 44 4.21 Arquitetura PC.................................... 46 4.22 Esquema de ligação dos PICs Mestre e Escravo à entrada de interrupção da CPU. 47 4.23 Mapeamento do primeiro 1MB de memória na Arquitetura PC. Adaptado de (Intel, 2009).......................................... 49 4.24 Segmentação de Memória............................... 51 4.25 Anéis de privilégio na Arquitetura x86. Adaptado de (Intel, 1999a)......... 52 4.26 Ordem dos bits e bytes na memória.......................... 54 4.27 Os três modelos de organização da memória na Arquitetura x86. Fonte: (Intel, 1999a) ......................................... 57 4.28 Registradores da Arquitetura x86........................... 58 vii 4.29 Estrutura do Descritor de Segmento. Fonte: (Intel, 1999b).............. 60 4.30 Estrutura do Descritor de Interrupção. Fonte: (Intel, 1999b)............. 61 4.31 Tradução de endereço no Sistema de Paginamento. Fonte: (Intel, 1999b) ...... 63 4.32 Código de boot....................................