SlideShare uma empresa Scribd logo
Universidade Federal de Ouro Preto


 Instituto de Ciências Exatas e Biológicas


      Departamento de Computação




BCC264 - Sistemas Operacionais
      Segundo Trabalho Prático




            Johnnatan Messias
           Pollyanna Gonçalves
            Wellington Dores


     Professor - Fabrício Benevenuto




               Ouro Preto
           18 de abril de 2011
Sumário

1   Introdução                                                                                                                                           1
    1.1 Considerações iniciais . . . . .                         .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
    1.2 Análise das práticas propostas                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
        1.2.1 Questão 01 . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   1
        1.2.2 Questão 02 . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
        1.2.3 Questão 03 . . . . . .                             .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7
    1.3 Referências . . . . . . . . . .                          .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9


Lista de Figuras

    1    Exercício   1.1)    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   2
    2    Exercício   1.2)    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   3
    3    Exercício   1.3)    .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   4
    4    Tabela 1    . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9
    5    Tabela 2    . . .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   9


Lista de Programas

    1    Script em P ython . . . . . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   5
    2    Código com chamada de script .                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
    3    Código em bash e awk . . . . .                              .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   6
    4    Script em P ython . . . . . . . .                           .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   .   7




                                                                     2
1       Introdução

   Este trabalho tem como objetivo analisar o uso da CPU alterando o número de
processos simultâneos em andamento, utilizando de comandos Unix para tal.

1.1      Considerações iniciais

    • Sistema Operacional: Ubuntu 10.10

    • Processador Intel Core 2 Duo

    • Ambiente de desenvolvimento da documentação: TeXnicCenter 1 Editor de
        A
        LTEX.

1.2      Análise das práticas propostas

1.2.1    Questão 01

   Neste exercício vamos utilizar o comando yes do Unix para vericar políticas de
escalonamento do processador.

    1. Execute o comando yes em um terminal e o comando top em outro. Observe
       a utilização de CPU do yes. Agora pare a execução do yes e execute yes 
       /dev/null e observe a utilização de CPU do yes. Procure explicar o que foi
       observado.
       Resposta) Utilizando o primeiro comando enunciado podemos observar o
       uso da CPU em torno de 20%, já o segundo comando fez a utilização da CPU
       chegar a 100% (o uso da memória foi o mesmo nos dois casos). Ambos os
       processos iniciaram com nice 0.1. 1
    2. Execute agora duas vezes mais comandos yes  /dev/null do que o número de
       CPUs que você tem em seu computador. Observe a utilização de CPU com o
       comando top. O que acontece com a utilização de CPU? Explique o ocorrido.
       Resposta) Executando mais comandos yes do que a quantidade de núcleos
       existentes no processador o sistema operacional faz o uso de um escalonador de
       processos para que todos os comandos executados rodem como se houvessem
       CPU's disponíveis para cada processo. 2
    3. Execute novamente duas vezes mais comandos yes  /dev/null do que o
       número de CPUs de sua máquina. Porém utilize diferentes nices. Explique o
       que se observa sobre o escalonamento desses processos na CPU.
       Resposta) Utilizando o comando nice com diferentes prioridades concluimos
       que, quanto menor o valor passado para o nice, o processo passa a utilizar
       uma maior porção da CPU. 3




                                          1
Abaixo as guras representando cada etapa dos comandos executados:




                        Figura 1: Exercício 1.1)




                                   2
Figura 2: Exercício 1.2)




           3
Figura 3: Exercício 1.3)

1.2.2   Questão 02

    Neste exercício vamos construir um pequeno monitor de tempo de CPU. A uti-
lização de CPU pode ser medida através da seguinte fórmula:

                              U = (Bf − Bi)/T

    Onde Bf − Bi é o tempo em que a CPU cou ocupada durante um determinado
intervalo de tempo T .
  1. O comando top calcula a utilização de CPU de tempos em tempos. O intervalo
     de tempo padrão utilizado pelo top é 1 segundo. Este intervalo pode ser
     alterado. Digite mantop e procure entender qual o parâmetro que altera este
     intervalo. Altere o valor do intervalo para 10 segundos. Faça a mesma coisa

                                       4
agora utilizando, ao invés do top, o comando vmstat. Indique a utilização
    de CPU na saída do vmstat ao executar vários comandos yes  /dev/null
    simultaneamente na máquina.
    Resposta) No comando vmstat, com atualizações a cada 10 segundos(−n10),
    os parâmetros alterados são os da coluna U S (atualização da CPU) e o da
    coluna ID(tempo de ociosidade).
2. No Linux, o /proc contém diversas informações sobre o sistema, incluindo in-
   formações sobre o tempo de CPU. Construa um código em Perl ou em Python
   que lê o tempo em que a CPU, ou seja o parâmetro B da equação acima. Infor-
   mações sobre o tempo de CPU podem ser encontradas no arquivo /proc/stat.
   Explique os campos que você utilizou para contabilizar o tempo de CPU. Para
   testar seu código faça o seguinte experimento. Deixe um yes  /dev/null
   rodando em background na CPU queserá medida durante um período de 10
   segundos e computecom seu script o tempo de CPU em dois momentos, antes
   e depois deexecutar o yes. A diferença desses tempos dividida por 10 segundos
   deve dar 100% de utilização.
   Resposta) O script criado, em P ython, está exibido abaixo: 1
    if   __name__ ==              __main__ :

         arq    =   open (     / proc / s t a t  ,  r  )
         str    =    arq . r e a d l i n e ( )

5                                       )
                        int                                 int
         str    =    str . split (

         col2    =            ( str [3]) ;       col4   =          ( str [5])

         tempo      =    (( col2     +   col4 )     ∗   0.01)

         print      tempo


                                      Programa 1: Script em P ython




                                                               5
O código abaixo chama o script em P ython e calcula o tempo de CPU, de
     acordo com as colunas U S e ID que são retornadas no prompt de comando.
     2
     #! / bin / sh



     echo       bash 
     echo      
 5   e c h o  tempo de cpu em s e g u n d o s : 

     e c h o 

     p y t h o n  t e s t e 2 . py 

     yes      / dev / n u l l      

     yes      / dev / n u l l      

10   sleep      10

     echo     
     python          t e s t e 2 . py 
     echo     
     echo     
15   k i l la l l     yes


                            Programa 2: Código com chamada de script

3. Construa agora o mesmo código utilizando apenas bash, awk e sed.
   Os programas abaixo representam o código enunciado acima utilizando bash
   e awk 3
     #! / bin / sh



     echo      bash 
     echo     
 5
     echo      tempo de cpu em s e g u n d o s : 
     echo     

     awk    ' $1 ==  cpu  { p r i n t f ( ( $3+$5 ) ∗ 0 . 0 1 ) } '   / proc / s t a t

10
     yes      / dev / n u l l      

     yes      / dev / n u l l      



     sleep      10

15
     echo     

     awk    ' $1 ==  cpu  { p r i n t f ( ( $3+$5 ) ∗ 0 . 0 1 ) } '   / proc / s t a t



20   echo     
     echo     


     k i l la l l     yes


                                  Programa 3: Código em bash e awk




                                                     6
1.2.3           Questão 03

         Construa um script para medir utilização de disco a partir do /proc e planeje uma
     forma inteligente de testar. Explique as principais partes do arquivo do diretório
     /proc que foi utilizado para medir e os campos que você utilizou para medir a
     utilização de disco.
         Resposta) Utilizamos o comando diskstats, a partir de proc, para que o prompt
     imprima na tela informações da utilização do disco. O script, em P ython, abaixo 4
     usa tais dados para calcular a diferença por tempo dos seguintes campos:

              • Campo 1: Número de leituras completas.

              • Campo 2: Número de leituras mescladas.

              • Campo 3: Número de setores lidos.

              • Campo 4: Tempo gasto, em milisegundos, para a leitura.

              • Campo 5: Número de escritas completas.

              • Campo 6: Número de gravações mescladas.

              • Campo 7: Número de setores escritos.

              • Campo 8: Tempo gasto, em milisegundos, para escrita.

              • Campo 9: Número de entradas e saídas em andamento.

              • Campo 10: Tempo gasto, em milisegundos, em entradas e saídas.

              • Campo 11: Média, em milisegundos, em entradas e saídas.

     import          os



     def       lerArq () :

          arq    =    open (      / proc / d i s k s t a t s  ,  r  )
 5        str    =       arq . r e a d l i n e ( )

                                            )
          while
          str    =       str . split (

                         ( str [11]      !=   sda  ) :
               str   =      arq . r e a d l i n e ( )

               str   =      str . split (      )
10
     return          str




     #         −
     #
          3          14

15             −
     #
          4          15

               −
     #
          7          18

          8    −    19



     if    __name__ ==               __main__ :
20
          // l e i t u r a i n i c i a l dos parâmetros

                          int
          str        =    lerArq ()



                          int
          wi         =          ( str [18])

          ri         =          ( str [14])




                                                                            7
25                  float
                    float
       twi     =                ( str [19])

       tri     =                ( str [15])



       // t e s t e de c ó p i a para um a r q u i v o q u a l q u e r
       p r i n t  Copiando Arquivo 

30     o s . s y s t e m (  cp f i l m e filmecopiado )
       p r i n t  Filme c o p i a d o com s u c e s s o 



       // l e i t u r a f i n a l dos parâmetros

                    int
       str     =    lerArq ()

35
                    int
       wf      =           ( str [18])



                    float
       rf      =           ( str [14])



                    float
       twf     =                ( str [19])

       trf     =                ( str [15])



40     // c a l c u l o dos g a s t o s e n t r e l e i t u r a e e s c r i t a
                                 float
                                    ( ( wf − wi ) ∗ 5 1 2 )

                                float
       bytesWrite =

       bytesRead =                ( ( r f −r i ) ∗ 512)



       tWrite      =    ( twf    − twi ) ∗ 0.001
45     tRead    =      ( trf    − t r i ) ∗ 0.001

       txWrite      =      0;    txRead     =   0



       if   ( tWrite     !=      0) :

50          txWrite      =      ( bytesWrite        /   tWrite )



       if   ( tRead     !=      0) :

            txRead     =     ( bytesRead        /   tRead )



55     tTotal      =    ( tWrite        +   tRead )



       print     Bytes e s c r i t o s %f  %b y t e s W r i t e
       print     Bytes L i d o s %f  %b y t e s R e a d
       print    Taxa de t r a n s f e r e n c i a de e s c r i t a %f B/ s      %t x W r i t e

60     print    Taxa de t r a n s f e r e n c i a de l e i t u r a %f B/ s      %t x R e a d

       print    Tempo t o t a l t o t a l %d %t T o t a l

                                             Programa 4: Script em P ython
         Note que utilizamos apenas alguns dos dados que é impresso após a execução
     da linha de comando enunciada acima. As tabelas abaixo nos mostra um teste de
     transferência de um arquivo de 687mb entre duas mídias, o resultado esperado na
     saída do script em P ython é o total calculado em cada coluna dessa tabela: 4 5




                                                                   8
Figura 4: Tabela 1




                              Figura 5: Tabela 2

1.3   Referências

    Esclarecimentos e conhecimentos de alguns dos comandos aqui apresentados
foram retirados dos sites abaixo:

Linux Questions: www.linuxquestions.org
Viva o Linux: www.vivaolinux.com.br




                                      9

Mais conteúdo relacionado

PDF
Curso-linux-ubuntu-v-1.0
PDF
Klavaro manual-pt-1.0.8
DOCX
Atividade de 1 a 6 da atps
PDF
PDF
Relatório de Performance Set00
PDF
O fantc3a1stico-mundo-da-linguagem-c
ODT
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
PDF
Criando um sistema operacional básico
Curso-linux-ubuntu-v-1.0
Klavaro manual-pt-1.0.8
Atividade de 1 a 6 da atps
Relatório de Performance Set00
O fantc3a1stico-mundo-da-linguagem-c
Fundamentos de Sistemas Operacionais de Tempo Real - Criando seu próprio esc...
Criando um sistema operacional básico

Destaque (6)

PDF
AI - Backtracking vs Depth-First Search (DFS)
PDF
Cálculo Numérico: Integração Numérica com Bubble Sort
PDF
MyShell - English
PDF
Twitter and Youtube Collector
PDF
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
PDF
Caminhos Mínimos: Dijkstra e Floyd-Warshall
AI - Backtracking vs Depth-First Search (DFS)
Cálculo Numérico: Integração Numérica com Bubble Sort
MyShell - English
Twitter and Youtube Collector
Avaliação de Usabilidade, Comunicabilidade e Acessibilidade - Quadro de Avisos
Caminhos Mínimos: Dijkstra e Floyd-Warshall
Anúncio

Semelhante a Análise de Disco, I/O e Processamento (20)

PDF
Curso python
PDF
Tutorial Octave Matlab
PDF
Perceptron e Multilayer Perceptron
PDF
Minicurso de USER RPL para HP 50G
PDF
SistemasOperacionais-peter-jandl-jr.pdf
PDF
Notas sobre Sistemas Operacionais
PDF
Apostila de Introdução aos Algoritmos - usando o Visualg
PDF
Visu alg ref
PDF
Conceitos e técnicas de programação apostilha algoritmo
PDF
Apostila visualgv25
PDF
Curso python
PDF
Tese modelo-icmc (1)
PDF
Apostila pascal
PDF
Mudança de runlevels e desligamento do sistema
PDF
sistemas_operacionais-livro.pdf
PDF
PDF
O mundo-da-linguagem-c
PDF
Apostila de pspice petee ufmg
PDF
Algoritmos jabour
Curso python
Tutorial Octave Matlab
Perceptron e Multilayer Perceptron
Minicurso de USER RPL para HP 50G
SistemasOperacionais-peter-jandl-jr.pdf
Notas sobre Sistemas Operacionais
Apostila de Introdução aos Algoritmos - usando o Visualg
Visu alg ref
Conceitos e técnicas de programação apostilha algoritmo
Apostila visualgv25
Curso python
Tese modelo-icmc (1)
Apostila pascal
Mudança de runlevels e desligamento do sistema
sistemas_operacionais-livro.pdf
O mundo-da-linguagem-c
Apostila de pspice petee ufmg
Algoritmos jabour
Anúncio

Mais de Johnnatan Messias (6)

PDF
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
PDF
Quadro de Avisos - IHC
PDF
Lista Encadeada - TP2_AEDSI
PDF
Simulador Funcional
PDF
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
PDF
Análise de Algoritmos de Ordenação Interna
Monografia: Framework Para Sistemas de Navegação de Veículos Aéreos Não Tripu...
Quadro de Avisos - IHC
Lista Encadeada - TP2_AEDSI
Simulador Funcional
Cálculo Numérico: Interpolação Polinomial com Bubble Sort
Análise de Algoritmos de Ordenação Interna

Último (20)

PPTX
disciplulado curso preparatorio para novos
PDF
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
PDF
Uma Introdução às Ciências do Alcorão (Islam)
PPTX
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
PPTX
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
PDF
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
PPTX
GUERRAFRIA.pptdddddddddddddddddddddddddx
PPTX
Trabalho Cidades sustentáveis ou Utopia.pptx
PDF
Ementa 2 semestre PEI Orientação de estudo
PPTX
Pedagogia em Ambientes Não Escolares.pptx
PPTX
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
PDF
COMO OS CONTOS DE FADAS REFLETEM ARQUÉTIPOS_MEDOS E DESEJOS DO INCONSCIENTE H...
PPTX
Aula 13 - Tópico Frasal - Argumentação.pptx
PDF
A Revolução Francesa de 1789 slides história
PDF
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
PDF
metabolismo energtico das clulas-131017092002-phpapp02.pdf
PPTX
Revolução Industrial - Aula Expositiva - 3U4.pptx
PDF
Organizador Curricular da Educação em Tempo Integral.pdf
PPTX
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
PPTX
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.
disciplulado curso preparatorio para novos
A relação entre funções executivas e desempenho acadêmico em crianças com Tra...
Uma Introdução às Ciências do Alcorão (Islam)
INTRODUÇÃO AO ESTUDO DA ANATOMIA HUMANA [Salvo automaticamente].pptx
16. MODERNISMO - PRIMEIRA GERAÇÃO - EDIÇÃO 2021 (1).pptx
FLUXOGRAMA CLASSE lll - Acesso estritamente proximal.pdf
GUERRAFRIA.pptdddddddddddddddddddddddddx
Trabalho Cidades sustentáveis ou Utopia.pptx
Ementa 2 semestre PEI Orientação de estudo
Pedagogia em Ambientes Não Escolares.pptx
QuestõesENEMVESTIBULARPARAESTUDOSEAPRENDIZADO.pptx
COMO OS CONTOS DE FADAS REFLETEM ARQUÉTIPOS_MEDOS E DESEJOS DO INCONSCIENTE H...
Aula 13 - Tópico Frasal - Argumentação.pptx
A Revolução Francesa de 1789 slides história
50 anos Hoje - Volume V - 1973 - Manaus Amazonas
metabolismo energtico das clulas-131017092002-phpapp02.pdf
Revolução Industrial - Aula Expositiva - 3U4.pptx
Organizador Curricular da Educação em Tempo Integral.pdf
Lição 8 EBD.pptxtudopossonaquelequemimfortalece
ACIDOS NUCLEICOS - REPLICAÇÃO DO DNA - E.M.

Análise de Disco, I/O e Processamento

  • 1. Universidade Federal de Ouro Preto Instituto de Ciências Exatas e Biológicas Departamento de Computação BCC264 - Sistemas Operacionais Segundo Trabalho Prático Johnnatan Messias Pollyanna Gonçalves Wellington Dores Professor - Fabrício Benevenuto Ouro Preto 18 de abril de 2011
  • 2. Sumário 1 Introdução 1 1.1 Considerações iniciais . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2 Análise das práticas propostas . . . . . . . . . . . . . . . . . . . . . . 1 1.2.1 Questão 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 1.2.2 Questão 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.2.3 Questão 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.3 Referências . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Lista de Figuras 1 Exercício 1.1) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 2 Exercício 1.2) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 Exercício 1.3) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 4 Tabela 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 5 Tabela 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Lista de Programas 1 Script em P ython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Código com chamada de script . . . . . . . . . . . . . . . . . . . . . . 6 3 Código em bash e awk . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4 Script em P ython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 2
  • 3. 1 Introdução Este trabalho tem como objetivo analisar o uso da CPU alterando o número de processos simultâneos em andamento, utilizando de comandos Unix para tal. 1.1 Considerações iniciais • Sistema Operacional: Ubuntu 10.10 • Processador Intel Core 2 Duo • Ambiente de desenvolvimento da documentação: TeXnicCenter 1 Editor de A LTEX. 1.2 Análise das práticas propostas 1.2.1 Questão 01 Neste exercício vamos utilizar o comando yes do Unix para vericar políticas de escalonamento do processador. 1. Execute o comando yes em um terminal e o comando top em outro. Observe a utilização de CPU do yes. Agora pare a execução do yes e execute yes /dev/null e observe a utilização de CPU do yes. Procure explicar o que foi observado. Resposta) Utilizando o primeiro comando enunciado podemos observar o uso da CPU em torno de 20%, já o segundo comando fez a utilização da CPU chegar a 100% (o uso da memória foi o mesmo nos dois casos). Ambos os processos iniciaram com nice 0.1. 1 2. Execute agora duas vezes mais comandos yes /dev/null do que o número de CPUs que você tem em seu computador. Observe a utilização de CPU com o comando top. O que acontece com a utilização de CPU? Explique o ocorrido. Resposta) Executando mais comandos yes do que a quantidade de núcleos existentes no processador o sistema operacional faz o uso de um escalonador de processos para que todos os comandos executados rodem como se houvessem CPU's disponíveis para cada processo. 2 3. Execute novamente duas vezes mais comandos yes /dev/null do que o número de CPUs de sua máquina. Porém utilize diferentes nices. Explique o que se observa sobre o escalonamento desses processos na CPU. Resposta) Utilizando o comando nice com diferentes prioridades concluimos que, quanto menor o valor passado para o nice, o processo passa a utilizar uma maior porção da CPU. 3 1
  • 4. Abaixo as guras representando cada etapa dos comandos executados: Figura 1: Exercício 1.1) 2
  • 6. Figura 3: Exercício 1.3) 1.2.2 Questão 02 Neste exercício vamos construir um pequeno monitor de tempo de CPU. A uti- lização de CPU pode ser medida através da seguinte fórmula: U = (Bf − Bi)/T Onde Bf − Bi é o tempo em que a CPU cou ocupada durante um determinado intervalo de tempo T . 1. O comando top calcula a utilização de CPU de tempos em tempos. O intervalo de tempo padrão utilizado pelo top é 1 segundo. Este intervalo pode ser alterado. Digite mantop e procure entender qual o parâmetro que altera este intervalo. Altere o valor do intervalo para 10 segundos. Faça a mesma coisa 4
  • 7. agora utilizando, ao invés do top, o comando vmstat. Indique a utilização de CPU na saída do vmstat ao executar vários comandos yes /dev/null simultaneamente na máquina. Resposta) No comando vmstat, com atualizações a cada 10 segundos(−n10), os parâmetros alterados são os da coluna U S (atualização da CPU) e o da coluna ID(tempo de ociosidade). 2. No Linux, o /proc contém diversas informações sobre o sistema, incluindo in- formações sobre o tempo de CPU. Construa um código em Perl ou em Python que lê o tempo em que a CPU, ou seja o parâmetro B da equação acima. Infor- mações sobre o tempo de CPU podem ser encontradas no arquivo /proc/stat. Explique os campos que você utilizou para contabilizar o tempo de CPU. Para testar seu código faça o seguinte experimento. Deixe um yes /dev/null rodando em background na CPU queserá medida durante um período de 10 segundos e computecom seu script o tempo de CPU em dois momentos, antes e depois deexecutar o yes. A diferença desses tempos dividida por 10 segundos deve dar 100% de utilização. Resposta) O script criado, em P ython, está exibido abaixo: 1 if __name__ == __main__ : arq = open ( / proc / s t a t , r ) str = arq . r e a d l i n e ( ) 5 ) int int str = str . split ( col2 = ( str [3]) ; col4 = ( str [5]) tempo = (( col2 + col4 ) ∗ 0.01) print tempo Programa 1: Script em P ython 5
  • 8. O código abaixo chama o script em P ython e calcula o tempo de CPU, de acordo com as colunas U S e ID que são retornadas no prompt de comando. 2 #! / bin / sh echo bash echo 5 e c h o tempo de cpu em s e g u n d o s : e c h o p y t h o n t e s t e 2 . py yes / dev / n u l l yes / dev / n u l l 10 sleep 10 echo python t e s t e 2 . py echo echo 15 k i l la l l yes Programa 2: Código com chamada de script 3. Construa agora o mesmo código utilizando apenas bash, awk e sed. Os programas abaixo representam o código enunciado acima utilizando bash e awk 3 #! / bin / sh echo bash echo 5 echo tempo de cpu em s e g u n d o s : echo awk ' $1 == cpu { p r i n t f ( ( $3+$5 ) ∗ 0 . 0 1 ) } ' / proc / s t a t 10 yes / dev / n u l l yes / dev / n u l l sleep 10 15 echo awk ' $1 == cpu { p r i n t f ( ( $3+$5 ) ∗ 0 . 0 1 ) } ' / proc / s t a t 20 echo echo k i l la l l yes Programa 3: Código em bash e awk 6
  • 9. 1.2.3 Questão 03 Construa um script para medir utilização de disco a partir do /proc e planeje uma forma inteligente de testar. Explique as principais partes do arquivo do diretório /proc que foi utilizado para medir e os campos que você utilizou para medir a utilização de disco. Resposta) Utilizamos o comando diskstats, a partir de proc, para que o prompt imprima na tela informações da utilização do disco. O script, em P ython, abaixo 4 usa tais dados para calcular a diferença por tempo dos seguintes campos: • Campo 1: Número de leituras completas. • Campo 2: Número de leituras mescladas. • Campo 3: Número de setores lidos. • Campo 4: Tempo gasto, em milisegundos, para a leitura. • Campo 5: Número de escritas completas. • Campo 6: Número de gravações mescladas. • Campo 7: Número de setores escritos. • Campo 8: Tempo gasto, em milisegundos, para escrita. • Campo 9: Número de entradas e saídas em andamento. • Campo 10: Tempo gasto, em milisegundos, em entradas e saídas. • Campo 11: Média, em milisegundos, em entradas e saídas. import os def lerArq () : arq = open ( / proc / d i s k s t a t s , r ) 5 str = arq . r e a d l i n e ( ) ) while str = str . split ( ( str [11] != sda ) : str = arq . r e a d l i n e ( ) str = str . split ( ) 10 return str # − # 3 14 15 − # 4 15 − # 7 18 8 − 19 if __name__ == __main__ : 20 // l e i t u r a i n i c i a l dos parâmetros int str = lerArq () int wi = ( str [18]) ri = ( str [14]) 7
  • 10. 25 float float twi = ( str [19]) tri = ( str [15]) // t e s t e de c ó p i a para um a r q u i v o q u a l q u e r p r i n t Copiando Arquivo 30 o s . s y s t e m ( cp f i l m e filmecopiado ) p r i n t Filme c o p i a d o com s u c e s s o // l e i t u r a f i n a l dos parâmetros int str = lerArq () 35 int wf = ( str [18]) float rf = ( str [14]) float twf = ( str [19]) trf = ( str [15]) 40 // c a l c u l o dos g a s t o s e n t r e l e i t u r a e e s c r i t a float ( ( wf − wi ) ∗ 5 1 2 ) float bytesWrite = bytesRead = ( ( r f −r i ) ∗ 512) tWrite = ( twf − twi ) ∗ 0.001 45 tRead = ( trf − t r i ) ∗ 0.001 txWrite = 0; txRead = 0 if ( tWrite != 0) : 50 txWrite = ( bytesWrite / tWrite ) if ( tRead != 0) : txRead = ( bytesRead / tRead ) 55 tTotal = ( tWrite + tRead ) print Bytes e s c r i t o s %f %b y t e s W r i t e print Bytes L i d o s %f %b y t e s R e a d print Taxa de t r a n s f e r e n c i a de e s c r i t a %f B/ s %t x W r i t e 60 print Taxa de t r a n s f e r e n c i a de l e i t u r a %f B/ s %t x R e a d print Tempo t o t a l t o t a l %d %t T o t a l Programa 4: Script em P ython Note que utilizamos apenas alguns dos dados que é impresso após a execução da linha de comando enunciada acima. As tabelas abaixo nos mostra um teste de transferência de um arquivo de 687mb entre duas mídias, o resultado esperado na saída do script em P ython é o total calculado em cada coluna dessa tabela: 4 5 8
  • 11. Figura 4: Tabela 1 Figura 5: Tabela 2 1.3 Referências Esclarecimentos e conhecimentos de alguns dos comandos aqui apresentados foram retirados dos sites abaixo: Linux Questions: www.linuxquestions.org Viva o Linux: www.vivaolinux.com.br 9