




























































































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Curso Completo-Linux e avançado.pdf
Tipologia: Notas de estudo
1 / 249
Esta página não é visível na pré-visualização
Não perca as partes importantes!





























































































Índice 1 Introdução................................................................................. ......................
2 Histórico do Linux................................................................................. ..........
3 Gerência de Processos........................................................................... ..........
3.1 Considerações Iniciais....................................................................... ......
3.1. Inicialização (“boot” do sistema).................................................
3.2 Gerência do Processo pelo kernel............................................................
3.3 Criando e Destruindo um Processo.........................................................
3.4 Executando Processos.................................................................... ........
4 Gerência de Memória............................................................................. ..........
4.1 Gerenciamento de Memória do Linux.....................................................
4.2 Memória Física.......................................................................... .............
4.3 Distribuição da Memória do Processo Usuário........................................
4.4 Inicialização da Memória..................................................................... ...
4.5 Adquirindo e Liberando Memória...........................................................
4.6 Paginação (Paging)...................................................................... ...........
4.7 Gerenciamento de Memória Cache..........................................................
4.7. Arquitetura de Memória Cache do Linux (Linux Flush Architecture) .................................................... .......................... 4.7. Implementação de Memória Cache..............................................
4.7. Arquitetura Baseada no SMP.......................................................
4.7.3.1- Arquitetura Baseada no contexto MMU/CACHE......
4.7. Conteúdo de uma Arquitetura Virtual..........................................
Índice
5.1. Acesso a Arquivos............................................................ ...........
5.1. Atributos dos Arquivos............................................................ ....
5.2 Operações sobre Arquivos..................................................................... .
5.3 Arquivos Compartilhados.......................................................... ..............
5.4 Estrutura do Sistema de Arquivos Linux Realease 1.2.............................
5.4. Apresentação............................................................ ...................
5.4. Características Sistema de Arquivos.............................................
5.4. Composição dos Diretórios..........................................................
5.4.3.1- Subdiretório /bin.................................................... ...
5.4.3.1.1- Arquivos e/ou Comandos disponíveis em /bin................................. .............. Índice
5.4.3.2- Subdiretório /boot.................................................. ...
5.4.3.3- Subdiretório /dev................................................... ....
5.4.3.4- Subdiretório /etc.................................................... ...
5.4.3.4.1- Arquivos e/ou Comandos disponíveis em /etc.................................. ............. 5.4.3.5- Subdiretório /home................................................ ....
5.4.3.6- Subdiretório /lib..................................................... ..
5.4.3.7- Subdiretório /mnt.................................................. ....
5.4.3.8- Subdiretório /proc.................................................. ...
5.4.3.9- Subdiretório /root (opcional)....................................
Subdiretório /usr/etc...........................
Subdiretório /usr/include.................... .
Subdiretório /usr/lib........................... .
Índice 5.4.3.12.
Subdiretório /usr/man........................ .
Subdiretório /usr/bin.......................... .
Subdiretório /usr/share.......................
Subdiretório /usr/src...........................
A hierárquia /var.................................................... ...
Subdiretório /var/adm.........................
Subdiretório /var/catman.................... .
Subdiretório /var/lib............................
Subdiretório /var/local........................
Subdiretório /var/ock.........................
Subdiretório /var/og............................
Subdiretório /var/name.......................
Subdiretório /var/nis...........................
Subdiretório /var/preview...................
Subdiretório /var/run..........................
Subdiretório /var/spool.......................
Subdiretório /var/tmp......................... .
5.4. Alguns Dilemas sobre o Sistema de Arquivos...............................
1 - Introdução O Linux é um clone UNIX de distribuição livre para PCs baseados em processadores 386/486/Pentium. O Linux é uma implementação independente da especificação POSIX, com a qual todas as versões do UNIX padrão (true UNIX) estão convencionadas. O Linux foi primeiramente desenvolvido para PCs baseados em 386/486/Pentium, mas atualmente também roda em computadores Alpha da DEC, Sparcs da SUN, máquinas M68000 (semelhantes a Atari e Amiga), MIPS e PowerPCs. O Linux foi escrito inteiramente do nada, não há código proprietário em seu interior. O Linux está disponível na forma de código objeto, bem como em código fonte. O Linux pode ser livremente distribuído nos termos da GNU General Public License (veja apêndice). O Linux possui todos as características que você pode esperar de um UNIX moderno, incluindo:
A maioria dos programas rodando em Linux são freeware genéricos para UNIX, muitos provenientes do projeto GNU. Muitas pessoas tem executado benchmarks em sistemas Linux rodando em 80486, e tem achado o Linux comparável com workstations médias da Sun e da Digital. O Linux está disponível através da Internet por meio de centenas de sites FTP. O Linux está sendo usado hoje em dia por centenas e centenas de pessoas pelo mundo. Está sendo usado para desenvolvimento de softwares, networking (intra-office e Internet), e como plataforma de usuário final. O Linux tem se tornado uma alternativa efetiva de custo em relação aos caros sistemas UNIX existentes. Um exemplo de pacote de distrribuição do Linux mais populares é distribuido pela InfoMagic (http://www.infomagic.com, e-mail [email protected]), a versão LINUX Developer’s Resource CD-ROM, de dezembro de 1996, contém 6 CD-ROMs, seu conteúdo sucinto é :
colocar os fontes para ampla distribuição. Ele está na versão 0.02... contudo eu tive sucesso rodando bash, gcc, gnu-make, gnu-sed, compressão, etc. nele. No dia 5 de outubro de 1991 Linus Torvalds anunciou a primeira versão "oficial" do Linux, versão 0.02. Desde então muitos programadores têm respondido ao seu chamado, e têm ajudado a fazer do Linux o Sistema Operacional que é hoje. Ultimas versões do kernel do Linux Release v1. 1.0. Data: Sat Apr 16 21:18:02 UTC 1994 Release v1. 1.1. Data: Thu Mar 2 07:47:10 UTC 1995 Release v1. 1.2. Data: Wed Aug 2 12:54:12 UTC 1995 Release v1. pre2.0. Data: Thu Jun 6 19:30:56 UTC 1996 Release v2. 2.0. Data: Tue Jan 14 12:33:26 UTC 1997 ftp://ftp.cs.Helsinki.FI/pub/Software/Linux/Kernel/v2.0/linux -2.0.28.tar.gz
Release v2. 2.1. Data: Sun Jan 26 14:12:18 UTC 1997 ftp://ftp.cs.Helsinki.FI/pub/Software/Linux/Kernel/v2.1/linux -2.1.23.tar.gz
Quando o PC é ligado, o processador 80x86 encontra-se em modo real e executa o código contido no endereço 0xFFFF0, que corresponde a um endereço ROM-BIOS. O BIOS do PC realiza alguns testes no sistema e inicializa o vetor de interrupções no endereço físico
mais O encapsulamento do kernel em um arquivo gzip é realizado por Makefile e utilitários no diretório zBoot. São arquivos interessantes para se dar uma olhada. novo A versão 1.1.75 moveu os diretórios boot e zBoot para arch/i386/boot. Esta modificação pretendeu possibilitar a construção de "kernel verdadeiro" para diferentes arquiteturas. O código "descompresso" é executado a partir do endereço 0x1010000 , onde todo o setup 32-bit esta lotado: IDT, GDT e LDT são carregados, o processador e o co-processador são identificados, a rotina start_kernel é invocada. Os arquivos fonte das operações acima estão em boot/head.S. Este, talvez, seja o código mais difícil em todo o kernel do Linux. Note que se algum erro ocorrer durante alguns dos passos precedentes, o computador irá travar. O sistema operacional não pode manipular erros enquanto não estiver totalmente operante. start_kernel() reside em init/main.c. Tode de agora em diante esta codificado em linguagem C, exceto gerência de interrupções e chamadas de sistemas (Bem, a maior parte das macros possuem códigos assembly embutidos, também). Depois dos procedimentos com todas as questões iniciais, start_kernel() inicializa todas as partes do kernel, especificamente:
registradores de hardware até o inode do diretório de trabalho para o processo. A tabela de processos é tanto um array quanto uma lista duplamente ligada, como uma árvore. A implementação física é um array estático de ponteiros, cujo tamanho é NR_TASKS, uma constante definida em include/linux/tasks.h, e cada estrutura reside em uma pagina de memória reservada. A estrutura da lista está entre os ponteiros next_task e prev_task, a estrutura em arvore é um tanto complexa, e não será descrita aqui. Voce pode desejar mudar NR_TASKS do seu valor default (que é 128), mas esteja certo de que há dependências, e será necessário recompilar todos os arquivos fonte envolvidos. Depois do boot, o kernel está sempre trabalhando em um dos processos, e a variável global "current", um ponteiro para um item da task_struct, é usado para guardar o processo que está rodando. A variável "current" só é mudada pelo scheduler, em kernel/sched.c. Quando, porém, todos os processos necessitarem estar looked, a macro for_each_task é usada. Isto é consideravelmente mais rápido que uma procura seqüencial no array. Um processo está sempre rodando em ou em "modo usuário" ou em "modo kernel". O corpo principal de um programa de usuário é executado em modo usuário e chamadas a sistema são executados em modo kernel. A pilha usada pelos processos netes dois modos de execução são diferentes – um seguimento de pilha convencional é usado para o modo usuário, enquanto uma pilha de tamanho fixo (uma página, cujo processo é dono) é usada no modo kernel. A página de pilha para o modo kernel nunca é swapped out, porque ela pode estar disponível sempre que um system call é introduzido. Chamadas a sistema (System calls), no kernel do Linux, são como funções da linguagem C, seu nome "oficial" esta prefixado por "sys_". Uma chamada a sistema de nome, por exemplo, burnout invoca a função de kernel sys_burnout().
mais O mecanismo de chamadas a sistema (System calls) está descrito no capítulo 3 do Linux Kernel Hackers' Guide (http://www.redhat.com:8080/HyperNews/get/khg.html). Uma olhada em for_each_task e SET_LINKS, em include/linux/sched.h pode ajudar a entender a lista e a estrutura de árvore da tabela de processos.