IFCE Horizonte · Portal
ADS23 · Sistemas Operacionais

Raio-X parcial — seções 1 a 4. Prazo: sexta-feira, 25/09 às 23:59.

Raio-X · entrega parcial

Como fazer a parcial, do começo ao PDF

O enunciado diz o que o relatório precisa ter. Esta página mostra como fazer, passo a passo.

São três sessões de trabalho, de uns 50 minutos cada. Dá para fazer uma por dia. Se é a primeira vez que você escreve um relatório assim, siga na ordem: cada passo já vem com o comando pronto e com o que você deve olhar na tela.

Sessão 1 · Preparar e rodar as seções 1 e 2Sessão 2 · Rodar as seções 3 e 4Sessão 3 · Escrever, revisar e enviar

Agora é só até a seção 4

A entrega parcial tem quatro seções: identificação do sistema, chamadas de sistema, virtualização e processos.

As seções 5, 6 e 7 são da entrega final. Não comece por elas.

Antes de começar

Quatro combinados com a equipe

Quinze minutos aqui evitam muito perrengue depois.

1
Escolham uma VM só. VM é a máquina virtual com Ubuntu que vocês instalaram na Semana 0. Todos os comandos do relatório vão ser rodados nela, e só nela. Anotem de quem é essa VM: isso vai na capa.
2
Marquem os horários das três sessões. As duas primeiras são melhores com a equipe junta, porque é uma máquina só.
3
Criem o documento agora, compartilhado entre vocês, já com a capa e os títulos das quatro seções. Encher um documento que já tem a estrutura é bem mais fácil do que começar do zero.
4
Dividam a escrita, não a investigação. Todo mundo acompanha os comandos. Depois, cada um escreve uma ou duas seções. Na defesa, quem responde é quem o professor escolher.
Só um da equipe tem VM funcionando. Tem problema?

Não. É assim mesmo: a VM é de um integrante só.

Os outros acompanham pela tela dele, do lado ou por compartilhamento de tela, e depois ficam com a parte escrita.

O que não pode é cada um rodar os comandos na sua própria máquina e juntar tudo. O relatório é o raio-x de uma máquina.

Passo 1 de 7

Guardar o que aparece na tela

Você vai rodar uns quinze comandos. Se for tirar foto da tela em cada um, dá trabalho e o arquivo final fica pesado demais.

Tem um jeito melhor: mandar o resultado de cada comando para um arquivo de texto. Depois, na hora de escrever, você escolhe o que entra no relatório.

1mkdir -p ~/raio-x && cd ~/raio-x

O que é

Cria uma pasta chamada raio-x e entra nela. O ~ é um atalho para a sua pasta pessoal.

Por que fazer

Tudo o que você guardar fica num lugar só, fácil de achar depois. Se precisar refazer alguma coisa, é só voltar para esta pasta.

2uname -a 2>&1 | tee -a evidencias.txt

O que é

Este comando parece estranho, mas são quatro pedaços simples:

  • uname -a mostra a versão do sistema. É o comando de verdade.
  • | pega o resultado e passa adiante, para outro comando. É o pipe do Encontro 6.
  • tee -a evidencias.txt mostra o resultado na tela e grava no arquivo, ao mesmo tempo. O -a quer dizer acrescentar: grava no fim, sem apagar o que já estava lá.
  • 2>&1 manda para o arquivo também as mensagens de erro.

Por que o 2>&1 importa

O sistema tem dois canais de saída: um para o resultado normal e outro para os erros. O arquivo só recebe o primeiro.

Sem o 2>&1, um comando que dá errado grava um arquivo vazio, e depois você não descobre o motivo. Isso também é do Encontro 6.

$ uname -a 2>&1 | tee -a evidencias.txt
Linux ubuntu-vm 6.8.0-45-generic #45-Ubuntu SMP x86_64 GNU/Linux
O que esperar:

o resultado aparece na tela normalmente, igual a sempre. A diferença você não vê: ele também foi escrito no arquivo. Confira rodando cat evidencias.txt.

É muita coisa para digitar toda vez

Depois do primeiro, aperte a seta para cima no teclado. O comando anterior volta, e você só troca a primeira parte.

3echo "== lscpu ==" | tee -a evidencias.txt

O que é

Escreve um título dentro do arquivo, antes de você rodar o próximo comando. Troque lscpu pelo nome do comando da vez.

Por que fazer

Sem isso, o arquivo vira um monte de texto emendado e você não sabe onde um resultado termina e o outro começa. Com isso, ele já fica quase na ordem do relatório.

Escreva texto, não foto da tela

Sempre que der, copie o texto do terminal em vez de tirar foto da tela. Por três motivos:

  • Texto continua legível quando alguém aumenta o zoom. Foto de terminal fica embaçada.
  • O PDF pode ter no máximo 15 MB. Fotos enchem esse limite rápido. Texto quase não ocupa espaço.
  • Com texto, você corta só o pedaço que interessa. A tela inteira atrapalha quem lê.

A exceção é o top, que é uma tela que fica se mexendo. Dele, tire foto mesmo. Se quiser em texto, use top -b -n 1 | head -20.

Passo 2 de 7

Seção 1 — que máquina é essa

A pergunta desta seção é: que recursos o sistema controla, e quanto ele tem de cada um? Dito de outro jeito: que máquina é essa, e quanto ela tem de processador, memória e disco?

4cat /etc/os-release · uname -a · hostname · whoami

O que capturar

Rode os quatro, um de cada vez, cada um com | tee -a evidencias.txt no fim:

  • cat /etc/os-release — qual Linux é, e qual versão.
  • uname -a — a versão do kernel, que é o núcleo do sistema.
  • hostname — o nome da máquina.
  • whoami — com qual usuário você está.

O que olhar

A versão do Ubuntu e a versão do kernel são coisas diferentes, e muita gente confunde as duas. O Ubuntu é o sistema inteiro; o kernel é só o miolo dele.

Repare que o uname mostra também x86_64, que é o tipo do processador.

5lscpu · free -h · df -h

O que capturar

Os três, um por vez. Eles mostram justamente os três recursos que o sistema divide entre os programas: processador, memória e disco.

O que olhar

No lscpu: quantos núcleos a VM enxerga (devem ser 2) e o nome do processador — que é o processador real da máquina do laboratório, não um inventado.

No free -h: a coluna available, que é o quanto ainda dá para usar.

No df -h: a linha do /, que é o disco principal, e o quanto dele já está ocupado.

O que esperar:

números parecidos com o que foi configurado na Semana 0: 2 núcleos, uns 4 GB de memória e 25 GB de disco. Se der diferente, escreva isso no relatório. Achado diferente do esperado também vale.

Passo 3 de 7

Seção 2 — o que um programa pede ao sistema

A pergunta desta seção é: o que um programa simples precisa pedir ao sistema para funcionar?

Um programa não mexe direto no disco nem na tela. Ele pede para o sistema fazer isso. Cada pedido desses tem um nome: chamada de sistema. O comando strace mostra esses pedidos acontecendo.

6strace -c ls 2>&1 | tee -a evidencias.txt

O que é

O strace fica espiando os pedidos que um programa faz ao sistema. O -c faz um resumo: em vez de listar pedido por pedido, ele conta quantas vezes cada tipo aconteceu.

Aqui o 2>&1 é obrigatório

O strace escreve pelo canal de erro, não pelo canal normal. Sem o 2>&1, o arquivo fica vazio e parece que o comando não funcionou.

Se acontecer com você, não é defeito: é só o 2>&1 faltando.

O que esperar:

uma tabela com nomes como openat, mmap, write e close, cada um com um número do lado. Um ls simples faz dezenas de pedidos ao sistema.

7o mesmo strace -c em outro programa

O que capturar

Rode o mesmo strace -c em outro programa e guarde as duas tabelas. Por exemplo date, ou cat /etc/hostname.

Por que fazer

Comparar os dois é o que transforma a seção em análise. Sem comparação, ela só descreve.

Duas perguntas boas: qual dos dois pede mais coisas ao sistema? Quais pedidos aparecem nos dois, e por quê?

Passo 4 de 7

Seção 3 — o que é real e o que é virtual

A pergunta desta seção é: nesta máquina, o que é físico, o que é virtual e o que é só separado do resto?

8systemd-detect-virt · hostnamectl

O que capturar

systemd-detect-virt responde numa palavra só qual programa de virtualização está sendo usado. hostnamectl mostra um resumo: sistema, kernel e tipo de máquina.

O que olhar

A resposta deve ser oracle, que é o VirtualBox.

Repare no que isso quer dizer: é a própria máquina virtual dizendo que sabe que é virtual. Dá um bom parágrafo sobre o VirtualBox, que é um programa rodando por cima do Windows do laboratório.

9time docker run --rm alpine echo oi

O que capturar

Guarde as três linhas que o time mostra no fim: real, user e sys. A que interessa é a real, que é o tempo que passou de verdade.

Rode duas vezes e guarde as duas: a primeira baixa a imagem da internet, a segunda não.

Por que fazer

Aqui a diferença entre máquina virtual e container aparece em número, não em texto.

Compare esse tempo com o tempo que a sua VM leva para ligar. O container é rápido porque ele não liga sistema nenhum: ele usa o que já está ligado.

O que esperar:

na segunda vez, menos de um segundo. Se aparecer erro de permissão, tente com sudo docker, ou confira se o Docker está ligado com systemctl status docker.

A melhor evidência desta seção

Rode uname -r na sua VM. Depois rode docker run --rm alpine uname -r.

A versão é a mesma, mesmo o sistema de dentro sendo Alpine e o de fora sendo Ubuntu. Isso acontece porque o container não tem kernel próprio: ele usa o kernel da sua VM.

Guarde as duas saídas lado a lado. É a evidência mais forte desta seção, e costuma render uma boa pergunta na defesa.

Passo 5 de 7

Seção 4 — o que está rodando na máquina

A pergunta desta seção é: o que está rodando agora, e quem começou cada coisa?

Processo é um programa em execução. O mesmo programa aberto duas vezes são dois processos.

10ps aux | wc -l · ps -ef --forest

O que capturar

Primeiro a conta: ps aux | wc -l conta quantos processos existem. Faça isso com a VM recém ligada e só um terminal aberto.

Depois a árvore: ps -ef --forest mostra quem começou quem.

Como cortar sem perder o sentido

A árvore tem centenas de linhas e não cabe no relatório.

Pegue só o pedaço onde aparece o seu bash e os processos acima dele, até chegar no primeiro de todos. Escreva no texto que é um recorte.

11cat /proc/$$/status | head -20

O que é

O $$ é o número do terminal em que você está digitando. Ou seja: este comando faz o processo olhar para ele mesmo.

O que olhar

Quatro linhas: Name, State, Pid e PPid.

O PPid é o processo que criou este aqui — o "pai" dele. E esse número também aparece na árvore do comando anterior. Ligar as duas evidências uma na outra vale mais do que as duas soltas.

12o mesmo processo, por dentro e por fora

O que capturar

Suba um container que fica ligado um tempo:

docker run -d --name meuproc alpine sleep 300

Agora veja de fora, na sua VM: ps aux | grep sleep. Anote o número que aparecer.

E veja de dentro do container: docker exec meuproc ps aux.

O que olhar

É o mesmo processo, com dois números diferentes: um número alto na sua VM, e o número 1 dentro do container.

Não são dois processos. É um só, visto de dois lugares.

O que esperar:

de dentro, uma lista bem curtinha: o container quase só enxerga ele mesmo. Quando terminar, limpe com docker rm -f meuproc.

Passo 6 de 7

Escrever: o modelo de uma evidência

Evidência é a prova de que vocês fizeram: o comando, o que apareceu na tela e o que aquilo quer dizer.

Com o evidencias.txt pronto, escrever fica fácil. Toda evidência tem as mesmas quatro partes, sempre nesta ordem. Copie o modelo abaixo para cada uma.

modelo — copie isto para cada evidência

[1] O QUE FIZEMOS
  Uma frase dizendo o que vocês queriam descobrir.

[2] COMANDO E RESULTADO
  $ o comando exatamente como foi rodado
  o que apareceu na tela, só o pedaço que interessa

[3] O QUE ISSO MOSTRA
  Duas ou três frases, com as palavras de vocês, apontando os
  números que aparecem ali em cima.

[4] O CONCEITO
  O que explica o que vocês viram, dizendo de onde tiraram:
  (Tanenbaum, 2.1, p. 79)  ou  (Laureano, cap. 10, p. 145)

O modelo preenchido

Assim perde nota

"Rodamos o strace -c ls. Apareceram várias chamadas de sistema. Chamada de sistema é quando o programa pede alguma coisa para o kernel."

O que falta: não tem o resultado da tela, não tem nenhum número, e não diz de onde veio a explicação. Dá para escrever isso sem ter rodado nada.

Assim ganha nota

"Queríamos saber o quanto um comando simples depende do sistema. O strace -c ls contou 58 chamadas de sistema para listar uma pasta com 4 arquivos, sendo 21 do tipo mmap e 9 do tipo openat. Ou seja: mesmo um programa que parece não fazer nada precisa abrir bibliotecas, colocar elas na memória e escrever na tela. Cada uma dessas ações é um pedido ao sistema, porque o programa roda em modo usuário e não pode mexer no hardware direto (Tanenbaum, 1.6, p. 50)."

Um teste rápido antes de passar para a próxima

Leia o que você escreveu e pergunte: alguém conseguiria escrever isso sem ter rodado o comando?

Se a resposta for sim, está faltando alguma coisa. Quase sempre é um número do resultado, ou a frase que diz o que aquele número significa nesta máquina.

É aí que a nota se decide.

Passo 7 de 7

Montar o PDF e enviar

Como organizar o documento, na ordem:
1
Capa: nome da equipe, nome e matrícula de cada integrante, e de quem é a VM investigada.
2
Uma parte para cada seção, na ordem 1, 2, 3 e 4. Comece cada uma com a pergunta que ela responde.
3
Referências no fim: livro, capítulo e página. As páginas de cada encontro estão no mapa de leituras.
Como gerar o PDF

No Google Docs: Arquivo → Fazer download → PDF. No LibreOffice: Arquivo → Exportar como PDF.

Nos blocos de comando e de resultado, use uma fonte de largura fixa, como Courier ou Consolas. Isso ajuda quem lê a separar o que é texto de vocês do que é resposta da máquina.

Se o arquivo passar de 15 MB, o problema são as fotos de tela: troque por texto ou diminua o tamanho delas.

Antes de enviar

Confira do jeito que vai ser corrigido

A nota sai de três critérios, com estes pesos. Confira um por um: dá para ganhar ponto em dez minutos aqui.

Peso 4

As quatro seções

As seções 1, 2, 3 e 4 estão lá, e cada uma responde à pergunta dela? Seção que só tem o título conta como se não existisse.

Peso 3

As evidências

Cada coisa que vocês afirmam tem o comando e o resultado da VM de vocês? Resultado copiado de tutorial, de outra máquina ou inventado zera este critério.

Peso 3

A ligação com a teoria

Cada seção liga o que apareceu na tela a um conceito, dizendo de onde tirou? Dizer de onde tirou não é copiar o parágrafo do livro: é escrever com as palavras de vocês e apontar a página.

Erros que aparecem todo semestre

  • Foto da tela inteira em vez do pedaço que interessa. Quem corrige não deveria ter que procurar.
  • Resultado sem comando, ou comando sem resultado. Os dois sempre juntos.
  • Conceito jogado no fim da seção, sem ligação com o número que apareceu.
  • Citação sem página. Só "(Tanenbaum)" não conta.
  • Capa sem matrícula, ou com matrícula errada. É por ela que a nota chega em cada um.
  • Enviar e não conferir. Abra o PDF depois de enviar e veja se está tudo legível.

Confira antes de enviar

  • Todos os comandos foram rodados na mesma VM, e ela está declarada na capa
  • As seções 1, 2, 3 e 4 estão completas
  • Cada seção responde à pergunta dela
  • Toda afirmação tem comando e resultado
  • Os resultados estão cortados no que interessa
  • Cada seção liga a prática a um conceito
  • As citações têm livro, capítulo e página
  • A capa tem equipe, nomes, matrículas e o dono da VM
  • O PDF abre e tem menos de 15 MB
  • Todo mundo da equipe sabe explicar todas as seções
0 / 10 verificados

Enviar

O formulário fica no fim do enunciado, junto com o prazo. Um integrante envia pela equipe toda.

Dá para enviar de novo quantas vezes quiser até o prazo: vale o último envio. O recibo mostra um número de protocolo — guarde ele.