Docsity
Docsity

Prepare-se para as provas
Prepare-se para as provas

Estude fácil! Tem muito documento disponível na Docsity


Ganhe pontos para baixar
Ganhe pontos para baixar

Ganhe pontos ajudando outros esrudantes ou compre um plano Premium


Guias e Dicas
Guias e Dicas


Curso Completo-Linux e avançado, Notas de estudo de Matemática

Curso Completo-Linux e avançado.pdf

Tipologia: Notas de estudo

Antes de 2010

Compartilhado em 30/04/2010

Gisele
Gisele 🇧🇷

4.4

(56)

227 documentos

1 / 249

Toggle sidebar

Esta página não é visível na pré-visualização

Não perca as partes importantes!

bg1
Índice
1 Introdução.................................................................................
......................
6
2 Histórico do
Linux.................................................................................
..........
8
3 Gerência de
Processos...........................................................................
..........
10
3.1 Considerações
Iniciais.......................................................................
......
10
3.1. Inicialização (“boot” do
sistema).................................................
10
3.2 Gerência do Processo pelo
kernel............................................................
12
3.3 Criando e Destruindo um
Processo.........................................................
13
3.4 Executando
Processos....................................................................
........
13
4 Gerência de
Memória.............................................................................
..........
15
4.1 Gerenciamento de Memória do
Linux.....................................................
15
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f
pf30
pf31
pf32
pf33
pf34
pf35
pf36
pf37
pf38
pf39
pf3a
pf3b
pf3c
pf3d
pf3e
pf3f
pf40
pf41
pf42
pf43
pf44
pf45
pf46
pf47
pf48
pf49
pf4a
pf4b
pf4c
pf4d
pf4e
pf4f
pf50
pf51
pf52
pf53
pf54
pf55
pf56
pf57
pf58
pf59
pf5a
pf5b
pf5c
pf5d
pf5e
pf5f
pf60
pf61
pf62
pf63
pf64

Pré-visualização parcial do texto

Baixe Curso Completo-Linux e avançado e outras Notas de estudo em PDF para Matemática, somente na Docsity!

Í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/local........................

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:

  • Multitarefa real
  • Memória virtual
  • Biblioteca compartilhada
  • "Demand loading"
  • Gerenciamento de memória próprio
  • Executáveis "copy-on-write" compartilhados
  • Rede TCP/IP (incluindo SLIP/PPP/ISDN)
  • X Windows

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 é :

  • Versão Red Hat 4.0 (instalando kernel 2.0.18)
  • Versão Slackware 3.1 (Slackware 96 - instalando kernel 2.0)
  • Versão Debian GNU/Linux 1.
  • X-Windows - Xfree86 version 3.
  • Arquivos Linux de tsx-11.mit.edu e sunsite.unc.edu
  • Arquivos GNU de prep.ai.mit.edu
  • Documnetação completa on-line & HOWTO’s (Guia de Instalação e Guia do Administrador da Rede, em inglês)
  • Softwares demostração comerciais como : BRU, dbMan, StarOffice, Cockpit, Flagship, Smartware, GP Modula-2, Pathfinder, Scriptum, etc.

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

  1. Depois disto ele carrega o primeiro setor do device bootavel em 0x7C00, e passa a execução para este endereço. O device é, usualmente, o disquete ou o disco rígido. A descrição anterior é um tanto simplificada, mas é tudo que se necessita para entender o trabalho inicial do kernel. A primeiríssima parte do kernel Linux está escrito em linguagem assembly 8086 (boot/bootsect.S). Quando é executado, ele se move para o endereço absoluto 0x90000, carrega os próximos 2 kBytes de código do device de boot até o endereço 0x90200, e o resto do kernel para o endereço 0x10000. A mensagem "Loading..." é apresentada durante o carregamento do sistema. O controle é, então passado para o código contido em boot/Setup.S, outro código assembly de modo real. A parte de "setup" identifica algumas características do sistema (hardware) e o tipo da placa VGA. Se requerido, pede ao usuário para escolher o modo do vídeo da console. E, então, move todo o sistema do endereço 0x10000 para o endereço 0x1000, passa para o modo protegido e passa o controle para o resto do sistema (endereço 0x1000). O próximo passo é a descompressão do kernel. O código em 0x1000 vem de zBoot/head.S que inicializa os registradores e invoca decompress_kernel(), o qual é composto por zBoot/inflate.c, zBoot/unzip.c e zBoot/misc.c. O dado "descompresso" vai para o endereço 0x100000 (1 Mega), e esta é a principal razão do por que o Linux não pode rodar com menos de 2 Megas de RAM.

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:

  • Inicializa a memória e chama paging_init().
  • Inicializa os traps, canais IRQ e scheduling.
  • Se requerido, aloja um profiling buffer.
  • Inicializa todos device drives e buffers de discos, bem como outras partes menores.
  • Regula o delay loop (calcula o numero "BogoMips").
  • Checa se a interrupção 16 está trabalhando com o co-processador.

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.