kernel linux slide

111

Upload: vitalino-victor

Post on 22-Nov-2014

479 views

Category:

Technology


0 download

DESCRIPTION

Arquitetura Linux por Vitalino Victor

TRANSCRIPT

Page 1: Kernel Linux slide
Page 2: Kernel Linux slide

aluno@Apresentacao :~$ echo “Introdução”

Linux é um termo utilizado para se referir a sistemas operacionais que utilizem o núcleo Linux.

Tecnicamente, Linux é um sistema operacional multi-usuário e multi-tarefa, ou seja, ele possibilita que múltiplos usuários conectem-se e, cada um deles, executem mais que um programa ao mesmo tempo.

Inicialmente desenvolvido e utilizado por grupos de entusiastas em computadores pessoais, os sistemas operacionais com núcleo Linux passaram a ter a colaboração de grandes empresas como IBM, Sun Microsystems, Hewlett-Packard (HP), Red Hat, Novell, Oracle, Google, Mandriva e Canonical.

Page 3: Kernel Linux slide

aluno@Apresentacao :~$ echo “Introdução”

Page 4: Kernel Linux slide

aluno@Apresentacao :~$ echo “Introdução”

Page 5: Kernel Linux slide

aluno@Apresentacao :~$ echo “Introdução”

Page 6: Kernel Linux slide

$ Breve história: do UNIX ao LINUX

"O Unix é muito simples, mas é preciso ser um gênio para entender esta simplicidade " - Dennis Ritchie

Page 7: Kernel Linux slide

$ Breve história: do UNIX ao LINUX

Em 1963, o MIT, os laboratórios da Bell (empresa de telecomunicações estadunidense, subsidiária da gigante telefônica AT&T) e a General Eletric Company uniram-se para criar um sistema operacional revolucionário. Baseando-se nos computadores da General Eletric, o projeto tinha como objetivos:● Ser multiusuário;● Ser multitarefa;● Oferecer grande capacidade de armazenamento para dados e

programas;● Permitir compartilhamento de dados entre usuários e grupos.

AT&TMIT GE-645

Page 8: Kernel Linux slide

O projeto foi batizado de MULTICS, numa referência ás suas capacidades multiusuário e multitarefa (sigla para Multiplexed Information and Computing Service).

Embora o Bell Labs fosse um dos parceiros fundadores do projeto MULTICS, mais tarde o abandonou, deixando um de seus pesquisadores, Ken Thompson, procurando por algo interessante para fazer. Ele, por fim, decidiu escrever por si próprio um MULTICS mais enxuto (em linguagem assembly) em um minicomputador PDP-7 abandonado.

PDP-7 Ken Thompson

$ Breve história: do UNIX ao LINUX

Page 9: Kernel Linux slide

Independente do pequeno tamanho do PDP-7, o sistema realmente funcionava e dava suporte aos esforços de desenvolvimento de Thompson.

Por causa disso, outro pesquisador do Bell Labs, Brian Kernighan, em tom de brincadeira, chamou o sistema de UNICS (Uniplexed Information and Computing Service).

$ Breve história: do UNIX ao LINUX

Brian Kernighan

Em razão a uma limitação da quantidade de caracteres usados para nomear arquivos no sistema da época, o 'UNICS' passou a ser chamado de 'UNIX', substituindo o 'CS' por 'X' conservando a mesma pronúncia.

Page 10: Kernel Linux slide

O trabalho de Thompson impressionou tanto seus colegas do Bell Labs que, em pouco tempo, ele recebeu a adesão de Dennis Ritchie e, posteriormente, do departamento inteiro.

O segundo desenvolvimento deu-se na linguagem na qual o UNIX foi escrito (assembly). Naquele momento, já estava se tornando trabalhoso e nada divertido precisar reescrever o sistema todo para cada nova máquina, de modo que Thompson decidiu reescrever o UNIX em uma linguagem de alto nível desenvolvida em seu próprio projeto, chamada B.

$ Breve história: do UNIX ao LINUX

Linguagem B

Page 11: Kernel Linux slide

Ritchie então projetou uma sucessora para B, chamada C, e escreveu um compilador excelente para ela. Juntos, Thompson e Ritchie reescreveram o UNIX em C.

Em 1974, Ritchie e Thompson publicaram um artigo fundamental sobre o UNIX. Essa publicação estimulou muitas universidades a pedir ao Bell Labs uma cópia do UNIX. Visto que a companhia detentora do Bell Labs, a AT&T, era um monopólio regulamentado naquela época e que não podia estar no ramo de computadores, ela não tinha como ir contra o licenciamento do UNIX para as universidades por uma taxa modesta.

$ Breve história: do UNIX ao LINUX

Dennis Ritchie

Page 12: Kernel Linux slide

Dentro de poucos anos, a Versão 6 do UNIX foi substituída pela Versão 7, a primeira versão portátil desse sistema (ela executava no PDP-11 e no Inderdata 8/32), a qual tinha, naquela época, 18.800 linhas de C e 2.100 linhas em linguagem assembly.

No meio da década de 1980, o UNIX era amplamente usado em mini-computadores e estações de trabalho de vários fabricantes.

Curiosidade:

$ Breve história: do UNIX ao LINUX

Uma delas era um pequeno grupo de desenvolvimento chamado Microsoft, que comercializou a versão 7 sob o nome de XENIX durante vários anos, até que seus interesses mudaram.

Disquete de instalação do XENIX

Page 13: Kernel Linux slide

Após ter sido dissolvida em 1984 pelo governo dos Estados Unidos, a AT&T foi legalmente liberada para ativar uma subsidiária de computadores e assim o fez.

Logo em seguida, ela lançou seu primeiro produto UNIX comercial, o System III. Como não foi bem recebido, foi substituído por uma versão melhorada, o System V, um ano depois.

$ Breve história: do UNIX ao LINUX

Page 14: Kernel Linux slide

O SystemV tem sido, desde então, substituído pelas versões 2,3 e 4, cada uma maior e mais complexa do que sua anterior.

A AT&T finalmente decidiu ser uma companhia de comunicações, e não mais de computadores, e assim vendeu seus negócios de UNIX para a Novell em 1993. A Novell, por sua vez, vendeu para a Santa Cruz Operation em 1995.

Depois de tudo isso, era quase irrelevante saber quem era o proprietário do UNIX, visto que todas as maiores companhias de computadores já tinham suas próprias licenças.

$ Breve história: do UNIX ao LINUX

Page 15: Kernel Linux slide

UNIX de BerkeleyUma das maiores universidades que adquiriram a versão 6 do

UNIX antecipadamente foi a Universidade da Califórnia, em Berkeley.

$ Breve história: do UNIX ao LINUX

University of California, Berkeley

Page 16: Kernel Linux slide

Como o código-fonte estava disponível, Berkeley foi capaz de modificar o sistema substancialmente.

Auxiliada pelos financiamentos da Agência de Projetos de Pesquisas Avançadas (ARPA) do Departamento de Defesa dos Estados Unidos, Berkeley produziu e lançou uma versão melhorada para o PDP-11, chamada de 1BSD (First Berkeley Software Distribution) seguida rapidamente pelo 2BSD, também para o PDP-11.

$ Breve história: do UNIX ao LINUX

O mais importante foi o 3BSD e especialmente seu sucessor, 4BSD, para o VAX. Em contraste, o sistema 4BSD continha um grande número de melhorias. A principal delas foi o uso de memória virtual e paginação, que permitiu a execução de programas maiores do que a memória física.

Page 17: Kernel Linux slide

● Outra mudança permitiu que os nomes de arquivos contivessem mais do que 14 caracteres.

● A implementação do sistema de arquivos também foi incrementada, deixando-o consideravelmente mais rápido.

● O tratamento de sinais ficou mais confiável.● Foi introduzido o uso de redes, o que permitiu que o protocolo de

redes utilizado, o TCP/IP, se tornasse um padrão de facto no mundo UNIX e posteriormente na Internet.

$ Breve história: do UNIX ao LINUX

Page 18: Kernel Linux slide

Berkely também incorporou um número substancial de programas utilitários para o UNIX.

Todas essas melhorias fizeram com que a Sun Microsystems, a DEC e outros vendedores de computadores baseassem suas versões do UNIX no UNIX de Berkeley, em vez de uma versão 'oficial' da AT&T – System V.

$ Breve história: do UNIX ao LINUX

Fita de instalação do SunOS

Page 19: Kernel Linux slide

Padronização entre sistemas UNIX:A primeira tentativa séria de reconciliar os dois 'sabores' de UNIX

foi iniciada sob os auspícios da Comissão de Padrões do IEEE.Centenas de pessoas dos setores industrial, acadêmico e

governamental tiveram participação nesse trabalho.O nome coletivo para esse projeto foi POSIX. As primeiras três

letras referem-se a sistema operacional portátil (portable operating system). O IX foi adicionado para deixar o nome parecido com o do UNIX.

$ Breve história: do UNIX ao LINUX

Page 20: Kernel Linux slide

MINIX:O Minix é um sistema operacional Unix-like (semelhante ao UNIX),

escrito em linguagem C e assembly. Ele é gratuito e com o código fonte disponível.

$ Breve história: do UNIX ao LINUX

Page 21: Kernel Linux slide

MINIX:Uma propriedade comum a todos os sistemas UNIX modernos é

que eles são grandes e complicados e, em certo sentido, isso é a antítese da ideia original associada ao UNIX. Ainda que os códigos-fonte fossem disponibilizados livremente – o que não ocorre na maioria dos casos -, está fora de cogitação que uma única pessoa compreendê-los totalmente.

Essa situação levou Andrew Tanenbaum a escrever um novo sistema do tipo UNIX que fosse pequeno o suficiente para ser compreendido, que estivesse disponível com todo o código-fonte e que pudesse ser usado para propósitos educacionais.

$ Breve história: do UNIX ao LINUX

Page 22: Kernel Linux slide

MINIX:

$ Breve história: do UNIX ao LINUX

Andrew S. Tanenbaum Minix 3

Page 23: Kernel Linux slide

Projeto GNU:Em 1971, quando Richard Stallman começou sua carreira no MIT,

trabalhava em um grupo que usava exclusivamente software livre. Até mesmo empresas de informática frequentemente distribuíam software livre. Programadores eram livres para cooperar uns com os outros, e frequentemente o faziam.

Já na década de 1980, quase todo o software era proprietário, o que significa que ele possuía donos que proibiam e evitavam a cooperação dos usuários.

$ Breve história: do UNIX ao LINUX

Richard Stallman

Page 24: Kernel Linux slide

Projeto GNU:O projeto que desenvolve o sistema GNU é chamado de “Projeto

GNU”. O Projeto GNU foi concebido em 1983 como uma maneira de trazer de volta o espírito cooperativo que prevalecia na comunidade de computação nos seus primórdios.

Um sistema operacional do tipo Unix inclui um kernel, compiladores, editores, formatadores de texto, clientes de e-mail, interfaces gráficas, bibliotecas, jogos e muitas outras coisas. Portanto, escrever todo um sistema operacional é um grande trabalho. O projeto GNU iniciou o desenvolvimento em janeiro de 1984. A Free Software Foundation foi fundada em outubro de 1985, inicialmente para levantar fundos para ajudar a desenvolver o GNU.

Por volta de 1990 o projeto GNU já havia encontrado ou escrito todos os componentes principais, exceto um — o kernel.

$ Breve história: do UNIX ao LINUX

Page 25: Kernel Linux slide

Enfim, o 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.

$ Breve história: do UNIX ao LINUX

Page 26: Kernel Linux slide

No dia 25 de agosto de 1991, ele anunciou esse sistema em um post no newsgroup "comp.os.minix." da Usenet:

$ Breve história: do UNIX ao LINUX

Olá a todos que estão usando minix -

Eu estou fazendo um sistema operacional livre (é apenas um hobby, não será grande e profissional como o gnu) para os clones AT 386(486). Está sendo desenvolvido desde abril e está quase pronto. Gostaria de receber qualquer feedback sobre o que as pessoas gostam/não gostam no minix, uma vez que o meu SO se parece um pouco com ele (mesmo layout físico de sistema de arquivos (devido a razões práticas) entre outras coisas.

No momento eu o portei para bash(1.08) e gcc(1.40), e as coisas parecem funcionar. Isso implica que irei conseguir algo prático dentro de poucos meses e gostaria de saber quais características a maioria das pessoas gostaria que tivesse. Quaisquer sugestões são bem-vindas, mas não prometo que eu vá implementá-las :-)

Linus ([email protected])PS. Sim — ele não tem nenhum código minix, e possui um fs multitarefa. Ele NÃO é portável (usa troca de contexto 386, etc), e provavelmente nunca será compatível com nada além de discos rígidos AT, uma vez que isso é tudo o que eu tenho :-(.—Linus Torvalds

Page 27: Kernel Linux slide

Torvalds primeiramente publicou o núcleo Linux sob sua própria licença, que tinha restrições no que diz respeito à atividade comercial.

Em 1992, ele sugeriu o lançamento do núcleo sob a GNU General Public License.

Desenvolvedores do Linux e do GNU trabalharam para integrar os componentes do GNU com o Linux para fazer um sistema operacional totalmente funcional e totalmente livre.

Combinar o Linux com o quase completo sistema GNU resultou num sistema operacional completo: o sistema GNU/Linux.

$ Breve história: do UNIX ao LINUX

Page 28: Kernel Linux slide

$ Evolução do Linux

O Linux deu saltos significativos no ambiente corporativo nos últimos dois anos e sinaliza que continuará crescendo dentro das empresas. Enquanto a receita geral de servidores subiu apenas 3,1% e de servidor com Windows somente 3,2% no quarto trimestre de 2012, o ambiente de código aberto avançou 7,12% no mesmo período. Já Unix a participação de Unix na pizza, caiu 24,1%.

Os dados fazem parte de um relatório global sobre o uso de Linux nas empresas, divulgado pela Linux Foundation. Realizado em parceria com o Yeoman Technology Group, o estudo abordou companhias que faturam acima de 500 milhões de dólares ao ano e empregam menos de 500 funcionários.

Page 29: Kernel Linux slide

$ Versões do Kernel

O número do kernel é composto de três partes:

● número principal - é o número da versão. Ele foi mudado para três (3) em maio de 2011 para comemorar o vigésimo aniversário do Linux.

● número secundário - muda apenas quando mudanças substanciais são feitas no kernel, onde números pares (0,2,4,...) indicam versões estáveis e números ímpares (1,3,5,...) indicam versões de teste.

● nível de revisão/manutenção - muda a cada correção disponibilizada para o sistema;

Page 30: Kernel Linux slide

PARTE II

Page 31: Kernel Linux slide

# Gerenciadores de boot

Gerenciadores de boot são softwares capazes de iniciar o processo de carregamento de sistemas operacionais em um computador.

Os gerenciadores de boot do Linux são:● GRUB● LILO● SYSLINUX● ISOLINUX● rEFInd● GRUB4DOS

Demonstração prática de uma das funcionalidades dos boot managers: passagem de parâmetros ao kernel.

Page 32: Kernel Linux slide

# Componentes do kernel

Vejamos uma breve lista dos arquivos que compõe o kernel Linux:

● vmlinuz - vmlinux é um arquivo executável ligado estaticamente que contém o kernel do Linux em um dos formatos de arquivo de objeto suportado pelo sistema.

● initrd - é um esquema para o carregamento de um sistema de arquivos raiz temporário na memória no processo de inicialização do kernel do Linux.

● System.map - é uma tabela de símbolo usado pelo kernel.

● config- informações sobre módulos compilados junto ao kernel.

● Memtest - programa destinado a realizar teste de estresse memória de acesso aleatório de uma arquitetura de computador x86 (RAM) para detecção de erros.

'N' - significa que ele não é compilado em tudo;'Y' - significa que ele é compilado dentro do arquivo binário do kernel;'M' - significa que ele é compilado como um módulo do kernel.

Page 33: Kernel Linux slide

# Arquivos componentes do kernel

Page 34: Kernel Linux slide

# Arquivos componentes do kernel

Diretório /lib: Contém arquivos de bibliotecas para todos os programas armazenados nos diretórios /sbin e /bin (incluindo os módulos de driver carregáveis) necessários para a inicialização do Linux.

Page 35: Kernel Linux slide

# Como adquirir o código fonte do Linux

Os fontes do kernel Linux podem ser adquiridos no site: http://www.kernel.org

Page 36: Kernel Linux slide

Descompacte o kernel:

# Compilação do kernel

Page 37: Kernel Linux slide

# Compilação do kernel

Inicie o gerenciador de configuração:

Page 38: Kernel Linux slide

# Compilação do kernel

Inicie o gerenciador de configuração:

Page 39: Kernel Linux slide

# Compilação do kernel

Após salvar as alterações, execute o comando 'make':

Page 40: Kernel Linux slide

# Compilação do kernel

Agora é só esperar...

Page 41: Kernel Linux slide

# Compilação do kernel

Após a compilação do kernel, é necessário realizar a compilação dos módulos:

Page 42: Kernel Linux slide

# Compilação do kernel

Depois de ter compilado os módulos, é necessário instalá-los:

Page 43: Kernel Linux slide

# Compilação do kernel

Instalando o kernel:

Page 44: Kernel Linux slide

# Compilação do kernel

No momento da instalação do kernel, podemos ver uma saída como esta:

Page 45: Kernel Linux slide

# Compilação do kernel

Após reiniciar o sistema, dê o boot na versão compilada do kernel.

Page 46: Kernel Linux slide

# Gerência de módulos

Um módulo do kernel, ou LKM de Linux Kernel Module, é um segmento de código que pode ser inserido ou removido a quente, i.e., sem necessidade de reinicializar o sistema, e que adiciona funcionalidade ao kernel.

Os módulos do kernel podem ser encontrados no diretório /lib/modules/<versão do kernel>/kernel, como por exemplo:

/lib/modules/3.12.0/kernel

Page 47: Kernel Linux slide

# Gerência de módulos

Listando módulos carregados com o comando 'lsmod':

Page 48: Kernel Linux slide

# Gerência de módulos

Carregando um módulo:

Verificando se o módulo foi carregado:

Page 49: Kernel Linux slide

# Gerência de módulos

Descarregando um módulo:

Verificando se o módulo foi descarregado:

Page 50: Kernel Linux slide

# Gerência de módulos

Programação de um módulo, exemplo teste:

#include <linux/module.h>

int init_module (void) { printk("<1> Hello World \n");

return 0;}

/* Função chamada quando da remoçao do mesmo */void cleanup_module (void) {

printk("<1> Tchau :~D\n");}

modulo_kernel.c

Page 51: Kernel Linux slide

# Gerência de módulos

Para compilar, é necessário arquivo Makefile com o seguinte código:

obj-m += module_kernel.o

all:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

clean:make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean

Makefile

Page 52: Kernel Linux slide

# Gerência de módulos

Compilando, instalando, verificando se módulo foi carregado ...

Page 53: Kernel Linux slide

# Gerência de módulos

Resultado da execução do módulo:

Page 54: Kernel Linux slide

PARTE III

Page 55: Kernel Linux slide

# Arquitetura do kernel

Page 56: Kernel Linux slide

# Interrupções e despachos

Page 57: Kernel Linux slide

# Interrupções e despachos

Page 58: Kernel Linux slide

# Componentes de E/S

Page 59: Kernel Linux slide

$ Sistemas de arquivos

O sistema de arquivos é o modo como o sistema operacional organiza o acesso aos arquivos e diretórios no computador. Ele é o responsável pela gerência dos arquivos.

O sistema de arquivos é organizado em blocos de alocação. Cada bloco tem um tamanho fixo e pode variar de um sistema operacional para outro. Tomando como exemplo um sistema operacional que trabalha com blocos de 4 Kb, neste sistema, um arquivo de 6 Kb utilizaria dois blocos para alocação.

Page 60: Kernel Linux slide

$ Sistemas de arquivos

Page 61: Kernel Linux slide

$ Sistemas de arquivos

Técnicas para alocação de arquivos em disco:

● Alocação contígua● Alocação encadeada● Alocação indexada

Page 62: Kernel Linux slide

$ Sistemas de arquivos

Sistemas de arquivos do Linux:

● Ext● Ext2● Ext3● Ext4● XFS● ReiserFS● JFS● YAFFS ← Sistema de arquivos do Android● Tmpfs● Procfs● Sysfs

Page 63: Kernel Linux slide

$ Sistemas de arquivos

Page 64: Kernel Linux slide

$ Sistemas de arquivos

Utilitários para formatação de discos:

Page 65: Kernel Linux slide

$ Sistemas de arquivos

VFS – Virtual File SystemÉ uma camada de abstração

em cima de um sistema de arquivos mais concreto. O propósito de um VFS é permitir que as aplicações clientes tenham acesso a diversos tipos de sistemas de arquivos concretos de uma maneira uniforme.

Page 66: Kernel Linux slide

$ Sistemas de arquivos

PROCFS procfs (ou sistema de arquivos proc) é um sistema de arquivos especial em sistemas operacionais UNIX-like, que apresenta informações sobre processos e outras informações do sistema em uma estrutura de arquivos do tipo hierárquico, proporcionando um método mais conveniente e padronizado para acessar dinamicamente os dados do processo, realizada no kernel do que os métodos de rastreamento tradicionais ou acesso direto à memória do kernel. Normalmente, ele é mapeado para um ponto de montagem chamado /proc no momento da inicialização.

Page 67: Kernel Linux slide

$ Sistemas de arquivos

Alguns exemplos de informações do sistema obtidas em arquivos do diretório /proc:

/proc/version

/proc/cpuinfo

Page 68: Kernel Linux slide

$ Sistemas de arquivos

Alguns exemplos de informações do sistema obtidas em arquivos do diretório /proc:

/proc/filesystems

Page 69: Kernel Linux slide

$ Sistemas de arquivos

Alguns exemplos de informações do sistema obtidas em arquivos do diretório /proc:

/proc/cmdline

/proc/interrupts

Page 70: Kernel Linux slide

$ Sistemas de arquivos

Funcionalidades do kernel:

/proc/sys/net/ipv4/ip_forward

/proc/sys/kernel/randomize_va_space

Page 71: Kernel Linux slide

$ Sistemas de arquivos

Sysfs - Sysfs é um sistema de arquivos virtual fornecido pelo Linux. Sysfs exporta informações sobre os dispositivos e drivers do modelo de dispositivo do kernel para o espaço do usuário, e também é usado para a configuração.

Exemplo: visualizando endereço MAC

Page 72: Kernel Linux slide

$ Sistemas de arquivos

Estruturas de diretórios do Linux

Page 73: Kernel Linux slide

$ Soquetes

Uma API de soquetes (API sockets) é uma interface de programação de aplicativos (API), normalmente fornecida pelo sistema operacional, que permite que os programas de aplicação controlem e usem soquetes de rede. APIs de soquete de Internet geralmente são baseados no padrão Berkeley sockets.

Page 74: Kernel Linux slide

$ Dispositivos

Diretório /dev:

Page 75: Kernel Linux slide

$ Dispositivos

Page 76: Kernel Linux slide

$ Dispositivos

Listando dispositivo no /dev:

Criando dispositivo com mknod:

Page 77: Kernel Linux slide

$ Dispositivos

Acessando dispositivos a nível de usuário

Exemplo: Gerando imagem de pendrive com o comando dd

Enviando mensagens para usuários logados:

Page 78: Kernel Linux slide

$ Dispositivos

Função ioctl()

Sintaxe

#include <sys/ioctl.h>int ioctl(int d, int request, ...);

Acessando dispositivos a nível de usuário

Page 79: Kernel Linux slide

$ Dispositivos

Exemplo: piscando leds do teclado#include <sys/ioctl.h>#include <linux/kd.h>#include <stdlib.h>#include <unistd.h>

/* KDSETLED - Modifica os valores dos LEDs KDGETLED - L os valores dos LEDs*/

int main(int argc, char **argv) {int leds = 0;/* loop variando os 3 bits mais baixos de leds */while (1) {

leds = 2 * leds + 1;if (leds & 8)

leds ^= 9;if (ioctl(0, KDSETLED, leds))

exit(1);sleep(1);

}}

Page 80: Kernel Linux slide

# Gerência de memória

Page 81: Kernel Linux slide

$ Modelos de memória

O Intel 80386 permite três tipos diferentes de acesso à memória do sistema. Os três tipos são:

● Flat Memory Model (Modelo de Memória Plano)● Segmented Memory Model (Modelo de Memória Segmentada)● Real Address-Mode (Modo de Endereçamento Real)

Page 82: Kernel Linux slide

$ Endereço de memória

0x7fff9575

Page 83: Kernel Linux slide

$ Endereço de memória

Page 84: Kernel Linux slide

$ Memória Virtual

Memória virtual é uma abstração criada pelo kernel e provê uma interface segura para os processos.É claro que o código e os dados dos programas residem na memória real, mas em endereços manipulados pelo kernel.

Page 85: Kernel Linux slide

$ Memória Virtual

Page 86: Kernel Linux slide

$ Memória Virtual

Page 87: Kernel Linux slide

$ Memória Virtual

Page 88: Kernel Linux slide

$ Swap

Page 89: Kernel Linux slide

$ Utilitários para gerenciamento de memória

free – Informações sobre uso da memória

Page 90: Kernel Linux slide

$ Utilitários para gerenciamento de memória

vmstat – Estatísticas de uso de memória virtual

0

Page 91: Kernel Linux slide

# Gerência de processos

Page 92: Kernel Linux slide

# Gerência de processos

Um processo é um simples programa que está rodando em seu espaço de endereçamento virtual próprio.

Page 93: Kernel Linux slide

# Gerência de processos

No Linux os processos são criados de um jeito bastante simples. A chamada de sistema fork cria uma cópia exata do processo original. O processo criador é chamado de processo pai. O novo processo é chamado processo filho.

Page 94: Kernel Linux slide

$ Tipos de processos

● Interativos● Deamons

Processos interativos são iniciados a partir de, e controlados por uma sessão terminal. Estes processos podem rodar tanto em foreground como em background. Daemons são processos servidores, inicialmente inicializados durante o boot, que rodam continuamente enquanto o sistema estiver ativo, esperando, em background, até que um processo requisite seus serviços. Por exemplo, network daemons ficam em estado idle até que um processo requisite serviço de rede.

Page 95: Kernel Linux slide

$ Informações associados aos processos

● PID e PPIDÉ um número de identificação que o sistema dá a cada processo.

● UID e GIDUID são números de usuários e GID são números de grupos de usuários.

Page 96: Kernel Linux slide

$ Processo init: o pai de todos

init (abreviação de "initialization") é o processo inicial que carrega todos os outros processos em sistemas Unix e Unix-like, como o Linux. Executa como daemon e apresenta, tipicamente, o PID 1. O init é, também, o último processo carregado pelo núcleo.

Page 97: Kernel Linux slide

$ Utilitários para monitoração de processos

ps – Process List

Page 98: Kernel Linux slide

$ Utilitários para monitoração de processos

top – Listagens de processos em tempo real

Page 99: Kernel Linux slide

$ Utilitários para monitoração de processos

htop – Listagens de processos em tempo real

Page 100: Kernel Linux slide

$ IPC: Inter-process Communication

SINAIS:

Page 101: Kernel Linux slide

$ IPC: Inter-process Communication

SINAIS:

#include <sys/types.h>#include <signal.h>

int main(void) { int meuPID = getpid(); kill(meuPID, SIGKILL); return;}

Page 102: Kernel Linux slide

$ IPC: Inter-process Communication

PIPES:pipes são vetores de duas posições chamados este de file

description onde um lado entra as informações e com o processo de espelhamento o outro lado do vetor é visualizado (saída) por um outro processo ou thread.

Page 103: Kernel Linux slide

$ IPC: Inter-process Communication

SOCKETS:#include <stdio.h>#include <string.h>#include <sys/socket.h>#include <sys/un.h>

main(void) {int sock, tamanho;char path[]="arquivo";struct sockaddr_un local;

sock = socket(PF_LOCAL,SOCK_STREAM,0);memset(&local,0,sizeof(struct sockaddr));

local.sun_family = PF_LOCAL;strcpy(local.sun_path,path);tamanho = sizeof(local);

bind(sock,(struct sockaddr*)&local, tamanho);while(1);

}

Page 104: Kernel Linux slide

$ IPC: Inter-process Communication

SOCKETS:

Page 105: Kernel Linux slide

$ IPC: Inter-process Communication

FIFO:#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <linux/stat.h>#define FIFO_FILE "MYFIFO"

int main(void){ FILE *fp; char readbuf[80];

/* Create the FIFO if it does not exist */ umask(0); mknod(FIFO_FILE, S_IFIFO|0666, 0);

while(1) { fp = fopen(FIFO_FILE, "r"); fgets(readbuf, 80, fp); printf("Received string: %s\n", readbuf); fclose(fp); }

return(0);}

Page 106: Kernel Linux slide

$ IPC: Inter-process Communication

FIFO:

Page 107: Kernel Linux slide

$ Escalonamento de processos

O Linux associa um valor a cada processo, denominado nice. O padrão é 0, mas ele pode ser modificado por meio da chamada de sistema nice(valor), em que o parâmetro 'valor' varia de -20 a +19.

Comandos: nice e renice

Page 108: Kernel Linux slide

# Chamadas de sistemas

Page 109: Kernel Linux slide

# Chamadas de sistemas

Mecanismo usado pelo programa para requisitar um serviço do sistema operacional, ou mais especificamente, do núcleo do sistema operacional.

● exit● fork● read● write● open● close● waitpid● creat● link● unlink● execve● chdir● mknod● getuid● getpid

Page 110: Kernel Linux slide

# Referências

TANENBAUM, Andrew S.; Sistemas Operacionais Modernos, Prentice Hall Brasil, 2ª Edição, 2003

NEMETH, Evi; SNYDER, Garth; HEIN, Trent R.. Manual completo do linux: guia do administrador. 2 ed. São Paulo: Peaarson Prentice Hall, 2007.

MORAES, Gleicon da S.; Programação Avançada em LINUX, Novatec,2005.

ALVES, Maicon Melo; SOCKETS LINUX, ed. Brasport, 2008.

DULANEY, Emmett; Linux referência completa, 3ª edição, 2009.

MOURA, Tiago Natel de; Introdução a Arquitetura de Computadores. Disponível em: <http://code.google.com/p/bugsec/wiki/AssemblyArqComp>

Man pages: proc, ioctl.

Page 111: Kernel Linux slide

# halt