Quão preciso é o tempo de época em nanossegundos?

2

Eu quero saber quão preciso é o tempo que é mostrado ao digitar data +% s% N no terminal.

Eu sei que isso nos dá o tempo da época em nanossegundos, mas os números são reais ?.  Ela representa o momento em que eu digito entrar em nanossegundos ou é falsa com alguma precisão e abaixo, digamos milissegundos?

    
por mrapsogos 01.07.2014 / 03:42

2 respostas

3
  

Isso representa o momento em que eu digito entrar em nanossegundos?

Bem, isso não poderia ser. Muitas coisas acontecem entre o seu hit em Enter e o comando de saída:

  • Seu shell interpreta o comando e executa /bin/date .
  • O kernel cria um processo, fornece um PID, define seu pai, fornece algum espaço de endereço, registra o processo e assim por diante ...
  • O programa /bin/date é executado. Provavelmente requer que alguma memória seja alocada. Ele chama várias rotinas de kernel relacionadas ao tempo, o que faz com que o processo alterne várias vezes (como qualquer outro que você dissesse ...) entre o modo de usuário e o modo kernel.
  • A saída do comando é enviada para a stdout e você pode vê-la no terminal, hora do dia!

Basicamente, você pode colocar desta forma:

  • Você pressionou Enter .
  • [alguns milissegundos passam, veja acima]
  • O programa date chama as rotinas mágicas em time.h , mudando para o modo kernel para cada uma delas. Aqui, o sistema operacional obtém o horário atual dos relógios de hardware.
  • [alguns milissegundos passam, veja acima]
  • Você obtém a saída.

Aqueles intermediários vezes podem variar de acordo com várias coisas, eles são pouco mensuráveis. Por exemplo, se suas CPUs tiverem muitos processos para manipular, seu processo date terá que dormir mais entre cada uma das fases de execução.

Pode-se ir ainda mais longe adicionando:

  • Você obtém a saída.
  • Seus olhos piscam (100-400 milissegundos diz Wikpedia ).
  • Você realmente a saída.
  • Seu cérebro interpreta e entende isso.

Adicionando mais alguns milissegundos à contagem.

    
por John WH Smith 01.07.2014 / 04:09
2

Claro que não é. Tudo que você faz leva uma quantia mensurável de tempo. De pressionar enter, ao teclado reagindo a ele, passando-o para o shell, que executará date , para exibir a saída em seu terminal e sua leitura. Para ter uma ideia melhor, dê uma olhada em este interessante Q & amp; A sobre o que exatamente acontece quando você atinge um tecla no seu teclado.

Se reutilizarmos os diagramas desse post:

Entrada

      +-------------------+               +-------------+
----->| terminal emulator |-------------->| application |
      +-------------------+               +-------------+
keypress                    character or
                           escape sequence

Saída

+-------------+               +-------------------+
| application |-------------->| terminal emulator |
+-------------+               +-------------------+
               character or
               escape sequence

Cada uma das setas e cada uma das caixas mostradas acima representam processos que levam um tempo mensurável. No caso do programa date , o tempo que você vê é o tempo que ficou quando consultou o sistema para a hora atual. O processo seria algo como

You hit enter --> 'date' is executed -> queries current time

Mais uma vez, cada uma das etapas acima (e outras, menores, execute strace date para ter uma ideia), reserve um tempo para que não, o tempo retornado não será o exato momento em que você pressionar Enter .

No momento em que o resultado é impresso no seu terminal, o tempo (na precisão de nanossegundos) será alterado novamente. O que você vê é o que foi retornado pelo sistema quando date perguntou.

No entanto, você pode ter certeza de que ele é preciso o suficiente para qualquer coisa que você queira fazer no seu computador. Se você precisar de precisão no nível de nanossegundos, provavelmente precisará de hardware personalizado.

    
por terdon 01.07.2014 / 04:14