Как RIS C -V HW может определить уровень привилегий? - PullRequest
1 голос
/ 18 февраля 2020

Текущий уровень привилегий SW RIS C -V не установлен ни в одном CSR. Тем не менее, spe c утверждает, что «Попытки получить доступ к CSR без соответствующего уровня привилегий ... поднимают недопустимые инструкции». Как это может быть реализовано (в HW)?

Ответы [ 4 ]

1 голос
/ 20 февраля 2020

Что ж, при прерываниях - «xPP содержит предыдущий режим привилегий (x = M, S или U). Поля xPP могут содержать режимы привилегий только до x, поэтому MPP имеет ширину два бита, SPP имеет ширину один бит, и UPP неявно равен нулю. "

На самом деле, сейчас я обнаружил, что инструкция xRET позволяет процессору сохранять (внутренне) текущий режим -" Инструкции MRET, SRET или URET используются для возврата из ловушек в M-режиме, S-режиме или U-режиме соответственно. При выполнении инструкции xRET, предположим, что xPP содержит значение y, x IE установлено в x PIE; режим привилегий изменен на y; x P IE установлено в 1, а xPP установлено в U (или M, если режим пользователя не поддерживается). "

1 голос
/ 19 февраля 2020

Уровень привилегий отражается в битах MPP регистра mstatus.

0 голосов
/ 08 марта 2020

Я нашел этот ответ на пяти форумах весьма полезным, когда искал тот же вопрос.

RIS C -V намеренно не облегчает коду обнаруживать, в каком режиме он находится запускает его, потому что это дыра для виртуализации. Как правило, код должен быть разработан и неявно знать, в каком режиме он будет работать. Код приложения должен предполагать, что он находится в режиме U. Операционная система должна исходить из того, что она находится в режиме S (фактически она может быть виртуализирована и работать в режиме U, а вещи, которые U-режим не может выполнить с помощью гипервизора, перехватываются и эмулируются).

https://forums.sifive.com/t/how-to-determine-the-current-execution-privilege-mode/2823

0 голосов
/ 01 марта 2020

У нас есть mstatus.mPP. который удерживает предыдущий режим привилегий. Текущий режим привилегий невидим для программного обеспечения.

при прерывании mstatus.mPP сохраняется в mcause.mPP .. на mrwt, его просто записывают обратно в mstatus.mPP.

...