Home
        nesse link - Brod Tecnologia
         Contents
1.     Figura 6   Alterando posi    es de mem  rias    Uma vez completas as suas altera    es  tecle ESC para sair do programa e pressione uma  tecla qualquer para voltar ao menu inicial  Agora  como mostra a figura 7  no topo da tela  do MikeOS voc   deve ver    Aprendendo MikeOS        Machine View  Aprendendo Mike0S    Please select a file using the cursor  keys from the list below       KERNEL   BIN    EDIT BIN  FILEMAN BIN  HANGMAN  B IN  KEYBOARD  BIN  MONITOR  BIN  SERIAL BIN  UTEWER  BIN  ADUNTURE   BAS  CALC   BAS  CF BAS   DRAW  BAS  EXAMPLE   BAS  MBPP   BAS       Version 4 5b1    P  gina 42 de 45    Figura 7   Aprendendo MikeOS    Tipicamente  voc   n  o deve fazer altera    es diretamente na mem  ria de um sistema  operacional em execu    o  Por outro lado     importante a familiaridade com esse tipo de  procedimento uma vez que ele pode ajudar bastante na depura    o de c  digos   Idealmente  as mudan  as devem ser feitas nos arquivos fonte  no caso do MikeOS  nos  arquivos  asm  e o nasm deve ser usado para a gera    o dos programas em c  digo bin  rio     Repare  na pasta onde voc   descompactou o MikeOS  a estrutura de diret  rios     mikeos   Is  la   grep  d  drwxr xr x 6 brod brod 4096 Mai 8 20 44   drwxr xr x 78 brod brod 36864 Jul 11 09 30     drwxr xr x 2 brod brod 4096 Mai 8 20 44 disk_images  drwxr xr x 2 brod brod 4096 Mai 8 20 40 doc  drwxr xr x 2 brod brod 4096 Mai 8 20 38 programs  drwxr xr x 4 brod brod 4096 Mai 8 20 08 source    O comando  s lista 
2.     o a seguir      ORG 0x7C00       posicao em que o codigo sera colocado na memoria    Um conjunto muito grande de circuitos l  gicos  neste momento  ser   configurada para  carregar no registrador AX o valor     e o apontador de instruc  o seguir   para  o endereco onde encontra se a instruc  o seguinte  Na execuc  o do programa  este  endereco ser   somado ao endereco que o mostra na coluna    esquerda para esta  instru    o        em base hexadecimal     Como dissemos antes  na linha a qual estamos agora  poder  amos representar 288  o  n  mero de setores que reservamos para nossos dados tempor  rios e segmento de dados   no formato hexadecimal     assim que o hte mostra esta linha para n  s       usando o caractere x apenas para uma desambigua    o visual expl  cita  O n  mero 07c0  exibido pelo hte     obviamente  hexadecimal  cont  m o caractere c  J   0120 poderia ser  interpretado como n  mero decimal e  por isso  o x    usado apenas para explicitar que ele     hexadecimal     O valor que est   no registrador AX  quando o programa chega a este ponto    a soma dos  n  meros hexadecimais 07C0h e 0120h  288 em decimal   Se voc   n  o tem familiaridade  com as nota    es bin  rias e hexadecimais a pr  tica no mundo dos sistemas operacionais  far   com que voc   a adquira  Por algum tempo  talvez voc   queira usar um conversor   como o que est   neste link http   www mathsisfun com binary decimal hexadecimal converterhtml  para fazer  seus c  lculos sempre com os n  mero
3.     o recebida a partir de um dispositivo     Vale tamb  m ressaltar o registrador DS  respons  vel por armazenar o segmento de dados  que    acessado por seu programa     Voc   j   deve ter notado que tudo o que sucede o ponto e v  rgula     n  o ser   interpretado  pelo assembler   s  o apenas coment  rios para a leitura por humanos  com o intuito de  elucidar o c  digo     P  gina 21 de 45    Na linha seguinte  adicionamos o valor 288  poder  amos ter escrito 120h para a sua  representa    o hexadecimal  ao conte  do do registro AX  ao qual hav  amos atribu  do o  valor zero     add ax  288    4096   512   16 bytes por paragrafo    Mais adiante  quando falarmos sobre gerenciamento de mem  ria no cap  tulo 5  isto ficar    mais claro  Por enquanto  contente se em saber que  por padr  o  a mem  ria    organizado  em segmentos de 16 bytes de oito bits cada  chamados de par  grafos  Queremos  reservar um espa  o ap  s o nosso programa  onde estar   a nossa pilha  stack  de 512  bytes para os dados tempor  rios e onde posicionaremos um segmento de dados de  4Kbytes  4096 bytes   Somamos os dois e dividimos por dezesseis para saber quantos  segmentos  em par  grafos de 16 bytes  s  o necess  rios     Vamos botar a m  o na massa para entender melhor como isso funciona  A partir deste  momento  presumimos que voc   j   tem uma distribuic  o Linux instalada em seu  computador  preferencialmente a Linux Mint 17 Xfce  ou mais nova  que foi usada como  base em todos os testes e exempl
4.    lendo esta introdu    o justamente porque topei  a parada     Sou virginiano  Apesar de n  o acreditar em astrologia  tenho que admitir que sou a  inst  ncia perfeita de todos os atributos e m  todos da classe que define meu signo  Encaro  um livro como um projeto   gil  com o product backlog definido na forma de seu   ndice onde   junto com os assuntos que domino  coloco outros sobre os quais ainda tenho que  aprender mais antes de ousar escrever sobre eles  Desta forma  desafio me com o prazer  de sempre aprender algo novo intercalado com a exposi    o daquilo que j   sei  Neste  processo sempre descubro que ainda tenho que aprender muito mais sobre o que julgo  saber para  assim  poder transmitir o conhecimento de forma simples  Dizia Einstein que   se n  o conseguimos explicar algo de maneira simples     porque n  s mesmos n  o  entendemos direito esse algo     Na constru    o do   ndice  com o nome dos cap  tulos que seriam posteriormente  recheados  baseei me em duas coisas  ementas da disciplina de sistemas operacionais de  v  rios cursos de tecnologia de institui    es de ensino brasileiras e na maneira  como eu  mesmo  aprendi sobre sistemas operacionais     Tive a grata oportunidade de ser exposto    uma boa variedade se sistemas operacionais  na minha vida profissional  Os primeiros foram os das m  quinas registradoras eletr  nicas  program  veis da NCR  meu primeiro emprego na   rea de TI  Depois conheci o OS 370 da  IBM e  muitos anos depois  tive a oportunida
5.    pr  pria  metodologia que fui desenvolvendo  ao longo de muitos anos  para a minha pr  pria  aprendizagem continuada     Entre 1999 e 2006 trabalhei diretamente com um grupo de excelentes profissionais e   simultaneamente  estudantes  que foram  e muitos ainda s  o  a base da Solis   Cooperativa de Solu    es Livres  http   solis coop br      Em v  rias ocasi  es  participei com estes amigos de    sess  es de estudo    em finais de  tarde  na pr  pria sede da Cooperativa  Ao final de uma dessas sess  es o Nasair J  nior  da Silva e a Joice K  fer  que tornou se minha s  cia em 2006  disseram me que   simplesmente ao mostrar como um microcontrolador    pensava     propondo um  pequeno jogo onde as pessoas representavam o ambiente de execuc  o de um  programa  assumindo o papel de registradores e   ndices  substituindo ou  incrementando seus valores  muitas coisas ficaram claras para eles     Em muitos outros momentos percebi que apresentar perspectivas pr  ticas  mesmo que  elas possam parecer complexas a princ  pio     como apresentar pequenas chaves que  faltavam para uma compreens  o te  rica que parecia estar bloqueada e  com isso   permitir a consolida    o de conhecimentos b  sicos que permitem novos passos  adiante  Assim  respire fundo a cada nova ferramenta que este livro prop  e  Dentre  todas as apresentadas  voc   descobrir   quais ser  o mantidas em seu cinto de  utilidades e quais voc   poder   deixar guardadas em sua garagem  sabendo que elas  est  o l   para
6.   capaz de emular uma ampla variedade de processadores e sistemas neles  baseados  auxiliando muito no desenvolvimento de sistemas operacionais  ou quaisquer  outros tipos de software  que possam rodar nas mais diversas configura    es  Se voc    executar gemu system i386  help  ter   uma lista da ampla variedade das op    es que o programa  permite  Pagine esta lista encadeando a para um comando more ou less e use um pouco de  seu tempo para averiguar as op    es    qemu system i386  help   more   qemu system i386  help   less    Quando voc   encadeia a sa  da para o comando more  voc   passa para as p  ginas  seguintes pressionando a barra de espacos  O comando less permite mais interatividade   permitindo a paginac  o abaixo e acima com as teclas Page Up  Page Down  assim como  as setas para cima e para baixo  Al  m disso  voc   pode fazer buscas textuais dentro de  uma paginac  o com o less teclando a barra     e digitando um trecho da palavra que est    procurando  Use  fla e tecle Enter para descobrir o que    a chave  fda que voc   usou no  comando com o qual evocou o QEMU  Para sair de uma paginac  o com o comando less   tecle a letra q     Voc   usou a chave fda para carregar a imagem de disquete  disquete img  no primeiro  disquete do sistema  mas certamente observou  na janela de emula    o do QEMU  que a  primeira op    o do emulador era o disco r  gido  o que primeiro gerou um erro  fazendo  com que o QEMU  ent  o  tentasse o disquete  com sucesso  Experimente us
7.  around the World     de Jon    maddog    Hall  uma iniciativa  internacional que busca a conscientiza    o e dissemina    o do uso de software livre     Entre os anos de 2011 e 2012 Cesar atuou como Coordenador Geral de Inova    es  Tecnol  gicas do Minist  rio do Planejamento do Brasil onde  entre outras fun    es  esteve     frente do Portal do Software P  blico Brasileiro e da Infraestrutura Nacional de Dados  Abertos  al  m de ter atuado em processos de padroniza    o de solu    es     Desde meados dos anos 1990 Cesar passou a acompanhar o Manifesto   gil e a adotar  pr  ticas como o Extreme Programming e o Scrum para promover equipes  autogerenci  veis e o desenvolvimento de projetos     P  gina 3 de 45    Introdu    o    Este livreto    parte de meu livro sobre sistemas operacionais  ainda em elabora    o  O  livro sobre sistemas operacionais  por sua vez    resultado de uma provoca    o de meu  editor  o Rubens Prates  Enquanto trabalh  vamos nos ajustes finais de Aprenda a Programar    a arte de ensinar ao computador  Novatec  2013   ele sugeriu me que eu usasse a mesma  forma did  tica para trabalhar o tema de Sistemas Operacionais  tomando o Linux como  base  Relutei  a princ  pio  H   tantos livros bons sobre o assunto que eu n  o acreditava na  necessidade de mais um  Ao trazer o assunto para dentro de casa  minha fam  lia  incentivou me dizendo     Simples  Fa  a com que o seu livro n  o seja s   mais um     N  o foi      claro  t  o simples assim  mas voc   est
8.  de espa  o em disco     crie uma nova m  quina virtual no VirtualBox com no m  nimo 512 Mbytes de mem  ria   um disco de oito gigabytes e d   o boot com uma imagem de CD que voc   pode baixar  dos v  rios sites das distribui    es Linux  Uma lista bastante completa destas  distribui    es pode ser encontrada no portal Distrowatch com  Minha recomenda    o pessoal     o Linux Mint em sua vers  o Xfce  que pode ser baixada a partir do portal LinuxMint com e                P  gina 11 de 45       que fornece um bom meio termo entre usabilidade e economia de recursos de  m  quina    Se sua m  quina tiver pouca capacidade de mem  ria  dois gigabytes ou menos   o  melhor    voc   instalar o Linux ao lado do sistema operacional que voc   j   utiliza e  escolher  no momento em que a liga  qual o sistema que ir   usar  A maioria das  distribui    es Linux modernas oferecem a voc   esta op    o de instala    o a partir do  boot  inicializa    o  atrav  s de um CD ou DVD     Se voc   tiver uma m  quina antiga  ou se algum parente ou amigo puder fornecer uma  pra voc    h   muitas distribui    es Linux que funcionam muito bem e m  quinas mais  antigas e com menos recursos  O portal The Gaea Times fez uma lista muito  informativa com as dez melhores distribui    es minimalistas do Linux que podem rodar  em m  quinas com poucos recursos  ou mesmo diretamente atrav  s de uma pendrive     http   tech gaeatimes com index php archive 10 best minimal low footprint linux distros    Se  al  m de 
9.  ela aparece precedida de    Como o n  mero depois desta sequ  ncia    vari  vel  h   uma boa probabilidade que B8 seja  o c  digo hexadecimal que diz ao processador para carregar o valor no registrador  Note que  abaixo da janela  h   um conjunto de op    es que podem ser acessadas a partir  das teclas de fun    o a  dependendo de seu emulador de terminal  pode ter  alguma outra fun    o designada pela janela que o cont  m e n  o ir   surtir o efeito  desejado de fechar o hte   neste caso  use a combina    o de teclas e C  ou    para acessar o menu superior e escolher a op    o Quit para sair do programa   Use a tecla   para selecionar a visualiza    o no formato  disassembler da arquitetura  x86  e para usar o modo 16 bits  A figura 3 mostra que suas suspeitas est  o  comprovadas     P  gina 23 de 45       File Edit Windows Help Local Disasm 15 26 20 06 2014  ropbox Brod Rubens Sistemas Operacionais Programas loader2 bin    2     b80000 0x0  052001 0x120  8edo  bc0010  b80000 0x0  8ed8  bel87c  e81100  ebfe  46  756e  63696f  6e  6f  7521  203a  244400  b40e  ac  3c00             2save 3 6 7 8 9 O 4    Figura 3   A engenharia reversa do c  digo bin  rio do arquivo bootloader bin no hte    Voc   j   sabe que  no final das contas  seu processador recebe estas instru    es em c  digo  bin  rio e que  depois que o BIOS carregar este programa na mem  ria  o endereco       conter   a instru    o Bs      Lembre se que voc   especificou esse endere  o  para o assembler com a instru
10.  funcionam no limiar entre o hardware e o software  Se voc   j   tem familiaridade com este  assunto  pode tranquilamente saltar para o pr  ximo cap  tulo     A primeira coisa que voc   deve saber    que os componentes de um computador  seu  processador  mem  ria e dispositivos de entrada e sa  da de dados s   entendem um tipo  de informa    o  algo est   desligado ou ligado  e isso    representado pelos n  meros 0 e 1  respectivamente     por isso que voc   ouve que um processador    de 8  16  32  64 bits   que uma mem  ria tem um barramento de 16  32 bits e assim por diante  No fim das    Z    contas  cada um destes    bits       um sinal que pode estar ligado ou desligado     Um processador que tenha oito pinos para o endere  amento de mem  ria pode acessar   diretamente  at   256 posi    es de mem  ria  o zero conta como uma posi    o tamb  m    Cada posi    o de mem  ria pode conter palavras de 8  16  32 bits e assim por diante  Para  facilitar nossa comunica    o com os componentes do computador  que s   sabem contar e  representar dados com os n  meros 0 e 1  usamos tabelas de convers  o e representa    o   A tabela 1 mostra a convers  o entre n  meros de base bin  ria para os formatos  hexadecimal e decimal     A convers  o da base bin  ria para a decimal    feita atrav  s da soma de todos os  componentes 2     onde Y    a posi    o do bit  onde tal bit est   ligado  ou seja  tem o valor 1   A posi    o do bit    contada da esquerda para a direita  come  ando por 0  D
11.  gerado  Quando encontra BITS 16 nesta linha ele gerar   o c  digo para a arquitetura x86  de  16 bits      ORG 0x7C00    A posicao em que o codigo sera colocado na memoria    Na arquitetura x86  o endere  o hexadecimal 07C00    onde os programas come  am a ser  carregados  As posi    es antes deste endere  o est  o reservadas para o BIOS     start     P  gina 20 de 45    As palavras que terminam com dois pontos     s  o marcadores que referenciam rotinas ou  simplesmente trechos importantes do programa  Esta linha start  por exemplo  identifica o  in  cio do programa     mov ax  0   Reserva um espa  o de 4Kbytes apos o bootloader    Este comando move  para dentro do registrador de uso geral Ax  o n  mero zero  O  coment  rio voc   entender   a seguir     Registradores s  o estruturas de mem  ria internas do processador  Os processadores da  fam  lia x86 possuem os seguintes registradores     Registradores de uso geral    Identificados pelos nomes AX  BX  CX e DX  cada um destes registradores pode armazenar  um n  mero de 16 bits  ou seja       n  meros bin  rios entre 0000000000000000 e 1111111111111111    n  meros hexadecimais entre 0000 e FFFF    n  meros decimais entre 0 e 65535    Se necess  rio  cada um destes registradores pode ser tratado como dois registradores de  8 bits  ent  o identificados como AH e AL  BH e BL e assim por diante     Registradores de indice    Os registradores si  Source Data Index     ndice de origem de dados  e DI  Destination Data  Index   ind
12.  ncias     Os computadores modernos t  m o BIOS gravado em mem  rias que podem ser  reescritas  permitindo a sua atualiza    o  Isso quer dizer que  al  m de escrever seu  pr  prio sistema operacional  voc   pode escrever seu pr  prio BIOS  O projeto  Coreboot   http   www coreboot org   por exemplo  visa substituir BIOS propriet  rios   fornecidos pelos fabricantes de processadores  por um BIOS totalmente aberto  que  pode ser modificado por aqueles que o desejarem                 Como de costume  siga para a pr  xima instru    o no gdb e acompanhe o que acontece  no QEMU      qemu  x  i  eip  0x00007c29  lods  ds   si   al    Note a instruc  o de nosso programa     lodsb   Pega um caracter da frase    Ela foi expandida para uma instru    o mais completa     0x00007c29  lods   ds   si   al    P  gina 35 de 45    A instru    o lods    usada para processar uma cadeia de caracteres  um caractere por  vez  a partir de uma fonte  a posi    o de mem  ria apontada pelo registrador si  e um  destino  o registrador ds  e a coloca na posi    o inferior do registrador ax  no caso  al      Lembre se  o registrador iP  EP  armazena a instru    o que ser   executada  Assim  fa  a  com que o gdb avance para o pr  ximo passo e acompanhe o que acontece com os  registradores Ip  DS  SI e Ax  Usei o comando info registers no QEMU e  a seguir  reproduzo  um extrato de sua sa  da  a cada passo dado  si  no gdb      qemu  x i  eip   0x00007c29  lods  ds   si   al   qemu  info registers   EAX 0000
13.  o  tratamento de mem  ria  todos est  o  no mesmo espa  o de usu  rio  O HURD  kemel do sistema operacional GNU   o Minix e o  sistema operacional do tablet Blackberry usam este tipo de arquitetura de kernel     Arquitetura h  brida    A partir da vers  o Windows NT  a Microsoft passou a adotar uma arquitetura h  brida de  kernel  misturando os conceitos das arquiteturas monol  tica e h  brida  com alguns  servi  os do kernel rodando em espa  o de usu  rio e outros em espa  o do kernel  Linus  Torvalds e outros defendem que esta n  o    uma arquitetura h  brida de fato  mas sim  escolhas de levar para o espa  o de usu  rio algumas das fun    es de um kernel  de fato     monol  tico  Sou da mesma opini  o     A escolha entre uma arquitetura ou outra    quase pessoal  j   que ambas t  m suas    P  gina 16 de 45    vantagens e desvantagens  Um microkernel     em teoria  mais f  cil de ser portado para  diversos tipos de processadores  uma vez que a por    o que interage diretamente com o  hardware    reduzida  Um kernel monol  tico tem  em teoria  maior desempenho  j   que  dentro dele j   est  o todos os componentes necess  rios para a comunica    o com o  hardware  Na pr  tica  mesmo com um kemel monol  tico  o Linux est   portado para  diversas plataformas     P  gina 17 de 45    Falando com o hardware    Antes de explorar o sistema operacional Linux     conveniente que voc   conhe  a melhor a  arquitetura de seu computador para ter uma compreens  o melhor de como as coisas 
14.  o texto     Funcionou    D   0      Siga para o pr  ximo passo e confira  no QEMU  o que est    acontecendo      qemu  x  i  eip  0x00007c13  call 0x7c27    P  gina 34 de 45    O endere  o 7C27h    onde o compilador colocou a nossa rotina de impress  o de  caracteres na tela  D   mais um passo no gdb      qemu  x  i  eip  0x00007c27  mov   0xe  ah    Repare que  da posi    o de mem  ria 7C13h  o apontador de instru    o saltou para a  posi    o 7C27h  conforme instru  do pela instru    o call anterior  Nessa posi    o temos a  instru    o mov ah  0Eh  que o compilador traduziu para mov  0xe  ah  Essa instru    o chama  uma subfun    o dos servi  os de v  deo do BIOS  Ela trabalha em conjunto com a  instru    o int 10h  que est   mais adiante em nosso bootloader e    quem  efetivamente   colocar   os caracteres na tela        J   falamos sobre o BIOS  mas    bom ressaltar que ele    um sistema operacional  b  sico que existe em qualquer computador  Ele est   carregado antes do endere  o  7C00h e j   oferece uma s  rie de fun    es que voc   pode utilizar em seu pr  prio  sistema operacional  como a que estamos usando para imprimir caracteres na tela   Conhe  a todas as fun    es do BIOS 8086 nesse link     http   www computing dcu ie  ray teaching CA296 notes 8086 bios and dos interrupts html    Que tal fazer  por exemplo  com que o emoticom   D logo ap  s a palavra Funcionou  fique piscando em sua tela  Leia a lista de interrup    es apresentada no link e fa  a  suas experi 
15.  quando voc   precisar  Agora fecho o par  ntesis e vamos adiante                 O QEMU  assim como o VirtualBox que voc   j   instalou e usou     um emulador de  processadores e computadores  Por ter suas ra  zes em ambientes de apoio a  experimenta    o e desenvolvimento  o QEMU pode n  o ter uma interface muito amig  vel  ao usu  rio final  mas esta interface    bastante completa e  em conjunto com o depurador  gdb  permitir   a voc   a execu    o passo a passo de um programa  instru    o por instru    o   permitindo que voc   tire uma radiografia de todos os componentes internos importantes  de sua m  quina  Agora que voc   j   tem ambos instalados  vamos seguir com nossas  experi  ncias  descobrindo se o valor no registrador AX mudou  at   agora  de acordo com  o esperado     Para come  ar  vamos simplesmente rodar o QEMU para que ele inicie uma m  quina com    P  gina 26 de 45    a nossa imagem de disquete  Isto    feito atrav  s da linha de comando   qemu system i386  fda disquete img    Claro que  neste caso  o QEMU deve ser executado na mesma pasta onde est   a imagem  de disquete que geramos  Voc   deve ter visto uma janela  com a sua m  quina emulada   abrir com a informa    o exibida na figura 3  bem similar    que voc   viu quando usou o  VirtualBox         beaBIOS  version 1 7 2 20130119 170942 roseapple     iPXE  http   ipxe org  00 03 0 C900 PCIZ 10 PnP PMM 07FC4560 07F24560 C900    Booting from Hard Disk     Boot failed  could not read the boot disk    Booti
16. 0   00   ESI 00007c18   DS  0000 00000000 0000ffff 00009300     qemu  x i  eip   0x00007c2a  cmp   0x0  al    qemu  info registers   EAX 00000   46   ESI 00007c19   DS  0000 00000000 0000ffff 00009300    Repare que comegamos a percorrer a cadeia de caracteres  um a um  armazenados  nas posi    es de mem  ria indicados pelo apontador de pilha SI  os carregamos na  parte inferior do registrador AX  AL   ou seja  preste aten    o apenas aos n  meros     direita de EAX  e comparamos com o n  mero O  zero      Caracteres s  o representados pela nota    o ASCII  American Standard Code for Information  Interchange   c  digo americano padr  o para a troca de informa    es   http   www asciitable com    Assim  repare o que est   armazenado a partir da posi    o de mem  ria 7C18H  o  c  digo ASCII correspondente e o que    armazenado em AL  na medida em que o  programa avan  a  preenchendo a tabela a seguir     P  gina 36 de 45       Mem  ria  hex  Caractere ASCII AL       7C18 F 46 0e46       7C19       7C1A       7C1B       7C1C       7C1D       7C1E       7C1F       7C20       7C21       7C22       7C23       7C24       7C25       7C26                      No passo seguinte  como o que estava no registrador AL era 0e46  e n  o zero  0  programa salta o endere  o 7032h e mais um passo  vemos que ele entrou na  interrup    o de impress  o      qemu  x i  eip  0x00007c2e  int  0x10    Agora  durante v  rios passos  as instru    es exibidas pelo comando x i  eip est  o longe  de corresp
17. 0000000000000000000000  XMM06 00000000000000000000000000000000 XMM07 00000000000000000000000000000000   qemu     Voc   consegue localizar  nesse resultado  os registradores que usou em seu  programa  Para ajudar  use uma tabela para anotar os valores que est  o nos  registradores  na medida em que executa  passo a passo  o seu programa  Anote os  valores para a posi    o inicial  Paused  e ap  s voc   teclar c  de continue  no prompt do  gdb                                Bootloader   QEMU In  cio 7C00h   ax EAX 00000000 0000aa55   ss SS 0000 00000000 0000ffff 00009300  0000 00000000 0000ffff 00009300  Sp ESP 00000000 00006f20   ds DS 0000 00000000 0000ffff 00009300  0000 00000000 0000ffff 00009300  si ESI 00000000 00000000   ah EAX H  0000 0000   ip EIP 0000fffO 00007c00                A posi    o dos registradores no ponto de parada 7C00h  que voc   definiu no QEMU     a  posi    o em que o BIOS nos deixa antes do nosso programa ser iniciado   repare no  registrador ip  o apontador de instru    o   O que vamos fazer  agora     anotar o que  acontece com os registradores relevantes  na medida em que o nosso bootloader     executado  No terminal onde voc   est   rodando o gdb  execute o comando stepi  step  instruction   d   um passo para a pr  xima instru    o   Voc   deve observar algo parecido  com este      gdb  stepi   0x00007c03 in        Seu programa executou uma instru    o e avan  ou para a posi    o de mem  ria  seguinte  7C03h   Vamos ver o que aconteceu com os reg
18. 00007c0e in          No QEMU  confira o comando que acaba de ser executado e verifique o conte  do do  registrador que acaba de ser alterado      qemu  x  i  eip   0x00007c0e  mov  ax  ds   qemu  print  ds   0    Confere  certo  Voc   havia colocado zero no registrador ax na instruc  o anterior  mov ax   0  e agora moveu o conte  do do registrador ax para dentro do registrador ds  mov ds  ax      Que tal voc   largar esse livro agora e tentar acompanhar o resto da execuc  o do  programa por sua conta  N  o se preocupe se algo der errado  Voc   sempre pode  comecar tudo de novo e  claro  a partir do par  grafo seguinte  continuaremos  depurando  em conjunto  nosso programa  Se voc   topou a proposta de experimentar  sozinho  os pr  ximos par  grafos servir  o como uma revis  o  N  o deixe de usar a  tabela para anotar a evoluc  o dos conte  dos de seus registradores     P  gina 33 de 45       Uma proposta de trabalho em grupo    Em sua sala de aula ou grupo de estudos  fa  a com que algumas pessoas fa  am os  pap  is de registradores  incluindo a pilha e o apontador da pilha   Outra pessoa  ser   a respons  vel por executar  passo a passo  o programa retirando  uma a uma   as instru    es de uma caixa  Recorte quadrados de papel com todos os dados que  voc   utilizar    Assim  na primeira instru    o  o executor pegar   um papel onde est    escrito o n  mero O  zero  e o entregar   para a pessoa que representa o registrador  ax     Se voc   est   trabalhando sozinho  use caixa
19. 74 04 cd 10 u    D     lt  t     eb f7 c3 00 00 00 00 00 00 00 00 00 00 00 00 00 77    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00    n    25ave 33 5 6 7 8resize 9 0 j             Figura 2   Tela do editor hte exibindo os conte  dos do arquivo bootloader bin    Note que  em cada linha  voc   tem representado um segmento  um par  grafo de 16  bytes  Bem    esquerda voc   tem o endere  o inicial do segmento  seguido pelos 16 bytes  de conte  do e terminando com a interpreta    o que o tentou fazer de cada um dos  bytes     De imediato  voc   deve ter reparado na frase    Funcionou    D    mas  observando mais  atentamente  no segundo e no terceiro byte voc   tem 00  00  Mais adiante  na mesma  linha  a sequ  ncia 00  00 se repete e  em ambos os casos 
20. Introdu    o a depura    o de sistemas com softwares  livres  Cesar Brod   outubro de 2014  brodtec com   sysvale com    Sum  rio    SOBRE O AUTO A casais RIT RCC TRT RT DONT CELT I 3  INTO UC ir RR PRQ a E IALIA it 4  Criando um ambiente para desenvolvimento e testes                     i 6  A A O 10  A A O 14  TOS Na iii ilo ai 16   Argd  itet  ra MOMO ES alla ola 16   Arquitetura microkernel  sam ass seis rr esta id ama ada 16   Arquitetura DO orador Rd a E RANA 16  Falando comio hardWarea ir A A O A i   18  A O 20  Um sistema operacional em ASSEemMDIY          39  O suprassumo do baga  o do TOS Oir edi 44    P  gina 2 de 45    Sobre o autor    Cesar Brod atua na   rea de inform  tica desde 1982  Sua forma    o profissional se deu em  grande parte nos Estados Unidos  Canad   e Fran  a  Come  ou a trabalhar com o Linux em  1993 e  desde 1997 desenvolve  atrav  s da BrodTec  servi  os de consultoria  gest  o de  projetos e cria    o de modelos de neg  cios que t  m por base softwares de c  digo aberto   Presen  a constante em eventos relacionados    tecnologias livres no Brasil e no exterior   Cesar foi respons  vel  entre agosto de 2006 e fevereiro de 2009  pela gest  o de projetos  dos Innovation Centers de Interoperabilidade e Open Source  apoiados pela Microsoft  na  UFRGS  Universidade Federal do Rio Grande do Sul  e Unicamp  Universidade Estadual de  Campinas      o idealizador e um dos fundadores da Solis  Cooperativa de Solu    es Livres  e membro do projeto    Linux
21. S  Please 40   Goto   Location elect an interf 50  ce  OK for the 60  rogram menu  Ca 70    Enter a hexdecimal memory address to ficel for command 80  go to between 0000 and FFFF  line  3k8 Of 90   gt 160 IS ELO  tr Ve lt ce sH    ef BO  NN rajlo  lt  u9 e  CO      o   2787 il DO  BE 00 00 BF 00 00 E8 BZ 7D E8 AA    po  EO  EO 02 BB 07 03 B9 2D 03 BA 00 00 Sea 308      e   Fo    i A O di 0123456789ABCDEF    Use the arrow keys to move around  G for GOTO  Enter to change a value          Y for page up  Z for page down  O to Save and L to load file into memoru        Figura 5   Usando o Memory Manipulator    Com cuidado  substitua a express  o    Welcome to MikeOS    por    Aprendendo MikeOS      Voc   ter   que usar uma tabela ASCII  Posicione o cursor em cada letra que quiser mudar  e use o novo c  digo ASCII correspondente  Compare com a figura 6 e tome muito cuidado  para n  o mudar nada que n  o seja  de fato  um caractere  De outra forma  voc   poder    estar bagun  ando o pr  prio sistema operacional   ainda assim  n  o se preocupe muito  com isso  Lembre que voc   est   em uma m  quina virtual QEMU  Se algo der errado   basta come  ar tudo de novo     P  gina 41 de 45    Machine View    O 91  9580 fF pren  dend   Mike0S Ver  sion 4 5b1 Thank  s for trying out  Mike0S t Please  select an interf  ace  OK for the    program menu  Ca    ncel for command  line  3k073051f  Sf Simt   6 E  GtreVe lt e 5H e E  NNN Si  lt    u9  e     J    ERES  1  d q dio    30   7  B7 v7  0     
22. a se em um constante desafio intelectual  apresentando caminhos para  aprofundamentos diversos que n  o cabem nos limites pr  ticos de um   nico livro     O conte  do que disponibilizo agora s  o as partes do livro relativas a uma introdu    o     linguagem assembly e    depura    o de programas  nessa linguagem  usando o emulador  QEMU e o depurador gdb  Fa  o isso como incentivo   queles que querem participar do  concurso de porte e performance de m  dulos do kernel Linux promovido pela Linaro   performance linaro org   Note que esse livreto n  o vai ensinar tudo a voc   sobre a  linguagem assembly  mas ele    uma introdu    o suave para ela e para a arquitetura de  computadores  Para seguir adiante  recomendo a leitura das demais fontes citadas em  Leitura Complementar  ao final deste livreto     P  gina 5 de 45    Criando um ambiente para desenvolvimento e testes    Voc   n  o vai ficar desligando e ligando o seu computador nas v  rias experi  ncias deste  livro  Voc   ir   trabalhar em um ambiente virtualizado   uma m  quina dentro da sua  m  quina  um computador virtual  Assim  se algo der errado   e acredite me  algo dar    errado    voc   pode simplesmente destruir seu ambiente virtual e come  ar tudo de novo   deixando a sua m  quina real intacta     Caso voc   tenha chegado a este livro depois de ter lido o Aprenda a programar   a arte de  ensinar ao computador  Novatec  2013  ou  se de alguma outra forma  voc   tem  conhecimento pr  tico sobre m  quinas virtuais  p
23. alBox  Se tudo deu  certo  voc   deve visualizar uma janela como a mostrada na figura 1     P  gina 12 de 45    M  quina Visualizar Dispositivos Ajuda    uncionout   D       CTOTa PAO RES     Ctrl Direito  Figura 1   Seu programa bootloader rodando na m  quina virtual    O nome bootloader    apenas uma conven    o  Traduzindo para o portugu  s     algo como     carregador inicial    e ele     tipicamente  o programa respons  vel por carregar todos os  demais componentes do sistema operacional  Nada impede  como voc   acabou de ver   que escrevamos um programa que n  o fa  a nada  Ele ser   executado a partir de uma  imagem de disquete desde que a   ltima palavra do primeiro setor de 512 bytes do  disquete seja   o que explica a   ltima linha de nosso c  digo     Se voc   conhece um pouco de Assembly  os coment  rios do programa  adaptado de um  tutorial sobre o sistema MikeOS que voc   conhecer   melhor no pr  ximo cap  tulo  que  escreveu    Funcionou    D    na tela de seu computador devem ser esclarecedores o  suficiente  Mas n  o se preocupe muito com isso agora  Adiante falaremos mais sobre  Assembly e linguagem de m  quina  Se voc   tiver o esp  rito aventureiro e gostou da  brincadeira de interagir diretamente com seu computador  a melhor fonte de informa    es  sobre o assunto    o livro Art of Assembly Language  de Randall Hyde  No Starch  2010   que  est   dispon  vel na   ntegra no seguinte endere  o web     P  gina 13 de 45    O kernel    A primeira coisa que o bo
24. ama de n  o ter encontrado nada para iniciar o  computador     Vamos dar ent  o  ao BIOS  um motivo a menos para reclamar  Voc   deve ter em mente  que quem ir   processar as suas instru    es ser   um processador  o    c  rebro    de seu  computador  e ele s   entende da chamada linguagem de m  quina  Assim  independente  da linguagem na qual voc   escrever   os seus programas  no fim das contas o processador  estar   executando uma vers  o dos mesmos na sua pr  pria linguagem de m  quina  A  tradu    o entre uma linguagem de programa    o qualquer para a linguagem de m  quina     chamada de compila    o     O exerc  cio que faremos agora requer que voc   instale o NASM   The Netwide Assembler   Verifique na p  gina do projeto  http   www nasm us  qual    a vers  o mais recente e instale o  programa que corresponda ao seu sistema operacional  Usu  rios de Linux podem instalar  o NASM a partir de seus reposit  rios tradicionais  Usu  rios das distribui    es baseadas no  Debian  como o Ubuntu  o Linux Mint e v  rias outras  podem simplesmente instalar o  NASM com um   nico comando no terminal     sudo apt get install nasm    Sempre que voc   instalar um novo software  seu gerenciador de pacotes ou o programa  apt get poder  o apresentar uma s  rie de depend  ncias que precisam ser atendidas e  sugerir  o quais s  o elas  Voc   deve aceit   las  sempre confirmando quando solicitado   Use seu editor de texto preferido e digite o c  digo a seguir      BITS 16    Instrui ao compi
25. ar o comando  grep para filtrar a ajuda do QEMU e descobrir como alterar a ordem do boot    qemu system i386  help   grep boot    Uma solu    o que far   com que o sistema seja iniciado sem erros    a seguinte   qemu system i386  fda disquete img  boot a    Agora queremos que o QEMU execute nosso pequeno programa de inicializa    o  passo a   passo  para que possamos acompanhar o que acontece nos registradores  Para isso   vamos usar algumas chaves adicionais  Se voc   ainda est   com a janela de emula    o do  QEMU aberta  feche a  Na p  gina oficial do QEMU e com o uso da chave  help voc   ter    muito mais informa    es sobre o uso do programa  Desta forma  os pr  ximos passos s  o  um resumo do que voc   precisa fazer para que possamos atingir o nosso objetivo  Vamos  usar o monitor do QEMU para exibirmos os registradores do processador e o gdb para  configurarmos o ponto a partir do qual queremos executar nosso programa passo a   passo  Primeiro  o comando para o QEMU  com suas respectivas chaves     qemu system i386  fda disquete img  boot a  s  S  monitor stdio    A chave  s    uma abreviatura conveniente para  gdb tcp  1234  que instrui ao QEMU que passe  informa    es e receba comandos de depura    o do gdb atrav  s da porta TCP 1234  voc    ler   mais sobre protocolos de rede e portas no cap  tulo 4  Rede   A chave  S faz com que a  m  quina inicie parada  aguardando por um comando seu para que comece a execu    o do    P  gina 28 de 45    sistema  A chave  monitor 
26. by  ele n  o ser   grande e profissional como o gnu  para clones do AT 386 486   Isto  vem sendo desenvolvido desde abril e est   come  ando a ficar pronto  Gostaria de quaisquer opini  es sobre o que as pessoas gostam e n  o  gostam no minix  j   que meu SO    um tanto similar  o mesmo leiaute f  sico do sistema de arquivos   por quest  es pr  ticas   dentre outras                P  gina 14 de 45       coisas      A hist  ria do Linux  por Linus Torvalds  pode ser lida neste link     http   www cs cmu edu    awb linux history html                   P  gina 15 de 45    Tipos de kernel    Em 1992 comecei a trabalhar na Tandem Computers  hoje a divis  o de sistemas NonStop  da HP   Na empresa fiz cursos sobre os sistemas operacionais Unix e Guardian  Um dos  livros de refer  ncia recomendado pelos instrutores era o rec  m lan  ado Modern Operating  Systems  de Andrew S  Tanenbaum  Prentice Hall  1992   Hoje este livro j   est   em sua  terceira edi    o e tem tradu    o para o portugu  s     Por causa deste livro conheci o grupo de not  cias comp os minix e  atrav  s dele  o Linux  O  Linux permitiu me que eu pudesse testar v  rios softwares dispon  veis para o sistema Unix  comercializado pela Tandem  baseado no Unix SVr4 da AT amp T  em meu laptop antes de  instal   los nos clientes que adquiriam os computadores  Na   poca  a   nica raz  o de eu ter  instalado o Linux  em vez do Minix  em minha m  quina  foi a maior facilidade de  instala    o do primeiro     A leitura das me
27. chamado bootloader bin  Antes de podermos test   lo  lembre se  que na mensagem de erro que voc   recebeu do BIOS reclamava da falta de uma m  dia  inicializ  vel  bootable media   Voc   precisa converter este arquivo execut  vel para um  formato que sirva  para a m  quina virtual  como uma m  dia de disquete     No Linux  voc   far   isso com o seguinte comando     dd if bootloader bin of disquete img count 1 bs 512    O dd converte o arquivo de entrada especificado pela chave if para o arquivo de sa  da  especificado pela chave of  usando o operando bs para dizer que o arquivo ser   escrito em  blocos de 512 bytes  copiando um byte por vez  conforme define o operando count  a partir  do arquivo de origem  Estes n  meros tem a ver com a    geometria    do disquete virtual  para o qual voc   est   copiando seu bootloader  Caso voc   n  o tenha familiaridade com o  comando dd  n  o se preocupe em entend   lo integralmente agora     No Windows voc   deve baixar um programa como o Winlmage  http   www winimage com   ou  outra alternativa para criar a imagem do disquete        Um par  ntesis  voc   j   sabe que este livro adotou o Linux como o padr  o para os  exemplos que ser  o usados em nosso aprofundamento sobre sistemas operacionais   Por que n  o aproveitar a oportunidade  caso voc   n  o tenha feito isso ainda  de  instalar o Linux em sua m  quina  H   v  rias op    es para se fazer isso  Se voc   tiver no  m  nimo quatro gigabytes de mem  ria e oito gigabytes dispon  veis
28. de de traduzir para o portugu  s O M  tico  Homem M  s  Elsevier  2009   de Fred Brooks Jr   arquiteto chefe do sistema predecessor  OS 360  Adiante conheci sistemas operacionais de processadores de comunica    o e  no  in  cio dos anos 90 comecei a trabalhar com sistemas operacionais tolerantes a falhas   para ambientes de processamento paralelo massivo  Em 1993 conheci o Linux  o sistema  operacional que passou a fazer parte da minha vida profissional  e pessoal  desde ent  o     Entre 2006 e 2009  junto com a minha s  cia  Joice K  fer  desenvolvi para a Microsoft um  trabalho de gest  o de desenvolvimento de softwares livres interoper  veis entre as  plataformas operacionais Linux e Windows  Este trabalho envolvia a coordena    o do  trabalho de bolsistas da Universidade Federal do Rio Grande do Sul e da Universidade  Estadual de Campinas  Na   poca  participei de um treinamento sobre o ambiente de  processamento paralelo do servidor Windows em um evento da Microsoft em Boston  nos  Estados Unidos  V  rios dos trabalhos desenvolvidos neste per  odo est  o em    http   ndos codeplex com     Da mesma forma que em Aprenda a Programar  minha inten    o com este livro    a de que  ele seja b  sico o suficiente para que um iniciante sinta se a vontade em us   lo como sua  primeira fonte de informa    o sobre sistemas operacionais  Mas  ao mesmo tempo  este  n  o    um livro paternalista ou condescendente  Ao contr  rio  minha ideia    a de que ele    P  gina 4 de 45    constitu
29. e conferir em uma tabela que est   na p  gina de suporte da Apple  a fabricante do  Mac  http   support apple com kb HT3696 viewlocale pt BR amp locale pt BR       Segundo esta p  gina  os passos para descobrir o processador s  o os seguintes     1  Selecione Sobre Este Mac no menu Apple  o   cone da ma      na barra de menus no  canto superior esquerdo e  em seguida  clique em Mais Informa    es     2  Abra a se    o Hardware   3  Localize o Nome do Processador     4  Compare o nome do seu processador com as informa    es abaixo para determinar  se o processador do Mac    de 32 bits ou de 64 bits     Tabela 1 1   Correspond  ncia entre processadores e arquitetura    2 Fonte  http   www meuwindows8 com windows 8 e 32 ou 64bits     P  gina 7 de 45       Nome do Processador    Arquitetura                                  Intel Core Solo 32 bits  Intel Core Duo 32 bits  Intel Core 2 Duo 64 bits  Intel Quad Core Xeon 64 bits  Dual Core Intel Xeon 64 bits  Quad Core Intel Xeon 64 bits  Core i3 64 bits  Core i5 64 bits  Core i7 64 bits          P  gina 8 de 45       Como saber se meu Linux est   rodando em 32 ou 64 bits    Se voc   usa o Linux  certamente sabe como abrir um terminal  Fa  a isso e digite o  comando uname  m  Se a resposta indicar algo com o n  mero 64  sua arquitetura    de 64  bits  Exemplo      uname  m   x86 64    Para instalar e rodar o VirtualBox  voc   deve ter  no m  nimo  um computador com 2Gb de  mem  ria  mas    recomend  vel ter mais do que 4Gb  Al  m dis
30. esta forma  o  n  mero 00010110 tem ligados os bits 1  2 e 4  o que quer dizer que  em n  meros  decimais ele corresponde a 21   22   24   2   4   16   22     A nota    o hexadecimal      til j   que ela agrupa quatro bits por vez  usando os n  meros 0  a 9 e mais os caracteres A  B  C  D e F para representar 16 n  meros  0 conta como um  n  mero  com apenas uma posi    o     Voc   pode usar o portal http   www binary code org  para converter n  meros bin  rios rapidamente  para o formato decimal e hexadecimal     P  gina 18 de 45    Tabela 1   Convers  o entre n  meros bin  rios  hexadecimais e decimais                                                             2124 29 241242428 2   Hex Dec  0 0 0 0 0 0 0 0 00 0  0 0 0 0 0 0 0  1 01 1  0 0 0 0 0 0 1 0 02 2  0 0 0 0 0 0 1 1 03 3  0 0 0 0 0 1 0 0 04 4  0 0 0 0 0 1 0 1 05 5  0 0 0 0 0 1 1 0 06 6  0 0 0 0 0 1 1 1 07 7  0 0 0 0 1 0 0 0 08 8  0 0 0 0 1 0 0 1 09 9  0 0 0 0 1 0 1 0 OA 10  0 0 0 0 1 0 1 1 OB 11  0 0 00 0 1 1 0 0 OC 12  0 0 0 0 1 1 0 1 OD 13  0 0 0 0 1 1 1 0 OE 14  0 0 0 0 1 1 1 1 OF 15  111 11 111 1 1 FF 255                                   gt     Como voc   j   deve imaginar  cada instru    o que seu processador executa tamb  m     passada a ele na forma de um n  mero bin  rio  Assim  se o processador receber uma  instru    o 00000000 ele sabe que deve fazer uma opera    o de soma  ADD   enquanto se  receber uma instru    o 00111000 ele deve comparar  CMP  dois n  meros     P  gina 19 de 45       Assembly    J   h
31. horar sistemas operacionais  voc   ir   se  deparar com programas enormes e muito mais complexos  Quando isso acontecer      bom voc   ter uma maior familiaridade com o QEMU e o gdb     Por exemplo  na medida em que voc   depura o seu c  digo  pode ser que voc   fique  confuso sobre qual a instruc  o que o QEMU est   executando em um determinado  passo  No passo em que estamos agora  por exemplo  se executarmos  no QEMU  o  comando x  i  eip  confirmamos a instru    o que ser   executada  junto com o  endereco de mem  ria onde ela se encontra      qemu  x  i  eip  0x00007c0b  mov   0x0  ax    Quando voc   adquire pr  tica com o que est   acontecendo nos registradores  voc   n  o  precisa listar o conte  do de todos eles  Acabamos de alterar  na instruc  o anterior  o    P  gina 32 de 45    conte  do do registrador sp  ESP para o QEMU   assim  podemos confirmar seu novo  conte  do com o mesmo comando x      qemu  x  esp  00001000  0    E uma maneira conveniente de exibir o conte  do do registrador no formato decimal     atrav  s do uso do comando print      qemu  print  esp  4096    Este livro n  o tem a m  nima intenc  o de cobrir todos os aspectos do QEMU  e nem do  gdb   Vale a pena  por  m  voc   dar uma olhada no manual online do QEMU antes de    seguir adiante  http   en wikibooks orq wiki QEMU Monitor    Agora que voc   j   aprendeu mais algumas coisas  siga para o pr  ximo passo de seu  bootloader  No gdb  digite o comando si  uma abreviatura de stepi       gdb  si  0x
32. ice de destino de dados  apontam  respectivamente  para posi    es de  mem  ria onde os dados ser  o buscados e armazenados     Apontador da Pilha    O registrador sP  Stack Pointer  aponta para o n  mero de 16 bits que est   no topo da  pilha  E a pilha    uma mem  ria tempor  ria similar a uma pilha de papel no qual voc   s    pode ver o papel que est   no topo da pilha  Ela funciona como uma mem  ria tempor  ria  e      til  por exemplo  quando voc   precisa substituir os valores dos registros de uso geral  por novos valores mas quer manter os valores antigos em algum lugar     necess  rio  lembrar  por  m  que se voc   guarda na pilha os registros que est  o em AX  BX  CX e DX na  pilha  nesta ordem  ao recuperar os valores voc   tem que saber que eles est  o na ordem  reversa  Como DX foi o   ltimo colocado na pilha  ele    o que est   no topo dela     O registrador SS    o registro de segmento da pilha  ou seja  ele aponta para a   rea da  mem  ria que ser   usada para o armazenamento da pilha     Apontador de Instruc  o    O registrador  P  Instruction Pointer  aponta para a posi    o da mem  ria onde est   a  instruc  o que o processador est   executando no momento  Tipicamente  a cada instruc  o  executada o processador salta para a instruc  o na posic  o imediatamente seguinte na  mem  ria  mas voc   pode mudar o conte  do deste registrador para que ele execute  instru    es a partir de outras posi    es  como resultado de uma condi    o de teste ou de  uma interrup
33. istradores  Voc   j   sabe  como fazer isso  no monitor do QEMU use o comando info registers     P  gina 30 de 45                                  Bootloader   QEMU 7C00h Passo 1   ax EAX 0000aa55 00000000   ss SS 0000 00000000 0000ffff 00009300  0000 00000000 0000ffff 00009300  Sp ESP 00006f20 00006f20   ds DS 0000 00000000 0000ffff 00009300   0000 00000000 0000ffff 00009300  si ESI 00000000 00000000   ah EAX H  0000 0000   ip EIP 00007c00 00007c03                   Repare que os   nicos registradores que mudaram foram o ip  que agora aponta para o  endere  o da pr  xima instru    o a ser executada  7C03  e o ax  pois ele acaba de  receber o valor 0  como exigimos que isso acontecesse na primeira linha    real    de    nosso bootloader     mov ax  O    No gdb  use mais uma vez o comando stepi e verifique os registradores no QEMU   Repita esse processo para os pr  ximos passos                                            Bootloader   QEMU Passo 1 Passo 2   ax EAX 00000000 00000120   SS SS 0000 00000000 0000ffff 00009300  0000 00000000 0000ffff 00009300  Sp ESP 00006f20 00006f20   ds DS 0000 00000000 0000ffff 00009300   0000 00000000 0000ffff 00009300  si ESI 00000000 00000000   ah EAX H  0000 0000   ip EIP 00007c03 00007c06       Como j   hav  amos discutido antes  agora adicionamos o valor 288  poder  amos ter escrito  120h para a sua representa    o hexadecimal  ao conte  do do registrador 2X  ao qual  hav  amos atribu  do o valor zero              add ax  288  Repare que o a
34. ito em  Computador e clique em Propriedades     e Se  Sistema Operacional de 64 bits  estiver listado ao lado de Tipo de  sistema  voc   est   executando a vers  o de 64 bits do Windows Vista ou do  Windows 7     e Se  Sistema Operacional de 32 bits  estiver listado ao lado de Tipo de  sistema  voc   est   executando a vers  o de 32 bits do Windows Vista ou do  Windows 7     A edi    o do Windows Vista ou do Windows 7 em execu    o    exibida em Windows    1 Fonte  http   windows microsoft com pt br windows7 find out 32 or 64 bit    P  gina 6 de 45    Edition  pr  ximo    parte superior da janela   Computadores executando o Windows 8    Para saber se o seu computador executa o Windows 8 em 32 ou 64 bits  use essas  instru    es fornecidas pelo portal Meu Windows 8         V   at   a tela inicial do seu Windows 8 e digite Sistema  em seguida clique em  configura    es para indicar o tipo conte  do que pretende pesquisar  neste momento  voc   ver   entre os itens listados um atalho nomeado Sistema  clique sobre ele     e Na tela seguinte voc   conseguir   visualizar qual a vers  o do Windows 8 est   sendo  utilizada na sua m  quina  se    a de 32 bits ou a de 64 bits  Essa informa    o est   na  se    o Sistema  ao lado de Tipo de Sistema     Como saber se meu Mac OS X est   rodando em 32 ou 64 bits    No caso do Mac a coisa    um pouco mais complicada  uma vez que o sistema fornece o  nome do processador mas n  o informa se sua arquitetura    de 32 ou 64 bits  o que voc    pod
35. lador para gerar codigo para 16 bits   ORG 0x7C00    A posicao em que o codigo sera colocado na memoria    start   mov ax  0   Reserva um espa  o de 4Kbytes apos o bootloader    add ax  288    4096   512   16 bytes por paragrafo  MOV ss  aX   mov sp  4096   mov ax  0   Configura o segmento de dados para este programa  mov ds  ax   mov si  texto   Coloca a posicao do texto em si   call imprime   Chama a rotina de impressao   jmp     Repeti    o infinita    texto db  Funcionou    D   O    P  gina 10 de 45    imprime    Coloca na tela o texto em si    mov ah  0Eh   int 10h   funcao de impressao  repeat   lodsb   Pega um caracter da frase  cmp al  0  je  done   Se o caracter for 0  termina  int 10h   Caso contrario  imprima  jmp  repeat   done   ret  times 510        db 0   Preenche o restante do setor de boot com Os  dw OXAA55   Assinatura padrao de boot    Salve seu programa com o nome de bootloader asm em uma pasta onde voc   ir   guardar  estes e outros programas exemplo  Caso seu editor de texto permita que voc   salve seu  texto em m  ltiplos formatos  garanta que usar   o formato de texto puro  ANSI  Texto Puro   Texto ou outra op    o equivalente em seu editor      Agora  na pasta onde est   o seu programa  execute o NASM para transform   lo  compil     lo  em um c  digo bin  rio  execut  vel por seu processador     nasm bootloader asm  f bin  o bootloader bin    Se voc   digitou tudo corretamente  agora voc   deve ter como resultado  em sua pasta   um programa compilado 
36. ma operacional completo de GNU Linux  com o intuito de creditar as  ineg  veis contribui    es do projeto GNU  j   mencionado anteriormente  ao sistema  operacional Linux  H    inclusive  aqueles que s  o extremamente vocais quanto a  ado    o desta nomenclatura  O Linux  por  m  al  m das contribui    es do projeto GNU  conta com in  meras outras  entre elas da Berkeley Software Distribution  BSD   e das  funda    es Apache e X org  mas a lista    muito mais extensa  Afinal  Linux acabou  tornando se uma    marca    para o sistema operacional livre e de c  digo aberto  constru  do a partir de m  ltiplas contribui    es  todas importantes     Al  m disso  na mensagem original de Linus Torvalds sobre seu projeto  em 1991  ele  dizia que estava criando um sistema operacional  n  o apenas o kernel de um sistema  operacional  Por isso  neste livro  sempre que nos referirmos ao sistema operacional  completo o chamaremos de Linux e  quando nos referirmos ao n  cleo do sistema  operacional o chamaremos de kernel Linux ou  simplesmente  kernel     A seguir  um trecho da mensagem de Linus traduzida para o portugu  s     De  torvalds klaava Helsinki FI  Linus Benedict Torvalds   Newsgroups  comp os minix   Assunto  O que voc   mais gostaria de ver no minix    Resumo  pequena pesquisa pra meu novo sistema operacional  Data  25 de agosto de 1991 20 57 08 GMT   Organiza    o  University of Helsinki    Ol   a todos usando o minix    Estou fazendo um sistema operacional livre  apenas um hob
37. menu CLI choice after CLI has ex ited    Data for the above code       os init msg db  Welcome to MikeOS   0  os version msg db  Version    MIKEOS VER  0    dialog string 1 db    Thanks for trying out MikeOS    0    dialog string 2 db  Please select an interface  OK for the   0  dialog string 3 db  program menu  Cancel for command line    0    P  gina 39 de 45    Ou seja  voc   j   pode  por exemplo  come  ar a traduzir o MikeOS para o portugu  s   Na janela do QEMU  tecle OK e tome um tempo para familiarizar se com o MikeOS     Agora que voc   j   brincou um pouco com o sistema  use a seta para baixo e encontre o  programa MEMEDIT BAS  como mostra a figura 4     Machine View    Welcome to Mi       Please select a file using the cursor  keys from the list below       VIEWER BIN  ADUNTURE   BAS  CALC BAS  CF   BAS  DRAW  BAS  EXAMPLE   BAS  MBPP   BAS  MEMEDIT BAS  MUNCHER   BAS  SUDOKU   BAS  SAMPLE   PCX  FORTH BIN  ARCHIVE  BAS  FISHER BIN    Figura 4   Evocando o MEMEDIT BAS    Voc   abrir   o Memory Manipulator  Manipulador de Mem  ria   um programa muito similar ao  hte que voc   j   utilizou anteriormente  Repare que na parte inferior da tela h   algumas  instru    es sobre como usar o programa  Tecle G  GO TO   ir para  e o n  mero 160  como  mostra a figura 5     P  gina 40 de 45    Machine View    Pa 2 9       p E y 0123456789ABCDEF   53 02 E9    6 i  5580 fF Welco 00   4D 69 6B me to Mike0S Ver 10   ZE 35 62 sion 4 5b1 Thank 209   74 72 79 s for trying out 30  Mike0
38. ndo o n  mero  decimal equivalente vai de 10    15  A pr  tica torna isso  rapidamente  muito f  cil  A  tabela 4 mostra a soma que representa o conte  do de nosso registrador AX at   o  momento     Tabela 4   Soma de n  meros de base hexadecimal                Sobe um   N  mero 1 0 7 C 0   N  mero 2 0 1 2 0  soma 0 8 E 0                         Seria bom verificar se nossos registradores est  o se comportando exatamente da forma  esperada  Com um pouco mais de trabalho n  s podemos fazer isso  Voc   precisar   de    P  gina 25 de 45          duas ferramentas adicionais  o depurador de c  digo gdb  http   www sourceware org gdb   e O  emulador de processadores QEMU  http   wiki qemu org    Instale os como de costume  usando o  gerenciador de pacotes de sua distribui    o Linux ou  caso esteja usando a distribui    o  recomendada  Linux Mint 15 Xfce  ou qualquer outra baseada em Debian  com o seguinte  comando        sudo apt get install qemu gdb    Como de costume  aceite a instala    o de quaisquer prerrequisitos        Um par  ntesis  voc   pode  neste momento  achar que est   recebendo mais  informa    es do que tem capacidade de processar  especialmente se n  o teve uma  exposi    o muito grande    aritm  tica com outras bases num  ricas  eletr  nica  digital e programa    o  A forma como escrevi este livro    muito calcada na  experi  ncia que tive com equipes de suporte  desenvolvimento e estudantes com  os quais tive a grata oportunidade de trabalhar  Isto tudo somado 
39. ng from Floppu     Funcionou    D_          Figura 3   O QEMU inicializado com o bootloader na imagem de disquete    Primeiro  repare na linha de comando que usamos para chamar o QEMU     0  que significa que estaremos emulando um sistema completo  incluindo disquete  disco  r  gido e outros componentes  O programa respons  vel apenas pela emula    o do    processador    o e ele    apropriadamente usado pelo   Para saber  quais outros processadores e sistemas o QEMU    capaz de emular  na linha de comando  digite e  sem digitar espa  o ou teclar ap  s o nome  pressione duas vezes a  tecla   Voc   deve observar um resultado similar ao seguinte    qemu qemu ppc64abi32 qemu system mipsel   qemu alpha qemu s390x qemu system or32   qemu arm qemu sh4 qemu system ppc   qemu armeb qemu sh4eb qemu system ppc64   qemu cris qemu sparc qemu system ppcemb   qemu i386 qemu sparc32plus qemu system s390x   qemu img qemu sparc64 qemu system sh4   qemu io gemu system alpha qemu system sh4eb   qemu m68k qemu system arm qemu system sparc    P  gina 27 de 45    qemu make debian root  qemu system cris qemu system sparc64    qemu microblaze qemu system i386 qemu system unicore32  qemu microblazeel qemu system lm32 qemu system x86_64  qemu mips qemu system m68k qemu system xtensa  qemu mipsel qemu system microblaze  qemu system xtensaeb  qemu nbd qemu system microblazeel qemu unicore32  qemu or32 qemu system mips qemu x86_64   gemu ppc qemu system mips64   qemu ppc64 qemu system mips64el    O QEMU  
40. nsagens deste grupo provou ser de grande utilidade complementar aos  meus estudos de sistemas operacionais na Tandem e    minha compreens  o do    mundo  Unix     Um marco hist  rico foi o debate entre o jovem Linus Torvalds e o  ent  o j    consagrado  Andrew Tanenbaum  sobre qual deveria ser o tipo ideal de arquitetura de um  n  cleo de sistema operacional  A Wikipedia traz uma p  gina muito boa  em portugu  s   sobre este debate em http   pt wikipedia org wiki Debate entre Tanenbaum e Torvalds        Andrew Tanenbaum  obviamente  defendia o microkernel  a arquitetura usada no Minix   enquanto Linus Torvalds  tamb  m obviamente  defendia a arquitetura monol  tica usada  no Linux     Arquitetura monol  tica    A arquitetura monol  tica    mais simples  j   que todas as fun    es do kernel est  o dentro  do pr  prio espa  o do kernel  Mais adiante  quando voc   for personalizar o kernel do Linux  isto ficar   bem evidenciado  Al  m do Linux  sistemas operacionais como o BSD  o Solaris  e as vers  es antigas do Windows usam este tipo de arquitetura     Arquitetura microkernel    Na arquitetura microkernel  as fun    es do kernel s  o reduzidas ao m  nimo  ficando todos  os servi  os do sistema no chamado espa  o de usu  rio  O espa  o do kernel    um espa  o  privilegiado  de contato direto com o hardware  O espa  o do usu  rio n  o tem esse  contato  s   podendo faz   lo atrav  s de servi  os fornecidos pelo microkemel  Assim   processos do sistema de arquivos  de comunica   
41. o quer correr o risco de corromper o sistema operacional e seus arquivos  mas quer ter toda a chance de errar e aprender com os seus erros e acertos   Depuradores  como o gdb  permitem que voc   acompanhe o que est   acontecendo  dentro de uma m  quina  inspecionando sua mem  ria e seus registradores     P  gina 44 de 45    Leitura complementar    TANENBAUM  Andrew S  Sistemas Operacionais Modernos  S  o Paulo  Prentice Hall  2010     TANENBAUM  Andrew S   WOODHULL  Albert S  Sistemas Operacionais   Projeto e  Implementa    o  Porto Alegre  Bookman  2002     MOTA  Jo  o Eriberto Filho  Descobrindo o Linux  S  o Paulo  Novatec  2012   HYDE  Randall  Art of Assembly Language  Estados Unidos  No Starch  2010     BROD  Cesar  K  FER  Joice  et al  Redes sem Fio no Mundo em Desenvolvimento  Estados  Unidos  Hacker Friendly  2008  dispon  vel gratuitamente no endere  o http   wndw net      SCRODER  Carla  Redes Linux   Livro de Receitas  Jacar    Alta Books  2009     P  gina 45 de 45    
42. ode tranquilamente fazer uma leitura  r  pida das pr  ximas p  ginas     Acesse a p  gina de downloads do VirtualBox em    https   www virtualbox org wiki Downloads e escolha a vers  o apropriada  de acordo com  o sistema operacional que utiliza e a arquitetura de sua m  quina  H   vers  es para os  sistemas Windows  Mac OS X  Linux e Solaris  nas arquiteturas de 32 ou 64 bits   Tipicamente  o usu  rio sempre sabe qual    o sistema operacional instalado na sua  m  quina  mas nem todos sabem se a arquitetura    de 32 ou 64 bits  Se voc   sabe qual     a arquitetura de sua m  quina  pode pular as instru    es a seguir  baixar a vers  o  apropriada do VirtualBox e seguir adiante     Como saber se meu Windows est   rodando em 32 ou 64 bits    Segundo informa    es fornecidas pela Microsoft     fabricante do Windows  voc   deve seguir  esses passos  dependendo da sua vers  o do Windows     Computadores executando o Windows XP    e Clique em Iniciar  clique com o bot  o direito do mouse em Meu Computador e  clique em Propriedades     e Se  x64 Edition  for listado em Sistema  voc   est   executando a vers  o de 64  bits do Windows XP       Se n  o ver  x64 Edition  listado em Sistema  voc   est   executando a vers  o  de 32 bits do Windows XP     A edi    o do Windows XP em execu    o    exibida em Sistema  pr  ximo    parte superior da  janela     Computadores executando o Windows Vista ou o Windows 7      Clique no bot  o Iniciar Imagem do bot  o Iniciar  clique com o bot  o dire
43. onder ao que voc   escreveu em seu programa  Elas s  o as instru    es  correspondentes    fun    o de impress  o que voc   evocou atrav  s da interrup    o int 10h   junto com v  rias outras que correspondem ao trabalho normal do BIOS que  independem de seu bootloader   o BIOS n  o deixa de ser um sistema operacional   ainda que pequeno e b  sico e por isso  al  m de rodar o seu programa  ele    presta  aten    o    a outras interrup    es e tarefas de manuten    o para as quais foi  programado  Canse seus dedos um pouco e v   avan  ando no programa com a  sequ  ncia de comandos si  gdb  e x  seip  QEMU   observando a janela do emulador  onde  at   agora  est   escrito apenas Booting from Floppy    Ap  s muito  muito tempo  pode  chegar a mais de mil passos  voc   ver   a letra    F    ser impressa em sua tela  Se voc    tiver tempo e paci  ncia  verifique as interrup    es que s  o evocadas nesse processo     P  gina 37 de 45    comparando as com a lista de interrup    es do BIOS encontrada nesse link   http   80864beginner com 8086 interrupt list           bom  no desenvolvimento ou depura    o de sistemas operacionais  que voc   tenha  esses e v  rios outros truques na manga  Mas como voc   quer evitar c  ibras e seguir  adiante em suas experi  ncias  vamos apenas ver o programa imprimindo  um a um   os caracteres na tela  Voc   j   descobriu que a instru    o int 10h est   armazenada na  posi    o de mem  ria 7c2h  Assim  use o gdb para definir um ponto de parada   break
44. os arquivos de uma pasta  a chave  la faz com que a listagem seja feita  de maneira detalhada e o comando grep  d faz com que apenas as linhas que come  am  com a letra d  indicando um diret  rio  sejam exibidas  Se voc   se interessou em seguir  adiante seu aprendizado em Assembly e no MikeOS  a pasta doc cont  m manuais para o  desenvolvimento de aplica    es e modifica    es para o sistema  A pasta source cont  m o  c  digo fonte do sistema operacional e a pasta programs o c  digo fonte de todos os  programas acess  rios  inclu  dos no MikeOS  O manipulador de mem  ria que voc   acabou  de usar tem seu c  digo em mikeos programs memedit bas     P  gina 43 de 45    O suprassumo do baga  o do resumo    H   alguma chance de que essa seja a sua primeira leitura sobre sistemas operacionais e  voc   deve estar com os olhos inchados ao final desse texto  Espero que eles estejam  inchados pela curiosidade e n  o por este livro estar fazendo voc   chorar  O importante     voc   saber que sua m  quina s   entende zeros e uns e que a representa    o mais pr  xima  deles  para humanos     a linguagem Assembly e os c  digos ASCII  Voc   pode escrever  programas em qualquer linguagem de mais alto n  vel mas  no final da contas  eles ser  o  traduzidos  por compiladores  nesses zeros e uns     Nas experi  ncias que voc   j   fez e far   no restante desse livro voc   usar   m  quinas  virtuais  que s  o programas que simulam m  quinas reais  como o VirtualBox e o QEMU    Afinal  voc   n  
45. os deste livro  independente de voc   ter optado por  utiliz   la dentro de uma m  quina virtual  em uma instalac  o com    dual boot    ou como o  sistema operacional padr  o de seu computador     Se voc   n  o tem muita familiaridade com o Linux  a editora Novatec publicou o excelente  Descobrindo o Linux  http   www novatec com br livros linux3    de autoria de Jo  o Eriberto Mota Filho   O livro tem quase mil p  ginas que dissecam o Linux  desde seus conceitos b  sicos at    aspectos avancados de administrac  o do sistema  Uma   tima fonte de informac  o na  web  totalmente em portugu  s     o Guia Foca GNU Linux  http   www guiafoca org         Voc   precisar   instalar o editor e visualizador de execut  veis hte  Isto pode ser feito com  o uso do gerenciador de pacotes de sua instala    o do Linux ou  para as distribui    es  baseadas em Debian  como o Linux Mint  Ubuntu e outras   com o seguinte comando     sudo apt get install ht    Sim  o nome do pacote que instala o hte    mesmo ht  Agora  use o hte para ler os conte  dos  do arquivo bootloader bin que voc   criou no cap  tulo anterior     hte bootloader bin    O resultado deve ser similar ao da figura 2     P  gina 22 de 45       File Edit Windows Help Local Hex 15 19 20 06 2014  ropbox Brod Rubens Sistemas Operacionais Programas loader2 bin    2     b8 00 00 05 20 01 8e do bc 00 10 b8 00 00 8e da   2              be 18 7c e8 11 00 eb fe 46 75 6e 63 69 6f 6e 6f         Funciono  75 21 20 3a 2d 44 00 b4 0e ac 3c 00 
46. otloader far      carregar o n  cleo  ou kernel do sistema  operacional     o kernel que ir   fazer a interface direta com todos os componentes de  hardware do sistema  com o apoio de drivers espec  ficos para cada tipo de dispositivo e   em muitos casos  interagindo com o firmware destes dispositivos  Assim  como no caso do  BIOS  v  rios dispositivos modernos possuem seu pr  prio pequeno sistema  Placas gr  ficas  com acelera    o gr  fica tridimensional  por exemplo  chegam at   a ter conjuntos de  comandos espec  ficos para o acesso a seus recursos  al  m de mem  ria pr  pria   sob  muitos aspectos  as placas gr  ficas s  o  de fato  um outro computador dentro de seu  computador        responsabilidade do kernel o gerenciamento do acesso    mem  ria pelos programas  aplicativos e tamb  m o seu acesso aos dispositivos de hardware  Ou seja  quando voc    imprime um texto     o kernel quem intermedia o acesso de seu programa    impressora   com o uso de um driver espec  fico para a mesma     Ele tamb  m possui fun    es que garantem o melhor desempenho do processador em  determinadas condi    es e  mesmo contando com o sistema de arquivos como o seu  grande auxiliar nesta tarefa     o kernel que organiza os dados que s  o armazenados em  discos r  gidos  pendrives ou outros dispositivos        Um par  ntesis  voc   j   sabe que o foco deste livro    o sistema operacional Linux  H    os que preferem identificar apenas o kernel deste sistema com o nome Linux   chamando o siste
47. ouve tempos em que voc   efetivamente informava manualmente o c  digo bin  rio de  opera    es  atrav  s de chaves liga e desliga  para que um processador as executasse   Hoje voc   usa montadores  Assemblers  que convertem os mnem  nicos  pequenos  conjuntos de letras que trazem algum significado e s  o muito mais f  ceis de lembrar  nos  c  digos execut  veis bin  rios para o seu computador   esse conjunto de mnem  nicos  forma o c  digo Assembly  Alguns Assemblers  por vezes chamados de Macro Assemblers   ainda permitem o uso de instru    es mais completas e complexas que depois s  o  decompostas nas opera    es que o processador executar    O NASM  que voc   conheceu  rapidamente no cap  tulo anterior     um Assembler     A grosso modo  quando voc   escreve um programa em Assembly  voc   deve pensar em  linguagem de m  quina  mas sem a necessidade de memorizar o c  digo bin  rio das  instru    es  o Assembler far   a convers  o apropriada para voc     Cada arquitetura de  m  quina possui um conjunto de instru    es e componentes espec  ficos e  se quiser  aprofundar se nesse assunto  voc   dever   consultar as especifica    es dos processadores   normalmente encontradas na p  gina web de seus fabricantes     Um Assembly bastante popular    o x86  oriundo da fam  lia de processadores com o  mesmo nome  derivada do processador Intel 8086  cuja fabrica    o teve in  cio em 1978  A  raz  o desta popularidade foi a ado    o desta fam  lia de processadores nos computadores  pes
48. point  nessa posi    o e continue executando o programa teclando c  tamb  m na  janela do gdb e acompanhando o que acontece na janela do emulador do QEMU      gdb  br  0x7c2e   Ponto de parada 1 at 0x7c2e   gdb  c   Continuando     Breakpoint 1  0x00007c2e in         gdb  c  Continuando     Breakpoint 1  0x00007c2e in          Voc   pode querer  tamb  m  colocar um ponto de parada na posi    o 7c29H  voc   lembra  qual instru    o est   nessa posi    o de mem  ria  e usar uma combina    o dos comandos  c e si no gdb e x  i seip  info registers e outras no QEMU apenas para acompanhar o que  acontece dentro desta por    o de seu programa     repeat   lodsb   Pega um caracter da frase  cmp al  O  je  done   Se o caracter for 0  termina  int 10h   Caso contrario  imprima  jmp  repeat    P  gina 38 de 45    Um sistema operacional em Assembly    Sistemas operacionais modernos costumam ser escritos em linguagens de  programa    o de alto n  vel  justamente para garantir a sua portabilidade entre v  rias  plataformas de hardware  Um sistema operacional escrito na linguagem C poder    rodar em qualquer arquitetura que tenha um compilador dessa linguagem     N  o custa lembrar  mais uma vez que  independente da linguagem na qual um  sistema operacional    escrito  o c  digo que o processador executar      o assembly  a  linguagem de m  quina na qual o compilador transformou o sistema operacional  escrito na linguagem C     O MikeOS    um sistema operacional cuja inten    o original    
49. pontador de instru    o j   est   com o endere  o da pr  xima   Bootloader   QEMU Passo 2 Passo 3  ax EAX 00000120 00000120  ss SS 0000 00000000 0000ffff 00009300  0120 00001200 0000ffff 00009300                   P  gina 31 de 45                                     sp ESP 00006120 00006120   ds DS 0000 00000000 0000ffff 00009300  0000 00000000 0000ffff 00009300  si ESI 00000000 00000000   ah EAX H  0000 0000   ip EIP 00007c06 00007c08       Aqui  acabamos de mover o conte  do do registrador geral AX para o o registrador SS   Stack Segment   segmento da pilha   mov ss  ax  que aponta para a   rea de mem  ria  reservada para ela  No pr  ximo passo  o seguinte comando    executado                             mov sp  4096  Veja como ficam nossos registradores   Bootloader   QEMU Passo 3 Passo 4  ax EAX 00000120 00000120  ss SS 0120 00001200 0000ffff 00009300  0120 00001200 0000ffff 00009300  sp ESP 00006f20 00001000  ds DS 0000 00000000 0000ffff 00009300  0000 00000000 0000ffff 00009300  si ESI 00000000 00000000  ah EAX H  0000 0000  ip EIP 00007c08 00007c0b                      Voc   j   deve ter notado que os valores dos registradores est  o no formato  hexadecimal  por isso o registrador sp  ESP  guarda o valor 00001000  ou seja  o  equivalente hexa ao valor decimal 4096     O bootloader que estamos depurando    muito pequeno mas  se voc   decidir que   al  m de aprender um pouco mais sobre sistemas operacionais com a leitura desse  livro  voc   ir    de fato  escrever ou mel
50. s  ou quadrados em um quadro  branco  para representar seus registradores e pap  is ou etiquetas adesivas para ir  substituindo o conte  do neles     Esse tipo de exerc  cio  bastante l  dico  aumenta consideravelmente a  compreens  o da estrutura do computador e do funcionamento de seus programas   Ao menos isso foi o que comprovou minha experi  ncia pr  tica                 Voc   voltou  J    Que bom  vamos acompanhar o restante da execu    o do programa   Siga anotando os valores dos registradores principais com a instru    o info registers do  QEMU  especialmente se voc   est   adquirindo  agora  experi  ncia com a linguagem  de m  quina  o Assembly  e com a arquitetura de computadores  Daqui em diante  vamos destacar  apenas  os registradores  instru    es e posi    es de mem  ria  relevantes    continuidade da depura    o de nosso bootloader  V   para a pr  xima  instru    o  si  no gdb e confira o que aconteceu no QEMU      qemu  x  i  eip   0x00007c10  mov  0x7c18  si  O registrador si  como voc   deve lembrar  aponta o   ndice da origem dos dados  Use o  QEMU para descobrir o que est   armazenado a partir do endere  o 7C18h      qemu  x  c 0x7c18  00007c18   F   u   n   c    qemu  x  c 0x7c1c  00007c1c   i   o   n   o    qemu  x  c 0x7c20  00007020   u  lt tt   qemu  x  c 0x7c24  0000724       D  4x00    xb4     Usamos a chave  c para solicitar ao QEMU que exiba os conte  dos da mem  ria em  formato de caracteres  Ou seja  a partir da posic  o de mem  ria 7C18h temos
51. s convertidos para o sistema decimal e  depois   vert   los novamente para os n  meros hexadecimais        P  gina 24 de 45    Dito isto  n  o    nada t  o complicado fazer somas com n  meros em outras bases  num  ricas  Lembre se das aulas de matem  tica do ensino fundamental  quando voc    come  ou a fazer contas com mais de dois ou tr  s d  gitos e usava a t  cnica do    sobe um      como ilustra a tabela 2  que mostra a soma dos n  meros 137 e 204     Tabela 2   Soma de n  meros de base decimal                Sobe um 1   N  mero 1 1 3 7   N  mero 2 2 0 4  Soma 3 4 1                   Lembrando a t  cnica  dentro de cada caixa s   cabe um d  gito  Assim  cada n  mero que  somado a outro resulte em um n  mero maior que dez     sobe um    na caixa que  corresponde ao d  gito da esquerda     Com n  meros bin  rios    exatamente a mesma coisa  s   que os    uns    sobem com mais  frequ  ncia  j   que 1   1   10  sendo 10 em bin  rio o equivalente ao n  mero 2 em  decimal   Vamos somar os n  meros 14 e 9  respectivamente 1110 e 1001 em bin  rio na  tabela 3     Tabela 3   Soma de n  meros de base bin  ria                   Sobe um 1   N  mero 1 1 1 1 0   N  mero 2 1 0 0 1  soma 1 0 1 1 1                         Confira o resultado convertendo a soma  novamente  para um n  mero decimal   2  4 2 4224 2  1 2 44 4 16 23    A soma de n  meros em base hexadecimal tamb  m    f  cil  Sobe um quando um n  mero  chega a F  15 em decimal   A      s   contar silenciosamente de A at   F qua
52. sdtio abre o monitor do QEMU  atrav  s do qual voc   pode verificar o  estado de v  rios componentes internos do processador  dentro do terminal atrav  s do  qual voc   iniciou o QEMU     Uma vez iniciado o QEMU  ele mostra a informa    o Paused   pausado   no topo da sua  janela   abra um outro terminal onde vamos conectar o QEMU ao gdb  Neste novo  terminal aberto  digite gdb e tecle Enter para iniciar o depurador e  em seguida  estabele  a  a conex  o com o QEMU com o seguinte comando   digite o que est      direita de  gdb       gdb  target remote localhost 1234    O gdb deve ser informado que a m  quina que est   sendo depurada tem uma arquitetura  de 16 bits  Isto    feito com o comando a seguir   repare que as linhas que iniciam com   gdb  s  o as que cont  m o seu comando  as demais s  o a resposta do depurador      gdb  set architecture   8086  Assume se que a arquitetura alvo      8086    Voc   lembra que seu programa come  a na posi    o 07COh  antes desta posi    o de  mem  ria o computador executa o conjunto de instru    es que comp  em o BIOS  Assim   vamos avisar ao depurador que queremos que o sistema interrompa a sua execu    o  exatamente quando o nosso programa come  a a ser executado  Isto    feito com o  seguinte comando  dentro da janela onde o gdb est   em execu    o  a segunda linha    a  resposta do gdb       gdb  br  0x7c00  Ponto de parada 1 at 0x7c00    O comando c  seguido de Enter  dentro da janela do gdb  faz com que o QEMU entenda  que deve con
53. ser uma ferramenta de  aprendizagem  Com o passar do tempo  o sistema desenvolvido por Mike Saunders  passou a ter uma s  rie de contribui    es e hoje conta com interpretadores para as  linguagens BASIC e FORTH  al  m da possibilidade da execu    o de programas na  linguagem C  Agora que voc   j   conhece um pouco de Assembly  que tal visitar a  p  gina do projeto e experimentar o MikeOS  http   mikeos sourceforge net    Navegando pela p  gina voc   encontrar   o link para baixar um arquivo compactado  contendo o c  digo fonte amplamente comentado  em ingl  s   juntamente com v  rias  imagens do sistema  prontas para serem carregadas pelo VirtualBox ou QEMU     Para come  ar a experimentar  descompacte o MikeOS em uma pasta apropriada e   localize  no sistema j   descompactado  a pasta disk images  Nela voc   encontrar   a  imagem de disquete mikeos fip  Coloque o sistema em opera    o com o comando     qemu system i386  fda mikeos flp    Certifique se de especificar o caminho apropriado  caso voc   n  o esteja executando o  QEMU dentro da mesma pasta onde est   a imagem de disquete  Imediatamente voc    deve ver uma tela com a mensagem     Thanks for trying out MikeOS   Please select an inteface  OK for the program menu  Cancel for command line     Na pasta sources  dentro do local onde voc   descompactou o MikeOS  voc   encontra o  arquivo kernel asm  Se voc   procurar  dentro dele  por    Thanks     logo ir   identificar as  seguintes linhas     jmp option screen   Offer 
54. so  voc   deve ter privil  gios  de administrador do sistema para isso  Se voc   j   fez a instala    o de qualquer outro  programa anteriormente  voc   n  o deve encontrar problemas para instalar o VirtualBox   Ap  s baixar a vers  o apropriada na p  gina de downloads mencionada no in  cio dessa  se    o  execute a instala    o de acordo com o processo espec  fico para o seu sistema  operacional     Caso voc   j   seja usu  rio de alguma das distribui    es Linux  h   uma chance  muito grande do VirtualBox estar dispon  vel no reposit  rio de pacotes de sua distribui    o   Assim  use o procedimento adequado para a sua pr  pria distribui    o para efetuar a  instala    o     Execute o VirtualBox e crie uma nova m  quina virtual clicando no bot  o Novo que fica  logo abaixo do menu superior     esquerda  Voc   ser   conduzido a uma s  rie de telas onde  fornecer   os dados do sistema operacional que utilizar    A t  tulo de exemplo  escolhemos  as seguintes op    es     Nome  Meu Sistema Operacional   Tipo  Linux   Vers  o  Ubuntu   Mem  ria  512 MB   Criar um disco r  gido virtual  tipo VDI  dinamicamente alocado  8 GB    Feito isto  inicie sua m  quina virtual clicando no bot  o Iniciar  a seta verde que aponta  para    direita  logo abaixo do menu superior do VirtualBox   Voc   ser   solicitado a dizer  qual o dispositivo que vai usar para o boot  a inicializa    o de sua m  quina  Isto porque  voc   n  o tem nenhum sistema operacional ainda instalado em seu disco r  gido 
55. soais IBM PC e seus clones  a partir do in  cio dos anos 1980  O Assembly x86  estendeu se para o x86 32  tamb  m conhecido como lA 32   para arquiteturas de  processadores de 32 bits e para o x86 64  para arquiteturas de 64 bits  As extens  es mais  novas s  o compat  veis com as anteriores   ou seja  algo que voc   escrever em x86 ir    rodar no x86 32 e x86 64  O contr  rio  por  m  n  o    verdadeiro  se voc   usar instru    es  espec  ficas de arquiteturas com mais bits de endere  amento  elas n  o ser  o compat  veis  com as de menos bits     A seguir reproduzimos  trecho a trecho  o programa que usamos como bootloader no  cap  tulo anterior  dissecando cada uma de suas fun    es e come  ando a ampliar no nosso  cinto de utilidades com muitas ferramentas que ser  o   teis em nosso trabalho com  sistemas operacionais e no entendimento dos mecanismos internos de um computador   Na p  gina web que faz companhia a esse livro voc   ter    referente a cada cap  tulo  uma  se    o listando as ferramentas usadas     O NASM  em sua vers  o atual     capaz de gerar c  digo de m  quina a partir do Assembly  x86 e do x86 32  Por uma quest  o de simplicidade  esta r  pida introdu    o ao Assembly  abordar   apenas a vers  o de 16 bits      BITS 16    Instrui ao compilador para gerar codigo para 16 bits    Esta n  o    uma instru    o para o processador  mas para o assembler NASM  Ele ler   esta  primeira linha  que inicia o programa  para saber para qual arquitetura o c  digo ser   
56. tinuar sua execu    o  parando imediatamente antes da carga do programa  que voc   escreveu  Antes de fazer isso  por  m  no terminal onde voc   tem rodando o  monitor do QEMU  digite o comando info registers e tecle Enter  O resultado deve ser similar ao  que    exibido a seguir      qemu  info registers    EAX 00000000 EBX 00000000 ECX 00000000 EDX 00000633  ESI 00000000 EDI 00000000 EBP 00000000 ESP 00000000  EIP 0000fff0 EFL 00000002            CPL 0 Il 0 A20 1 SMM 0 HLT 0  ES  0000 00000000 0000ffff 00009300   CS  f000 ffff0000 0000ffff 00009b00   SS  0000 00000000 0000ffff 00009300   DS  0000 00000000 0000ffff 00009300   FS  0000 00000000 0000ffff 00009300   GS  0000 00000000 0000ffff 00009300   LDT 0000 00000000 0000ffff 00008200   TR  0000 00000000 0000ffff 00008b00   GDT  00000000 0000ffff   IDT  00000000 0000ffff   CRO 60000010 CR2 00000000 CR3 00000000 CR4 00000000  DR0 00000000 DR1 00000000 DR2 00000000 DR3 00000000  DR6 ffff0ff0 DR7 00000400   EFER 0000000000000000   FCW 037f FSW 0000  ST 0  FTW 00 MXCSR 00001f80  FPRO 0000000000000000 0000 FPR1 0000000000000000 0000    P  gina 29 de 45    FPR2 0000000000000000 0000 FPR3 0000000000000000 0000   FPR4 0000000000000000 0000 FPR5 0000000000000000 0000   FPR6 0000000000000000 0000 FPR7 0000000000000000 0000  XMM00 00000000000000000000000000000000 XMM01 00000000000000000000000000000000  XMM02 00000000000000000000000000000000 XMM03 00000000000000000000000000000000  XMM04 00000000000000000000000000000000 XMM05 0000000000
57. tudo  o computador mais antigo que voc   conseguiu tem um BIOS que n  o  permite a inicializac  o direta a partir de uma pendrive  eu escrevi um artigo com  alguns truques que permitem que voc   ressuscite um computador velhinho     http   dicas l com br brod brod 201210261924 php                   Neste ponto  voc   deve ter o arquivo disquete img em sua pasta e deve dizer ao VirtualBox  que ele deve ser usado como m  dia para o boot de sua m  quina virtual  Desligue sua  m  quina virtual  fechando a janela que cont  m a mensagem de erro que voc   j   viu  anteriormente     FATAL  No bootable medium found  System halted     No VirtualBox  logo abaixo no menu principal  clique no   cone Configura    es  selecione  Armazenamento  abaixo da lista das controladoras  use o   cone que se parece a um  quadrado com um sinal de mais e clique na op    o Adicionar Controladora de Disquete   Voc   ver    na lista das controladoras  sua nova Controladora  Floppy  Clique no disquete  com um sinal de mais ao lado desta controladora e depois em Escolher disco  Navegue  entre suas pastas para chegar naquela que cont  m o seu rec  m criado arquivo disquete img e  clique em Abrir     Ainda na janela de configura    es  clique na se    o Sistema  do lado esquerdo da janela e  verifique se a Ordem de Boot est   correta  listando o Disquete como a primeira op    o  Se  for preciso  fa  a os ajustes necess  rios e clique em OK     Agora  clique na seta verde  logo abaixo do menu principal do Virtu
58. virtual   Opte pelo drive de CD de sua m  quina hospedeira  mas certifique se de que n  o tem  nenhuma m  dia em CD ou DCD neste dispositivo  Voc   receber   a mensagem     FATAL  No bootable medium found  System halted     Pronto  Voc   s   tem o hardware pronto para come  ar a fazer experi  ncias     3 A Oracle disponibiliza um excelente manual de usu  rio do VirtualBox  em  ingl  s   com o total detalhamento do processo de instalac  o para as diversas  plataformas operacionais  nesse link   http   download virtualbox org virtualbox UserManual pdf    P  gina 9 de 45    O bootloader    Bom  n  o    totalmente verdade que voc   s   tem o hardware    sua disposi    o depois que  voc   liga a sua m  quina  H   um componente que est   presente em todos os  computadores e que    um software n  o t  o    soft    assim  o firmware  O firmware    um  programa fixo  gravado em mem  ria n  o vol  til  por isso ele est   presente mesmo  quando o computador est   desligado   Tipicamente  este firmware cont  m rotinas bem  b  sicas que testam a presen  a e a sa  de de componentes de hardware e ficam na espera  de que mais instru    es sejam carregadas a partir de um dispositivo como um disco r  gido   um CD ou DVD ou uma pendrive USB  Nos computadores pessoais este firmware      tipicamente  conhecido como BIOS   Basic Input Output System  sistema b  sico de  entrada e sa  da   Assim  at   agora  na sua m  quina virtual voc   tem o equivalente ao  hardware e o BIOS  e    o BIOS quem recl
    
Download Pdf Manuals
 
 
    
Related Search
    
Related Contents
Contact - eNova Upgrade - Mini Type - SH273AX  WCC WCC210A subwoofer  Lenovo D154W User's Manual  SERVICE MANUAL - River Park, Inc.  Sony Cyber-shot DSC-W80 User's Manual  44M 取付・取扱説明書  Samsung WB750 用户手册  Maksuturva Payment Services Integration Guideline as a  Belkin F8Z441EAB MP3 accessory  1 - Fujifilm    Copyright © All rights reserved. 
   Failed to retrieve file