• 1000 Я не выполнял поиск, чтобы найти нужную информацию, но я думаю, что у меня есть некоторая контекстная информация, которая поможет вам ее найти. Я бы порекомендовал поискать в документации / коде QEMU (возможно, из поиска Github), как работают
mtime
и
mtimecmp
.
В разделе 10.1 (Счетчик - Базовый счетчик и таймеры) спецификации 1 поясняется, что псевдо-инструкция RDTIME должна иметь некоторую фиксированную частоту тиков, которая может быть определена на основе реализации 2 . Эта скорость тиков также будет использоваться для mtimecmp
и mtime
, как определено в привилегированной спецификации 3 .
Я предполагаю, что тики, используемые для системного вызова сна, будут одинаковыми как эти галочки из спецификации. В этом случае xv6 - это просто ядро, которое не будет определять количество тактов в секунду. Похоже, что xv6 создан для работы поверх qemu, поэтому определение тиков в секунду должно быть определено где-нибудь в коде qemu и может быть задокументировано.
Из старой вики для QEMU-riscv должно быть ясно, что SiFive CLINT определяет функции, необходимые для работы xv6, но я сомневаюсь, что он указывает, как узнать тикрейт. Spike также поддерживает интерфейс CLINT, поэтому может быть поучительным поиск кода в spike, который его обрабатывает.
1 Я использовал версию 20191213 непривилегированной спецификации в качестве ссылки
2
Псевдоинструкция RDTIME считывает младшие биты XLEN времени CSR, который считает реальное время настенных часов, прошедшее с произвольного времени начала в прошлом. . RDTIMEH - это команда только для RV32I, которая считывает биты 63–32 того же счетчика реального времени. Базовый 64-битный счетчик на практике никогда не должен переполняться. Среда выполнения должна обеспечивать средства определения периода счетчика реального времени (секунды / тик). Период должен быть постоянным. Часы реального времени всех хартов в одном пользовательском приложении должны быть синхронизированы с точностью до одного такта часов реального времени. Среда должна обеспечивать средства для определения точности часов.
3
3.1.10 Регистры машинного таймера (mtime и mtimecmp) Платформы предоставляют счетчик реального времени, представленный как отображенный в память регистр чтения-записи машинного режима, mtime. mtime должен работать с постоянной частотой, а платформа должна обеспечивать механизм для определения временной шкалы mtime.