Buscar

trabalho S.O

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 20 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

centro universitário carioca
Paulo ricardo - 2017100583
Kernel de linux
Rio de janeiro
2017
centro universitário carioca
paulo ricardo - 2017100583
kernel de linux
	Trabalho da Atividade Prática Supervisionada apresentado ao Centro Universitário Carioca, como requisito parcial à obtenção de grau na disciplina Nome da Disciplina.
Professor: Fabio Henrique
Rio de janeiro
2017
Resumo
Muitas pessoas têm acesso a um computador e a uma suíte de aplicativos funcionando harmoniosamente para executar os trabalhos do dia-a-dia. Essa "harmonia" é possível graças ao sistema operacional funcionando como uma interface entre o software, o hardware e o usuário. 
A partir deste artigo iremos conhecer uma parte do sistema operacional extremamente importante e pouco conhecida pelos usuários: o kernel. No decorrer das ideias, haverá uma atenção especial no estudo do kernel do Linux, quebrando alguns mitos, conhecendo o que é o kernel de linux, as suas particularidades, as motivações para a sua criação, a sua arquitetura e a sua distribuição.
PALAVRAS-CHAVE: sistema operacional, kernel, Linux, software. 
figura 1. linux (http://www.diolinux.com.br/2017/07/como-compilar-um-kernel-linux-passo-a-passo.html
1. INTRODUÇÃO
A proposta deste trabalho de sistemas operacionais foi trabalhar com um sistema operacional real, no caso, o Linux. A ideia foi de aprender sobre funcionamento interno do Linux, para que depois pudéssemos alterar o seu código fonte de modo a adicionar uma chamada de sistema simples e colocá-la em funcionamento. As chamadas de sistema são o modo padrão para que um programa de usuário possa utilizar os serviços do Sistema Operacional.
1.1Objetivo
Descrever a estrutura do Sistema Operacional Unix, como funcionam o sistema de arquivos, o gerenciamento de memória, o escalonamento, os programas do sistema, a API de chamadas do sistema, características específicas para sistemas virtualizados, entre outros
1.2 Motivação
Estudar, por meio de pesquisas, um sistema operacional específico e de grande utilização. Como consequência disto, é obtido um maior conhecimento e entendimento do conteúdo exposto em sala de aula. O Unix foi escolhido pelos integrantes, dentre muitos motivos, por ser um dos primeiros, se não o primeiro, Sistemas Operacionais de código aberto. Essa característica dá ao usuário a possibilidade de melhorar o código fonte do sistema. Uma grande motivação também é o fato de vários sistemas operacionais recentes (inclusive os que rodam em celulares) serem baseados no Unix.
1.3Justificativa
o kernel dos sistemas GNU/Linux – o próprio Linux –, é o coração do um sistema operacional, ou seja, o núcleo do sistema. Sua principal função é gerenciar as operações e os processos realizados pelos usuários. Porém, somente com o kernel instalado, o sistema não estará apto para realizar atividade alguma. Para que estejam disponíveis mais funcionalidades, será necessária a adição de diversas ferramentas (aplicativos e utilitários). Este é o conceito básico de uma distribuição: o kernel do sistema agregado a um conjunto de diversas “peças de software”, como um interpretador de comandos, bibliotecas, ferramentas, serviços, interfaces gráficas, aplicações e utilitários.5 As primeiras distribuições surgiram numa época em que seus recursos eram restritivos e limitados, onde o campo maior de atuação era o de uso em sistemas de rede e servidores. Atualmente, o cenário mudou bastante: na diversidade de circunstâncias em que poderemos imaginar, os sistemas GNU/Linux podem ser aplicados, desde que sejam feitas as adaptações necessárias para que satisfaçam propósitos específicos. Além disso, se antes eram poucos os colaboradores, hoje há gente de tudo quanto é tipo para auxiliar (até usuários “fuxiqueiros”). Dada a sua boa disponibilidade de recursos, flexibilidade e versatilidade, praticamente não existem limites! Atualmente, existem distribuições variadas a tal ponto que algumas cabem em apenas um único disquete, enquanto que outras são designadas para uma série de finalidades específicas. Há ainda aquelas feitas para o uso
2. O que é o Kernel unix
O sistema Linux é o kernel do sistema, ou seja, um software responsável por controlar as interações entre o hardware e outros programas da máquina. O kernel traduz as informações que recebe ao processador e aos demais elementos eletrônicos do computador. O kernel é, portanto, uma série de arquivos escritos em linguagem C e Assembly, que formam o núcleo responsável por todas as atividades executadas pelo sistema operacional.
Apesar de ser a parte mais importante do sistema, já que ele fornece a interface para os programas conectarem-se com os recursos do sistema de um nível mais elevado, isoladamente, o kernel não é de grande utilidade para o usuário final. Por isso, foram criadas as distribuições Linux. De todo modo, o kernel tem controle sobre os dispositivos do sistema Linux, como redes, sistemas de arquivos, placas de som, vídeo, entre outros recursos.
	Figura 2. Kernel linux (http://ninjadolinux.com.br/wp-content/uploads/2016/05/kernel.png)
3. Como funciona o desenvolvimento de kernel Linux
Sempre são lançadas novas versões do kernel do sistema Linux com intuito de trazer melhorias à atualidade em funções específicas. O objetivo é também corrigir falhas e adicionar mais recursos ao kernel, além de compatibilidade com novos hardwares. Cada nova versão vem representada por três números diferentes separados por ponto final. Os dois primeiros números indicam qual série pertencem, já o terceiro aponta qual a versão do kernel dentro daquela série.
Quando o segundo número for ímpar, demonstra que a série ainda está em desenvolvimento, logo, representa uma versão instável e em fase de testes e melhorias. Por outro lado, quando o número é par, significa que a série tem estabilidade para funcionar. Por fim, o terceiro número se altera quando algum recurso é modificado ou adicionado.
O Kernel Linux completa, em 2017, 26 anos de existência. Seu criador, Linus Torvalds, afirmou, em entrevista a Embedded Linux Conference, que o sistema Linux está "tão desenvolvido quanto nunca". Torvalds coordena e acompanha, junto de seus colaboradores, todo o desenvolvimento do núcleo do sistema operacional desde 1992. As novas versões têm como objetivo oferecer mais vantagens para seus usuários, que notarão um sistema visualmente melhor, aumento na velocidade, entre outros benefícios.
 Figura 3. Como funciona o kernel linux(
www.ibm.com/developerworks/br/library/l-linux-kernel/index.html
4. A motivação para a criação do nucleo linux 
O sistema operativo Unix foi concebido e implementado por Ken Thompson e Dennis Ritchie (ambos dos AT&T Bell Laboratories) em 1969 e primeiramente lançado em 1970. Sua disponibilidade e portabilidade fizeram com que fosse amplamente adotado, copiado e modificado por instituições acadêmicas e negócios. Seu design influenciou autores de outros sistemas
Em 1983, Richard Stallman começou o Projeto GNU com o objetivo de criar um Sistema operacional tipo Unix gratuito e livre. Como parte desse trabalho, ele escreveu a GNU General Public License (GPL). No começo dos anos 1990, havia software quase suficiente para se criar um sistema operacional completo. Entretanto, o núcleo GNU, chamado de Hurd, não conseguiu atrair atenção suficiente dos desenvolvedores, deixando o GNU incompleto.
Outro projeto de sistema operacional livre, inicialmente lançado em 1977, foi o Berkeley Software Distribution (BSD). Foi desenvolvido pela Universidade da Califórnia em Berkeleya partir da versão 6 do Unix da AT&T. Uma vez que o BSD continha código do Unix do qual a AT&T era proprietária, a AT&T entrou com um processo (USL v. BSDi) no começo dos anos 1990 contra a Universidade da Califórnia. Isso limitou fortemente o desenvolvimentoe adoção do BSD. 
Em 1985, a Intel lançou o 80386, o primeiro microprocessador x86 com conjunto de instruções de 32-bit e MMU com paginação 
Em 1986, Maurice J. Bach, of AT&T Bell Labs, publicou The Design of the UNIX Operating System. Essa descrição definitiva cobria principalmente o núcleo System V versão 2, com algumas novas características da versão 3 e do BSD.
O MINIX, um sistema operacional tipo Unix pensada para uso acadêmico, foi lançado por Andrew S. Tanenbaum em 1987. Se bem o código-fonte do sistema estava disponível, modificações e redistribuições não era permitida. Ademais, o design do MINIX de 16-bit não se adaptou muito bem às características da cada vez mais barata e popular arquitetura de 32-bit do Intel 386 para computadores pessoais.
Esses fatores e a falta de uma adoção ampla de um kernel livre deram o impulso para que Torvalds iniciasse seu projeto. Ele declarou que se o núcleo GNU ou o núcleo 386BSDestivessem disponíveis naquela época, ele possivelmente não teria escrito o seu próprio.
4.1 O ano da Criação de núcleo Linux
Em 1991, em Helsinki, Linus Torvalds começou o projeto que mais tarde se tornaria o núcleo Linux. Era inicialmente um emulador de terminal, o qual Torvalds usava para acessar os grandes servidores UNIX da universidade. Ele escreveu um programa especificamente para o hardware que estava usando e independente de um sistema operacional porque queria usar as funções de seu novo computador com um processador 80386. 
O desenvolvimento foi feito no MINIX usando o GNU C compiler, o qual é ainda hoje a escolha principal para compilar o Linux (embora o código possa ser construído com outros compiladores, como o Intel C Compiler. 
Como Torvalds escreveu em seu livro Just for Fun, ele eventualmente percebeu que havia escrito o núcleo de um sistema operacional. No dia 25 de agosto de 1991, ele anunciou esse sistema em um post no newsgroup "comp.os.minix." da Usenet:
Figura 4 – A onipresença de núcleo Linux (https://pt.wikipedia.org/wiki/Linux_(n%C3%BAcleo)
5. Desenvolvimento do núcleo Linux
O desenvolvimento do sistema operacional Linux contou com a colaboração de milhares de desenvolvedores desde então, e novos aplicativos foram adicionados que permitiram o uso do sistema nos mais diversos dispositivos e fins. Linux está em praticamente todo lugar.
O roteador da sua casa, por exemplo, muito provavelmente utiliza Linux, assim como o codificador da sua TV a cabo. A internet é em grande maioria sustentada por servidores com sistemas Linux e outras soluções sob licença GPL. Softwares dominantes como servidor web Apache, DNS Bind, linguagens de programação PHP, Java, Javascripts, bancos de dados MySQL, PostgreSQL e tantos outros são outras soluções sob licença GPL, preferencialmente executadas em sistemas Linux e que fazem a web ser como conhecemos hoje.
Facebook e Netflix rodam em Linux. Assim como a nuvem computacional mais popular do mundo, a Amazon AWS. O sistema operacional Android é baseado em Linux e de forma tão intima que muitos o consideram Linux.
Em um mundo digital dominado por softwares livres, não se discute mais o uso do Linux. Ele está presente em  nossas vidas de uma forma ou de outra. Você pode até especializar-se em uma ferramenta proprietária, mas certamente irá se deparar com Linux em algum momento de sua carreira.
Conhecer Linux em qualquer nível é além de uma vantagem,  uma viagem impressionante ao descobrimento. E tudo pode começar no seu Desktop.
Figura 5 – desenvolvimento Linux 
( https://desenvolvimentoaberto.org/2016/12/05/r-tipos-linux/
5.1 Distribuições linux
Uma distribuição é um projeto com objetivo de empacotar um conjunto de aplicações Linux, com padrões estabelecidos e um assistente para instalação. Em uma analogia aos automóveis, seria uma montadora que une diversas peças para criação de um veículo pronto para ser usado.
Cada distribuição é criada para um perfil de uso. Há àquela voltadas à simplicidade no uso em desktops, outras para servidores, aquelas com focam em Media centers, em computadores mais antigos ou com interfaces touch. A escolha dependerá da necessidade.
Assim, para iniciar no Linux, sua primeira decisão deve ser qual distribuição usar e então desfrutar de um novo universo de possibilidades. Conte com uma comunidade muita receptiva a dúvidas de novos usuários e não deixe também de colaborar e seguir com esta corrente motivada pela transferência e evolução do conhecimento.
6. arquiteturas Linux
Figura 6 – Arquitetura linux
https://www.portalgsti.com.br/2017/01/arquitetura-do-linux.html
6.1 Micro-kernel: 
uma porção mínima de código responsável por atividades básicas, sendo os demais recursos providos por servidores localizados em espaço de usuário; facilita a programação e aumenta a segurança, uma vez que há menos código dependente de hardware e em modo kernel.
 Figura 7 – arquitetura micro kernel
https://sites.google.com/site/proffernandosiqueiraso/aulas/4-estrutura-do-sistema-operacional
6.2 Monolítico
todas as atividades básicas são executadas em modo kernel, sendo que novas funcionalidades são providas como módulos de kernel, ao invés de servidores em espaço de usuário; busca maior eficiência ao evitar trocas de contexto.
 Figura 8 – Arquitetura monolítico
 pt.slideshare.net/leoro7/goldark-microservices
6.3 Híbrido
segue uma abordagem próxima ao micro-kernel, porem os servidores podem executar codigo em modo kernel, reduzindo os custos devido a trocas de contexto.
 Figura 9 – Arquitetura hibrida
https://pt.wikibooks.org/wiki/Redes_de_computadores/Camada_de_aplicao
6.4 Sistemas de arquivos
O Linux fornece algumas camadas de abstração para a gerência de arquivos. Essas camadas de abstração permitem que sejam utilizados múltiplos sistemas de arquivos em múltiplos dispositivos de armazenamento.
Sistemas de arquivo são modelos acerca da organização lógica dos arquivos, podendo não lidar com dispositivos de armazenamento (como o PROCFS, gerado durante o carregamento do sistema e que permite obter informações do kernel, o DEVFS, que interagir com dispositivos através de chamadas de sistema de E/S).
Como exemplos de sistemas de arquivos implementados para o Linux, temos EXT3, JFS, NFS, GmailFS e WikipediaFS, sendo os dois ´últimos implementados em espaço de usuário, através do FUSE.
Cada sistema de arquivos deve lidar com algumas estruturas básicas: o superblock, o inode e o dentry.
superblock: responsável por armazenar informações como o tipo do sistema de arquivos, tamanho, dispositivo, lista de inodes e suas operações básicas, como criação e remoção de inodes.
inode: representa um objeto do sistema de arquivos (um arquivo ou um diretório), contendo informações como dono, grupo, permissões, blocos e operações (como leitura e escrita no arquivo).
dentry: responsável por estabelecer a relação entre nomes de arquivos e inodes.
6.5 Gerencia de memoria 
O gerenciamento de memória no Linux ´e feito através de um esquema de memória virtual, o qual implementa uma camada de abstração que faz com que os endereços vistos pelos programas de usuários não correspondam diretamente aos endereços em hardware.
O uso de memória virtual busca atingir alguns objetivos, como:
Relocação: um programa deve ser capaz de executar em diferentes pontos da memória.
Proteção e compartilhamento: processos co-existentes não devem interferir uns nos outros (exceto quanto explicitado).
Transparência: uma aplicação não precisa de informação sobre o tamanho da memória, uma vez que não precisa restringir-se `a memória fisicamente disponível.
6.6 gerencia de processos
Um processo pode ser usualmente definido como uma instância de um programa em execução, podendo haver vários processos de um mesmo programa rodando ao mesmo tempo. O Linux diferencia claramente um processo de um programa: um processo ´e criado através da função do fork() do kernel – aqual pode ser acionada pelo usuário através da chamada de sistema fork() –, enquanto que um programa ´e carregado através da família de chamadas de sistema exec().
Inicialmente o kernel Linux não oferecia suporte a aplicações com m´múltiplas threads, sendo que elas deveriam ser implementadas em modo usuário; isso causava problemas pois quaisquer chamadas que levassem ao bloqueio de uma das threads do processo em n´nível de kernel fazia com que todas as outras threads daquele processo acabassem bloqueadas.
Atualmente o Linux oferece esse suporte no kernel, sendo que tanto processos como threads são implementados utilizando a ideia de processos leves (lightweight process).
Dois processos leves podem compartilhar alguns recursos, como espaço de endereçamento e arquivos abertos, de tal forma que sempre que um dos processos modifica um dos recursos, o outro pode imediatamente perceber a alteração.
No kernel cada processo leve ´e representado por uma estrutura chamada task struct.
Esta estrutura armazena informações completas sobre a execução do processo, como identificadores, prioridades de execução, estado da execução da tarefa, processos relacionados (pais e filhos), apontador para a pilha de execução e o estado da tarefa (dependente de arquitetura), utilizado para permitir a troca de tarefas em execução.
Cada processo leve possui um identificador ´único, chamado pid, sendo que threads de um mesmo processo formam um grupo, identificado pelo valor de tgid, igual ao pid da primeira tarefa no grupo; o valor de tgid ´e o valor retornado pela chamada de sistema get pid().
6.7 Chamadas de arquivos
As chamadas de sistemas são funções (interfaces) usadas pelos aplicativos para solicitar a execução de algum serviço ao kernel do sistema operacional. Por isso, as chamadas de sistemas são instruções com maior privilégio quando comparadas às outras instruções.
Com as chamadas de sistemas é possível, por exemplo, definir acesso a recursos de baixo nível como alocação de memória, periféricos e arquivos. Além disso, são as chamadas de sistemas que permitem a criação e a finalização de processos.
Quando a execução de uma chamada de sistema é solicitada, o sistema operacional salva todo o contexto do processo (para continuar mais tarde de onde parou), verifica as permissões envolvidas no pedido e autoriza (se for o caso) o processador a executar o serviço solicitado.
Quando o processador termina a execução da chamada de sistema, o sistema operacional retorna o controle para o processo, colocando-o novamente na fila de processos prontos para a execução.
 Figura 10 – chamadas de sistemas
 http://www.uniriotec.br/~morganna/guia/chamadas.html
7. Conclusão
Aos que se interessam por esse tipo de estudo, entender o que é o kernel de um sistema operacional e como ele funciona é algo realmente fantástico. Talvez essa questão não seria tão conhecida entre os adeptos da computação se o Linux não fosse um sistema de código-fonte aberto. Graças a ele, qualquer pessoa pode tirar proveito do sistema operacional, ou melhor, do kernel, seja para estudar seu funcionamento, seja para usá-lo em seu cotidiano. O kernel é o núcleo de um sistema operacional e assim, não é errado dizer que o Linux é o coração das distribuições GNU/Linux. Mas isso é pouco. O Linux, mesmo que indiretamente, é um dos grandes responsáveis pela divulgação das filosofias que regem a cultura do software livre.
8. REFERÊNCIAS BIBLIOGRÁFICAS
J. Corbet, A. Rubini, and G. Kroah-Hartman. Linux Device Drivers, 3rd Edition. O’Reilly Media, Inc., 2005.
A D’Assumpção. Introdução aos linux device drivers. http://www.adassumpcao.net/ introdução-aos-Linux-device-drivers, 2007. [Online; acessado em 6-maio-2009].
M. T. Jones. Anatomy of the linux kernel. http://www.ibm.com/developerworks/linux/library/ l-linux-kernel/, 2007. [Online; acessado em 4-maio-2009]
Wikipedia. Microkernel — wikipedia, the free encyclopedia. http://en.wikipedia.org/w/index.php?title= Microkernel&oldid=287802400, 2009. [Online; acessado em 4-maio-2009].
P. Larson. Kernel comparison: Improved memory management in the 2.6 kernel. http: //www.ibm.com/developerworks/library/l-mem26/, 2004. [Online; acessado em 5-maio-2009].

Outros materiais