Как Компьютер понимает время? Там нет инструкции asm для ожидания - PullRequest
0 голосов
/ 06 июля 2018

Я изучал языки программирования, и один вопрос беспокоит меня все время.

Например, предположим, что я запрограммировал что-то, что позволяет мне нажимать кнопку каждые 5 секунд.

Как компьютер понимает ожидающую часть (позволяет нажать кнопку - ждет 5 секунд и снова разрешает)?

Я уже знаю, что первые более высокие языки программирования компилируются в машинный код, чтобы компьютер мог его запустить. Но если мы возьмем, например, ассемблер, который очень близок к машинному коду, просто читаемому человеком, инструкции для ожидания нет.

Пример, который я привел с ожиданием, является лишь одним примером, есть гораздо больше вещей, которые я не понимаю, как компьютер понимает;)

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Для коротких задержек на простых процессорах (таких как микроконтроллеры) с известной фиксированной тактовой частотой и без многозадачности, а также с простой инструкцией, рассчитанной на такт, вы можете ждать в asm с помощью «петли задержки». Вот источник arduino (для микроконтроллеров AVR) для реализации:

https://github.com/arduino/ArduinoCore-avr/blob/master/cores/arduino/wiring.c#L120

Как видите, поведение зависит от тактовой частоты процессора. Тем не менее, вы обычно не зациклились бы в течение 5 секунд (это долгое время, чтобы сжечь энергию). Компьютеры обычно имеют микросхемы таймера и тактового генератора, которые можно запрограммировать так, чтобы они вызывали прерывание в определенное время, поэтому вы можете перевести процессор в спящий режим и включить его при следующем прерывании, если больше ничего не нужно делать. Циклы задержки хороши (на микроконтроллерах) для очень коротких задержек, слишком коротки для сна или даже для программирования таймера.

Возможно, вы захотите получить небольшую плату микроконтроллера (не обязательно arduino), с которой можно поиграть. Там у вас намного меньше «раздувания» от операционной системы или библиотек, и вы намного ближе к оборудованию.

0 голосов
/ 06 июля 2018

ЦП имеет кварцевый кристалл таймера внутри, называемый ЦП. Когда ток проходит через него, он дает предварительную частоту для этого тока. Затем процессор может использовать эту частоту для отслеживания времени.

Таким образом, компьютер может понять: «сделай что-нибудь, подожди 5 секунд, а затем продолжи снова»

для получения дополнительной информации о кварцевом таймере: https://en.m.wikipedia.org/wiki/Crystal_oscillator

...