Изменить: быстрый Google qemu timebase riscv mtime обнаружил чат групп Google, в котором говорится, что RDTIME - это наносекунды, так как загрузка и mtime - это эмулированные часы с частотой 10 МГц.
Я не искал нужную информацию, но думаю, что у меня есть некоторая контекстная информация, которая поможет вам ее найти. Я бы рекомендовал поискать документацию / код QEMU (возможно, из поиска Github), чтобы узнать, как работают mtime
и mtimecmp
.
В разделе 10.1 (Счетчик - Базовый счетчик и таймеры) спецификации 1 объясняется, что псевдо-инструкция RDTIME должна иметь некоторую фиксированную частоту тактов, которая может быть определена на основе реализации 2 < / sup>. Эта тиковая скорость также будет использоваться для mtimecmp
и mtime
, как определено в привилегированной спецификации 3.
Я предполагаю, что тики, используемые для системного вызова сна, будут такими же, как эти тики из спецификаций. В этом случае xv6 - это просто ядро, которое не будет определять количество тактов в секунду. Кажется, что xv6 создан для работы поверх qemu, поэтому определение тиков в секунду должно быть определено где-нибудь в коде qemu и может быть задокументировано.
Из старой вики для QEMU-riscv должно быть ясно, что SiFive CLINT определяет features xv6 должен работать, но я сомневаюсь, что он указывает, как узнать тикрейт. Spike также поддерживает интерфейс CLINT, поэтому может быть поучительным поиск кода в spike, который его обрабатывает.
1 Я использовал версию 20191213 непривилегированной спецификации в качестве ссылки
2
Псевдоинструкция RDTIME считывает младшие биты XLEN времени CSR, который считает реальное время настенных часов, прошедшее с произвольного времени начала в прошлом. RDTIMEH - это команда только для RV32I, которая считывает биты 63–32 того же счетчика реального времени. Базовый 64-битный счетчик на практике никогда не должен переполняться. Среда выполнения должна обеспечивать средства определения периода счетчика реального времени (секунды / тик). Период должен быть постоянным. Часы реального времени всех хартов в одном пользовательском приложении должны быть синхронизированы с точностью до одного такта часов реального времени. Окружающая среда должна обеспечивать средства для определения точности часов.
3
3.1.10 Регистры машинного таймера (mtime и mtimecmp) Платформы предоставляют счетчик реального времени, представленный как отображенный в памяти регистр чтения-записи машинного режима, mtime. mtime должен работать с постоянной частотой, а платформа должна обеспечивать механизм для определения временной шкалы mtime.
person
TheThirdOne
schedule
04.08.2020