Как в архитектурах risc одинаковые виртуальные адреса разных контекстов задач различаются? В cisc x86 есть специальные дескрипторы cr3. В risc вроде там куча csr регистров, но я среди них не нашел похожего. Каким образом одинаковые адреса различаются. Или они просто не могут быть одинаковыми(типа ос позаботиться)? Как они в tlb обрабатываются, если вдруг они реально могут быть одинаковыми, и там нету ни каких дополнительных индексов процесса) В добавок не очень понятно, почему на разных компиляторах одна си операция ассемблируется то в комбинацию lui + addi, то в комбинацию auipc +addi. Понятно что абсолютная относительная от счетчика. Но где какая используется не совсем понимаю. Постоянно в состоянии пинг-понг, то понимаю, то понимаю что не понимаю.
В архитектурах RISC, различие между виртуальными адресами разных контекстов обычно осуществляется через использование разных базовых адресов страниц (base address). Каждый контекст задачи имеет свой собственный базовый адрес страницы, который добавляется к виртуальному адресу для получения физического адреса.
В отличие от архитектуры x86, в RISC архитектурах обычно отсутствуют специальные регистры для базовых адресов страниц. Вместо этого используются регистры контекста (context registers), которые хранят информацию о текущем контексте выполнения задачи. Таким образом, при обращении к виртуальному адресу происходит проверка текущего контекста выполнения и применяется соответствующий базовый адрес страницы.
Что касается TLB, она обрабатывает виртуальные адреса, однако при обращении к TLB также используется информация о текущем контексте выполнения для выбора соответствующего физического адреса.
Относительно комбинаций инструкций в ассемблере, выбор между lui + addi и auipc + addi зависит от положения целевого адреса и от адреса команды. Если целевой адрес находится в пределах 12 бит относительно адреса команды, то используется комбинация lui + addi. Если же целевой адрес находится за пределами диапазона 12 бит, то используется комбинация auipc + addi. Это делается для оптимизации размера команд и сокращения числа бит, которые требуются для представления адресов.
В архитектурах RISC, различие между виртуальными адресами разных контекстов обычно осуществляется через использование разных базовых адресов страниц (base address). Каждый контекст задачи имеет свой собственный базовый адрес страницы, который добавляется к виртуальному адресу для получения физического адреса.
В отличие от архитектуры x86, в RISC архитектурах обычно отсутствуют специальные регистры для базовых адресов страниц. Вместо этого используются регистры контекста (context registers), которые хранят информацию о текущем контексте выполнения задачи. Таким образом, при обращении к виртуальному адресу происходит проверка текущего контекста выполнения и применяется соответствующий базовый адрес страницы.
Что касается TLB, она обрабатывает виртуальные адреса, однако при обращении к TLB также используется информация о текущем контексте выполнения для выбора соответствующего физического адреса.
Относительно комбинаций инструкций в ассемблере, выбор между lui + addi и auipc + addi зависит от положения целевого адреса и от адреса команды. Если целевой адрес находится в пределах 12 бит относительно адреса команды, то используется комбинация lui + addi. Если же целевой адрес находится за пределами диапазона 12 бит, то используется комбинация auipc + addi. Это делается для оптимизации размера команд и сокращения числа бит, которые требуются для представления адресов.