Kernel Linux slide

828 views
666 views

Published on

Arquitetura Linux por Vitalino Victor

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
828
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
50
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Kernel Linux slide

  1. 1. 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.
  2. 2. aluno@Apresentacao:~$ echo “Introdução”
  3. 3. aluno@Apresentacao:~$ echo “Introdução”
  4. 4. aluno@Apresentacao:~$ echo “Introdução”
  5. 5. $ Breve história: do UNIX ao LINUX "O Unix é muito simples, mas é preciso ser um gênio para entender esta simplicidade " - Dennis Ritchie
  6. 6. $ 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&T MIT GE-645
  7. 7. $ Breve história: do UNIX ao LINUX 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
  8. 8. $ Breve história: do UNIX ao LINUX 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). 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. Brian Kernighan
  9. 9. $ Breve história: do UNIX ao LINUX 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. Linguagem B
  10. 10. $ Breve história: do UNIX ao LINUX 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. Dennis Ritchie
  11. 11. $ Breve história: do UNIX ao LINUX 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: 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
  12. 12. $ Breve história: do UNIX ao LINUX 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.
  13. 13. $ Breve história: do UNIX ao LINUX 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.
  14. 14. $ Breve história: do UNIX ao LINUX UNIX de Berkeley Uma das maiores universidades que adquiriram a versão 6 do UNIX antecipadamente foi a Universidade da Califórnia, em Berkeley. University of California, Berkeley
  15. 15. $ Breve história: do UNIX ao LINUX 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. 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.
  16. 16. $ Breve história: do UNIX ao LINUX ● ● ● ● 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.
  17. 17. $ Breve história: do UNIX ao LINUX 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. Fita de instalação do SunOS
  18. 18. $ Breve história: do UNIX ao LINUX 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.
  19. 19. $ Breve história: do UNIX ao LINUX 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.
  20. 20. $ Breve história: do UNIX ao LINUX 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.
  21. 21. $ Breve história: do UNIX ao LINUX MINIX: Andrew S. Tanenbaum Minix 3
  22. 22. $ Breve história: do UNIX ao LINUX 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. Richard Stallman
  23. 23. $ Breve história: do UNIX ao LINUX 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.
  24. 24. $ Breve história: do UNIX ao LINUX 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.
  25. 25. $ Breve história: do UNIX ao LINUX No dia 25 de agosto de 1991, ele anunciou esse sistema em um post no newsgroup "comp.os.minix." da Usenet: 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 (torvalds@kruuna.helsinki.fi) 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
  26. 26. $ Breve história: do UNIX ao LINUX 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.
  27. 27. $ 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.
  28. 28. $ 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;
  29. 29. PARTE II
  30. 30. # 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.
  31. 31. # 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. '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. ● 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.
  32. 32. # Arquivos componentes do kernel
  33. 33. # 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.
  34. 34. # Como adquirir o código fonte do Linux Os fontes do kernel Linux podem ser adquiridos no site: http://www.kernel.org
  35. 35. # Compilação do kernel Descompacte o kernel:
  36. 36. # Compilação do kernel Inicie o gerenciador de configuração:
  37. 37. # Compilação do kernel Inicie o gerenciador de configuração:
  38. 38. # Compilação do kernel Após salvar as alterações, execute o comando 'make':
  39. 39. # Compilação do kernel Agora é só esperar...
  40. 40. # Compilação do kernel Após a compilação do kernel, é necessário realizar a compilação dos módulos:
  41. 41. # Compilação do kernel Depois de ter compilado os módulos, é necessário instalá-los:
  42. 42. # Compilação do kernel Instalando o kernel:
  43. 43. # Compilação do kernel No momento da instalação do kernel, podemos ver uma saída como esta:
  44. 44. # Compilação do kernel Após reiniciar o sistema, dê o boot na versão compilada do kernel.
  45. 45. # 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 /lib/modules/<versão do kernel>/kernel, como por exemplo: /lib/modules/3.12.0/kernel diretório
  46. 46. # Gerência de módulos Listando módulos carregados com o comando 'lsmod':
  47. 47. # Gerência de módulos Carregando um módulo: Verificando se o módulo foi carregado:
  48. 48. # Gerência de módulos Descarregando um módulo: Verificando se o módulo foi descarregado:
  49. 49. # Gerência de módulos Programação de um módulo, exemplo teste: modulo_kernel.c #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 :~Dn"); }
  50. 50. # Gerência de módulos Para compilar, é necessário arquivo Makefile com o seguinte código: Makefile 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
  51. 51. # Gerência de módulos Compilando, instalando, verificando se módulo foi carregado ...
  52. 52. # Gerência de módulos Resultado da execução do módulo:
  53. 53. PARTE III
  54. 54. # Arquitetura do kernel
  55. 55. # Interrupções e despachos
  56. 56. # Interrupções e despachos
  57. 57. # Componentes de E/S
  58. 58. $ 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.
  59. 59. $ Sistemas de arquivos
  60. 60. $ Sistemas de arquivos Técnicas para alocação de arquivos em disco: ● ● ● Alocação contígua Alocação encadeada Alocação indexada
  61. 61. $ Sistemas de arquivos Sistemas de arquivos do Linux: ● ● ● ● ● ● ● ● ● ● ● Ext Ext2 Ext3 Ext4 XFS ReiserFS JFS YAFFS ← Sistema de arquivos do Android Tmpfs Procfs Sysfs
  62. 62. $ Sistemas de arquivos
  63. 63. $ Sistemas de arquivos Utilitários para formatação de discos:
  64. 64. $ 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.
  65. 65. $ 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.
  66. 66. $ Sistemas de arquivos Alguns exemplos de informações do sistema obtidas em arquivos do diretório /proc: /proc/version /proc/cpuinfo
  67. 67. $ Sistemas de arquivos Alguns exemplos de informações do sistema obtidas em arquivos do diretório /proc: /proc/filesystems
  68. 68. $ Sistemas de arquivos Alguns exemplos de informações do sistema obtidas em arquivos do diretório /proc: /proc/cmdline /proc/interrupts
  69. 69. $ Sistemas de arquivos Funcionalidades do kernel: /proc/sys/net/ipv4/ip_forward /proc/sys/kernel/randomize_va_space
  70. 70. $ 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
  71. 71. $ Sistemas de arquivos Estruturas de diretórios do Linux
  72. 72. $ 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.
  73. 73. $ Dispositivos Diretório /dev:
  74. 74. $ Dispositivos
  75. 75. $ Dispositivos Listando dispositivo no /dev: Criando dispositivo com mknod:
  76. 76. $ Dispositivos Acessando dispositivos a nível de usuário Exemplo: Gerando imagem de pendrive com o comando dd Enviando mensagens para usuários logados:
  77. 77. $ Dispositivos Acessando dispositivos a nível de usuário Função ioctl() Sintaxe #include <sys/ioctl.h> int ioctl(int d, int request, ...);
  78. 78. $ Dispositivos Exemplo: piscando leds do teclado #include #include #include #include <sys/ioctl.h> <linux/kd.h> <stdlib.h> <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); } }
  79. 79. # Gerência de memória
  80. 80. $ 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)
  81. 81. $ Endereço de memória 0x7fff9575
  82. 82. $ Endereço de memória
  83. 83. $ 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.
  84. 84. $ Memória Virtual
  85. 85. $ Memória Virtual
  86. 86. $ Memória Virtual
  87. 87. $ Swap
  88. 88. $ Utilitários para gerenciamento de memória free – Informações sobre uso da memória
  89. 89. $ Utilitários para gerenciamento de memória vmstat – Estatísticas de uso de memória virtual 0
  90. 90. # Gerência de processos
  91. 91. # Gerência de processos Um processo é um simples programa que está rodando em seu espaço de endereçamento virtual próprio.
  92. 92. # 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.
  93. 93. $ 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.
  94. 94. $ Informações associados aos processos ● ● PID e PPID É um número de identificação que o sistema dá a cada processo. UID e GID UID são números de usuários e GID são números de grupos de usuários.
  95. 95. $ 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.
  96. 96. $ Utilitários para monitoração de processos ps – Process List
  97. 97. $ Utilitários para monitoração de processos top – Listagens de processos em tempo real
  98. 98. $ Utilitários para monitoração de processos htop – Listagens de processos em tempo real
  99. 99. $ IPC: Inter-process Communication SINAIS:
  100. 100. $ IPC: Inter-process Communication SINAIS: #include <sys/types.h> #include <signal.h> int main(void) { int meuPID = getpid(); kill(meuPID, SIGKILL); return; }
  101. 101. $ 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.
  102. 102. $ IPC: Inter-process Communication SOCKETS: #include #include #include #include <stdio.h> <string.h> <sys/socket.h> <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); }
  103. 103. $ IPC: Inter-process Communication SOCKETS:
  104. 104. $ 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: %sn", readbuf); fclose(fp); } return(0); }
  105. 105. $ IPC: Inter-process Communication FIFO:
  106. 106. $ 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
  107. 107. # Chamadas de sistemas
  108. 108. # 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
  109. 109. # 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.
  110. 110. # halt

×