Baixe o app para aproveitar ainda mais
Prévia do material em texto
Vinicius Nunes Moura RA: 86970 Desenvolvimento de Sistema Operacional em um Sistema Computacional no FPGA São José dos Campos - Brasil Setembro de 2017 Vinicius Nunes Moura RA: 86970 Desenvolvimento de Sistema Operacional em um Sistema Computacional no FPGA Relatório apresentado à Universidade Fede- ral de São Paulo como parte dos requisitos para aprovação na disciplina de Laboratório de Sistemas Computacionais: Sistemas Ope- racionais. Docente: Prof. Dr. Tiago de Oliveira Universidade Federal de São Paulo - UNIFESP Instituto de Ciência e Tecnologia - Campus São José dos Campos São José dos Campos - Brasil Setembro de 2017 Resumo Devido à cada vez empresas, como Intel e AMD, produzirem processadores cada vez mais rápidos e outras, como Microsoft, Apple e Google, produzindo Sistemas Operacionais mais potentes, é importante que durante a graduação os estudantes de Engenharia de Computação tenham um contato prático com o desenvolvimento destas estruturas. Assim, neste artigo serão apresentadas as perspectivas e os estudo sobre gerenciamento de processos, de memória, de sistemas de arquivos e de dispositivos de E/S do Sistema Operacional, definindo como deve ser projetado: técnicas e algoritmos a serem utilizados, que deverá ser emulado no Processador de arquitetura MIPS previamente desenvolvido na sequência de Laboratórios de Sistemas Computacionais da Universidade Federal de São Paulo. Palavras-chaves: Sistema Operacional, FPGA, Gerenciamento, Processos, Memória, Sistema de Arquivos, Dispositivo de Entrada, DE2-115. 3 Sumário 1 INTRODUÇÃO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1.1 Estrutura do documento . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2 OBJETIVOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.1 Geral . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2.2 Específico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3 FUNDAMENTAÇÃO TEÓRICA . . . . . . . . . . . . . . . . . . . . 9 3.1 Processador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2 Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.3 FPGA - Field Programmable Gate Array . . . . . . . . . . . . . . . . 10 3.4 Sistema Operacional . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.4.1 Gerenciamento de Processos . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.4.1.1 Escalonamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.4.1.2 Estados do processo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.4.1.3 Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4.1.4 Deadlock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.4.2 Gerenciamento de Memória . . . . . . . . . . . . . . . . . . . . . . . . . . 15 3.4.3 Gerenciamento de Sistema de Arquivos . . . . . . . . . . . . . . . . . . . 16 3.4.4 Gerenciamento de Entrada/Saída . . . . . . . . . . . . . . . . . . . . . . 17 3.5 BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4 DESENVOLVIMENTO DO TRABALHO . . . . . . . . . . . . . . . 19 4.1 BIOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 4.2 Comunicação e usabilidade . . . . . . . . . . . . . . . . . . . . . . . . 19 4.3 Gerenciamento de processos . . . . . . . . . . . . . . . . . . . . . . . 20 4.4 Gerenciamento de Memória . . . . . . . . . . . . . . . . . . . . . . . . 21 4.5 Gerenciamento do Sistema de Arquivos . . . . . . . . . . . . . . . . . 21 4.6 Gerenciamento de Dispositivos de Entrada e Saída . . . . . . . . . . 21 5 CONSIDERAÇÕES FINAIS . . . . . . . . . . . . . . . . . . . . . . . 23 REFERÊNCIAS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 5 1 Introdução Após as disciplinas de Laboratório de Sistemas Computacionais: Compiladores e Compiladores, onde se adquiriu conhecimento prático e teórico para elaboração e imple- mentação do projeto de um compilador para linguagem C-, que trabalha no processador produzido na disciplina de Laboratório de Sistemas Computacionais: Arquitetura e Or- ganização de Computadores, este relatório irá apresentar o conhecimento adquirido em Sistemas Operacionais aplicado ao desenvolvimento e a exequibilidade de um Sistema Operacional no projeto mencionado no âmbito da disciplina de Laboratório de Sistemas Computacionais: Sistemas Operacionais. Um Sistema Operacional é um conjunto de programas que gerenciam recursos, processadores, armazenamento, dispositivos de entrada e saída e dados da máquina e seus periféricos. Ou seja, é um sistema que faz a comunicação entre o hardware e os demais softwares (1). Assim, o Usuário utiliza um Software que demandará do Hardware do computador, no entanto, esta interface é feita pelo Sistema Operacional, conforme apresentado na Figura 1. Figura 1 – Diagrama com a posição do sistema operacional no uso de um computador. Fonte: Wikipédia (2) Um dos principais Sistemas Operacionais utilizados no Brasil é o Microsoft Windows, desenvolvido pela Microsoft, atualmente na versão Windows 10 para desktop. Já no universo 6 Capítulo 1. Introdução mobile, o Android, desenvolvido pela empresa Google e baseado no núcleo Linux, que se encontra na versão 8.0 Oreo. Ambos contam com anos de estudos e atualizações, além de equipes gigantescas de produção, assim, o objetivo deste projeto não é o de se aproximar aos atuais Sistemas Operacionais, mas compreender o seu funcionamento mais básico e intrínseco, voltado para conhecer as estruturas que foram um Sistema Operacional. 1.1 Estrutura do documento Este documento segue uma estrutura que se relaciona com o planejamento temporal do desenvolvimento do projeto no decorrer da graduação e dos laboratórios, onde serão apresentados os estudos sobre o gerenciamento do processador, da memória, sistema de arquivos e de dispositivos de entrada/saída que deverá ser realizado pelo Sistema Operacional a ser desenvolvido. As próximas sessões apresentam os objetivos deste trabalho, a fundamentação teórica e o desenvolvimento do trabalho e os resultados já obtidos. 7 2 Objetivos 2.1 Geral Projeto e implementação de alguns módulos de um sistema operacional específico para um sistema digital em lógica programável composto por processador, memória e interface de comunicação. Este trabalho possui os seguintes objetivos gerais: • Domínio da construção e das unidades formadoras de um Sistema Operacional; • Definição das especificações técnicas do Sistema Operacional. 2.2 Específico Para alcançar os objetivos gerais, derivam-se os seguintes objetivos específicos: • Realizar o estudo e propor como deverão ser implementado o: – Gerenciamento de Processos; – Gerenciamento de Memória; – Gerenciamento do Sistema de Arquivos; – Gerenciamento dos Dispositivos de Entrada e Saída. Note-se que este trabalho não tem como objetivo a implementação das estruturas, que será desenvolvido nos próximos trabalhos, mas sim de realizar o estudo e levantamento bibliográfico dos assuntos. 9 3 Fundamentação Teórica 3.1 Processador Um processador é um circuito integrado digital que realiza operações matemáticas e lógicas para cumprir determinada tarefa de acordo com uma série de instruções ordenadas por um programa externo e codificadas por microcircuitos internos (3). O processador desenvolvido no Laboratório de Sistemas Computacionais: Arquite- tura e Organização de Computadores foi baseado na arquitetura MIPS, que é acrônimo para Micropocessor without interlocked pipeline stages (microprocessador sem estágios intertravados de pipeline), que é uma arquitetura de microprocessadores RISC (Reduced Instruction Set Computer, em português, “Computador com um conjunto reduzido de instruções”) (4), com 33 instruções diferentes. A Tabela 1 apresenta um exemplo de intrução aritmética. Tabela 1 – Exemplo de um formato de Instruções Tamanho (bits) 6 5 5 5 11 Campo OPcode Reg1 Reg2Reg3 Blank Bits 31 - 26 25 - 21 20 - 16 15 - 11 10 - 0 O projeto conta, assim, com as seguintes unidades: • Unidade Lógica Aritmética: responsável por realizar todas as operações aritmé- ticas e lógicas do processador; • Unidade de Controle: responsável por gerenciar todas as outras unidades; • Memória de Instruções: memória que contém o código a ser executado pelo processador; • Memória de Dados: memória para armazenamento dos dados utilizados ou gerados pelo processador; • Registradores: unidade com memória de acesso direto e rápido do processador. 3.2 Compilador Um compilador é um programa de sistema que traduz um programa descrito em uma linguagem de alto nível, no caso, a linguagem C-, para um programa equivalente em código de máquina para um processador (5). 10 Capítulo 3. Fundamentação Teórica O compilador foi desenvolvido para linguagem C-, sendo muito semelhante à linguagem C, principal linguagem ensinada no Instituto de Ciência e Tecnologia da Universidade Federal de São Paulo, facilitando sua aplicação, no entanto, com funções a menos, como a não utilização de ponteiros, estruturas, entre outras. Para construção do compilador se utilizou o compilador TINY para linguagem C como base. Utilizou- se, também, o analisador léxico Flex para automatizar a construção do analisador e o YACC-Bisson para gerar o Parser, método para o analisador sintático. 3.3 FPGA - Field Programmable Gate Array Um FPGA, acrônimo para Field Programmable Gate Array (em português, “Arranjo de Portas Programáveis em Campo”) é um circuito integrado projetado para que possa ser configurado por qualquer consumidor após a fabricação (6). O modelo utilizado neste projeto é o EP4CE115F29C7, embarcado no KIT de desenvolvimento DE2-115. A programação foi feita na linguagem VeriLog, que é uma linguagem de descrição de hardware (Hardware Description Language – HDL), no software Quartus Prime 16.1 desenvolvido pela Altera. A Figura 2 apresenta o Kit de desenvolvimento DE2-115, que foi utilizado neste projeto. Figura 2 – KIT DE2-115 Fonte: Terasic Technologies (7) 3.4. Sistema Operacional 11 3.4 Sistema Operacional O Sistema Operacional é o conjunto de programas que gerencia recursos, pro- cessadores, armazenamento, dispositivos de entrada e saída e dados da máquina e seus periféricos. É o sistema responsável por fazer comunicação entre o hardware e os demais softwares, criando uma plataforma comum a todos os programas utilizados (1). Dentre as funções básicas de computadores de uso geral, pode-se citar: • Definição da interface com o usuário; • Compartilhamento de hardware entre usuários; • Compartilhamento de dados entre usuários; • Gerenciamento dos dispositivos de entrada e saída; • Tratamento e recuperação de erros. A Figura 3 apresenta todas as estruturas do projeto desenvolvido e que deverão ser desenvolvidas, onde o Sistema Operacional realizará o controle e o gerenciamento dos recursos. Figura 3 – Estruturas do projeto que deverá ser desenvolvido. Fonte: O autor Para realizar este gerenciamento, o Sistema Operacional é dividido em quatro partes, que serão explicados nas próximas seção: • Gerenciamento de processos; • Gerenciamento de memória; • Gerenciamento de sistema de arquivo; • Gerenciador de dispositivos de entrada/saída. 12 Capítulo 3. Fundamentação Teórica 3.4.1 Gerenciamento de Processos Um processo consiste em um programa em execução, mas não é o mesmo que um programa, pois programa pode ser exemplificado com o uma receita, com instruções para se resolver um problema, enquanto um processo é como alguém seguindo a receita, ou ainda, um processo precisa de recursos computacionais para trabalhar (memória, arquivos, tempo de processador, entre outros), enquanto um programa não trabalha, fica passivamente guardado em um arquivo (8). Como em um sistema operacional vários processos requerem o processador, é necessário compartilhar o tempo de acesso entre eles de forma que quando um processo for parado, todas as suas informações sejam guardadas. Isto porque quando o mesmo for reiniciado deve continuar do ponto em que parou. Para isso os sistemas operacionais utilizam uma tabela chamada de tabela de processos, que consiste em um vetor ou lista encadeada de estrutura para cada processo existente (9). Um Sistema Operacional pode ser monoprogramado, onde apenas um processo é executado por vez, do começo ao fim, ou multiprogramado, onde mais um processo pode executar ao mesmo tempo (9). A Figura 4 apresenta um exemplo de multiprogramação Figura 4 – Exemplo de multiprogramação. Fonte: Romildo Martins Bezerra (10) A multiprogramação é utiliza, pois, um processo típico passa mais tempo em espera que processando, assim, pode-se aproveitar os tempos de espera para executar outros processos, aproveitando melhor o tempo de processador disponível, tornando possível que o Sistema Operacional mantenha vários processos ativos ao mesmo tempo, gerando o Timesharing, que é a ilusão de que os processos estão sendo executados ao mesmo tempo. O Sistema Operacional precisa decidir qual processo deverá ser utilizado pelo processador, onde somente processos aptos a executar podem ser usados. 3.4.1.1 Escalonamento Para que o processador não fique muito tempo sem executar tarefa alguma, os sistemas operacionais utilizam técnicas de escalonar os processos que estão em execução ao mesmo tempo na máquina (10). 3.4. Sistema Operacional 13 Escalonamento é a determinação da ordem em que processos alocam processos no processador, onde o Sistema Operacional usa algum critério para escolher um processo apto para rodas e também poder retira-los enquanto estiver rodando. O escalonamento não-preemptivo só retira um processo do processador caso o mesmo já tenha terminado ou entre em estado de espera, enquanto o preemptivo pode retomar o processador mesmo contra a vontade de processo (10). A Tabela 2 apresenta os principais algoritmos de escalonamento e suas especificações. Tabela 2 – Principais algoritmos de escalonamento e suas especificações. Algoritmo de Escalonamento Especificações Round Robin • Quantum constante• Sem Prioridade Com prioridade • Cada processo possui uma prioridade e o de maior prioridadeexecuta primeiro. • Para evitar que os processos de maior prioridade tomem conta do processador, a prioridade é decrementada. Menor job primeiro • Só conduz ao resultado ótimo quando todos os Jobs tiverem prontos ao mesmo tempo • Difícil estimas o tempo • Utilização de médio ponderada Garantido • Estimar (prometer) a um processo o tempo de sua execução ecumprir • Necessário conhecimento dos processos executando e a serem executados Loteria • Distribuição de bilhetes que dão acesso ao processador• Lembra o escalonamento com prioridade, mas bilhetes são troca- dos entre processos Filas múltiplas • Criação de classes de prioridade alocadas em diferentes filas• Objetiva a redução de tempo de swapping Fonte: Romildo Martins Bezerra (9) 3.4.1.2 Estados do processo Basicamente, existem três estados em que um processo pode ser encontrar no sistema: • Execução: quando está sendo processado, sendo utilizado pelo processador. • Pronto: quando aguarda uma oportunidade para executar. • Espera/bloqueado: quando aguarda algum evento externo ou por algum recurso para prosseguir seu processamento. A Figura 5 apresenta o três tipos de processos, além da sua criação e destruição e como funcionam suas ligações. 14 Capítulo 3. Fundamentação Teórica Figura 5 – Tipos de processos encontrados no sistema operacional e suas ligações. Fonte: Romildo Martins Bezerra (9) Percebe-se na figura que as ligações são: 1. Processo bloqueado aguardando informações 2. Escalonador escolhe outro processo 3. Escalonador entrega ao processador 4. Entrada de dados concluídos 3.4.1.3 Threads Sistemas operacionais modernos permitem que um único processo possua várias linhas de controle, os threads. Isto permite, por exemplo, a um editor de texto realizar uma verificação ortográfica ao mesmo tempo em que o usuário digitacaracteres (10). Em uma tarefa com múltiplos threads, enquanto um thread está bloqueado e esperando, um thread na mesma tarefa pode executar. Com isso, há cooperação entre muitos threads no mesmo job, conferindo maior vazão e melhoria de desempenho (10). 3.4.1.4 Deadlock É a situação em que dois ou mais processos estão esperando por um evento que só pode ser gerado por algum dos mesmos processos em espera, impedindo de continuar as execuções do processador, ou seja, os processos ficam bloqueados (11). As principais formas de tratamento de Deadlock consistem em: • Identificar; • Prevenir; • Recuperar. 3.4. Sistema Operacional 15 3.4.2 Gerenciamento de Memória Alguns sistemas operacionais mais simples não trabalham com multiprogramação, ou seja, alocam um processo na memória o executam até que seja terminado. Porém a troca de processos entre memória e disco para sistemas multiprogramados é uma realidade. Para este caso, em que a soma dos espaços de memória requeridos por todos os processos é maior que a memória de dados, é necessário levar os dados não utilizados para o disco, sendo necessário um controle através de mapa de bits (9). Existem diversas técnicas para gerenciar memória que variam de acordo com o hardware do processador, apresentadas a seguir (12): Multiprogramação com Partições Fixas A estratégia mais simples consiste em dividir a memória em n partições com valores fixos, que podem, por exemplo, ser estabelecidas na configuração do sistema operacional. Quando um programa chega, há duas possibilidades: ele é colocado em uma fila de entrada da menor partição capaz de armazená-lo ou ele é colocado em uma fila de entrada única (12). Para partições com tamanho fixos, qualquer espaço não ocupado por um programa é perdido e na maioria das vezes o programa a ser executado é menor do que a partição alocada para ele, gerando a fragmentação interna (12). Multiprogramação com Partições Variáveis Nesse modelo, o tamanho das parições é ajustado de acordo com as necessidades dos processos, onde os espaços livres na memória são armazenados em uma lista (12). Permuta (Swapping) Quando há mais processos que espaço na memória, é necessário mover temporaria- mente processos para o disco e, obviamente, para continuar sua execução, um processo movido para o disco deve ser trazido novamente para a memória (13). Sempre que um processo é bloqueado, ele pode ser movido para o disco e um outro processo trazido do disco para a sua partição em memória. O controle dos espaços livres é gerenciado por um mapa de bits, onde para cada unidade de alocação existe um bit no mapa de bits, que é 0 se a unidade estiver livre e 1 caso esteja ocupada (13). Memória Virtual A ideia básica da memória virtual é que o tamanho combinado do programa, dos seus dados e da pilha pode exceder a quantidade de memória física disponível para ele, ou 16 Capítulo 3. Fundamentação Teórica seja, neste caso, a simples troca, vista anteriormente, não resolveria o problema. O Sistema Operacional, então, mantém partes do programa atualmente em uso, em forma de páginas ou segmentos, na memória principal e o restante em disco. Essas páginas/segmentos são "trocados"entre memória principal e secundária conforme o SO as solicita, conforme a demanda do programa (12). Paginação O espaço de endereço virtual é dividido em unidades chamadas páginas. As unidades correspondentes na memória física são chamadas molduras de página (ou quadros). As páginas e as molduras (quadros) têm sempre exatamente o mesmo tamanho (12). 3.4.3 Gerenciamento de Sistema de Arquivos Parte importante do uso de um computador consiste em recuperar e apresentar informações previamente armazenadas como o próprio sistema operacional, que precisa manter informações para uso posterior, como programas, bibliotecas e configurações. Geralmente essas informações precisam ser armazenadas em um dispositivo não volátil, que preserve seu conteúdo mesmo quando o computador estiver desligado. Cada arquivo é caracterizado por um conjunto de atributos, que podem variar de acordo com o sistema utilizado. Os atributos mais usuais são Nome, Tipo e Tamanho (14). As aplicações e o sistema operacional usam arquivos para armazenar e recuperar dados. O uso dos arquivos é feito através de um conjunto de operações, geralmente implementado sob a forma de chamadas de sistema e funções de bibliotecas. As operações básicas envolvendo arquivos são (14) • Criação de um novo arquivo; • Abrir para leitura ou escrita de dados em um arquivo; • Mudar atributos; • Eliminar o arquivo do dispositivo. A organização dos arquivos pode ser realizada de forma (15): • Não estruturada: Consiste em uma sequência não estruturada de bytes, onde o sistema de alocação não impõe nenhuma estrutura lógica para os dados. • Indexada: O arquivo consiste em um conjunto de registros Um diretório consiste em uma estrutura de dados que contém entradas associadas aos arquivos onde estão informações como localização física, nome, organização e demais 3.4. Sistema Operacional 17 atributos. Define como o sistema organiza logicamente os arquivos contidos em um disco (15). Pode ser divido nos seguintes tipos: • Nível único: Um único diretório contém todos os arquivos do disco, tornando a implementação mais simples da estrutura de diretórios, no entanto, não permite a criação de arquivos com o mesmo nome; • Dois níveis: Cada usuário ou programa pode ter seu “diretório particular”, sem a preocupação de conhecer os outros arquivos do disco; • Em árvore: Modelo utilizado atualmente em quase todos os sistemas operacionais, cada usuário pode criar vários níveis de diretórios (ou subdiretórios), sendo que cada um pode conter arquivos e subdiretórios. 3.4.4 Gerenciamento de Entrada/Saída O controle de entrada e saída de dados dos dispositivos é uma das funções principais de um sistema operacional. A interação dos programas com o Sistema Operacional para o acesso aos dispositivos pode ocorrer enviando e recebendo bytes de/para dispositivos de caractere, ou realizando operações de arquivos em dispositivos de bloco (16). Dispositivos de entrada e saída podem ser agrupados basicamente em duas categorias (16): • Dispositivos de caractere: Permite a transferência de sequências de caracteres nas operações de leitura e escrita, como terminais, impressoras e teclado. • Dispositivos de bloco: manipulam informações em bloco de tamanho fixo, como discos rígidos ou unidades de armazenamento em memória. A conexão entre o processador e a memória ocorre através de um barramento, mas para evitar que o processador tenha que intermediar cada transferência de valores de/para um dispositivo, usando o barramento, é possível usar um dispositivo de controle que permite o acesso direto à memória pelos controladores, sem intermediação do processador. Esse dispositivo é o controlador de DMA, acrónimo para Direct Memory Access (em português, acesso direto à memória), assim, é possível ao Sistema Operacional iniciar a operação do controlador DMA, indicando qual a operação deve ser realizada (leitura ou escrita), qual endereço do dispositivo deve ser acessado e em que posição da memória e quantos dados devem ser copiados (16). 18 Capítulo 3. Fundamentação Teórica 3.5 BIOS A BIOS, acrônimo para Basic Input-Output System (em português, Sistema Básico de entrada e saída), é um pequeno programa armazenado em uma memória não volátil do processador. Assim, quando o processador é inicializado a BIOS começa suas atividades, testando os periféricos, os dispositivos de armazenamento principal e dar início ao processo de boot, que é a operação de passagem do sistema operacional do disco para a memória do processador (17). 19 4 Desenvolvimento do Trabalho 4.1 BIOS Ao se realizar a programação no Kit DE2-115, será realizado o teste de partida para verificação e diagnóstico dos componentes do sistema. A Tabela 3 apresenta quais os componentes testados, a sequência e como será realizado o teste. Tabela 3 – Sequência, Componentes do Sistemae testes realizados pela BIOS Sequência Componentes do Sistema Teste realizado 1 Display de 7 segmentos Serão apresentados em os displays a sequência de 0 a 9, acrescen- tando uma unidade a cada 1 segundo, caso haja algum erro, o usuário deverá mover algum switch ou pressionar um botão. 2 LEDs Todos os LEDs utilizados pelo processador serão testados, acen- dendo um de cada vez, cada LED aceso por um segundo, caso haja algum erro, o usuário deverá pressionar um botão. 3 Switch O usuário deverá inserir números binários através dos switches, onde cada um representa um bit, e este número será apresentado na forma binária nos LEDs e decimal no display de sete seguimentos, por 10 segundos, caso haja algum erro, o usuário deverá pressionar um botão. 4 Botões O usuário terá 10 segundos para aperta qualquer um dos quatro botões e o respectivo número do botão deverá ser apresentado na forma decimal no display de 7 segmentos, caso haja algum erro, o usuário deverá mover algum switch. Fonte: O Autor Em seguida, deverá ser identificado os dispositivos de armazenamento principal, para isso, o processador deverá solicitar quatro números ao usuário através dos switches, armazenar este número em posições aleatórias da memória e realizar a leitura do mesmo, apresentando o valor no display de sete segmentos, caso haja algum erro, o usuário deverá apertar o botão KEY3 do KIT. Com os testes encerrados, a BIOS deverá carregar o Sistema Operacional do disco para a memória principal. O Sistema Operacional estará localizado nas primeiras linhas do disco, estas, normalmente, são conhecidas como “linha zero”. Encerrado, será ativado o processador para execução do Sistema Operacional. 4.2 Comunicação e usabilidade Toda comunicação e usabilidade do usuário com o Sistema Operacional será reali- zada através de um shell, utilizando os switches e botões para seleção e o display de sete segmentos e LEDs para identificação de o que está sendo realizado. 20 Capítulo 4. Desenvolvimento do Trabalho O usuário poderá, através do shell solicitar que o Sistema Operacional faça: 1. Criar um programa: O Sistema Operacional terá 10 algoritmos disponíveis para serem criados, apresentados e indexados na Tabela 4, seus códigos estão no Apêndice. Para cria-lo, o usuário deverá escolher a opção 1, pressionar o botão 0, escolher qual é o programa com o índice da Tabela 4, ao escolher o programa, pressionar o botão 0 novamente e então informar qual o nome do programa, sendo ele um número entre 0 e 17, tamanho máximo de programas criados, não sendo permitido dois programas com o mesmo nome. Ao pressionar o botão 0 novamente o usuário retorna para o menu principal. Este processo pode ser repetido várias vezes, até o usuário executar os programas. 2. Renomear um programa: Para renomear um programa, o usuário deverá escolher, no menu principal, a opção 2 e apertar o botão 0, então deverá informar qual o número do programa, que deverá ser um programa já criado, apertar o botão 0 e então informar o novo nome do programa, sendo ele um número entre 0 e 17, não sendo permitido dois programas com o mesmo nome. 3. Deletar uma programa: Para remover um programa, o usuário deverá escolher, no menu principal, a opção 3 e apertar o botão 0, então deverá informar qual o número do programa, que deverá ser um programa já criado, apertar o botão 0 e em seguida o botão 1, para confirmar a exclusão ou 2, para cancelar a exclusão. 4. Executar um programa (Sem preempção): Caso o usuário deseje executar apenas um programa criado, deverá selecionar a opção 4 no menu principal, pressionar o botão 0, informar qual dos programas criado deseja executar e pressionar 0. 5. Executar um conjunto de programas (multitarefa com preempção): Caso o usuário deseje executar todos os programas criados, deverá selecionar a opção 5 no menu principal que os programas serão iniciados. Sempre que os programas estiverem em execução, o LED vermelho, com número respectivo ao processo, estará acesso para identificação do usuário. 4.3 Gerenciamento de processos Caso o usuário selecione a opção 4, será realizada a monoprogramação, então não será necessário escalonamento do processador. Na opção 5 será realizada a multiprograma- ção, onde o algoritmo de escalonamento empregado será o Round Robin, no entanto, não com o quantum constante, mas a quantidade de instruções executadas constante, sendo realizadas 20 instruções por programa, para então realizar a troca de contexto. 4.4. Gerenciamento de Memória 21 Tabela 4 – Sequência, Componentes do Sistema e testes realizados pela BIOS Sequência Componentes do Sistema 1 Identificar qual o número n da Sequência de Fibonacci. 2 Encontrar o Fatorial de um número n informado pelo usuário. 3 Realizar um algoritmo de teste, chamado Foo. 4 Inverter a sequência dos números, informados pelo usuário, de um vetor de tamanho n. 5 Identificar o maior elemento de um vetor de tamanho n, com números informados pelo usuário. 6 Identificar o máximo divisor comum (MDC) entre dois números informados pelo usuário. 7 Identificar o mínimo múltiplo comum (MMC) entre dois números informados pelo usuário. 8 Encontrar o resultado da Potenciação de uma base a elevada ao expoente b, infor- mados pelo usuário. 9 Identificar se um número informado pelo usuário é primo ou não. 10 Ordenar a sequência de n números, informados pelo usuário, através da Selection Sort. Fonte: O Autor Quando um processo for encerrado ele aguardará o fim dos demais programas. Quando um programa necessitar da entrada ou saída de um dado, esta informação será encaminhada para o DMA e aguardará ser liberado pelo mesmo. A princípio serão empregados apenas os conceitos de prevenir e identificar deadlocks, não se aplicando a recuperação. 4.4 Gerenciamento de Memória Decidiu-se utilizar a Memória Virtual com paginação para gerencia a memória. Para isso, cada página terá 30 linhas de instruções e de dados. Será criado uma tabela para mapeamento de onde os dados de cada programa criado estão armazenados. Não será implementado coletor de lixo no momento. 4.5 Gerenciamento do Sistema de Arquivos A organização dos arquivos será desenvolvida sem estruturação, ou seja, o sistema de alocação não irá impor nenhuma estrutura lógica para os dados, logo, em nível único. O único atributo utilizado será o nome, que será um número entre 1 e 17. 4.6 Gerenciamento de Dispositivos de Entrada e Saída Será utilizado o DMA para que o processador não pare seu funcionamento enquanto aguarda a entrada ou saída de um sinal. Para isso, será elaborada uma tabela informando quais programas estão bloqueados e quais estão prontos para execução. O DMA aguardará 22 Capítulo 4. Desenvolvimento do Trabalho a inserção dos dados faltantes informando através do LED qual é o programa que a entrada ou saída irá, utilizando um buffer para armazenar o dado. 23 5 Considerações Finais Com as especificações definidas neste ponto de checagem 2, o próximo passo será a inclusão e adaptações necessárias na plataforma de hardware para o Sistema Operacional ser executado. Será implementada a BIOS, o HD, as interrupções, temporizadores, pilhas e a troca de contexto. Tudo isso será simulado no software Quartus e serão realizados testes no KIT de desenvolvimento para comprovar a funcionalidade da plataforma de hardware. O desenvolvimento deste projeto não se desenvolveu conforme esperado por conta das muitas dúvidas que vieram da disciplina de Sistemas Operacionais teórico, além de haver necessidade de pequenas correções no processador e no compilador desenvolvido. Decidiu-se neste projeto utilizar as especificações mais simples para que quando estes objetivos forem alcançados o projeto possa buscar novos conceitos e tecnologias, evitando-se o contrário, que poderia gerar atrasos em unidades essenciais. 25 Referências 1 BARRETO, J. M. Sistema Operacional, UFSC. 2015. Citado 2 vezes nas páginas 5 e 11. 2 GOLFTHEMAN. Operating system placement-pt. 2013. Citado na página 5. 3 COUTINHO, D. Aula sobre processadoresministrada para o PRONATEC do IFRN. Citado na página 9. 4 WIKIPéDIA. Arquitetura MIPS. 2008. Citado na página 9. 5 RICARTE, I. L. M. Introdução à compilação. 2008. Citado na página 9. 6 WIKIPEDIA. Field-programmable gate array. 2017. Citado na página 10. 7 TECHNOLOGIES, T. Terasic - DE Main Boards - Altera DE2-115 Development and Education Board. Citado na página 10. 8 SOBRAL, M. M. Gerência de processos, IFSP. 2009. Citado na página 12. 9 BEZERRA, R. M. Conceitos de Sistemas Operacionais, CEFET/BA. 2008. Citado 4 vezes nas páginas 12, 13, 14 e 15. 10 BARCELAR, R. R. Sistemas Operacionais Abertos, Módulo 1, Gerência de Processos. 2017. Citado 3 vezes nas páginas 12, 13 e 14. 11 LEITE, A. SISTEMAS OPERACIONAIS, Deadlock. UNIVASF. 2017. Citado na página 14. 12 OLIVERIA, R. S. de. Sistemas Operacionais Série Livros Didáticos no11. UFRGS. 2008. Citado 2 vezes nas páginas 15 e 16. 13 RICARTE, I. L. M. Programação de Sistemas: uma introdução. 2008. Citado na página 15. 14 MAZIERO, C. A. Sistemas Operacionais: Conceitos e Mecanismos, VI - Gerência de Arquivos. UFPR. 2017. Citado na página 16. 15 NETO, A. de M. Ger. Citado 2 vezes nas páginas 16 e 17. 16 GUARDIA, H. C.; SENGER, H. Gerenciamento de Entrada e Saída. UAB/UFSCar. 2017. Citado na página 17. 17 COMPUTAçãO, C. de. Arquitetura de Computadores. UNICAMP. 2017. Citado na página 18. Folha de rosto Resumo Sumário Introdução Estrutura do documento Objetivos Geral Específico Fundamentação Teórica Processador Compilador FPGA - Field Programmable Gate Array Sistema Operacional Gerenciamento de Processos Escalonamento Estados do processo Threads Deadlock Gerenciamento de Memória Gerenciamento de Sistema de Arquivos Gerenciamento de Entrada/Saída BIOS Desenvolvimento do Trabalho BIOS Comunicação e usabilidade Gerenciamento de processos Gerenciamento de Memória Gerenciamento do Sistema de Arquivos Gerenciamento de Dispositivos de Entrada e Saída Considerações Finais Referências
Compartilhar