Обозначение адреса в RISC-V

Я запускаю смоделированное ядро ​​RV64GC в QEMU и пытаюсь лучше понять подсистему виртуальной памяти и процесс преобразования адресов в RISC-V. Моя смоделированная система работает с OpenSBI, Linux Kernal v5.5 и минимальным rootfs.

В трассировках отладки QEMU я вижу, что иногда (чаще всего с помощью ecalls) управление передается SBI, и адреса меняются с адресов ядра (виртуальных?) Со смещением 0xffffffe000000000 на что-то похожее на реальные, физические адреса в ОЗУ. Например,

...

0xffffffe00003a192: 00000073 ecall

...

IN: sbi_ecall_0_1_handler

0x0000000080004844: 00093603 ld a2,0(s2)

0x0000000080004848: 4785 доп. A5, ноль, 1

0x000000008000484a: 00a797b3 sll a5, a5, a0

...

В привилегированной спецификации RISC-V версии 1.11, раздел 4.1.12, satp CSR (регистр управления и состояния) определен как имеющий поле MODE, которое определяет обозначение трансляции адресов. РЕЖИМ 0 означает, что преобразование является пустым (адреса считаются физическими), РЕЖИМ 8 или 9 требует виртуальной адресации на основе страниц Sv39 или Sv48 соответственно, а любые другие значения РЕЖИМА зарезервированы.

Теперь, как привилегированные, так и непривилегированные спецификации RISC-V, похоже, не упоминают, когда можно изменить satp (кроме csrrw), поэтому это приводит меня к следующим вопросам:

Когда управление передается SBI (как в случае вышеупомянутого вызова), изменится ли РЕЖИМ satp на 0? Если да, значит ли это, что режим satp должен быть сброшен по инструкции u / s / mret? Существуют ли другие случаи (кроме csrrw), где предполагается изменение satp?

Если нет, существует ли другой механизм, с помощью которого адреса интерпретируются и обозначаются как физические? Или адреса (адреса 0x80XXXXXX выше) вместо этого считаются виртуальными и должны пройти обычный процесс преобразования виртуальных адресов (как описано в разделе 4.3.2 привилегированной спецификации RISC-V)? Если это так, когда для этого создаются записи в таблице страниц?


person Josh    schedule 01.04.2020    source источник


Ответы (1)


Модель памяти RISC-V работает следующим образом:

В режиме M имеется собственная система защиты памяти, описанная в разделе 3.6 привилегированных спецификаций, называемая PMP (защита физической памяти). Это необходимо для защиты памяти на более низких уровнях привилегий, а также в самом режиме M (если используется бит блокировки). В режиме M нет системы виртуальной памяти.

Теперь в S-режиме он имеет страничную систему виртуальной памяти, которую S-режим может использовать для установки сопоставления виртуальных адресов в физические, а также для наложения ограничений памяти на сам S-режим и U-режим.

Таким образом, каждый уровень привилегий имеет контроль над своими собственными ресурсами и ресурсами ниже него, но никогда не над ресурсами более высокого уровня привилегий. Вот как все работает.

Режим M может управлять памятью, доступной для режимов M, S и U, а режим S может управлять просмотром памяти (виртуальной памятью) и доступностью режимов S и U, но не режимом M. Таким образом, режим Satp никогда не меняется даже при переходе в режим M. Поскольку указанное им отображение никогда не применимо даже к M-режиму. Он имеет свой блок защиты памяти.

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

person R.k. Lohana    schedule 08.04.2020